Rev 1650 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright 2009 Toby Speight
*
* 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.
*/
package uk.me.parabola.mkgmap.osmstyle.actions;
import java.util.HashMap;
import java.util.Map;
import uk.me.parabola.mkgmap.reader.osm.Element;
/**
* Prepend a Garmin magic-character to the value.
* TODO: symbolic names?
*
* @author Toby Speight
*/
public class PrependFilter
extends ValueFilter
{
private final String prefix
;
private static final Map<String,
String> symbols_6bit
;
private static final Map<String,
String> symbols_8bit
;
static {
// Firstly, the symbols common to both encodings.
symbols_6bit =
new HashMap<String,
String>();
symbols_6bit.
put("ele",
"\u001f"); // name.height separator
// Copy to other encoding
symbols_8bit =
new HashMap<String,
String>(symbols_6bit
);
// Now add other symbols
symbols_6bit.
put("interstate",
"\u002a"); // US Interstate
symbols_8bit.
put("interstate",
"\u0001");
symbols_6bit.
put("shield",
"\u002b"); // US Highway shield
symbols_8bit.
put("shield",
"\u0002");
symbols_6bit.
put("round",
"\u002c"); // US Highway round
symbols_8bit.
put("round",
"\u0003");
symbols_6bit.
put("boxx",
"\u002d"); // box with horizontal bands
symbols_8bit.
put("boxx",
"\u0004");
symbols_6bit.
put("box",
"\u002e"); // Square box
symbols_8bit.
put("box",
"\u0005");
symbols_6bit.
put("oval",
"\u002f"); // box with rounded ends
symbols_8bit.
put("oval",
"\u0006");
}
// TODO: runtime select appropriate table
public PrependFilter
(String s
) {
// First, try the lookup table
Map<String,
String> symbols = symbols_8bit
;
String p = symbols.
get(s
);
if (p ==
null) {
// else, s is a hex constant character number
try {
p =
Character.
toString((char)Integer.
parseInt(s,
16));
} catch (NumberFormatException e
) {
// failed - use string literally
p = s
;
}
}
prefix = p
;
}
public String doFilter
(String value,
Element el
) {
return value ==
null ? null : prefix + value
;
}
}