[mkgmap-dev] [PATCH] Add a substring filter to the style language.
From Jeffrey C. Ollie jeff at ocjtech.us on Mon Mar 15 16:51:04 GMT 2010
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
- Previous message: [mkgmap-dev] Build mkgmap::trunk build #1603-812 successful (tests passed: 140)
- Next message: [mkgmap-dev] Address search and "State"-question on Garmin Oregons
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the mkgmap-dev mailing list