Steve Ratcliffe wrote:
Hi
Is the style branch otherwise identical to normal branch or lagging behind?
It branched at 1186 and does not contain any changes to trunk
since then. I can merge trunk in if it would help.
o.k. that would have been fine (anything above 1140) it was just about
not being more than a few weeks old.
However the continue patch can't be applied anyhow. I don't know how to
merge the: "public GType resolveType(Element el, GType pre) {"
with my old lines.
Without the "continue"/"multiple_garmin_elements" patch the strict
ordering makes not much sense and I can't really test it properly (only
with standard style-files, with which it works)
Maybe you could adapt the patch so it merges?
(anyhow I think it would be fine to add the "continue" patch to trunk,
as there are quite a lot of people using it, and any substantial changes
to the style system will break it.... I have not had any problems with
it, and if not using it it also does not decrease performance. ).
..Steve
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev
Index: src/uk/me/parabola/mkgmap/osmstyle/ActionRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/ActionRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/ActionRule.java (working copy)
@@ -52,7 +52,7 @@
this.type = null;
}
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
if (expression == null || expression.eval(el)) {
for (Action a : actions)
a.perform(el);
Index: src/uk/me/parabola/mkgmap/osmstyle/ExpressionRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/ExpressionRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/ExpressionRule.java (working copy)
@@ -28,22 +28,22 @@
* @author Steve Ratcliffe
*/
public class ExpressionRule implements Rule {
- private final Op exression;
+ private final Op expression;
private final GType gtype;
- public ExpressionRule(Op exression, GType gtype) {
- this.exression = exression;
+ public ExpressionRule(Op expression, GType gtype) {
+ this.expression = expression;
this.gtype = gtype;
}
- public GType resolveType(Element el) {
- if (exression.eval(el))
+ public GType resolveType(Element el, GType pre) {
+ if (expression.eval(el))
return gtype;
return null;
}
public String toString() {
- return exression.toString() + ' ' + gtype;
+ return expression.toString() + ' ' + gtype;
}
}
Index: src/uk/me/parabola/mkgmap/osmstyle/FixedRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/FixedRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/FixedRule.java (working copy)
@@ -32,7 +32,7 @@
this.gtype = gtype;
}
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
return gtype;
}
Index: src/uk/me/parabola/mkgmap/osmstyle/RuleSet.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/RuleSet.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/RuleSet.java (working copy)
@@ -63,14 +63,14 @@
return rules.entrySet();
}
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
GType foundType = null;
for (String tagKey : el) {
Rule rule = rules.get(tagKey);
if (rule != null) {
- GType type = rule.resolveType(el);
+ GType type = rule.resolveType(el, pre);
if (type != null) {
- if (foundType == null || type.isBetterPriority(foundType)) {
+ if ((foundType == null || type.isBetterPriority(foundType)) && (pre == null || pre.isBetterPriority(type))) {
foundType = type;
}
}
Index: src/uk/me/parabola/mkgmap/osmstyle/SequenceRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/SequenceRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/SequenceRule.java (working copy)
@@ -34,9 +34,9 @@
public class SequenceRule implements Rule, Iterable<Rule> {
private final List<Rule> ruleList = new ArrayList<Rule>();
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
for (Rule r : ruleList) {
- GType type = r.resolveType(el);
+ GType type = r.resolveType(el, pre);
if (type != null)
return type;
}
Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java (working copy)
@@ -245,26 +245,36 @@
foundType = makeGTypeFromTags(way);
if(foundType == null)
return;
+ if (foundType.getFeatureKind() == GType.POLYLINE) {
+ if(foundType.isRoad())
+ addRoad(way, foundType);
+ else
+ addLine(way, foundType);
+ }
+ else
+ addShape(way, foundType);
}
else {
preConvertRules(way);
- foundType = wayRules.resolveType(way);
- if (foundType == null)
- return;
- postConvertRules(way, foundType);
- }
+ do {
+ foundType = wayRules.resolveType(way, foundType);
+ if (foundType == null)
+ return;
+
+ postConvertRules(way, foundType);
- if (foundType.getFeatureKind() == GType.POLYLINE) {
- if(foundType.isRoad() &&
- !MapElement.hasExtendedType(foundType.getType()))
- addRoad(way, foundType);
- else
- addLine(way, foundType);
+ if (foundType.getFeatureKind() == GType.POLYLINE) {
+ if(foundType.isRoad())
+ addRoad(way, foundType);
+ else
+ addLine(way, foundType);
+ }
+ else
+ addShape(way, foundType);
+ } while (!foundType.isFinal());
}
- else
- addShape(way, foundType);
}
/**
@@ -280,18 +290,21
foundType = makeGTypeFromTags(node);
if(foundType == null)
return;
+ addPoint(node, foundType);
}
else {
preConvertRules(node);
- foundType = nodeRules.resolveType(node);
- if (foundType == null)
- return;
+ do {
+ foundType = nodeRules.resolveType(node, foundType);
+ if (foundType == null)
+ return;
- postConvertRules(node, foundType);
- }
+ postConvertRules(node, foundType);
- addPoint(node, foundType);
+ addPoint(node, foundType);
+ } while (!foundType.isFinal());
+ }
}
/**
@@ -347,7 +360,7 @@
public void convertRelation(Relation relation) {
// Relations never resolve to a GType and so we ignore the return
// value.
- relationRules.resolveType(relation);
+ relationRules.resolveType(relation, null);
if(relation instanceof RestrictionRelation) {
RestrictionRelation rr = (RestrictionRelation)relation;
@@ -380,7 +393,7 @@
clipper.clipShape(shape, collector);
- GType pointType = nodeRules.resolveType(way);
+ GType pointType = nodeRules.resolveType(way, null);
if(pointType != null)
shape.setPoiType(pointType.getType());
Index: src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java (working copy)
@@ -58,6 +58,10 @@
gt.setRoadSpeed(nextIntValue(ts));
} else if (w.equals("copy")) {
// reserved word. not currently used
+ } else if (w.equals("continue")) {
+ gt.setContinue();
+ } else if (w.equals("stop")) {
+ gt.setFinal();
} else {
throw new SyntaxException(ts, "Unrecognised type command '" + w + '\'');
}
Index: src/uk/me/parabola/mkgmap/reader/osm/GType.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/GType.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/reader/osm/GType.java (working copy)
@@ -58,6 +58,11 @@
private boolean road;
+ // control flag, whether this element defines
+ // the final conversion, or whether we shall search
+ // for further matching elements
+ private boolean FinalElement = true;
+
public GType(int featureKind, String type) {
priority = nextPriority();
this.featureKind = featureKind;
@@ -190,6 +195,18 @@ public class GType {
return road;
}
+ public void setFinal() {
+ FinalElement = true;
+ }
+
+ public void setContinue() {
+ FinalElement = false;
+ }
+
+ public boolean isFinal() {
+ return FinalElement;
+ }
+
public static void push() {
nextPriority += PRIORITY_PUSH;
}
Index: src/uk/me/parabola/mkgmap/reader/osm/Rule.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/Rule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/reader/osm/Rule.java (working copy)
@@ -29,7 +29,8 @@
* represent it.
*
* @param el The element as read from an OSM xml file in 'tag' format.
+ * @param pre The previous garmin type generated from the element.
* @return Enough information to represent this as a garmin type.
*/
- public GType resolveType(Element el);
+ public GType resolveType(Element el, GType pre);
}
Index: src/uk/me/parabola/mkgmap/osmstyle/ActionRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/ActionRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/ActionRule.java (working copy)
@@ -52,7 +52,7 @@
this.type = null;
}
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
if (expression == null || expression.eval(el)) {
for (Action a : actions)
a.perform(el);
Index: src/uk/me/parabola/mkgmap/osmstyle/ExpressionRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/ExpressionRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/ExpressionRule.java (working copy)
@@ -28,22 +28,22 @@
* @author Steve Ratcliffe
*/
public class ExpressionRule implements Rule {
- private final Op exression;
+ private final Op expression;
private final GType gtype;
- public ExpressionRule(Op exression, GType gtype) {
- this.exression = exression;
+ public ExpressionRule(Op expression, GType gtype) {
+ this.expression = expression;
this.gtype = gtype;
}
- public GType resolveType(Element el) {
- if (exression.eval(el))
+ public GType resolveType(Element el, GType pre) {
+ if (expression.eval(el))
return gtype;
return null;
}
public String toString() {
- return exression.toString() + ' ' + gtype;
+ return expression.toString() + ' ' + gtype;
}
}
Index: src/uk/me/parabola/mkgmap/osmstyle/FixedRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/FixedRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/FixedRule.java (working copy)
@@ -32,7 +32,7 @@
this.gtype = gtype;
}
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
return gtype;
}
Index: src/uk/me/parabola/mkgmap/osmstyle/RuleSet.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/RuleSet.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/RuleSet.java (working copy)
@@ -63,14 +63,14 @@
return rules.entrySet();
}
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
GType foundType = null;
for (String tagKey : el) {
Rule rule = rules.get(tagKey);
if (rule != null) {
- GType type = rule.resolveType(el);
+ GType type = rule.resolveType(el, pre);
if (type != null) {
- if (foundType == null || type.isBetterPriority(foundType)) {
+ if ((foundType == null || type.isBetterPriority(foundType)) && (pre == null || pre.isBetterPriority(type))) {
foundType = type;
}
}
Index: src/uk/me/parabola/mkgmap/osmstyle/SequenceRule.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/SequenceRule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/SequenceRule.java (working copy)
@@ -34,9 +34,9 @@
public class SequenceRule implements Rule, Iterable<Rule> {
private final List<Rule> ruleList = new ArrayList<Rule>();
- public GType resolveType(Element el) {
+ public GType resolveType(Element el, GType pre) {
for (Rule r : ruleList) {
- GType type = r.resolveType(el);
+ GType type = r.resolveType(el, pre);
if (type != null)
return type;
}
Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java (working copy)
@@ -245,26 +245,36 @@
foundType = makeGTypeFromTags(way);
if(foundType == null)
return;
+ if (foundType.getFeatureKind() == GType.POLYLINE) {
+ if(foundType.isRoad())
+ addRoad(way, foundType);
+ else
+ addLine(way, foundType);
+ }
+ else
+ addShape(way, foundType);
}
else {
preConvertRules(way);
- foundType = wayRules.resolveType(way);
- if (foundType == null)
- return;
- postConvertRules(way, foundType);
- }
+ do {
+ foundType = wayRules.resolveType(way, foundType);
+ if (foundType == null)
+ return;
+
+ postConvertRules(way, foundType);
- if (foundType.getFeatureKind() == GType.POLYLINE) {
- if(foundType.isRoad() &&
- !MapElement.hasExtendedType(foundType.getType()))
- addRoad(way, foundType);
- else
- addLine(way, foundType);
+ if (foundType.getFeatureKind() == GType.POLYLINE) {
+ if(foundType.isRoad())
+ addRoad(way, foundType);
+ else
+ addLine(way, foundType);
+ }
+ else
+ addShape(way, foundType);
+ } while (!foundType.isFinal());
}
- else
- addShape(way, foundType);
}
/**
@@ -280,18 +290,21
foundType = makeGTypeFromTags(node);
if(foundType == null)
return;
+ addPoint(node, foundType);
}
else {
preConvertRules(node);
- foundType = nodeRules.resolveType(node);
- if (foundType == null)
- return;
+ do {
+ foundType = nodeRules.resolveType(node, foundType);
+ if (foundType == null)
+ return;
- postConvertRules(node, foundType);
- }
+ postConvertRules(node, foundType);
- addPoint(node, foundType);
+ addPoint(node, foundType);
+ } while (!foundType.isFinal());
+ }
}
/**
@@ -347,7 +360,7 @@
public void convertRelation(Relation relation) {
// Relations never resolve to a GType and so we ignore the return
// value.
- relationRules.resolveType(relation);
+ relationRules.resolveType(relation, null);
if(relation instanceof RestrictionRelation) {
RestrictionRelation rr = (RestrictionRelation)relation;
@@ -380,7 +393,7 @@
clipper.clipShape(shape, collector);
- GType pointType = nodeRules.resolveType(way);
+ GType pointType = nodeRules.resolveType(way, null);
if(pointType != null)
shape.setPoiType(pointType.getType());
Index: src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java (working copy)
@@ -58,6 +58,10 @@
gt.setRoadSpeed(nextIntValue(ts));
} else if (w.equals("copy")) {
// reserved word. not currently used
+ } else if (w.equals("continue")) {
+ gt.setContinue();
+ } else if (w.equals("stop")) {
+ gt.setFinal();
} else {
throw new SyntaxException(ts, "Unrecognised type command '" + w + '\'');
}
Index: src/uk/me/parabola/mkgmap/reader/osm/GType.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/GType.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/reader/osm/GType.java (working copy)
@@ -58,6 +58,11 @@
private boolean road;
+ // control flag, whether this element defines
+ // the final conversion, or whether we shall search
+ // for further matching elements
+ private boolean FinalElement = true;
+
public GType(int featureKind, String type) {
priority = nextPriority();
this.featureKind = featureKind;
@@ -190,6 +195,18 @@ public class GType {
return road;
}
+ public void setFinal() {
+ FinalElement = true;
+ }
+
+ public void setContinue() {
+ FinalElement = false;
+ }
+
+ public boolean isFinal() {
+ return FinalElement;
+ }
+
public static void push() {
nextPriority += PRIORITY_PUSH;
}
Index: src/uk/me/parabola/mkgmap/reader/osm/Rule.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/Rule.java (revision 1140)
+++ src/uk/me/parabola/mkgmap/reader/osm/Rule.java (working copy)
@@ -29,7 +29,8 @@
* represent it.
*
* @param el The element as read from an OSM xml file in 'tag' format.
+ * @param pre The previous garmin type generated from the element.
* @return Enough information to represent this as a garmin type.
*/
- public GType resolveType(Element el);
+ public GType resolveType(Element el, GType pre);
}
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev