Hi

Who can help me.
Since Version mkgmap-r4136 i get a error with my style.
Error in style: Error: (points:179): Invalid rule expression:
$mkgmap:admin_level2!=DEU & $name:en=$name:de

This is a bug in mkgmap.  The attached patch fixes it.

Thanks for reporting this problem.

Steve
Index: src/uk/me/parabola/mkgmap/osmstyle/ExpressionArranger.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/ExpressionArranger.java	(revision 4140)
+++ src/uk/me/parabola/mkgmap/osmstyle/ExpressionArranger.java	(date 1521717514000)
@@ -553,8 +553,7 @@
 	 * True if this operation can be indexed.  It is a plain equality or Exists operation.
 	 */
 	private static boolean isIndexable(Op op) {
-		return op.isType(EQUALS)
-				&& ((ValueOp) op.getFirst()).isIndexable() && op.getSecond().isType(VALUE)
+		return op.isType(EQUALS) && ((ValueOp) op.getFirst()).isIndexable() && (op.getSecond().isType(VALUE) || op.getSecond().isType(FUNCTION))
 				|| NEED_EXISTS.contains(op.getType()) && ((ValueOp) op.getFirst()).isIndexable()
 					&& (op.getSecond().isType(VALUE) || op.getSecond().isType(FUNCTION))
 				|| op.isType(EXISTS) && ((ValueOp) op.getFirst()).isIndexable();
Index: test/uk/me/parabola/mkgmap/osmstyle/ExpressionArrangerTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- test/uk/me/parabola/mkgmap/osmstyle/ExpressionArrangerTest.java	(revision 4140)
+++ test/uk/me/parabola/mkgmap/osmstyle/ExpressionArrangerTest.java	(date 1521714890000)
@@ -28,6 +28,7 @@
 import static org.junit.Assert.*;
 import static uk.me.parabola.mkgmap.osmstyle.ExpressionArranger.fmtExpr;
 import static uk.me.parabola.mkgmap.osmstyle.ExpressionArranger.isSolved;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.AND;
 import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.EQUALS;
 
 
@@ -193,7 +194,18 @@
 		assertTrue(isSolved(op));
 		assertTrue(op.getFirst().getType() != NodeType.FUNCTION);
 	}
-	
+
+	@Test
+	public void testEqualTagValue() {
+		Op op = createOp("c!=d & a=$b");
+		op = arranger.arrange(op);
+		Iterator<Op> it = arranger.prepareForSave(op);
+		op = it.next();
+		assertEquals(AND, op.getType());
+		assertEquals("$a=* & $a=$b & $c!=d", op.toString());
+		System.out.println(op.toString());
+	}
+
 	private Op createOp(String s) {
 		TokenScanner scanner = new TokenScanner("test.file", new StringReader(s));
 		ExpressionReader er = new ExpressionReader(scanner, FeatureKind.POLYLINE);
_______________________________________________
mkgmap-dev mailing list
mkgmap-dev@lists.mkgmap.org.uk
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to