Merge branch '55-translate-greek' into 'master'
Extract translateGreek and add tests Adds tests to translateGreek. Refactored method to handle more cases (like phi1 instead of just phi) See merge request !9
This commit is contained in:
commit
b396af12a0
@ -300,10 +300,7 @@ public final class PropertySheetPanel extends JPanel implements PropertyChangeLi
|
||||
continue;
|
||||
} // end try
|
||||
|
||||
// Add some specific display for some greeks here
|
||||
name = translateGreek(name);
|
||||
name = eva2.tools.StringTools.humaniseCamelCase(name);
|
||||
propertyTableModel.addRow(new Object[]{name, newView});
|
||||
propertyTableModel.addRow(new Object[]{prepareLabel(name), newView});
|
||||
}
|
||||
|
||||
propertyTable.setToolTips(toolTips);
|
||||
@ -327,6 +324,15 @@ public final class PropertySheetPanel extends JPanel implements PropertyChangeLi
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
private String prepareLabel(String label) {
|
||||
// Add some specific display for some greeks here
|
||||
label = StringTools.translateGreek(label);
|
||||
label = StringTools.humaniseCamelCase(label);
|
||||
label = StringTools.subscriptIndices(label);
|
||||
label = "<html>" + label + "</html>";
|
||||
return label;
|
||||
}
|
||||
|
||||
private static JPanel buildTitledSeperator(String title) {
|
||||
JPanel titledSeperator = new JPanel(new GridBagLayout());
|
||||
|
||||
@ -558,116 +564,6 @@ public final class PropertySheetPanel extends JPanel implements PropertyChangeLi
|
||||
return infoPanel;
|
||||
}
|
||||
|
||||
private String translateGreek(String name) {
|
||||
// Add some specific display for some greeks here
|
||||
if (name.equalsIgnoreCase("alpha")) {
|
||||
return "\u03B1";
|
||||
}
|
||||
if (name.equalsIgnoreCase("beta")) {
|
||||
return "\u03B2";
|
||||
}
|
||||
if (name.equalsIgnoreCase("gamma")) {
|
||||
return "\u03B3";
|
||||
}
|
||||
if (name.equalsIgnoreCase("gammab")) {
|
||||
return "\u0393";
|
||||
}
|
||||
if (name.equalsIgnoreCase("delta")) {
|
||||
return "\u03B4";
|
||||
}
|
||||
if (name.equalsIgnoreCase("deltab")) {
|
||||
return "\u0394";
|
||||
}
|
||||
if ((name.equalsIgnoreCase("epsi")) || (name.equalsIgnoreCase("epsilon"))) {
|
||||
return "\u03B5";
|
||||
}
|
||||
if (name.equalsIgnoreCase("zeta")) {
|
||||
return "\u03B6";
|
||||
}
|
||||
if (name.equalsIgnoreCase("theta")) {
|
||||
return "\u03D1";
|
||||
}
|
||||
if (name.equalsIgnoreCase("thetab")) {
|
||||
return "\u0398";
|
||||
}
|
||||
if (name.equalsIgnoreCase("iota")) {
|
||||
return "\u03B9";
|
||||
}
|
||||
if (name.equalsIgnoreCase("kappa")) {
|
||||
return "\u03BA";
|
||||
}
|
||||
if (name.equalsIgnoreCase("lambda")) {
|
||||
return "\u03BB";
|
||||
}
|
||||
if (name.equalsIgnoreCase("lambdab")) {
|
||||
return "\u039B";
|
||||
}
|
||||
if (name.equalsIgnoreCase("rho")) {
|
||||
return "\u03C1";
|
||||
}
|
||||
if (name.equalsIgnoreCase("sigma")) {
|
||||
return "\u03C3";
|
||||
}
|
||||
if (name.equalsIgnoreCase("sigmab")) {
|
||||
return "\u03A3";
|
||||
}
|
||||
if (name.equalsIgnoreCase("tau")) {
|
||||
return "\u03C4";
|
||||
}
|
||||
if (name.equalsIgnoreCase("upsilon")) {
|
||||
return "\u03C5";
|
||||
}
|
||||
if (name.equalsIgnoreCase("upsilonb")) {
|
||||
return "\u03D2";
|
||||
}
|
||||
if (name.equalsIgnoreCase("omega")) {
|
||||
return "\u03C9";
|
||||
}
|
||||
if (name.equalsIgnoreCase("omegab")) {
|
||||
return "\u03A9";
|
||||
}
|
||||
|
||||
// these are too small
|
||||
if (name.equalsIgnoreCase("eta")) {
|
||||
return "\u03B7";
|
||||
}
|
||||
if (name.equalsIgnoreCase("psi")) {
|
||||
return "\u03C8";
|
||||
}
|
||||
if (name.equalsIgnoreCase("psib")) {
|
||||
return "\u03A8";
|
||||
}
|
||||
if (name.equalsIgnoreCase("phi")) {
|
||||
return "\u03D5";
|
||||
}
|
||||
if (name.equalsIgnoreCase("phib")) {
|
||||
return "\u03A6";
|
||||
}
|
||||
if (name.equalsIgnoreCase("chi")) {
|
||||
return "\u03C7";
|
||||
}
|
||||
if ((name.equalsIgnoreCase("mu")) || (name.equalsIgnoreCase("my")) || (name.equalsIgnoreCase("myu"))) {
|
||||
return "\u03BC";
|
||||
}
|
||||
if (name.equalsIgnoreCase("nu")) {
|
||||
return "\u03BD";
|
||||
}
|
||||
if (name.equalsIgnoreCase("xi")) {
|
||||
return "\u03BE";
|
||||
}
|
||||
if (name.equalsIgnoreCase("xib")) {
|
||||
return "\u039E";
|
||||
}
|
||||
if (name.equalsIgnoreCase("pi")) {
|
||||
return "\u03C0";
|
||||
}
|
||||
if (name.equalsIgnoreCase("pib")) {
|
||||
return "\u03A0";
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the html help file name.
|
||||
*
|
||||
|
@ -15,8 +15,7 @@ public final class StringTools {
|
||||
/**
|
||||
* Private constructor to prevent instantiation.
|
||||
*/
|
||||
private StringTools() {
|
||||
}
|
||||
private StringTools() {}
|
||||
|
||||
/**
|
||||
* Returns a HTML formatted String, in which each line is at most lineBreak
|
||||
@ -480,6 +479,9 @@ public final class StringTools {
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes a full package name and returns the string
|
||||
* after the last period (usually the class name).
|
||||
*
|
||||
* @param value The string to cut
|
||||
* @return Returns the class Name without package.
|
||||
*/
|
||||
@ -491,5 +493,87 @@ public final class StringTools {
|
||||
}
|
||||
return className; // now is shortName
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes a string and looks for greek letter names. If found,
|
||||
* replaces them by their greek unicode counterparts.
|
||||
*
|
||||
* @param name A string
|
||||
* @return String with greek letter names replaced
|
||||
*/
|
||||
public static String translateGreek(String name) {
|
||||
// Add some specific display for some greeks here
|
||||
final String[][] mapping = {
|
||||
{ "alpha", "α" },
|
||||
{ "beta", "β" },
|
||||
{ "gamma", "γ"},
|
||||
{ "gammab", "Γ"},
|
||||
{ "delta", "δ"},
|
||||
{ "deltab", "Δ"},
|
||||
{ "epsi", "epsilon", "ε"},
|
||||
{ "zeta", "ζ"},
|
||||
{ "theta", "ϑ"},
|
||||
{ "thetab", "Θ"},
|
||||
{ "iota", "ι"},
|
||||
{ "kappa", "κ"},
|
||||
{ "lambda", "λ"},
|
||||
{ "lambdab", "Λ"},
|
||||
{ "rho", "ρ"},
|
||||
{ "sigma", "σ"},
|
||||
{ "sigmab", "Σ"},
|
||||
{ "tau", "τ"},
|
||||
{ "upsilon", "υ"},
|
||||
{ "upsilonb", "ϒ"},
|
||||
{ "omega", "ω"},
|
||||
{ "omegab", "Ω"},
|
||||
|
||||
// these are too small
|
||||
{ "eta", "η"},
|
||||
{ "psi", "ψ"},
|
||||
{ "psib", "Ψ"},
|
||||
{ "phi", "ϕ"},
|
||||
{ "phib", "Φ"},
|
||||
{ "chi", "χ"},
|
||||
{ "mu", "my", "myu", "μ"},
|
||||
{ "nu", "ν"},
|
||||
{ "xi", "ξ"},
|
||||
{ "xib", "Ξ"},
|
||||
{ "pi", "π"},
|
||||
{ "pib", "Π"},
|
||||
};
|
||||
|
||||
for(String[] map : mapping) {
|
||||
for (int i = 0; i < map.length - 1; i++) {
|
||||
Pattern p = Pattern.compile("^" + map[i] + "\\d*", Pattern.CASE_INSENSITIVE);
|
||||
Matcher m = p.matcher(name);
|
||||
|
||||
// Regex: ^symbol[0-9]*
|
||||
if(m.matches()) {
|
||||
Pattern replace = Pattern.compile("^" + map[i], Pattern.CASE_INSENSITIVE);
|
||||
Matcher rm = replace.matcher(name);
|
||||
// Last element contains mapping
|
||||
return rm.replaceFirst(map[map.length -1 ]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes a string and looks for trailing numbers. If present those numbers will
|
||||
* be replaced by a HTML subscript. Make sure to wrap inside a html block when
|
||||
* displaying as part of a JLabel.
|
||||
*
|
||||
* @param label
|
||||
* @return
|
||||
*/
|
||||
public static String subscriptIndices(String label) {
|
||||
// Trailing numbers
|
||||
Pattern p = Pattern.compile("(\\d+)$");
|
||||
Matcher m = p.matcher(label);
|
||||
|
||||
return m.replaceFirst("<sub>$1</sub>");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package eva2.tools;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.HashMap;
|
||||
@ -11,21 +9,9 @@ import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author becker
|
||||
*/
|
||||
public class StringToolsTest {
|
||||
|
||||
public StringToolsTest() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of humaniseCamelCase method, of class StringTools.
|
||||
*/
|
||||
@ -61,6 +47,7 @@ public class StringToolsTest {
|
||||
map.put("thisIsAwesome", "this-is-awesome");
|
||||
map.put("THQIsNice", "thq-is-nice");
|
||||
map.put("iLikeABC", "i-like-abc");
|
||||
map.put("THIS", "this");
|
||||
|
||||
String key, value;
|
||||
for (Object o : map.entrySet()) {
|
||||
@ -86,4 +73,41 @@ public class StringToolsTest {
|
||||
assertEquals("StringTools", StringTools.cutClassName("eva2.tools.StringTools"));
|
||||
assertEquals("RandomClass", StringTools.cutClassName("eva2.optimization.operator.RandomClass"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTranslateGreek() {
|
||||
// Doesn't touch string without greek characters
|
||||
assertEquals("Not a greek string", StringTools.translateGreek("Not a greek string"));
|
||||
|
||||
// Replaces greek characters irregardless of case
|
||||
assertEquals("τ", StringTools.translateGreek("tau"));
|
||||
assertEquals("τ", StringTools.translateGreek("Tau"));
|
||||
assertEquals("τ", StringTools.translateGreek("tAU"));
|
||||
|
||||
// Handles multiple values for one letter
|
||||
assertEquals("μ", StringTools.translateGreek("mu"));
|
||||
assertEquals("μ", StringTools.translateGreek("my"));
|
||||
assertEquals("μ", StringTools.translateGreek("myu"));
|
||||
|
||||
// Handles indices like sigma1, sigma2
|
||||
assertEquals("ϕ1", StringTools.translateGreek("phi1"));
|
||||
assertEquals("ϕ10", StringTools.translateGreek("phi10"));
|
||||
|
||||
// Doesn't mess up other strings
|
||||
assertEquals("Stau", StringTools.translateGreek("Stau"));
|
||||
assertEquals("taur", StringTools.translateGreek("taur"));
|
||||
assertEquals("taur12", StringTools.translateGreek("taur12"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSubscriptIndices() throws Exception {
|
||||
// Doesn't alter numbers at the start or mid string
|
||||
assertEquals("12derp", StringTools.subscriptIndices("12derp"));
|
||||
assertEquals("der12p", StringTools.subscriptIndices("der12p"));
|
||||
|
||||
// Replaces trailing numbers with a sub html tag
|
||||
assertEquals("derp<sub>12</sub>", StringTools.subscriptIndices("derp12"));
|
||||
assertEquals("This is a string <sub>12</sub>", StringTools.subscriptIndices("This is a string 12"));
|
||||
assertEquals("ϕ<sub>10</sub>", StringTools.subscriptIndices("ϕ10"));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user