[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