This can be used to extract substrings from values. If the "name" tag on an
object was
equal to "abcdef":
'${name|substring:2}' => 'cdef'
'${name|substring:2:4}' => 'cd'
As an example, it can be used to clean up the "ref" element on route relations:
type=route & route=road & network=US:I & ref ~ 'I\d+' { apply { set
route_network='US:I'; set route_ref='${ref|substring:1}'; } }
type=route & route=road & network=US:I & ref ~ 'I \d+' { apply { set
route_network='US:I'; set route_ref='${ref|substring:2}'; } }
type=route & route=road & network=US:I & ref ~ 'I-\d+' { apply { set
route_network='US:I'; set route_ref='${ref|substring:2}'; } }
type=route & route=road & network=US:I & ref ~ '\d+' { apply { set
route_network='US:I'; set route_ref='${ref}'; } }
---
.../mkgmap/osmstyle/actions/SubstringFilter.java | 66 ++++++++++++++++++++
.../mkgmap/osmstyle/actions/ValueBuilder.java | 2 +
2 files changed, 68 insertions(+), 0 deletions(-)
create mode 100644
src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
b/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
new file mode 100644
index 0000000..823d402
--- /dev/null
+++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/SubstringFilter.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2010 Jeffrey C. Ollie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 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.
+ *
+ *
+ * Author: Jeffrey C. Ollie
+ * Create date: 08-March-2010
+ */
+package uk.me.parabola.mkgmap.osmstyle.actions;
+
+import uk.me.parabola.mkgmap.reader.osm.Element;
+
+/**
+ * Extract a substring from a value
+ *
+ * @author Jeffrey C. Ollie
+ */
+public class SubstringFilter extends ValueFilter {
+ private int args;
+ private int start;
+ private int end;
+
+ public SubstringFilter(String arg) {
+ start = 0;
+ end = 0;
+ args = 0;
+
+ String[] temp = arg.split(":");
+
+ try {
+ if (temp.length == 1) {
+ start = Integer.parseInt(temp[0]);
+ args = 1;
+ } else if (temp.length == 2) {
+ start = Integer.parseInt(temp[0]);
+ end = Integer.parseInt(temp[1]);
+ args = 2;
+ } else {
+ start = 0;
+ end = 0;
+ args = 0;
+ }
+ } catch (NumberFormatException e) {
+ }
+ }
+
+ protected String doFilter(String value, Element el) {
+ if (value == null) return null;
+
+ if (args == 1) {
+ return value.substring(start);
+ }
+ if (args == 2) {
+ return value.substring(start, end);
+ }
+ return value;
+ }
+}
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java
b/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java
index 27b861d..1100b15 100644
--- a/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java
+++ b/src/uk/me/parabola/mkgmap/osmstyle/actions/ValueBuilder.java
@@ -171,6 +171,8 @@ public class ValueBuilder {
item.addFilter(new HeightFilter(arg));
} else if (cmd.equals("not-equal")) {
item.addFilter(new NotEqualFilter(arg));
+ } else if (cmd.equals("substring")) {
+ item.addFilter(new SubstringFilter(arg));
}
}
--
1.7.0.1
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev