This is an automated email from the git hooks/post-receive script. sebastic-guest pushed a commit to branch master in repository mkgmap.
commit 86db0cb7115a670e0b6556b51308734cfe2cdb94 Author: Bas Couwenberg <sebas...@xs4all.nl> Date: Fri Jan 23 16:21:57 2015 +0100 Imported Upstream version 0.0.0+svn3419 --- resources/mkgmap-version.properties | 4 +-- resources/styles/default/points | 2 +- resources/styles/default/polygons | 2 +- .../mkgmap/osmstyle/actions/EchoAction.java | 3 +- .../mkgmap/osmstyle/actions/EchoTagsAction.java | 3 +- .../osmstyle/actions/TransliterateFilter.java | 38 ++++++++++++++++++++++ .../mkgmap/osmstyle/actions/ValueBuilder.java | 14 ++++++-- .../mkgmap/reader/osm/CoastlineFileLoader.java | 3 +- src/uk/me/parabola/mkgmap/reader/osm/Element.java | 10 ++++++ .../mkgmap/reader/osm/LinkDestinationHook.java | 7 ++-- .../parabola/mkgmap/reader/osm/LocationHook.java | 3 +- .../mkgmap/reader/osm/MultiPolygonRelation.java | 14 +++++--- .../mkgmap/reader/osm/POIGeneratorHook.java | 3 +- .../parabola/mkgmap/reader/osm/SeaGenerator.java | 30 +++++++++++------ .../mkgmap/osmstyle/actions/ValueBuilderTest.java | 20 ++++++++++++ 15 files changed, 126 insertions(+), 30 deletions(-) diff --git a/resources/mkgmap-version.properties b/resources/mkgmap-version.properties index 5f04cf4..0ad5766 100644 --- a/resources/mkgmap-version.properties +++ b/resources/mkgmap-version.properties @@ -1,2 +1,2 @@ -svn.version: 3394 -build.timestamp: 2015-01-07T05:52:25+0000 +svn.version: 3419 +build.timestamp: 2015-01-19T20:25:08+0000 diff --git a/resources/styles/default/points b/resources/styles/default/points index e571d63..edfd825 100644 --- a/resources/styles/default/points +++ b/resources/styles/default/points @@ -187,7 +187,7 @@ amenity=zoo [0x2c07 resolution 24] landuse=military [0x640b resolution 24] landuse=village_green & name=* [0x2c06 resolution 24] -healthcare=hospital | amenity=hospital [0x3002 resolution 22] +healthcare=hospital | amenity=hospital | amenity=clinic [0x3002 resolution 22] healthcare=* | amenity=dentist | amenity=doctors [0x3002 resolution 24] highway=motorway_junction [0x2100 resolution 24] diff --git a/resources/styles/default/polygons b/resources/styles/default/polygons index d25da79..825c09c 100644 --- a/resources/styles/default/polygons +++ b/resources/styles/default/polygons @@ -28,7 +28,7 @@ amenity=school [0x0a resolution 22] amenity=supermarket [0x08 resolution 22] amenity=university [0x0a resolution 21] -healthcare=hospital | amenity=hospital [0x0b resolution 22] +healthcare=hospital | amenity=hospital | amenity=clinic [0x0b resolution 22] healthcare=* | amenity=dentist | amenity=doctors | amenity=nursing_home [0x0b resolution 23] diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoAction.java b/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoAction.java index e095be2..9b454bb 100644 --- a/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoAction.java +++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoAction.java @@ -16,6 +16,7 @@ package uk.me.parabola.mkgmap.osmstyle.actions; import uk.me.parabola.mkgmap.reader.osm.Element; +import uk.me.parabola.mkgmap.reader.osm.FakeIdGenerator; /** * Sends a message to the console. @@ -31,7 +32,7 @@ public class EchoAction implements Action { public boolean perform(Element el) { String e = value.build(el, el); - System.err.println(el.getId() + ": " + e); + System.err.println(el.getId() + (FakeIdGenerator.isFakeId(el.getId()) ? " (" + el.getOriginalId() + ")" : "") + ": " + e); return false; } } diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoTagsAction.java b/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoTagsAction.java index 6850f49..7ee0778 100644 --- a/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoTagsAction.java +++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/EchoTagsAction.java @@ -14,6 +14,7 @@ package uk.me.parabola.mkgmap.osmstyle.actions; import uk.me.parabola.mkgmap.reader.osm.Element; +import uk.me.parabola.mkgmap.reader.osm.FakeIdGenerator; /** * Sends a message including the tags of an element to System.err. @@ -29,7 +30,7 @@ public class EchoTagsAction implements Action { public boolean perform(Element el) { String e = value.build(el, el); - System.err.println(el.getId() + " - " + el.toTagString()+" " + e); + System.err.println(el.getId() + (FakeIdGenerator.isFakeId(el.getId()) ? " (" + el.getOriginalId() + ")" : "") + " - " + el.toTagString()+" " + e); return false; } diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/TransliterateFilter.java b/src/uk/me/parabola/mkgmap/osmstyle/actions/TransliterateFilter.java new file mode 100644 index 0000000..9e6c33d --- /dev/null +++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/TransliterateFilter.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 or + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + */ +package uk.me.parabola.mkgmap.osmstyle.actions; + +import uk.me.parabola.imgfmt.app.labelenc.TableTransliterator; +import uk.me.parabola.imgfmt.app.labelenc.Transliterator; +import uk.me.parabola.mkgmap.reader.osm.Element; + +/** + * Transliterate the string to ascii or latin. + */ +public class TransliterateFilter extends ValueFilter { + private static final Transliterator ASCII = new TableTransliterator("ascii"); + private static final Transliterator LATIN1 = new TableTransliterator("latin1"); + + private final Transliterator trans; + + public TransliterateFilter(String charset) { + if ("latin1".equals(charset)) + trans = LATIN1; + else + trans = ASCII; + } + + protected String doFilter(String value, Element el) { + return trans.transliterate(value); + } +} diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java b/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java index b942153..36be8cc 100644 --- a/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java +++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java @@ -39,11 +39,14 @@ public class ValueBuilder { // This must be last Pattern.compile("[ \t]*([^: \\t|]+:[^|]*)"), + Pattern.compile("[ \t]*([^: \\t|]+)"), }; + private static final Pattern NAME_ARG_SPLIT = Pattern.compile("([^:]+)(?::[\"']?(.*?)[\"']?)?", Pattern.DOTALL); + private final List<ValueItem> items = new ArrayList<>(); private final boolean completeCheck; - + public ValueBuilder(String pattern) { this (pattern, true); } @@ -190,9 +193,8 @@ public class ValueBuilder { } private void addFilter(ValueItem item, String expr) { - Pattern pattern = Pattern.compile("([^:]+):[\"']?(.*?)[\"']?", Pattern.DOTALL); + Matcher matcher = NAME_ARG_SPLIT.matcher(expr); - Matcher matcher = pattern.matcher(expr); matcher.matches(); String cmd = matcher.group(1); String arg = matcher.group(2); @@ -225,6 +227,12 @@ public class ValueBuilder { case "part": item.addFilter(new PartFilter(arg)); break; + case "ascii": + item.addFilter(new TransliterateFilter("ascii")); + break; + case "latin1": + item.addFilter(new TransliterateFilter("latin1")); + break; case "country-ISO": item.addFilter(new CountryISOFilter()); break; diff --git a/src/uk/me/parabola/mkgmap/reader/osm/CoastlineFileLoader.java b/src/uk/me/parabola/mkgmap/reader/osm/CoastlineFileLoader.java index 6b393f5..f71f1c4 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/CoastlineFileLoader.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/CoastlineFileLoader.java @@ -178,7 +178,8 @@ public final class CoastlineFileLoader { Collection<Way> ways = new ArrayList<Way>(); for (CoastlineWay w : coastlines) { if (w.getBbox().intersects(bbox)) { - Way x = new Way(FakeIdGenerator.makeFakeId(), w.getPoints()); + Way x = new Way(w.getOriginalId(), w.getPoints()); + x.setFakeId(); x.addTag("natural", "coastline"); ways.add(x); } diff --git a/src/uk/me/parabola/mkgmap/reader/osm/Element.java b/src/uk/me/parabola/mkgmap/reader/osm/Element.java index d4c610a..972d4e2 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/Element.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/Element.java @@ -25,6 +25,7 @@ import java.util.Map; public abstract class Element { private Tags tags; private long id; + private long OriginalId; public int getTagCount() { return (tags == null ? 0 : tags.size()); @@ -170,10 +171,19 @@ public abstract class Element { return id; } + public long getOriginalId() { + return OriginalId; + } + protected void setId(long id) { this.id = id; + OriginalId = id; } + public void setFakeId() { + id = FakeIdGenerator.makeFakeId(); + } + public String toTagString() { if (tags == null) return "[]"; diff --git a/src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java b/src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java index 83f0f2e..78d3b51 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java @@ -260,8 +260,8 @@ public class LinkDestinationHook extends OsmReadingHooksAdaptor { double dist = firstPoint.distance(cutPoint); if (dist <= maxLength) { // create a new way with the first two points and identical tags - Way precedingWay = new Way(FakeIdGenerator.makeFakeId(), w - .getPoints().subList(0, 1 + 1)); + Way precedingWay = new Way(w.getOriginalId(), w.getPoints().subList(0, 1 + 1)); + precedingWay.setFakeId(); precedingWay.copyTags(w); saver.addWay(precedingWay); @@ -325,7 +325,8 @@ public class LinkDestinationHook extends OsmReadingHooksAdaptor { // create the new way with identical tags w.getPoints().add(i,cConnection); - Way precedingWay = new Way(FakeIdGenerator.makeFakeId(), new ArrayList<Coord>(w.getPoints().subList(0, i+1))); + Way precedingWay = new Way(w.getOriginalId(), new ArrayList<Coord>(w.getPoints().subList(0, i+1))); + precedingWay.setFakeId(); precedingWay.copyTags(w); saver.addWay(precedingWay); diff --git a/src/uk/me/parabola/mkgmap/reader/osm/LocationHook.java b/src/uk/me/parabola/mkgmap/reader/osm/LocationHook.java index abef120..ebc49dc 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/LocationHook.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/LocationHook.java @@ -142,7 +142,8 @@ public class LocationHook extends OsmReadingHooksAdaptor { Coord mpCenter = ((MultiPolygonRelation) r).getCofG(); if (mpCenter != null && saver.getBoundingBox().contains(mpCenter)){ // create a fake node for which the bounds information is collected - Node mpNode = new Node(FakeIdGenerator.makeFakeId(), mpCenter); + Node mpNode = new Node(r.getOriginalId(), mpCenter); + mpNode.setFakeId(); processElem(mpNode); // copy the bounds tags back to the multipolygon for (String boundsTag : BoundaryQuadTree.mkgmapTagsArray) { diff --git a/src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java b/src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java index 03365f6..62202dd 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java @@ -1105,7 +1105,8 @@ public class MultiPolygonRelation extends Relation { // This enables the style file to decide if the polygon information or // the simple line information should be used. for (Way orgOuterWay : outerWaysForLineTagging) { - Way lineTagWay = new Way(FakeIdGenerator.makeFakeId(), orgOuterWay.getPoints()); + Way lineTagWay = new Way(getOriginalId(), orgOuterWay.getPoints()); + lineTagWay.setFakeId(); lineTagWay.addTag(STYLE_FILTER_TAG, STYLE_FILTER_LINE); lineTagWay.addTag(MP_CREATED_TAG, "true"); for (Entry<String,String> tag : outerTags.entrySet()) { @@ -1555,8 +1556,9 @@ public class MultiPolygonRelation extends Relation { List<Way> cuttedOuterPolygon = new ArrayList<Way>(finishedAreas.size()); Long2ObjectOpenHashMap<Coord> commonCoordMap = new Long2ObjectOpenHashMap<>(); for (Area area : finishedAreas) { - Way w = singularAreaToWay(area, FakeIdGenerator.makeFakeId()); + Way w = singularAreaToWay(area, getOriginalId()); if (w != null) { + w.setFakeId(); // make sure that equal coords are changed to identical coord instances // this allows merging in the ShapeMerger // TODO: maybe better merge here? @@ -2201,7 +2203,8 @@ public class MultiPolygonRelation extends Relation { // This enables the style file to decide if the polygon information or // the simple line information should be used. for (Way orgOuterWay : outerWaysForLineTagging) { - Way lineTagWay = new Way(FakeIdGenerator.makeFakeId(), orgOuterWay.getPoints()); + Way lineTagWay = new Way(getOriginalId(), orgOuterWay.getPoints()); + lineTagWay.setFakeId(); lineTagWay.addTag(STYLE_FILTER_TAG, STYLE_FILTER_LINE); lineTagWay.addTag(MP_CREATED_TAG, "true"); for (Entry<String,String> tag : tags.entrySet()) { @@ -2369,8 +2372,9 @@ public class MultiPolygonRelation extends Relation { private Rectangle bounds; public JoinedWay(Way originalWay) { - super(FakeIdGenerator.makeFakeId(), originalWay.getPoints()); - this.originalWays = new ArrayList<Way>(); + super(originalWay.getOriginalId(), originalWay.getPoints()); + setFakeId(); + originalWays = new ArrayList<Way>(); addWay(originalWay); // we have to initialize the min/max values diff --git a/src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java b/src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java index 22c7427..8da68e7 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java @@ -325,7 +325,8 @@ public class POIGeneratorHook extends OsmReadingHooksAdaptor { } private static Node createPOI(Element source, Coord poiCoord, short poiTypeTagKey) { - Node poi = new Node(FakeIdGenerator.makeFakeId(), poiCoord); + Node poi = new Node(source.getOriginalId(), poiCoord); + poi.setFakeId(); poi.copyTags(source); poi.deleteTag(MultiPolygonRelation.STYLE_FILTER_TAG); poi.addTag(poiTypeTagKey, "true"); diff --git a/src/uk/me/parabola/mkgmap/reader/osm/SeaGenerator.java b/src/uk/me/parabola/mkgmap/reader/osm/SeaGenerator.java index eaec776..c411d8c 100644 --- a/src/uk/me/parabola/mkgmap/reader/osm/SeaGenerator.java +++ b/src/uk/me/parabola/mkgmap/reader/osm/SeaGenerator.java @@ -480,7 +480,8 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { return; if (way.hasIdenticalEndPoints()){ // add a copy of this way to be able to draw it as a shape - Way shapeWay = new Way(FakeIdGenerator.makeFakeId(), way.getPoints()); + Way shapeWay = new Way(way.getOriginalId(), way.getPoints()); + shapeWay.setFakeId(); // change the tag so that only special rules looking for it are firing shapeWay.deleteTag("natural"); shapeWay.addTag("mkgmap:removed_natural",naturalVal); @@ -676,7 +677,7 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { for (Way w : seaPrecompWays) { // set a new id to be sure that the precompiled ids do not // interfere with the ids of this run - w.setId(FakeIdGenerator.makeFakeId()); + w.setFakeId(); if ("land".equals(w.getTag("natural"))) { landWays.add(w); @@ -831,7 +832,8 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { if (FakeIdGenerator.isFakeId(w1.getId())) { wm = w1; } else { - wm = new Way(FakeIdGenerator.makeFakeId()); + wm = new Way(w1.getOriginalId()); + wm.setFakeId(); wm.getPoints().addAll(points1); beginMap.put(points1.get(0), wm); } @@ -1048,8 +1050,8 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { log.info("clipping", segment); toBeRemoved.add(segment); for (List<Coord> pts : clipped) { - long id = FakeIdGenerator.makeFakeId(); - Way shore = new Way(id, pts); + Way shore = new Way(segment.getOriginalId(), pts); + shore.setFakeId(); toBeAdded.add(shore); } } @@ -1170,7 +1172,8 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { for (Way w : islands) { if (!FakeIdGenerator.isFakeId(w.getId())) { - Way w1 = new Way(FakeIdGenerator.makeFakeId()); + Way w1 = new Way(w.getOriginalId()); + w1.setFakeId(); w1.getPoints().addAll(w.getPoints()); // only copy the name tags for (Entry<String, String> tagEntry : w.getTagEntryIterator()){ @@ -1249,7 +1252,8 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { points.add(pStart); if(!FakeIdGenerator.isFakeId(w.getId())) { - Way w1 = new Way(FakeIdGenerator.makeFakeId()); + Way w1 = new Way(w.getOriginalId()); + w1.setFakeId(); w1.getPoints().addAll(w.getPoints()); // only copy the name tags for (Entry<String, String> tagEntry : w.getTagEntryIterator()){ @@ -1265,8 +1269,13 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { seaRelation.addElement("inner", w); } } else if(allowSeaSectors) { - long seaId = FakeIdGenerator.makeFakeId(); - Way sea = new Way(seaId); + Way sea; + if (seaRelation != null) { + sea = new Way(seaRelation.getOriginalId()); + sea.setFakeId(); + } + else + sea = new Way(FakeIdGenerator.makeFakeId()); sea.getPoints().addAll(points); sea.addPoint(new Coord(pEnd.getLatitude(), pStart.getLongitude())); sea.addPoint(pStart); @@ -1473,7 +1482,8 @@ public class SeaGenerator extends OsmReadingHooksAdaptor { if (FakeIdGenerator.isFakeId(w1.getId())) { wm = w1; } else { - wm = new Way(FakeIdGenerator.makeFakeId()); + wm = new Way(w1.getOriginalId()); + wm.setFakeId(); ways.remove(w1); ways.add(wm); wm.getPoints().addAll(points1); diff --git a/test/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilderTest.java b/test/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilderTest.java index 8a30ca6..546ab06 100644 --- a/test/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilderTest.java +++ b/test/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilderTest.java @@ -204,4 +204,24 @@ public class ValueBuilderTest { exp.add("name"); assertEquals(exp, vb.getUsedTags()); } + + @Test + public void testTranslitAscii() { + ValueBuilder vb = new ValueBuilder("${name|ascii}"); + + Element el = new Way(1); + el.addTag("name", "frêd"); + String s = vb.build(el, null); + assertEquals("fred", s); + } + + @Test + public void testTranslitLatin1() { + ValueBuilder vb = new ValueBuilder("${name|latin1}"); + + Element el = new Way(1); + el.addTag("name", "frêdş"); + String s = vb.build(el, null); + assertEquals("frêds", s); + } } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mkgmap.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel