Changeset 16950 in josm


Ignore:
Timestamp:
2020-08-28T22:38:19+02:00 (4 weeks ago)
Author:
simon04
Message:

Revert "fix #19717 - DefaultNameFormatter: use FIRST-STRONG ISOLATE for bidirectional texts"

This reverts commit r16937

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java

    r16937 r16950  
    77import static org.openstreetmap.josm.tools.I18n.trn;
    88
     9import java.awt.ComponentOrientation;
    910import java.util.ArrayList;
    1011import java.util.Arrays;
     
    1516import java.util.LinkedList;
    1617import java.util.List;
     18import java.util.Locale;
    1719import java.util.Map;
    1820import java.util.Objects;
     
    4244 */
    4345public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter {
    44     /**
    45      * U+2068 FIRST STRONG ISOLATE
    46      */
    47     public static final char BIDI_FIRST_STRONG_ISOLATE = '\u2068';
    48     /**
    49      * U+2069 POP DIRECTIONAL ISOLATE
    50      */
    51     public static final char BIDI_POP_DIRECTIONAL_ISOLATE = '\u2069';
     46
    5247    private static DefaultNameFormatter instance;
    5348
     
    147142                    primitive.getUniqueId() : primitive.getId();
    148143            if (Config.getPref().getBoolean("osm-primitives.showversion") && version > 0) {
    149                 bdi(name, tr(" [id: {0}, v{1}]", id, version));
     144                name.append(tr(" [id: {0}, v{1}]", id, version));
    150145            } else {
    151                 bdi(name, tr(" [id: {0}]", id));
     146                name.append(tr(" [id: {0}]", id));
    152147            }
    153148        } else if (Config.getPref().getBoolean("osm-primitives.showversion")) {
    154             bdi(name, tr(" [v{0}]", version));
     149            name.append(tr(" [v{0}]", version));
    155150        }
    156151    }
     
    211206                    n = node.isNew() ? tr("node") : Long.toString(node.getId());
    212207                }
    213                 bdi(name, n);
     208                name.append(n);
    214209            } else {
    215210                preset.nameTemplate.appendText(name, (TemplateEngineDataProvider) node);
    216211            }
    217212            if (node.isLatLonKnown() && Config.getPref().getBoolean("osm-primitives.showcoor")) {
    218                 name.append(' ');
    219                 bdiParen(name, CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
     213                name.append(" \u200E(");
     214                name.append(CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
     215                name.append(')');
    220216            }
    221217        }
     
    239235    public String format(IWay<?> way) {
    240236        StringBuilder name = new StringBuilder();
     237
     238        char mark;
     239        // If current language is left-to-right (almost all languages)
     240        if (ComponentOrientation.getOrientation(Locale.getDefault()).isLeftToRight()) {
     241            // will insert Left-To-Right Mark to ensure proper display of text in the case when object name is right-to-left
     242            mark = '\u200E';
     243        } else {
     244            // otherwise will insert Right-To-Left Mark to ensure proper display in the opposite case
     245            mark = '\u200F';
     246        }
     247        // Initialize base direction of the string
     248        name.append(mark);
     249
    241250        if (way.isIncomplete()) {
    242251            name.append(tr("incomplete"));
     
    284293                }
    285294
    286                 bdi(name, n);
     295                name.append(n);
    287296            } else {
    288297                preset.nameTemplate.appendText(name, (TemplateEngineDataProvider) way);
     
    294303            /* I18n: count of nodes as parameter */
    295304            String nodes = trn("{0} node", "{0} nodes", nodesNo, nodesNo);
    296             name.append(" ");
    297             bdiParen(name, nodes);
     305            name.append(mark).append(" (").append(nodes).append(')');
    298306        }
    299307        decorateNameWithId(name, way);
     
    635643
    636644    /**
    637      * Wraps the content in a bidirectional isolate
    638      * @param builder the builder to append to
    639      * @param content the text to wrap
    640      */
    641     private static void bdi(StringBuilder builder, String content) {
    642         builder.append(BIDI_FIRST_STRONG_ISOLATE);
    643         builder.append(content);
    644         builder.append(BIDI_POP_DIRECTIONAL_ISOLATE);
    645     }
    646 
    647     /**
    648      * Wraps the content in parenthesis and a bidirectional isolate
    649      * @param builder the builder to append to
    650      * @param content the text to wrap
    651      */
    652     private static void bdiParen(StringBuilder builder, String content) {
    653         builder.append(BIDI_FIRST_STRONG_ISOLATE);
    654         builder.append('(');
    655         builder.append(content);
    656         builder.append(')');
    657         builder.append(BIDI_POP_DIRECTIONAL_ISOLATE);
    658     }
    659 
    660     /**
    661645     * Builds a default tooltip text for an HistoryOsmPrimitive <code>primitive</code>.
    662646     *
  • trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java

    r16937 r16950  
    9191            sb.append(OsmPrimitiveType.from(primitive).getAPIName()).append(' ').append(primitive.getId());
    9292        }
    93         return sb.toString();
     93        return sb.toString().replace("\u200E", "").replace("\u200F", "");
    9494    }
    9595}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java

    r16947 r16950  
    129129        try {
    130130            for (IPrimitive osm : sel) {
    131                 String heading = tr("Styles for \"{0}\":", osm.getDisplayName(DefaultNameFormatter.getInstance())
    132                         .replace(Character.toString(DefaultNameFormatter.BIDI_FIRST_STRONG_ISOLATE), "")
    133                         .replace(Character.toString(DefaultNameFormatter.BIDI_POP_DIRECTIONAL_ISOLATE), ""));
     131                String heading = tr("Styles for \"{0}\":", osm.getDisplayName(DefaultNameFormatter.getInstance()));
    134132                txtMappaint.println(heading);
    135133                txtMappaint.println(repeatString("=", heading.length()));
  • trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java

    r16937 r16950  
    124124    @Test
    125125    public void testWayName() {
    126         assertEquals("\u2068building\u2069 \u2068(0 nodes)\u2069",
    127                 getFormattedWayName("building=yes"));
    128         assertEquals("\u2068House number 123\u2069 \u2068(0 nodes)\u2069",
    129                 getFormattedWayName("building=yes addr:housenumber=123"));
    130         assertEquals("\u2068House number 123 at FooStreet\u2069 \u2068(0 nodes)\u2069",
    131                 getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"));
    132         assertEquals("\u2068House FooName\u2069 \u2068(0 nodes)\u2069",
    133                 getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"));
     126        assertEquals("building (0 nodes)", getFormattedWayName("building=yes"));
     127        assertEquals("House number 123 (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123"));
     128        assertEquals("House number 123 at FooStreet (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"));
     129        assertEquals("House FooName (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"));
    134130    }
    135131
    136132    static String getFormattedRelationName(String tagsString) {
    137         return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString));
     133        return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString))
     134                .replace("\u200E", "").replace("\u200F", "");
    138135    }
    139136
    140137    static String getFormattedWayName(String tagsString) {
    141         return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString));
     138        return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString))
     139                .replace("\u200E", "").replace("\u200F", "");
    142140    }
    143141
     
    152150        List<Node> nodes = IntStream.rangeClosed(1, 10).mapToObj(i -> new Node(i, 1))
    153151                .collect(Collectors.toList());
    154         assertEquals("<ul>" +
    155                         "<li>\u20681\u2069</li>" +
    156                         "<li>\u20682\u2069</li>" +
    157                         "<li>\u20683\u2069</li>" +
    158                         "<li>\u20684\u2069</li>" +
    159                         "<li>...</li></ul>",
     152        assertEquals("<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>...</li></ul>",
    160153                DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(nodes, 5));
    161154    }
  • trunk/test/unit/org/openstreetmap/josm/data/validation/util/MultipleNameVisitorTest.java

    r16947 r16950  
    3333        MultipleNameVisitor visitor = new MultipleNameVisitor();
    3434        visitor.visit(Arrays.asList(new Way(), new Way()));
    35         assertEquals("2 ways: \u20680\u2069 \u2068(0 nodes)\u2069, \u20680\u2069 \u2068(0 nodes)\u2069", visitor.toString());
     35        assertEquals("2 ways: ‎0‎ (0 nodes), ‎0‎ (0 nodes)", visitor.toString());
    3636    }
    3737
     
    4646                TestUtils.newWay("addr:housename=Stark"),
    4747                TestUtils.newRelation("type=route")));
    48         assertEquals("3 objects: \u2068foo\u2069, \u2068House Stark\u2069 \u2068(0 nodes)\u2069, route (0, 0 members)", visitor.toString());
     48        assertEquals("3 objects: foo, ‎House Stark‎ (0 nodes), route (0, 0 members)", visitor.toString());
    4949    }
    5050}
Note: See TracChangeset for help on using the changeset viewer.