[mkgmap] 01/05: Imported Upstream version 0.0.0+svn3419
Bas Couwenberg
sebastic at xs4all.nl
Fri Jan 23 15:36:30 UTC 2015
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 <sebastic at 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
More information about the Pkg-grass-devel
mailing list