Ticket #11634: 0008-Moved-global-SOM-management-out-of-NavigationCompone.patch
File 0008-Moved-global-SOM-management-out-of-NavigationCompone.patch, 187.9 KB (added by , 9 years ago) |
---|
-
src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
From 29baba3b6eb9b323c9adfac05ce3d5c9dd52ff23 Mon Sep 17 00:00:00 2001 From: Michael Zangl <michael.zangl@student.kit.edu> Date: Wed, 1 Jul 2015 15:10:08 +0200 Subject: [PATCH 8/8] Moved global SOM management out of NavigationComponent to SystemOfMeasurement class --- .../josm/actions/mapmode/ParallelWayAction.java | 3 +- .../josm/data/SystemOfMeasurement.java | 74 + src/org/openstreetmap/josm/gui/MapStatus.java | 8 +- .../josm/gui/NavigatableComponent.java | 79 +- src/org/openstreetmap/josm/gui/layer/GpxLayer.java | 5 +- .../gui/layer/gpx/ChooseTrackVisibilityAction.java | 4 +- .../mappaint/mapcss/parsergen/MapCSSParser.java | 3650 ++++++++++++++++++++ .../mapcss/parsergen/MapCSSParserConstants.java | 195 ++ .../mapcss/parsergen/MapCSSParserTokenManager.java | 1450 ++++++++ .../mappaint/mapcss/parsergen/ParseException.java | 195 ++ .../mapcss/parsergen/SimpleCharStream.java | 474 +++ .../josm/gui/mappaint/mapcss/parsergen/Token.java | 131 + .../mappaint/mapcss/parsergen/TokenMgrError.java | 146 + .../projection/ProjectionPreference.java | 3 +- 14 files changed, 6352 insertions(+), 65 deletions(-) create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParser.java create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserConstants.java create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserTokenManager.java create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/ParseException.java create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/SimpleCharStream.java create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/Token.java create mode 100644 src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/TokenMgrError.java diff --git a/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java b/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java index 9f1d4d5..f09880b 100644
a b import org.openstreetmap.josm.data.osm.WaySegment; 31 31 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors; 32 32 import org.openstreetmap.josm.gui.MapFrame; 33 33 import org.openstreetmap.josm.gui.MapView; 34 import org.openstreetmap.josm.gui.NavigatableComponent;35 34 import org.openstreetmap.josm.gui.layer.Layer; 36 35 import org.openstreetmap.josm.gui.layer.MapViewPaintable; 37 36 import org.openstreetmap.josm.gui.layer.OsmDataLayer; … … public class ParallelWayAction extends MapMode implements ModifierListener, MapV 423 422 // TODO: Very simple snapping 424 423 // - Snap steps relative to the distance? 425 424 double snapDistance; 426 SystemOfMeasurement som = NavigatableComponent.getSystemOfMeasurement();425 SystemOfMeasurement som = SystemOfMeasurement.getSystemOfMeasurement(); 427 426 if (som.equals(SystemOfMeasurement.CHINESE)) { 428 427 snapDistance = snapDistanceChinese * SystemOfMeasurement.CHINESE.aValue; 429 428 } else if (som.equals(SystemOfMeasurement.IMPERIAL)) { -
src/org/openstreetmap/josm/data/SystemOfMeasurement.java
diff --git a/src/org/openstreetmap/josm/data/SystemOfMeasurement.java b/src/org/openstreetmap/josm/data/SystemOfMeasurement.java index ba694b3..1a3bb86 100644
a b import java.text.NumberFormat; 7 7 import java.util.LinkedHashMap; 8 8 import java.util.Locale; 9 9 import java.util.Map; 10 import java.util.concurrent.CopyOnWriteArrayList; 10 11 11 12 import org.openstreetmap.josm.Main; 13 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference; 12 14 13 15 /** 14 16 * A system of units used to express length and area measurements. 17 * <p> 18 * This class also manages one globally set system of measurement stored in the {@link ProjectionPreference} 15 19 * @since 3406 (creation) 16 20 * @since 6992 (extraction in this package) 17 21 */ 18 22 public class SystemOfMeasurement { 19 23 20 24 /** 25 * Interface to notify listeners of the change of the system of measurement. 26 */ 27 public interface SoMChangeListener { 28 /** 29 * The current SoM has changed. 30 * @param oldSoM The old system of measurement 31 * @param newSoM The new (current) system of measurement 32 */ 33 void systemOfMeasurementChanged(String oldSoM, String newSoM); 34 } 35 36 /** 21 37 * Metric system (international standard). 22 38 * @since 3406 23 39 */ … … public class SystemOfMeasurement { 54 70 ALL_SYSTEMS.put(marktr("Nautical Mile"), NAUTICAL_MILE); 55 71 } 56 72 73 private static final CopyOnWriteArrayList<SoMChangeListener> somChangeListeners = new CopyOnWriteArrayList<>(); 74 75 /** 76 * Removes a global SoM change listener 77 * 78 * @param listener the listener. Ignored if null or already absent 79 * @since 6056 80 */ 81 public static void removeSoMChangeListener(SoMChangeListener listener) { 82 somChangeListeners.remove(listener); 83 } 84 85 /** 86 * Adds a SoM change listener 87 * 88 * @param listener the listener. Ignored if null or already registered. 89 * @since 6056 90 */ 91 public static void addSoMChangeListener(SoMChangeListener listener) { 92 if (listener != null) { 93 somChangeListeners.addIfAbsent(listener); 94 } 95 } 96 97 protected static void fireSoMChanged(String oldSoM, String newSoM) { 98 for (SoMChangeListener l : somChangeListeners) { 99 l.systemOfMeasurementChanged(oldSoM, newSoM); 100 } 101 } 102 103 /** 104 * Returns the current global system of measurement. 105 * @return The current system of measurement (metric system by default). 106 * @since 3490 107 */ 108 public static SystemOfMeasurement getSystemOfMeasurement() { 109 SystemOfMeasurement som = SystemOfMeasurement.ALL_SYSTEMS.get(ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get()); 110 if (som == null) 111 return SystemOfMeasurement.METRIC; 112 return som; 113 } 114 115 /** 116 * Sets the current global system of measurement. 117 * @param somKey The system of measurement key. Must be defined in {@link SystemOfMeasurement#ALL_SYSTEMS}. 118 * @throws IllegalArgumentException if {@code somKey} is not known 119 * @since 6056 120 */ 121 public static void setSystemOfMeasurement(String somKey) { 122 if (!SystemOfMeasurement.ALL_SYSTEMS.containsKey(somKey)) { 123 throw new IllegalArgumentException("Invalid system of measurement: "+somKey); 124 } 125 String oldKey = ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get(); 126 if (ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.put(somKey)) { 127 fireSoMChanged(oldKey, somKey); 128 } 129 } 130 57 131 /** First value, in meters, used to translate unit according to above formula. */ 58 132 public final double aValue; 59 133 /** Second value, in meters, used to translate unit according to above formula. */ -
src/org/openstreetmap/josm/gui/MapStatus.java
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java index 61f1604..51e87e2 100644
a b import org.openstreetmap.josm.Main; 53 53 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent; 54 54 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener; 55 55 import org.openstreetmap.josm.data.SystemOfMeasurement; 56 import org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener; 56 57 import org.openstreetmap.josm.data.coor.CoordinateFormat; 57 58 import org.openstreetmap.josm.data.coor.LatLon; 58 59 import org.openstreetmap.josm.data.osm.DataSet; 59 60 import org.openstreetmap.josm.data.osm.OsmPrimitive; 60 61 import org.openstreetmap.josm.data.osm.Way; 61 62 import org.openstreetmap.josm.data.preferences.ColorProperty; 62 import org.openstreetmap.josm.gui.NavigatableComponent.SoMChangeListener;63 63 import org.openstreetmap.josm.gui.help.Helpful; 64 64 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference; 65 65 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor; … … public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc 864 864 }); 865 865 } 866 866 867 NavigatableComponent.addSoMChangeListener(somListener = new SoMChangeListener() {867 SystemOfMeasurement.addSoMChangeListener(somListener = new SoMChangeListener() { 868 868 @Override 869 869 public void systemOfMeasurementChanged(String oldSoM, String newSoM) { 870 870 setDist(distValue); … … public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc 907 907 * @since 6960 908 908 */ 909 909 public void updateSystemOfMeasurement(String newsom) { 910 NavigatableComponent.setSystemOfMeasurement(newsom);910 SystemOfMeasurement.setSystemOfMeasurement(newsom); 911 911 if (Main.pref.getBoolean("statusbar.notify.change-system-of-measurement", true)) { 912 912 new Notification(tr("System of measurement changed to {0}", newsom)) 913 913 .setDuration(Notification.TIME_SHORT) … … public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc 1019 1019 1020 1020 @Override 1021 1021 public void destroy() { 1022 NavigatableComponent.removeSoMChangeListener(somListener);1022 SystemOfMeasurement.removeSoMChangeListener(somListener); 1023 1023 Main.pref.removePreferenceChangeListener(this); 1024 1024 1025 1025 // MapFrame gets destroyed when the last layer is removed, but the status line background -
src/org/openstreetmap/josm/gui/NavigatableComponent.java
diff --git a/src/org/openstreetmap/josm/gui/NavigatableComponent.java b/src/org/openstreetmap/josm/gui/NavigatableComponent.java index 03e70fe..c5505f9 100644
a b import org.openstreetmap.josm.gui.download.DownloadDialog; 51 51 import org.openstreetmap.josm.gui.help.Helpful; 52 52 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles; 53 53 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource; 54 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;55 54 import org.openstreetmap.josm.tools.Predicate; 56 55 import org.openstreetmap.josm.tools.Utils; 57 56 … … public class NavigatableComponent extends JComponent implements Helpful { 78 77 * Interface to notify listeners of the change of the system of measurement. 79 78 * @since 6056 80 79 */ 81 public interface SoMChangeListener { 82 /** 83 * The current SoM has changed. 84 * @param oldSoM The old system of measurement 85 * @param newSoM The new (current) system of measurement 86 */ 87 void systemOfMeasurementChanged(String oldSoM, String newSoM); 80 public interface SoMChangeListener extends SystemOfMeasurement.SoMChangeListener { 88 81 } 89 82 90 83 public transient Predicate<OsmPrimitive> isSelectablePredicate = new Predicate<OsmPrimitive>() { … … public class NavigatableComponent extends JComponent implements Helpful { 137 130 } 138 131 } 139 132 140 private static final CopyOnWriteArrayList<SoMChangeListener> somChangeListeners = new CopyOnWriteArrayList<>();141 133 142 134 /** 143 135 * Removes a SoM change listener … … public class NavigatableComponent extends JComponent implements Helpful { 145 137 * @param listener the listener. Ignored if null or already absent 146 138 * @since 6056 147 139 */ 140 @Deprecated 148 141 public static void removeSoMChangeListener(NavigatableComponent.SoMChangeListener listener) { 149 somChangeListeners.remove(listener);142 SystemOfMeasurement.removeSoMChangeListener(listener); 150 143 } 151 144 152 145 /** … … public class NavigatableComponent extends JComponent implements Helpful { 155 148 * @param listener the listener. Ignored if null or already registered. 156 149 * @since 6056 157 150 */ 151 @Deprecated 158 152 public static void addSoMChangeListener(NavigatableComponent.SoMChangeListener listener) { 159 if (listener != null) { 160 somChangeListeners.addIfAbsent(listener); 161 } 153 SystemOfMeasurement.addSoMChangeListener(listener); 162 154 } 163 155 164 protected static void fireSoMChanged(String oldSoM, String newSoM) { 165 for (SoMChangeListener l : somChangeListeners) { 166 l.systemOfMeasurementChanged(oldSoM, newSoM); 167 } 156 /** 157 * Returns the current system of measurement. 158 * @return The current system of measurement (metric system by default). 159 * @since 3490 160 */ 161 @Deprecated 162 public static SystemOfMeasurement getSystemOfMeasurement() { 163 return SystemOfMeasurement.getSystemOfMeasurement(); 168 164 } 169 165 170 166 /** 171 * The scale factor in x or y-units per pixel. This means, if scale = 10, 172 * every physical pixel on screen are 10 x or 10 y units in the 173 * northing/easting space of the projection. 167 * Sets the current system of measurement. 168 * @param somKey The system of measurement key. Must be defined in {@link SystemOfMeasurement#ALL_SYSTEMS}. 169 * @throws IllegalArgumentException if {@code somKey} is not known 170 * @since 6056 174 171 */ 175 private double scale = Main.getProjection().getDefaultZoomInPPD(); 172 @Deprecated 173 public static void setSystemOfMeasurement(String somKey) { 174 SystemOfMeasurement.setSystemOfMeasurement(somKey); 175 } 176 176 177 private double scale = Main.getProjection().getDefaultZoomInPPD(); 177 178 /** 178 179 * Center n/e coordinate of the desired screen center. 179 180 */ … … public class NavigatableComponent extends JComponent implements Helpful { 211 212 * @since 3406 212 213 */ 213 214 public static String getDistText(double dist) { 214 return getSystemOfMeasurement().getDistText(dist);215 return SystemOfMeasurement.getSystemOfMeasurement().getDistText(dist); 215 216 } 216 217 217 218 /** … … public class NavigatableComponent extends JComponent implements Helpful { 223 224 * @since 7135 224 225 */ 225 226 public static String getDistText(final double dist, final NumberFormat format, final double threshold) { 226 return getSystemOfMeasurement().getDistText(dist, format, threshold);227 return SystemOfMeasurement.getSystemOfMeasurement().getDistText(dist, format, threshold); 227 228 } 228 229 229 230 /** … … public class NavigatableComponent extends JComponent implements Helpful { 233 234 * @since 5560 234 235 */ 235 236 public static String getAreaText(double area) { 236 return getSystemOfMeasurement().getAreaText(area);237 return SystemOfMeasurement.getSystemOfMeasurement().getAreaText(area); 237 238 } 238 239 239 240 /** … … public class NavigatableComponent extends JComponent implements Helpful { 245 246 * @since 7135 246 247 */ 247 248 public static String getAreaText(final double area, final NumberFormat format, final double threshold) { 248 return getSystemOfMeasurement().getAreaText(area, format, threshold);249 return SystemOfMeasurement.getSystemOfMeasurement().getAreaText(area, format, threshold); 249 250 } 250 251 251 252 public String getDist100PixelText() { … … public class NavigatableComponent extends JComponent implements Helpful { 1434 1435 return (int) id.getValue(); 1435 1436 } 1436 1437 1437 /**1438 * Returns the current system of measurement.1439 * @return The current system of measurement (metric system by default).1440 * @since 34901441 */1442 public static SystemOfMeasurement getSystemOfMeasurement() {1443 SystemOfMeasurement som = SystemOfMeasurement.ALL_SYSTEMS.get(ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get());1444 if (som == null)1445 return SystemOfMeasurement.METRIC;1446 return som;1447 }1448 1449 /**1450 * Sets the current system of measurement.1451 * @param somKey The system of measurement key. Must be defined in {@link SystemOfMeasurement#ALL_SYSTEMS}.1452 * @throws IllegalArgumentException if {@code somKey} is not known1453 * @since 60561454 */1455 public static void setSystemOfMeasurement(String somKey) {1456 if (!SystemOfMeasurement.ALL_SYSTEMS.containsKey(somKey)) {1457 throw new IllegalArgumentException("Invalid system of measurement: "+somKey);1458 }1459 String oldKey = ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get();1460 if (ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.put(somKey)) {1461 fireSoMChanged(oldKey, somKey);1462 }1463 }1464 1465 1438 private static class CursorInfo { 1466 1439 private final Cursor cursor; 1467 1440 private final Object object; -
src/org/openstreetmap/josm/gui/layer/GpxLayer.java
diff --git a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java index cca96d9..9d188a4 100644
a b import org.openstreetmap.josm.Main; 25 25 import org.openstreetmap.josm.actions.RenameLayerAction; 26 26 import org.openstreetmap.josm.actions.SaveActionBase; 27 27 import org.openstreetmap.josm.data.Bounds; 28 import org.openstreetmap.josm.data.SystemOfMeasurement; 28 29 import org.openstreetmap.josm.data.gpx.GpxConstants; 29 30 import org.openstreetmap.josm.data.gpx.GpxData; 30 31 import org.openstreetmap.josm.data.gpx.GpxTrack; … … public class GpxLayer extends Layer { 149 150 info.append("</td><td>"); 150 151 info.append(getTimespanForTrack(trk)); 151 152 info.append("</td><td>"); 152 info.append( NavigatableComponent.getSystemOfMeasurement().getDistText(trk.length()));153 info.append(SystemOfMeasurement.getSystemOfMeasurement().getDistText(trk.length())); 153 154 info.append("</td><td>"); 154 155 if (trk.getAttributes().containsKey("url")) { 155 156 info.append(trk.get("url")); … … public class GpxLayer extends Layer { 221 222 info.append(trn("{0} track, ", "{0} tracks, ", data.tracks.size(), data.tracks.size())) 222 223 .append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())) 223 224 .append(trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>") 224 .append(tr("Length: {0}", NavigatableComponent.getSystemOfMeasurement().getDistText(data.length())))225 .append(tr("Length: {0}", SystemOfMeasurement.getSystemOfMeasurement().getDistText(data.length()))) 225 226 .append("<br></html>"); 226 227 return info.toString(); 227 228 } -
src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java index d1b7ac1..848da50 100644
a b import javax.swing.table.TableCellRenderer; 32 32 import javax.swing.table.TableRowSorter; 33 33 34 34 import org.openstreetmap.josm.Main; 35 import org.openstreetmap.josm.data.SystemOfMeasurement; 35 36 import org.openstreetmap.josm.data.gpx.GpxConstants; 36 37 import org.openstreetmap.josm.data.gpx.GpxTrack; 37 38 import org.openstreetmap.josm.gui.ExtendedDialog; 38 import org.openstreetmap.josm.gui.NavigatableComponent;39 39 import org.openstreetmap.josm.gui.layer.GpxLayer; 40 40 import org.openstreetmap.josm.tools.GBC; 41 41 import org.openstreetmap.josm.tools.ImageProvider; … … public class ChooseTrackVisibilityAction extends AbstractAction { 82 82 */ 83 83 @Override 84 84 public String toString() { 85 return NavigatableComponent.getSystemOfMeasurement().getDistText(value);85 return SystemOfMeasurement.getSystemOfMeasurement().getDistText(value); 86 86 } 87 87 } 88 88 -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParser.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParser.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParser.java new file mode 100644 index 0000000..fb4a00b
- + 1 /* MapCSSParser.java */ 2 /* Generated By:JavaCC: Do not edit this line. MapCSSParser.java */ 3 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 4 5 import java.io.InputStream; 6 import java.io.Reader; 7 import java.util.ArrayList; 8 import java.util.Arrays; 9 import java.util.Collections; 10 import java.util.List; 11 import java.util.Locale; 12 13 import org.openstreetmap.josm.Main; 14 import org.openstreetmap.josm.gui.mappaint.Keyword; 15 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition; 16 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Context; 17 import org.openstreetmap.josm.gui.mappaint.mapcss.Expression; 18 import org.openstreetmap.josm.gui.mappaint.mapcss.ExpressionFactory; 19 import org.openstreetmap.josm.gui.mappaint.mapcss.ExpressionFactory.NullExpression; 20 import org.openstreetmap.josm.gui.mappaint.mapcss.Instruction; 21 import org.openstreetmap.josm.gui.mappaint.mapcss.LiteralExpression; 22 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSException; 23 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule; 24 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule.Declaration; 25 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource; 26 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector; 27 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector; 28 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector; 29 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.LinkSelector; 30 import org.openstreetmap.josm.gui.mappaint.mapcss.Subpart; 31 import org.openstreetmap.josm.tools.ColorHelper; 32 import org.openstreetmap.josm.tools.Pair; 33 import org.openstreetmap.josm.tools.Utils; 34 35 /** 36 * MapCSS parser. 37 * 38 * Contains two independent grammars: 39 * (a) the preprocessor and (b) the main mapcss parser. 40 * 41 * The preprocessor handles @supports and @media syntax (@media is deprecated). 42 * Basically this allows to write one style for different versions of JOSM (or different editors). 43 * When the @supports condition is not fulfilled, it should simply skip over 44 * the whole section and not attempt to parse the possibly unknown 45 * grammar. It preserves whitespace and comments, in order to keep the 46 * line and column numbers in the error messages correct for the second pass. 47 * 48 */ 49 50 public class MapCSSParser implements MapCSSParserConstants { 51 MapCSSStyleSource sheet; 52 StringBuilder sb; 53 int declarationCounter; 54 55 /** 56 * Nicer way to refer to a lexical state. 57 */ 58 public static enum LexicalState { 59 PREPROCESSOR(0), /* the preprocessor */ 60 DEFAULT(2); /* the main parser */ 61 62 int idx; // the integer, which javacc assigns to this state 63 64 LexicalState(int idx) { 65 if (!this.name().equals(MapCSSParserTokenManager.lexStateNames[idx])) { 66 throw new RuntimeException(); 67 } 68 this.idx = idx; 69 } 70 }; 71 72 /** 73 * Constructor which initializes the parser with a certain lexical state. 74 */ 75 public MapCSSParser(InputStream in, String encoding, LexicalState initState) { 76 this(createTokenManager(in, encoding, initState)); 77 declarationCounter = 0; 78 } 79 80 protected static MapCSSParserTokenManager createTokenManager(InputStream in, String encoding, LexicalState initState) { 81 SimpleCharStream scs; 82 try { 83 scs = new SimpleCharStream(in, encoding, 1, 1); 84 } catch (java.io.UnsupportedEncodingException e) { 85 throw new RuntimeException(e); 86 } 87 return new MapCSSParserTokenManager(scs, initState.idx); 88 } 89 90 /** 91 * Constructor which initializes the parser with a certain lexical state. 92 */ 93 public MapCSSParser(Reader in, LexicalState initState) { 94 this(createTokenManager(in, initState)); 95 declarationCounter = 0; 96 } 97 98 protected static MapCSSParserTokenManager createTokenManager(Reader in, LexicalState initState) { 99 final SimpleCharStream scs = new SimpleCharStream(in, 1, 1); 100 return new MapCSSParserTokenManager(scs, initState.idx); 101 } 102 103 /************* 104 * 105 * Preprocessor parser definitions: 106 * 107 * <pre> 108 * 109 * {@literal @media} { ... } queries are supported, following http://www.w3.org/TR/css3-mediaqueries/#syntax 110 * 111 * media_query 112 * ___________________________|_______________________________ 113 * | | 114 * {@literal @media} all and (min-josm-version: 7789) and (max-josm-version: 7790), all and (user-agent: xyz) { ... } 115 * |______________________| 116 * | 117 * media_expression 118 * </pre> 119 */ 120 121 122 /** 123 * root method for the preprocessor. 124 */ 125 final public String pp_root(MapCSSStyleSource sheet) throws ParseException { 126 sb = new StringBuilder(); this.sheet = sheet; 127 pp_black_box(true); 128 jj_consume_token(0); 129 {if ("" != null) return sb.toString();} 130 throw new Error("Missing return statement in function"); 131 } 132 133 /** 134 * Parse any unknown grammar (black box). 135 * 136 * Only stop when "@media" is encountered and keep track of correct number of 137 * opening and closing curly brackets. 138 * 139 * @param write false if this content should be skipped (@pp_media condition is not fulfilled), true otherwise 140 */ 141 final public void pp_black_box(boolean write) throws ParseException {Token t; 142 label_1: 143 while (true) { 144 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 145 case PP_AND: 146 case PP_OR: 147 case PP_NOT: 148 case PP_SUPPORTS: 149 case PP_MEDIA: 150 case PP_NEWLINECHAR: 151 case PP_WHITESPACE: 152 case PP_COMMENT_START: 153 case IDENT: 154 case UINT: 155 case STRING: 156 case REGEX: 157 case LBRACE: 158 case LPAR: 159 case RPAR: 160 case COMMA: 161 case COLON: 162 case PP_SOMETHING_ELSE:{ 163 ; 164 break; 165 } 166 default: 167 jj_la1[0] = jj_gen; 168 break label_1; 169 } 170 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 171 case PP_AND: 172 case PP_OR: 173 case PP_NOT: 174 case IDENT: 175 case UINT: 176 case STRING: 177 case REGEX: 178 case LPAR: 179 case RPAR: 180 case COMMA: 181 case COLON: 182 case PP_SOMETHING_ELSE:{ 183 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 184 case PP_AND:{ 185 t = jj_consume_token(PP_AND); 186 break; 187 } 188 case PP_OR:{ 189 t = jj_consume_token(PP_OR); 190 break; 191 } 192 case PP_NOT:{ 193 t = jj_consume_token(PP_NOT); 194 break; 195 } 196 case UINT:{ 197 t = jj_consume_token(UINT); 198 break; 199 } 200 case STRING:{ 201 t = jj_consume_token(STRING); 202 break; 203 } 204 case REGEX:{ 205 t = jj_consume_token(REGEX); 206 break; 207 } 208 case LPAR:{ 209 t = jj_consume_token(LPAR); 210 break; 211 } 212 case RPAR:{ 213 t = jj_consume_token(RPAR); 214 break; 215 } 216 case COMMA:{ 217 t = jj_consume_token(COMMA); 218 break; 219 } 220 case COLON:{ 221 t = jj_consume_token(COLON); 222 break; 223 } 224 case IDENT:{ 225 t = jj_consume_token(IDENT); 226 break; 227 } 228 case PP_SOMETHING_ELSE:{ 229 t = jj_consume_token(PP_SOMETHING_ELSE); 230 break; 231 } 232 default: 233 jj_la1[1] = jj_gen; 234 jj_consume_token(-1); 235 throw new ParseException(); 236 } 237 if (write) sb.append(t.image); 238 break; 239 } 240 case PP_NEWLINECHAR: 241 case PP_WHITESPACE: 242 case PP_COMMENT_START:{ 243 pp_w1(); 244 break; 245 } 246 case PP_SUPPORTS:{ 247 pp_supports(!write); 248 break; 249 } 250 case PP_MEDIA:{ 251 pp_media(!write); 252 break; 253 } 254 case LBRACE:{ 255 t = jj_consume_token(LBRACE); 256 if (write) sb.append(t.image); 257 pp_black_box(write); 258 t = jj_consume_token(RBRACE); 259 if (write) sb.append(t.image); 260 break; 261 } 262 default: 263 jj_la1[2] = jj_gen; 264 jj_consume_token(-1); 265 throw new ParseException(); 266 } 267 } 268 } 269 270 /** 271 * Parses an @supports rule. 272 * 273 * @param ignore if the content of this rule should be ignored 274 * (because we are already inside a @supports block that didn't pass) 275 */ 276 final public void pp_supports(boolean ignore) throws ParseException {boolean pass; 277 jj_consume_token(PP_SUPPORTS); 278 pp_w(); 279 pass = pp_supports_condition(); 280 jj_consume_token(LBRACE); 281 pp_black_box(pass && !ignore); 282 jj_consume_token(RBRACE); 283 } 284 285 /** 286 * Parses the condition of the @supports rule. 287 * 288 * Unlike other parsing rules, grabs trailing whitespace. 289 * @return true, if the condition is fulfilled 290 */ 291 final public boolean pp_supports_condition() throws ParseException {boolean pass; 292 boolean q; 293 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 294 case PP_NOT:{ 295 jj_consume_token(PP_NOT); 296 pp_w(); 297 q = pp_supports_condition_in_parens(); 298 pass = !q; 299 pp_w(); 300 break; 301 } 302 default: 303 jj_la1[5] = jj_gen; 304 if (jj_2_1(2147483647)) { 305 pass = pp_supports_condition_in_parens(); 306 pp_w(); 307 label_2: 308 while (true) { 309 jj_consume_token(PP_AND); 310 pp_w(); 311 q = pp_supports_condition_in_parens(); 312 pass = pass && q; 313 pp_w(); 314 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 315 case PP_AND:{ 316 ; 317 break; 318 } 319 default: 320 jj_la1[3] = jj_gen; 321 break label_2; 322 } 323 } 324 } else if (jj_2_2(2147483647)) { 325 pass = pp_supports_condition_in_parens(); 326 pp_w(); 327 label_3: 328 while (true) { 329 jj_consume_token(PP_OR); 330 pp_w(); 331 q = pp_supports_condition_in_parens(); 332 pass = pass || q; 333 pp_w(); 334 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 335 case PP_OR:{ 336 ; 337 break; 338 } 339 default: 340 jj_la1[4] = jj_gen; 341 break label_3; 342 } 343 } 344 } else { 345 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 346 case LPAR:{ 347 pass = pp_supports_condition_in_parens(); 348 pp_w(); 349 break; 350 } 351 default: 352 jj_la1[6] = jj_gen; 353 jj_consume_token(-1); 354 throw new ParseException(); 355 } 356 } 357 } 358 {if ("" != null) return pass;} 359 throw new Error("Missing return statement in function"); 360 } 361 362 /** 363 * Parses something in parenthesis inside the condition of the @supports rule. 364 * 365 * @return true, if the condition is fulfilled 366 */ 367 final public boolean pp_supports_condition_in_parens() throws ParseException {boolean pass; 368 if (jj_2_3(2147483647)) { 369 pass = pp_supports_declaration_condition(); 370 } else { 371 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 372 case LPAR:{ 373 jj_consume_token(LPAR); 374 pp_w(); 375 pass = pp_supports_condition(); 376 jj_consume_token(RPAR); 377 break; 378 } 379 default: 380 jj_la1[7] = jj_gen; 381 jj_consume_token(-1); 382 throw new ParseException(); 383 } 384 } 385 {if ("" != null) return pass;} 386 throw new Error("Missing return statement in function"); 387 } 388 389 /** 390 * Parse an @supports declaration condition, e. g. a single (key:value) or (key) statement. 391 * 392 * The parsing rule {@link #literal()} from the main mapcss parser is reused here. 393 * 394 * @return true if the condition is fulfilled 395 */ 396 final public boolean pp_supports_declaration_condition() throws ParseException {Token t; 397 String feature; 398 Object val = null; 399 jj_consume_token(LPAR); 400 pp_w(); 401 t = jj_consume_token(IDENT); 402 feature = t.image; 403 pp_w(); 404 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 405 case COLON:{ 406 jj_consume_token(COLON); 407 pp_w(); 408 val = literal(); 409 break; 410 } 411 default: 412 jj_la1[8] = jj_gen; 413 ; 414 } 415 jj_consume_token(RPAR); 416 {if ("" != null) return this.sheet.evalSupportsDeclCondition(feature, val);} 417 throw new Error("Missing return statement in function"); 418 } 419 420 // deprecated 421 final public void pp_media(boolean ignore) throws ParseException {boolean pass = false; 422 boolean q; 423 boolean empty = true; 424 jj_consume_token(PP_MEDIA); 425 pp_w(); 426 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 427 case PP_NOT: 428 case IDENT: 429 case LPAR:{ 430 q = pp_media_query(); 431 pass = pass || q; empty = false; 432 label_4: 433 while (true) { 434 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 435 case COMMA:{ 436 ; 437 break; 438 } 439 default: 440 jj_la1[9] = jj_gen; 441 break label_4; 442 } 443 jj_consume_token(COMMA); 444 pp_w(); 445 q = pp_media_query(); 446 pass = pass || q; 447 } 448 break; 449 } 450 default: 451 jj_la1[10] = jj_gen; 452 ; 453 } 454 jj_consume_token(LBRACE); 455 pp_black_box((empty || pass) && !ignore); 456 jj_consume_token(RBRACE); 457 } 458 459 // deprecated 460 final public boolean pp_media_query() throws ParseException {Token t; 461 String mediatype = "all"; 462 boolean pass = true; 463 boolean invert = false; 464 boolean e; 465 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 466 case PP_NOT:{ 467 jj_consume_token(PP_NOT); 468 invert = true; 469 pp_w(); 470 break; 471 } 472 default: 473 jj_la1[11] = jj_gen; 474 ; 475 } 476 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 477 case IDENT:{ 478 t = jj_consume_token(IDENT); 479 mediatype = t.image.toLowerCase(Locale.ENGLISH); 480 pp_w(); 481 label_5: 482 while (true) { 483 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 484 case PP_AND:{ 485 ; 486 break; 487 } 488 default: 489 jj_la1[12] = jj_gen; 490 break label_5; 491 } 492 jj_consume_token(PP_AND); 493 pp_w(); 494 e = pp_media_expression(); 495 pass = pass && e; 496 pp_w(); 497 } 498 break; 499 } 500 case LPAR:{ 501 e = pp_media_expression(); 502 pass = pass && e; 503 pp_w(); 504 label_6: 505 while (true) { 506 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 507 case PP_AND:{ 508 ; 509 break; 510 } 511 default: 512 jj_la1[13] = jj_gen; 513 break label_6; 514 } 515 jj_consume_token(PP_AND); 516 pp_w(); 517 e = pp_media_expression(); 518 pass = pass && e; 519 pp_w(); 520 } 521 break; 522 } 523 default: 524 jj_la1[14] = jj_gen; 525 jj_consume_token(-1); 526 throw new ParseException(); 527 } 528 if (!"all".equals(mediatype)) { 529 pass = false; 530 } 531 {if ("" != null) return invert ? (!pass) : pass;} 532 throw new Error("Missing return statement in function"); 533 } 534 535 /** 536 * Parse an @media expression. 537 * 538 * The parsing rule {@link #literal()} from the main mapcss parser is reused here. 539 * 540 * @return true if the condition is fulfilled 541 */ 542 // deprecated 543 final public boolean pp_media_expression() throws ParseException {Token t; 544 String feature; 545 Object val = null; 546 jj_consume_token(LPAR); 547 pp_w(); 548 t = jj_consume_token(IDENT); 549 feature = t.image; 550 pp_w(); 551 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 552 case COLON:{ 553 jj_consume_token(COLON); 554 pp_w(); 555 val = literal(); 556 break; 557 } 558 default: 559 jj_la1[15] = jj_gen; 560 ; 561 } 562 jj_consume_token(RPAR); 563 {if ("" != null) return this.sheet.evalSupportsDeclCondition(feature, val);} 564 throw new Error("Missing return statement in function"); 565 } 566 567 final public void pp_w1() throws ParseException {Token t; 568 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 569 case PP_NEWLINECHAR:{ 570 t = jj_consume_token(PP_NEWLINECHAR); 571 sb.append(t.image); 572 break; 573 } 574 case PP_WHITESPACE:{ 575 t = jj_consume_token(PP_WHITESPACE); 576 sb.append(t.image); 577 break; 578 } 579 case PP_COMMENT_START:{ 580 t = jj_consume_token(PP_COMMENT_START); 581 sb.append(t.image); 582 t = jj_consume_token(PP_COMMENT_END); 583 sb.append(t.image); 584 break; 585 } 586 default: 587 jj_la1[16] = jj_gen; 588 jj_consume_token(-1); 589 throw new ParseException(); 590 } 591 } 592 593 final public void pp_w() throws ParseException { 594 label_7: 595 while (true) { 596 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 597 case PP_NEWLINECHAR: 598 case PP_WHITESPACE: 599 case PP_COMMENT_START:{ 600 ; 601 break; 602 } 603 default: 604 jj_la1[17] = jj_gen; 605 break label_7; 606 } 607 pp_w1(); 608 } 609 } 610 611 /************* 612 * 613 * Parser definition for the main MapCSS parser: 614 * 615 * <pre> 616 * 617 * rule 618 * _______________________|______________________________ 619 * | | 620 * selector declaration 621 * _________|___________________ _________|____________ 622 * | | | | 623 * 624 * way|z11-12[highway=residential] { color: red; width: 3 } 625 * 626 * |_____||___________________| |_________| 627 * | | | 628 * zoom condition instruction 629 * 630 * more general: 631 * 632 * way|z13-[a=b][c=d]::subpart, way|z-3[u=v]:closed::subpart2 { p1 : val; p2 : val; } 633 * 634 * 'val' can be a literal, or an expression like "prop(width, default) + 0.8". 635 * 636 * </pre> 637 */ 638 final public 639 int uint() throws ParseException {Token i; 640 i = jj_consume_token(UINT); 641 {if ("" != null) return Integer.parseInt(i.image);} 642 throw new Error("Missing return statement in function"); 643 } 644 645 final public int int_() throws ParseException {int i; 646 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 647 case MINUS:{ 648 jj_consume_token(MINUS); 649 i = uint(); 650 {if ("" != null) return -i;} 651 break; 652 } 653 case UINT:{ 654 i = uint(); 655 {if ("" != null) return i;} 656 break; 657 } 658 default: 659 jj_la1[18] = jj_gen; 660 jj_consume_token(-1); 661 throw new ParseException(); 662 } 663 throw new Error("Missing return statement in function"); 664 } 665 666 final public float ufloat() throws ParseException {Token f; 667 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 668 case UFLOAT:{ 669 f = jj_consume_token(UFLOAT); 670 break; 671 } 672 case UINT:{ 673 f = jj_consume_token(UINT); 674 break; 675 } 676 default: 677 jj_la1[19] = jj_gen; 678 jj_consume_token(-1); 679 throw new ParseException(); 680 } 681 {if ("" != null) return Float.parseFloat(f.image);} 682 throw new Error("Missing return statement in function"); 683 } 684 685 final public float float_() throws ParseException {float f; 686 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 687 case MINUS:{ 688 jj_consume_token(MINUS); 689 f = ufloat(); 690 {if ("" != null) return -f;} 691 break; 692 } 693 case UINT: 694 case UFLOAT:{ 695 f = ufloat(); 696 {if ("" != null) return f;} 697 break; 698 } 699 default: 700 jj_la1[20] = jj_gen; 701 jj_consume_token(-1); 702 throw new ParseException(); 703 } 704 throw new Error("Missing return statement in function"); 705 } 706 707 final public String string() throws ParseException {Token t; 708 t = jj_consume_token(STRING); 709 {if ("" != null) return t.image.substring(1, t.image.length() - 1).replace("\\\"", "\"").replace("\\\\", "\\");} 710 throw new Error("Missing return statement in function"); 711 } 712 713 final public String ident() throws ParseException {Token t; 714 String s; 715 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 716 case IDENT:{ 717 t = jj_consume_token(IDENT); 718 break; 719 } 720 case SET:{ 721 t = jj_consume_token(SET); 722 break; 723 } 724 default: 725 jj_la1[21] = jj_gen; 726 jj_consume_token(-1); 727 throw new ParseException(); 728 } 729 {if ("" != null) return t.image;} 730 throw new Error("Missing return statement in function"); 731 } 732 733 final public String string_or_ident() throws ParseException {Token t; 734 String s; 735 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 736 case SET: 737 case IDENT:{ 738 s = ident(); 739 break; 740 } 741 case STRING:{ 742 s = string(); 743 break; 744 } 745 default: 746 jj_la1[22] = jj_gen; 747 jj_consume_token(-1); 748 throw new ParseException(); 749 } 750 {if ("" != null) return s;} 751 throw new Error("Missing return statement in function"); 752 } 753 754 final public String regex() throws ParseException {Token t; 755 t = jj_consume_token(REGEX); 756 {if ("" != null) return t.image.substring(1, t.image.length() - 1);} 757 throw new Error("Missing return statement in function"); 758 } 759 760 /** 761 * white-space 762 */ 763 final public void s() throws ParseException { 764 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 765 case S:{ 766 jj_consume_token(S); 767 break; 768 } 769 default: 770 jj_la1[23] = jj_gen; 771 ; 772 } 773 } 774 775 /** 776 * mix of white-space and comments 777 */ 778 final public void w() throws ParseException { 779 label_8: 780 while (true) { 781 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 782 case S: 783 case COMMENT_START:{ 784 ; 785 break; 786 } 787 default: 788 jj_la1[24] = jj_gen; 789 break label_8; 790 } 791 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 792 case S:{ 793 jj_consume_token(S); 794 break; 795 } 796 case COMMENT_START:{ 797 jj_consume_token(COMMENT_START); 798 jj_consume_token(COMMENT_END); 799 break; 800 } 801 default: 802 jj_la1[25] = jj_gen; 803 jj_consume_token(-1); 804 throw new ParseException(); 805 } 806 } 807 } 808 809 /** 810 * comma delimited list of floats (at least 2, all >= 0) 811 */ 812 final public List<Float> float_array() throws ParseException {float f; 813 List<Float> fs = new ArrayList<Float>(); 814 f = ufloat(); 815 fs.add(f); 816 label_9: 817 while (true) { 818 jj_consume_token(COMMA); 819 s(); 820 f = ufloat(); 821 fs.add(f); 822 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 823 case COMMA:{ 824 ; 825 break; 826 } 827 default: 828 jj_la1[26] = jj_gen; 829 break label_9; 830 } 831 } 832 {if ("" != null) return fs;} 833 throw new Error("Missing return statement in function"); 834 } 835 836 /** 837 * entry point for the main parser 838 */ 839 final public void sheet(MapCSSStyleSource sheet) throws ParseException { 840 this.sheet = sheet; 841 w(); 842 label_10: 843 while (true) { 844 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 845 case IDENT: 846 case STAR:{ 847 ; 848 break; 849 } 850 default: 851 jj_la1[27] = jj_gen; 852 break label_10; 853 } 854 try { 855 rule(); 856 w(); 857 } catch (MapCSSException mex) { 858 Main.error(mex); 859 error_skipto(RBRACE, mex); 860 w(); 861 } catch (ParseException ex) { 862 error_skipto(RBRACE, null); 863 w(); 864 } 865 } 866 jj_consume_token(0); 867 } 868 869 final public void rule() throws ParseException {List<Selector> selectors = new ArrayList<Selector>(); 870 Selector sel; 871 Declaration decl; 872 sel = child_selector(); 873 selectors.add(sel); 874 label_11: 875 while (true) { 876 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 877 case COMMA:{ 878 ; 879 break; 880 } 881 default: 882 jj_la1[28] = jj_gen; 883 break label_11; 884 } 885 jj_consume_token(COMMA); 886 w(); 887 sel = child_selector(); 888 selectors.add(sel); 889 } 890 decl = declaration(); 891 for (Selector s : selectors) { 892 sheet.rules.add(new MapCSSRule(s, decl)); 893 } 894 } 895 896 final public Selector child_selector() throws ParseException {Selector.ChildOrParentSelectorType type = null; 897 Condition c; 898 List<Condition> conditions = new ArrayList<Condition>(); 899 Selector selLeft; 900 LinkSelector selLink = null; 901 Selector selRight = null; 902 selLeft = selector(); 903 w(); 904 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 905 case IDENT: 906 case STAR: 907 case GREATER: 908 case LESS: 909 case PLUS: 910 case ELEMENT_OF: 911 case CROSSING:{ 912 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 913 case GREATER: 914 case LESS: 915 case PLUS: 916 case ELEMENT_OF: 917 case CROSSING:{ 918 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 919 case GREATER: 920 case LESS: 921 case PLUS:{ 922 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 923 case GREATER:{ 924 jj_consume_token(GREATER); 925 type = Selector.ChildOrParentSelectorType.CHILD; 926 break; 927 } 928 case LESS:{ 929 jj_consume_token(LESS); 930 type = Selector.ChildOrParentSelectorType.PARENT; 931 break; 932 } 933 case PLUS:{ 934 jj_consume_token(PLUS); 935 type = Selector.ChildOrParentSelectorType.SIBLING; 936 break; 937 } 938 default: 939 jj_la1[29] = jj_gen; 940 jj_consume_token(-1); 941 throw new ParseException(); 942 } 943 label_12: 944 while (true) { 945 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 946 case COLON: 947 case LSQUARE: 948 case EXCLAMATION: 949 case FULLSTOP:{ 950 ; 951 break; 952 } 953 default: 954 jj_la1[30] = jj_gen; 955 break label_12; 956 } 957 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 958 case LSQUARE:{ 959 c = condition(Context.LINK); 960 break; 961 } 962 case COLON: 963 case EXCLAMATION: 964 case FULLSTOP:{ 965 c = class_or_pseudoclass(Context.LINK); 966 break; 967 } 968 default: 969 jj_la1[31] = jj_gen; 970 jj_consume_token(-1); 971 throw new ParseException(); 972 } 973 conditions.add(c); 974 } 975 break; 976 } 977 case ELEMENT_OF:{ 978 jj_consume_token(ELEMENT_OF); 979 type = Selector.ChildOrParentSelectorType.ELEMENT_OF; 980 break; 981 } 982 case CROSSING:{ 983 jj_consume_token(CROSSING); 984 type = Selector.ChildOrParentSelectorType.CROSSING; 985 break; 986 } 987 default: 988 jj_la1[32] = jj_gen; 989 jj_consume_token(-1); 990 throw new ParseException(); 991 } 992 w(); 993 break; 994 } 995 default: 996 jj_la1[33] = jj_gen; 997 /* <GREATER> is optional for child selector */ type = Selector.ChildOrParentSelectorType.CHILD; 998 } 999 selLink = new LinkSelector(conditions); 1000 selRight = selector(); 1001 w(); 1002 break; 1003 } 1004 default: 1005 jj_la1[34] = jj_gen; 1006 ; 1007 } 1008 {if ("" != null) return selRight != null ? new ChildOrParentSelector(selLeft, selLink, selRight, type) : selLeft;} 1009 throw new Error("Missing return statement in function"); 1010 } 1011 1012 final public Selector selector() throws ParseException {Token base; 1013 Condition c; 1014 Pair<Integer, Integer> r = null; 1015 List<Condition> conditions = new ArrayList<Condition>(); 1016 Subpart sub = null; 1017 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1018 case IDENT:{ 1019 base = jj_consume_token(IDENT); 1020 break; 1021 } 1022 case STAR:{ 1023 base = jj_consume_token(STAR); 1024 break; 1025 } 1026 default: 1027 jj_la1[35] = jj_gen; 1028 jj_consume_token(-1); 1029 throw new ParseException(); 1030 } 1031 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1032 case PIPE_Z:{ 1033 r = zoom(); 1034 break; 1035 } 1036 default: 1037 jj_la1[36] = jj_gen; 1038 ; 1039 } 1040 label_13: 1041 while (true) { 1042 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1043 case COLON: 1044 case LSQUARE: 1045 case EXCLAMATION: 1046 case FULLSTOP:{ 1047 ; 1048 break; 1049 } 1050 default: 1051 jj_la1[37] = jj_gen; 1052 break label_13; 1053 } 1054 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1055 case LSQUARE:{ 1056 c = condition(Context.PRIMITIVE); 1057 break; 1058 } 1059 case COLON: 1060 case EXCLAMATION: 1061 case FULLSTOP:{ 1062 c = class_or_pseudoclass(Context.PRIMITIVE); 1063 break; 1064 } 1065 default: 1066 jj_la1[38] = jj_gen; 1067 jj_consume_token(-1); 1068 throw new ParseException(); 1069 } 1070 conditions.add(c); 1071 } 1072 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1073 case DCOLON:{ 1074 sub = subpart(); 1075 break; 1076 } 1077 default: 1078 jj_la1[39] = jj_gen; 1079 ; 1080 } 1081 {if ("" != null) return new GeneralSelector(base.image, r, conditions, sub);} 1082 throw new Error("Missing return statement in function"); 1083 } 1084 1085 final public Pair<Integer, Integer> zoom() throws ParseException {Integer min = 0; 1086 Integer max = Integer.MAX_VALUE; 1087 jj_consume_token(PIPE_Z); 1088 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1089 case MINUS:{ 1090 jj_consume_token(MINUS); 1091 max = uint(); 1092 break; 1093 } 1094 default: 1095 jj_la1[41] = jj_gen; 1096 if (jj_2_4(2)) { 1097 min = uint(); 1098 jj_consume_token(MINUS); 1099 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1100 case UINT:{ 1101 max = uint(); 1102 break; 1103 } 1104 default: 1105 jj_la1[40] = jj_gen; 1106 ; 1107 } 1108 } else { 1109 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1110 case UINT:{ 1111 min = uint(); 1112 max = min; 1113 break; 1114 } 1115 default: 1116 jj_la1[42] = jj_gen; 1117 jj_consume_token(-1); 1118 throw new ParseException(); 1119 } 1120 } 1121 } 1122 {if ("" != null) return new Pair<Integer, Integer>(min, max);} 1123 throw new Error("Missing return statement in function"); 1124 } 1125 1126 final public Condition condition(Context context) throws ParseException {Condition c; 1127 Expression e; 1128 jj_consume_token(LSQUARE); 1129 s(); 1130 if (jj_2_5(2147483647)) { 1131 c = simple_key_condition(context); 1132 s(); 1133 jj_consume_token(RSQUARE); 1134 {if ("" != null) return c;} 1135 } else if (jj_2_6(2147483647)) { 1136 c = simple_key_value_condition(context); 1137 s(); 1138 jj_consume_token(RSQUARE); 1139 {if ("" != null) return c;} 1140 } else { 1141 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1142 case SET: 1143 case IDENT: 1144 case UINT: 1145 case STRING: 1146 case LPAR: 1147 case UFLOAT: 1148 case HEXCOLOR: 1149 case EXCLAMATION: 1150 case PLUS: 1151 case MINUS:{ 1152 e = expression(); 1153 jj_consume_token(RSQUARE); 1154 {if ("" != null) return Condition.createExpressionCondition(e, context);} 1155 break; 1156 } 1157 default: 1158 jj_la1[43] = jj_gen; 1159 jj_consume_token(-1); 1160 throw new ParseException(); 1161 } 1162 } 1163 throw new Error("Missing return statement in function"); 1164 } 1165 1166 final public String tag_key() throws ParseException {String s, s2; 1167 Token t; 1168 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1169 case STRING:{ 1170 s = string(); 1171 {if ("" != null) return s;} 1172 break; 1173 } 1174 case SET: 1175 case IDENT:{ 1176 s = ident(); 1177 label_14: 1178 while (true) { 1179 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1180 case COLON:{ 1181 ; 1182 break; 1183 } 1184 default: 1185 jj_la1[44] = jj_gen; 1186 break label_14; 1187 } 1188 jj_consume_token(COLON); 1189 s2 = ident(); 1190 s += ':' + s2; 1191 } 1192 {if ("" != null) return s;} 1193 break; 1194 } 1195 default: 1196 jj_la1[45] = jj_gen; 1197 jj_consume_token(-1); 1198 throw new ParseException(); 1199 } 1200 throw new Error("Missing return statement in function"); 1201 } 1202 1203 final public Condition simple_key_condition(Context context) throws ParseException {boolean not = false; 1204 Condition.KeyMatchType matchType = null;; 1205 String key; 1206 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1207 case EXCLAMATION:{ 1208 jj_consume_token(EXCLAMATION); 1209 not = true; 1210 break; 1211 } 1212 default: 1213 jj_la1[46] = jj_gen; 1214 ; 1215 } 1216 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1217 case REGEX:{ 1218 matchType = Condition.KeyMatchType.REGEX; 1219 key = regex(); 1220 break; 1221 } 1222 case SET: 1223 case IDENT: 1224 case STRING:{ 1225 key = tag_key(); 1226 break; 1227 } 1228 default: 1229 jj_la1[47] = jj_gen; 1230 jj_consume_token(-1); 1231 throw new ParseException(); 1232 } 1233 if (jj_2_7(2)) { 1234 jj_consume_token(QUESTION); 1235 jj_consume_token(EXCLAMATION); 1236 matchType = Condition.KeyMatchType.FALSE; 1237 } else { 1238 ; 1239 } 1240 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1241 case QUESTION:{ 1242 jj_consume_token(QUESTION); 1243 matchType = Condition.KeyMatchType.TRUE; 1244 break; 1245 } 1246 default: 1247 jj_la1[48] = jj_gen; 1248 ; 1249 } 1250 {if ("" != null) return Condition.createKeyCondition(key, not, matchType, context);} 1251 throw new Error("Missing return statement in function"); 1252 } 1253 1254 final public Condition simple_key_value_condition(Context context) throws ParseException {String key; 1255 String val; 1256 float f; 1257 int i; 1258 Condition.Op op; 1259 boolean considerValAsKey = false; 1260 key = tag_key(); 1261 s(); 1262 if (jj_2_9(3)) { 1263 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1264 case EQUAL:{ 1265 jj_consume_token(EQUAL); 1266 jj_consume_token(TILDE); 1267 op=Condition.Op.REGEX; 1268 break; 1269 } 1270 case EXCLAMATION:{ 1271 jj_consume_token(EXCLAMATION); 1272 jj_consume_token(TILDE); 1273 op=Condition.Op.NREGEX; 1274 break; 1275 } 1276 default: 1277 jj_la1[49] = jj_gen; 1278 jj_consume_token(-1); 1279 throw new ParseException(); 1280 } 1281 s(); 1282 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1283 case STAR:{ 1284 jj_consume_token(STAR); 1285 considerValAsKey=true; 1286 break; 1287 } 1288 default: 1289 jj_la1[50] = jj_gen; 1290 ; 1291 } 1292 val = regex(); 1293 } else { 1294 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1295 case STAR: 1296 case EQUAL: 1297 case EXCLAMATION: 1298 case TILDE: 1299 case DOLLAR: 1300 case CARET:{ 1301 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1302 case EXCLAMATION:{ 1303 jj_consume_token(EXCLAMATION); 1304 jj_consume_token(EQUAL); 1305 op=Condition.Op.NEQ; 1306 break; 1307 } 1308 case EQUAL:{ 1309 jj_consume_token(EQUAL); 1310 op=Condition.Op.EQ; 1311 break; 1312 } 1313 case TILDE:{ 1314 jj_consume_token(TILDE); 1315 jj_consume_token(EQUAL); 1316 op=Condition.Op.ONE_OF; 1317 break; 1318 } 1319 case CARET:{ 1320 jj_consume_token(CARET); 1321 jj_consume_token(EQUAL); 1322 op=Condition.Op.BEGINS_WITH; 1323 break; 1324 } 1325 case DOLLAR:{ 1326 jj_consume_token(DOLLAR); 1327 jj_consume_token(EQUAL); 1328 op=Condition.Op.ENDS_WITH; 1329 break; 1330 } 1331 case STAR:{ 1332 jj_consume_token(STAR); 1333 jj_consume_token(EQUAL); 1334 op=Condition.Op.CONTAINS; 1335 break; 1336 } 1337 default: 1338 jj_la1[51] = jj_gen; 1339 jj_consume_token(-1); 1340 throw new ParseException(); 1341 } 1342 s(); 1343 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1344 case STAR:{ 1345 jj_consume_token(STAR); 1346 considerValAsKey=true; 1347 break; 1348 } 1349 default: 1350 jj_la1[52] = jj_gen; 1351 ; 1352 } 1353 if (jj_2_8(2)) { 1354 i = int_(); 1355 val=Integer.toString(i); 1356 } else { 1357 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1358 case UINT: 1359 case UFLOAT: 1360 case MINUS:{ 1361 f = float_(); 1362 val=Float.toString(f); 1363 break; 1364 } 1365 case SET: 1366 case IDENT: 1367 case STRING:{ 1368 val = string_or_ident(); 1369 break; 1370 } 1371 default: 1372 jj_la1[53] = jj_gen; 1373 jj_consume_token(-1); 1374 throw new ParseException(); 1375 } 1376 } 1377 break; 1378 } 1379 case GREATER_EQUAL: 1380 case LESS_EQUAL: 1381 case GREATER: 1382 case LESS:{ 1383 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1384 case GREATER_EQUAL:{ 1385 jj_consume_token(GREATER_EQUAL); 1386 op=Condition.Op.GREATER_OR_EQUAL; 1387 break; 1388 } 1389 case GREATER:{ 1390 jj_consume_token(GREATER); 1391 op=Condition.Op.GREATER; 1392 break; 1393 } 1394 case LESS_EQUAL:{ 1395 jj_consume_token(LESS_EQUAL); 1396 op=Condition.Op.LESS_OR_EQUAL; 1397 break; 1398 } 1399 case LESS:{ 1400 jj_consume_token(LESS); 1401 op=Condition.Op.LESS; 1402 break; 1403 } 1404 default: 1405 jj_la1[54] = jj_gen; 1406 jj_consume_token(-1); 1407 throw new ParseException(); 1408 } 1409 s(); 1410 f = float_(); 1411 val=Float.toString(f); 1412 break; 1413 } 1414 default: 1415 jj_la1[55] = jj_gen; 1416 jj_consume_token(-1); 1417 throw new ParseException(); 1418 } 1419 } 1420 {if ("" != null) return Condition.createKeyValueCondition(key, val, op, context, considerValAsKey);} 1421 throw new Error("Missing return statement in function"); 1422 } 1423 1424 final public Condition class_or_pseudoclass(Context context) throws ParseException {String s; 1425 boolean not = false; 1426 boolean pseudo; 1427 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1428 case EXCLAMATION:{ 1429 jj_consume_token(EXCLAMATION); 1430 not = true; 1431 break; 1432 } 1433 default: 1434 jj_la1[56] = jj_gen; 1435 ; 1436 } 1437 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1438 case FULLSTOP:{ 1439 jj_consume_token(FULLSTOP); 1440 pseudo = false; 1441 break; 1442 } 1443 case COLON:{ 1444 jj_consume_token(COLON); 1445 pseudo = true; 1446 break; 1447 } 1448 default: 1449 jj_la1[57] = jj_gen; 1450 jj_consume_token(-1); 1451 throw new ParseException(); 1452 } 1453 s = ident(); 1454 {if ("" != null) return pseudo 1455 ? Condition.createPseudoClassCondition(s, not, context) 1456 : Condition.createClassCondition(s, not, context);} 1457 throw new Error("Missing return statement in function"); 1458 } 1459 1460 final public Subpart subpart() throws ParseException {String s; 1461 Expression e; 1462 jj_consume_token(DCOLON); 1463 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1464 case SET: 1465 case IDENT:{ 1466 s = ident(); 1467 {if ("" != null) return new Subpart.StringSubpart(s);} 1468 break; 1469 } 1470 case STAR:{ 1471 jj_consume_token(STAR); 1472 {if ("" != null) return new Subpart.StringSubpart("*");} 1473 break; 1474 } 1475 case LPAR:{ 1476 jj_consume_token(LPAR); 1477 e = expression(); 1478 jj_consume_token(RPAR); 1479 {if ("" != null) return new Subpart.ExpressionSubpart(e);} 1480 break; 1481 } 1482 default: 1483 jj_la1[58] = jj_gen; 1484 jj_consume_token(-1); 1485 throw new ParseException(); 1486 } 1487 throw new Error("Missing return statement in function"); 1488 } 1489 1490 final public Declaration declaration() throws ParseException {List<Instruction> ins = new ArrayList<Instruction>(); 1491 Instruction i; 1492 Token key; 1493 Object val = null; 1494 jj_consume_token(LBRACE); 1495 w(); 1496 label_15: 1497 while (true) { 1498 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1499 case SET: 1500 case IDENT:{ 1501 ; 1502 break; 1503 } 1504 default: 1505 jj_la1[59] = jj_gen; 1506 break label_15; 1507 } 1508 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1509 case SET:{ 1510 jj_consume_token(SET); 1511 w(); 1512 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1513 case FULLSTOP:{ 1514 jj_consume_token(FULLSTOP); 1515 break; 1516 } 1517 default: 1518 jj_la1[60] = jj_gen; 1519 ; 1520 } 1521 // specification allows "set .class" to set "class". we also support "set class" 1522 key = jj_consume_token(IDENT); 1523 w(); 1524 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1525 case EQUAL:{ 1526 jj_consume_token(EQUAL); 1527 val = expression(); 1528 break; 1529 } 1530 default: 1531 jj_la1[61] = jj_gen; 1532 ; 1533 } 1534 ins.add(new Instruction.AssignmentInstruction(key.image, val == null ? true : val, true)); 1535 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1536 case RBRACE:{ 1537 jj_consume_token(RBRACE); 1538 {if ("" != null) return new Declaration(ins, declarationCounter++);} 1539 break; 1540 } 1541 case SEMICOLON:{ 1542 jj_consume_token(SEMICOLON); 1543 w(); 1544 break; 1545 } 1546 default: 1547 jj_la1[62] = jj_gen; 1548 jj_consume_token(-1); 1549 throw new ParseException(); 1550 } 1551 break; 1552 } 1553 case IDENT:{ 1554 key = jj_consume_token(IDENT); 1555 w(); 1556 jj_consume_token(COLON); 1557 w(); 1558 if (jj_2_10(2147483647)) { 1559 val = float_array(); 1560 ins.add(new Instruction.AssignmentInstruction(key.image, val, false)); 1561 w(); 1562 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1563 case RBRACE:{ 1564 jj_consume_token(RBRACE); 1565 {if ("" != null) return new Declaration(ins, declarationCounter++);} 1566 break; 1567 } 1568 case SEMICOLON:{ 1569 jj_consume_token(SEMICOLON); 1570 w(); 1571 break; 1572 } 1573 default: 1574 jj_la1[63] = jj_gen; 1575 jj_consume_token(-1); 1576 throw new ParseException(); 1577 } 1578 } else if (jj_2_11(2147483647)) { 1579 val = expression(); 1580 ins.add(new Instruction.AssignmentInstruction(key.image, val, false)); 1581 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1582 case RBRACE:{ 1583 jj_consume_token(RBRACE); 1584 {if ("" != null) return new Declaration(ins, declarationCounter++);} 1585 break; 1586 } 1587 case SEMICOLON:{ 1588 jj_consume_token(SEMICOLON); 1589 w(); 1590 break; 1591 } 1592 default: 1593 jj_la1[64] = jj_gen; 1594 jj_consume_token(-1); 1595 throw new ParseException(); 1596 } 1597 } else { 1598 val = readRaw(); 1599 w(); 1600 ins.add(new Instruction.AssignmentInstruction(key.image, val, false)); 1601 } 1602 break; 1603 } 1604 default: 1605 jj_la1[65] = jj_gen; 1606 jj_consume_token(-1); 1607 throw new ParseException(); 1608 } 1609 } 1610 jj_consume_token(RBRACE); 1611 {if ("" != null) return new Declaration(ins, declarationCounter++);} 1612 throw new Error("Missing return statement in function"); 1613 } 1614 1615 /** 1616 * General expression. 1617 * Separate production rule for each level of operator precedence (recursive descent). 1618 */ 1619 final public Expression expression() throws ParseException {Expression e; 1620 e = conditional_expression(); 1621 {if ("" != null) return e;} 1622 throw new Error("Missing return statement in function"); 1623 } 1624 1625 final public Expression conditional_expression() throws ParseException {Expression e, e1, e2; 1626 String op = null; 1627 e = or_expression(); 1628 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1629 case QUESTION:{ 1630 jj_consume_token(QUESTION); 1631 w(); 1632 e1 = conditional_expression(); 1633 jj_consume_token(COLON); 1634 w(); 1635 e2 = conditional_expression(); 1636 e = ExpressionFactory.createFunctionExpression("cond", Arrays.asList(e, e1, e2)); 1637 break; 1638 } 1639 default: 1640 jj_la1[66] = jj_gen; 1641 ; 1642 } 1643 {if ("" != null) return e;} 1644 throw new Error("Missing return statement in function"); 1645 } 1646 1647 final public Expression or_expression() throws ParseException {Expression e, e2; 1648 String op = null; 1649 e = and_expression(); 1650 label_16: 1651 while (true) { 1652 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1653 case PIPE:{ 1654 ; 1655 break; 1656 } 1657 default: 1658 jj_la1[67] = jj_gen; 1659 break label_16; 1660 } 1661 jj_consume_token(PIPE); 1662 jj_consume_token(PIPE); 1663 w(); 1664 e2 = and_expression(); 1665 e = ExpressionFactory.createFunctionExpression("or", Arrays.asList(e, e2)); 1666 } 1667 {if ("" != null) return e;} 1668 throw new Error("Missing return statement in function"); 1669 } 1670 1671 final public Expression and_expression() throws ParseException {Expression e, e2; 1672 String op = null; 1673 e = relational_expression(); 1674 label_17: 1675 while (true) { 1676 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1677 case AMPERSAND:{ 1678 ; 1679 break; 1680 } 1681 default: 1682 jj_la1[68] = jj_gen; 1683 break label_17; 1684 } 1685 jj_consume_token(AMPERSAND); 1686 jj_consume_token(AMPERSAND); 1687 w(); 1688 e2 = relational_expression(); 1689 e = ExpressionFactory.createFunctionExpression("and", Arrays.asList(e, e2)); 1690 } 1691 {if ("" != null) return e;} 1692 throw new Error("Missing return statement in function"); 1693 } 1694 1695 final public Expression relational_expression() throws ParseException {Expression e, e2; 1696 String op = null; 1697 e = additive_expression(); 1698 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1699 case GREATER_EQUAL: 1700 case LESS_EQUAL: 1701 case GREATER: 1702 case LESS: 1703 case EQUAL: 1704 case EXCLAMATION:{ 1705 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1706 case GREATER_EQUAL:{ 1707 jj_consume_token(GREATER_EQUAL); 1708 op = "greater_equal"; 1709 break; 1710 } 1711 case LESS_EQUAL:{ 1712 jj_consume_token(LESS_EQUAL); 1713 op = "less_equal"; 1714 break; 1715 } 1716 case GREATER:{ 1717 jj_consume_token(GREATER); 1718 op = "greater"; 1719 break; 1720 } 1721 case LESS:{ 1722 jj_consume_token(LESS); 1723 op = "less"; 1724 break; 1725 } 1726 case EQUAL:{ 1727 jj_consume_token(EQUAL); 1728 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1729 case EQUAL:{ 1730 jj_consume_token(EQUAL); 1731 break; 1732 } 1733 default: 1734 jj_la1[69] = jj_gen; 1735 ; 1736 } 1737 op = "equal"; 1738 break; 1739 } 1740 case EXCLAMATION:{ 1741 jj_consume_token(EXCLAMATION); 1742 jj_consume_token(EQUAL); 1743 op = "not_equal"; 1744 break; 1745 } 1746 default: 1747 jj_la1[70] = jj_gen; 1748 jj_consume_token(-1); 1749 throw new ParseException(); 1750 } 1751 w(); 1752 e2 = additive_expression(); 1753 e = ExpressionFactory.createFunctionExpression(op, Arrays.asList(e, e2)); 1754 break; 1755 } 1756 default: 1757 jj_la1[71] = jj_gen; 1758 ; 1759 } 1760 {if ("" != null) return e;} 1761 throw new Error("Missing return statement in function"); 1762 } 1763 1764 final public Expression additive_expression() throws ParseException {Expression e, e2; 1765 String op = null; 1766 e = multiplicative_expression(); 1767 label_18: 1768 while (true) { 1769 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1770 case PLUS: 1771 case MINUS:{ 1772 ; 1773 break; 1774 } 1775 default: 1776 jj_la1[72] = jj_gen; 1777 break label_18; 1778 } 1779 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1780 case PLUS:{ 1781 jj_consume_token(PLUS); 1782 op = "plus"; 1783 break; 1784 } 1785 case MINUS:{ 1786 jj_consume_token(MINUS); 1787 op = "minus"; 1788 break; 1789 } 1790 default: 1791 jj_la1[73] = jj_gen; 1792 jj_consume_token(-1); 1793 throw new ParseException(); 1794 } 1795 w(); 1796 e2 = multiplicative_expression(); 1797 e = ExpressionFactory.createFunctionExpression(op, Arrays.asList(e, e2)); 1798 } 1799 {if ("" != null) return e;} 1800 throw new Error("Missing return statement in function"); 1801 } 1802 1803 final public Expression multiplicative_expression() throws ParseException {Expression e, e2; 1804 String op = null; 1805 e = unary_expression(); 1806 label_19: 1807 while (true) { 1808 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1809 case STAR: 1810 case SLASH:{ 1811 ; 1812 break; 1813 } 1814 default: 1815 jj_la1[74] = jj_gen; 1816 break label_19; 1817 } 1818 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1819 case STAR:{ 1820 jj_consume_token(STAR); 1821 op = "times"; 1822 break; 1823 } 1824 case SLASH:{ 1825 jj_consume_token(SLASH); 1826 op = "divided_by"; 1827 break; 1828 } 1829 default: 1830 jj_la1[75] = jj_gen; 1831 jj_consume_token(-1); 1832 throw new ParseException(); 1833 } 1834 w(); 1835 e2 = unary_expression(); 1836 e = ExpressionFactory.createFunctionExpression(op, Arrays.asList(e, e2)); 1837 } 1838 {if ("" != null) return e;} 1839 throw new Error("Missing return statement in function"); 1840 } 1841 1842 final public Expression unary_expression() throws ParseException {Expression e; 1843 String op = null; 1844 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1845 case EXCLAMATION: 1846 case MINUS:{ 1847 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1848 case MINUS:{ 1849 jj_consume_token(MINUS); 1850 op = "minus"; 1851 w(); 1852 break; 1853 } 1854 case EXCLAMATION:{ 1855 jj_consume_token(EXCLAMATION); 1856 op = "not"; 1857 w(); 1858 break; 1859 } 1860 default: 1861 jj_la1[76] = jj_gen; 1862 jj_consume_token(-1); 1863 throw new ParseException(); 1864 } 1865 break; 1866 } 1867 default: 1868 jj_la1[77] = jj_gen; 1869 ; 1870 } 1871 e = primary(); 1872 w(); 1873 if (op == null) 1874 {if ("" != null) return e;} 1875 {if ("" != null) return ExpressionFactory.createFunctionExpression(op, Collections.singletonList(e));} 1876 throw new Error("Missing return statement in function"); 1877 } 1878 1879 final public Expression primary() throws ParseException {Expression nested; 1880 Expression fn; 1881 Object lit; 1882 if (jj_2_12(3)) { 1883 // both function and identifier start with an identifier (+ optional whitespace) 1884 fn = function(); 1885 {if ("" != null) return fn;} 1886 } else { 1887 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1888 case SET: 1889 case IDENT: 1890 case UINT: 1891 case STRING: 1892 case UFLOAT: 1893 case HEXCOLOR: 1894 case PLUS:{ 1895 lit = literal(); 1896 if (lit == null) 1897 {if ("" != null) return NullExpression.INSTANCE;} 1898 {if ("" != null) return new LiteralExpression(lit);} 1899 break; 1900 } 1901 case LPAR:{ 1902 jj_consume_token(LPAR); 1903 w(); 1904 nested = expression(); 1905 jj_consume_token(RPAR); 1906 {if ("" != null) return nested;} 1907 break; 1908 } 1909 default: 1910 jj_la1[78] = jj_gen; 1911 jj_consume_token(-1); 1912 throw new ParseException(); 1913 } 1914 } 1915 throw new Error("Missing return statement in function"); 1916 } 1917 1918 final public Expression function() throws ParseException {Expression arg; 1919 String name; 1920 List<Expression> args = new ArrayList<Expression>(); 1921 name = ident(); 1922 w(); 1923 jj_consume_token(LPAR); 1924 w(); 1925 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1926 case SET: 1927 case IDENT: 1928 case UINT: 1929 case STRING: 1930 case LPAR: 1931 case UFLOAT: 1932 case HEXCOLOR: 1933 case EXCLAMATION: 1934 case PLUS: 1935 case MINUS:{ 1936 arg = expression(); 1937 args.add(arg); 1938 label_20: 1939 while (true) { 1940 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1941 case COMMA:{ 1942 ; 1943 break; 1944 } 1945 default: 1946 jj_la1[79] = jj_gen; 1947 break label_20; 1948 } 1949 jj_consume_token(COMMA); 1950 w(); 1951 arg = expression(); 1952 args.add(arg); 1953 } 1954 break; 1955 } 1956 default: 1957 jj_la1[80] = jj_gen; 1958 ; 1959 } 1960 jj_consume_token(RPAR); 1961 {if ("" != null) return ExpressionFactory.createFunctionExpression(name, args);} 1962 throw new Error("Missing return statement in function"); 1963 } 1964 1965 final public Object literal() throws ParseException {String val, pref; 1966 Token t; 1967 Float f; 1968 if (jj_2_13(2)) { 1969 pref = ident(); 1970 t = jj_consume_token(HEXCOLOR); 1971 {if ("" != null) return Main.pref.getColor("mappaint." + (sheet == null ? "MapCSS" : sheet.title) + "." + pref, ColorHelper.html2color(t.image));} 1972 } else { 1973 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1974 case IDENT:{ 1975 t = jj_consume_token(IDENT); 1976 {if ("" != null) return new Keyword(t.image);} 1977 break; 1978 } 1979 case STRING:{ 1980 val = string(); 1981 {if ("" != null) return val;} 1982 break; 1983 } 1984 case PLUS:{ 1985 jj_consume_token(PLUS); 1986 f = ufloat(); 1987 {if ("" != null) return new Instruction.RelativeFloat(f);} 1988 break; 1989 } 1990 default: 1991 jj_la1[81] = jj_gen; 1992 if (jj_2_14(2)) { 1993 f = ufloat_unit(); 1994 {if ("" != null) return f;} 1995 } else { 1996 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 1997 case UINT: 1998 case UFLOAT:{ 1999 f = ufloat(); 2000 {if ("" != null) return f;} 2001 break; 2002 } 2003 case HEXCOLOR:{ 2004 t = jj_consume_token(HEXCOLOR); 2005 {if ("" != null) return ColorHelper.html2color(t.image);} 2006 break; 2007 } 2008 default: 2009 jj_la1[82] = jj_gen; 2010 jj_consume_token(-1); 2011 throw new ParseException(); 2012 } 2013 } 2014 } 2015 } 2016 throw new Error("Missing return statement in function"); 2017 } 2018 2019 /** 2020 * Number followed by a unit. 2021 * 2022 * Returns angles in radians and lengths in pixels. 2023 */ 2024 final public Float ufloat_unit() throws ParseException {float f; 2025 String u; 2026 f = ufloat(); 2027 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { 2028 case SET: 2029 case IDENT:{ 2030 u = ident(); 2031 break; 2032 } 2033 case DEG:{ 2034 jj_consume_token(DEG); 2035 u = "\u00b0"; 2036 break; 2037 } 2038 default: 2039 jj_la1[83] = jj_gen; 2040 jj_consume_token(-1); 2041 throw new ParseException(); 2042 } 2043 Double m = unit_factor(u); 2044 if (m == null) 2045 {if ("" != null) return null;} 2046 {if ("" != null) return (float) (f * m);} 2047 throw new Error("Missing return statement in function"); 2048 } 2049 2050 private Double unit_factor(String unit) throws ParseException {switch (unit) { 2051 case "deg": 2052 case "\u00b0": return Math.PI / 180; 2053 case "rad": return 1.; 2054 case "grad": return Math.PI / 200; 2055 case "turn": return 2 * Math.PI; 2056 case "px": return 1.; 2057 case "cm": return 96/2.54; 2058 case "mm": return 9.6/2.54; 2059 case "in": return 96.; 2060 case "q": return 2.4/2.54; 2061 case "pc": return 16.; 2062 case "pt": return 96./72; 2063 default: return null; 2064 } 2065 } 2066 2067 void error_skipto(int kind, MapCSSException me) throws ParseException {if (token.kind == EOF) 2068 throw new ParseException("Reached end of file while parsing"); 2069 2070 Exception e = null; 2071 ParseException pe = generateParseException(); 2072 2073 if (me != null) { 2074 final Token token = Utils.firstNonNull(pe.currentToken.next, pe.currentToken); 2075 me.setLine(token.beginLine); 2076 me.setColumn(token.beginColumn); 2077 e = me; 2078 } else { 2079 e = new ParseException(pe.getMessage()); // prevent memory leak 2080 } 2081 2082 Main.error("Skipping to the next rule, because of an error:"); 2083 Main.error(e); 2084 if (sheet != null) { 2085 sheet.logError(e); 2086 } 2087 Token t; 2088 do { 2089 t = getNextToken(); 2090 } while (t.kind != kind && t.kind != EOF); 2091 if (t.kind == EOF) 2092 throw new ParseException("Reached end of file while parsing"); 2093 } 2094 2095 /** 2096 * read everything to the next semicolon 2097 */ 2098 String readRaw() throws ParseException {Token t; 2099 StringBuilder s = new StringBuilder(); 2100 while (true) { 2101 t = getNextToken(); 2102 if ((t.kind == S || t.kind == STRING || t.kind == UNEXPECTED_CHAR) && 2103 t.image.contains("\n")) { 2104 ParseException e = new ParseException(String.format("Warning: end of line while reading an unquoted string at line %s column %s.", t.beginLine, t.beginColumn)); 2105 Main.error(e); 2106 if (sheet != null) { 2107 sheet.logError(e); 2108 } 2109 } 2110 if (t.kind == SEMICOLON || t.kind == EOF) 2111 break; 2112 s.append(t.image); 2113 } 2114 if (t.kind == EOF) 2115 throw new ParseException("Reached end of file while parsing"); 2116 return s.toString(); 2117 } 2118 2119 private boolean jj_2_1(int xla) 2120 { 2121 jj_la = xla; jj_lastpos = jj_scanpos = token; 2122 try { return !jj_3_1(); } 2123 catch(LookaheadSuccess ls) { return true; } 2124 finally { jj_save(0, xla); } 2125 } 2126 2127 private boolean jj_2_2(int xla) 2128 { 2129 jj_la = xla; jj_lastpos = jj_scanpos = token; 2130 try { return !jj_3_2(); } 2131 catch(LookaheadSuccess ls) { return true; } 2132 finally { jj_save(1, xla); } 2133 } 2134 2135 private boolean jj_2_3(int xla) 2136 { 2137 jj_la = xla; jj_lastpos = jj_scanpos = token; 2138 try { return !jj_3_3(); } 2139 catch(LookaheadSuccess ls) { return true; } 2140 finally { jj_save(2, xla); } 2141 } 2142 2143 private boolean jj_2_4(int xla) 2144 { 2145 jj_la = xla; jj_lastpos = jj_scanpos = token; 2146 try { return !jj_3_4(); } 2147 catch(LookaheadSuccess ls) { return true; } 2148 finally { jj_save(3, xla); } 2149 } 2150 2151 private boolean jj_2_5(int xla) 2152 { 2153 jj_la = xla; jj_lastpos = jj_scanpos = token; 2154 try { return !jj_3_5(); } 2155 catch(LookaheadSuccess ls) { return true; } 2156 finally { jj_save(4, xla); } 2157 } 2158 2159 private boolean jj_2_6(int xla) 2160 { 2161 jj_la = xla; jj_lastpos = jj_scanpos = token; 2162 try { return !jj_3_6(); } 2163 catch(LookaheadSuccess ls) { return true; } 2164 finally { jj_save(5, xla); } 2165 } 2166 2167 private boolean jj_2_7(int xla) 2168 { 2169 jj_la = xla; jj_lastpos = jj_scanpos = token; 2170 try { return !jj_3_7(); } 2171 catch(LookaheadSuccess ls) { return true; } 2172 finally { jj_save(6, xla); } 2173 } 2174 2175 private boolean jj_2_8(int xla) 2176 { 2177 jj_la = xla; jj_lastpos = jj_scanpos = token; 2178 try { return !jj_3_8(); } 2179 catch(LookaheadSuccess ls) { return true; } 2180 finally { jj_save(7, xla); } 2181 } 2182 2183 private boolean jj_2_9(int xla) 2184 { 2185 jj_la = xla; jj_lastpos = jj_scanpos = token; 2186 try { return !jj_3_9(); } 2187 catch(LookaheadSuccess ls) { return true; } 2188 finally { jj_save(8, xla); } 2189 } 2190 2191 private boolean jj_2_10(int xla) 2192 { 2193 jj_la = xla; jj_lastpos = jj_scanpos = token; 2194 try { return !jj_3_10(); } 2195 catch(LookaheadSuccess ls) { return true; } 2196 finally { jj_save(9, xla); } 2197 } 2198 2199 private boolean jj_2_11(int xla) 2200 { 2201 jj_la = xla; jj_lastpos = jj_scanpos = token; 2202 try { return !jj_3_11(); } 2203 catch(LookaheadSuccess ls) { return true; } 2204 finally { jj_save(10, xla); } 2205 } 2206 2207 private boolean jj_2_12(int xla) 2208 { 2209 jj_la = xla; jj_lastpos = jj_scanpos = token; 2210 try { return !jj_3_12(); } 2211 catch(LookaheadSuccess ls) { return true; } 2212 finally { jj_save(11, xla); } 2213 } 2214 2215 private boolean jj_2_13(int xla) 2216 { 2217 jj_la = xla; jj_lastpos = jj_scanpos = token; 2218 try { return !jj_3_13(); } 2219 catch(LookaheadSuccess ls) { return true; } 2220 finally { jj_save(12, xla); } 2221 } 2222 2223 private boolean jj_2_14(int xla) 2224 { 2225 jj_la = xla; jj_lastpos = jj_scanpos = token; 2226 try { return !jj_3_14(); } 2227 catch(LookaheadSuccess ls) { return true; } 2228 finally { jj_save(13, xla); } 2229 } 2230 2231 private boolean jj_3_9() 2232 { 2233 Token xsp; 2234 xsp = jj_scanpos; 2235 if (jj_3R_29()) { 2236 jj_scanpos = xsp; 2237 if (jj_3R_30()) return true; 2238 } 2239 if (jj_3R_26()) return true; 2240 xsp = jj_scanpos; 2241 if (jj_3R_31()) jj_scanpos = xsp; 2242 if (jj_3R_32()) return true; 2243 return false; 2244 } 2245 2246 private boolean jj_3R_78() 2247 { 2248 if (jj_scan_token(COMMENT_START)) return true; 2249 if (jj_scan_token(COMMENT_END)) return true; 2250 return false; 2251 } 2252 2253 private boolean jj_3R_58() 2254 { 2255 if (jj_scan_token(DEG)) return true; 2256 return false; 2257 } 2258 2259 private boolean jj_3R_105() 2260 { 2261 if (jj_scan_token(AMPERSAND)) return true; 2262 if (jj_scan_token(AMPERSAND)) return true; 2263 if (jj_3R_34()) return true; 2264 if (jj_3R_104()) return true; 2265 return false; 2266 } 2267 2268 private boolean jj_3R_46() 2269 { 2270 if (jj_scan_token(QUESTION)) return true; 2271 return false; 2272 } 2273 2274 private boolean jj_3R_27() 2275 { 2276 if (jj_3R_47()) return true; 2277 if (jj_3R_26()) return true; 2278 Token xsp; 2279 xsp = jj_scanpos; 2280 if (jj_3_9()) { 2281 jj_scanpos = xsp; 2282 if (jj_3R_48()) { 2283 jj_scanpos = xsp; 2284 if (jj_3R_49()) return true; 2285 } 2286 } 2287 return false; 2288 } 2289 2290 private boolean jj_3R_54() 2291 { 2292 Token xsp; 2293 xsp = jj_scanpos; 2294 if (jj_scan_token(28)) { 2295 jj_scanpos = xsp; 2296 if (jj_3R_78()) return true; 2297 } 2298 return false; 2299 } 2300 2301 private boolean jj_3R_34() 2302 { 2303 Token xsp; 2304 while (true) { 2305 xsp = jj_scanpos; 2306 if (jj_3R_54()) { jj_scanpos = xsp; break; } 2307 } 2308 return false; 2309 } 2310 2311 private boolean jj_3R_98() 2312 { 2313 if (jj_3R_104()) return true; 2314 Token xsp; 2315 while (true) { 2316 xsp = jj_scanpos; 2317 if (jj_3R_105()) { jj_scanpos = xsp; break; } 2318 } 2319 return false; 2320 } 2321 2322 private boolean jj_3R_57() 2323 { 2324 if (jj_3R_37()) return true; 2325 return false; 2326 } 2327 2328 private boolean jj_3R_23() 2329 { 2330 if (jj_scan_token(LPAR)) return true; 2331 if (jj_3R_22()) return true; 2332 if (jj_scan_token(IDENT)) return true; 2333 if (jj_3R_22()) return true; 2334 Token xsp; 2335 xsp = jj_scanpos; 2336 if (jj_3R_42()) jj_scanpos = xsp; 2337 if (jj_scan_token(RPAR)) return true; 2338 return false; 2339 } 2340 2341 private boolean jj_3R_26() 2342 { 2343 Token xsp; 2344 xsp = jj_scanpos; 2345 if (jj_scan_token(28)) jj_scanpos = xsp; 2346 return false; 2347 } 2348 2349 private boolean jj_3_7() 2350 { 2351 if (jj_scan_token(QUESTION)) return true; 2352 if (jj_scan_token(EXCLAMATION)) return true; 2353 return false; 2354 } 2355 2356 private boolean jj_3R_45() 2357 { 2358 if (jj_3R_47()) return true; 2359 return false; 2360 } 2361 2362 private boolean jj_3R_94() 2363 { 2364 if (jj_scan_token(COLON)) return true; 2365 if (jj_3R_37()) return true; 2366 return false; 2367 } 2368 2369 private boolean jj_3R_44() 2370 { 2371 if (jj_3R_32()) return true; 2372 return false; 2373 } 2374 2375 private boolean jj_3R_103() 2376 { 2377 if (jj_3R_93()) return true; 2378 return false; 2379 } 2380 2381 private boolean jj_3R_99() 2382 { 2383 if (jj_scan_token(PIPE)) return true; 2384 if (jj_scan_token(PIPE)) return true; 2385 if (jj_3R_34()) return true; 2386 if (jj_3R_98()) return true; 2387 return false; 2388 } 2389 2390 private boolean jj_3_3() 2391 { 2392 if (jj_3R_23()) return true; 2393 return false; 2394 } 2395 2396 private boolean jj_3R_43() 2397 { 2398 if (jj_scan_token(EXCLAMATION)) return true; 2399 return false; 2400 } 2401 2402 private boolean jj_3R_25() 2403 { 2404 Token xsp; 2405 xsp = jj_scanpos; 2406 if (jj_3R_43()) jj_scanpos = xsp; 2407 xsp = jj_scanpos; 2408 if (jj_3R_44()) { 2409 jj_scanpos = xsp; 2410 if (jj_3R_45()) return true; 2411 } 2412 xsp = jj_scanpos; 2413 if (jj_3_7()) jj_scanpos = xsp; 2414 xsp = jj_scanpos; 2415 if (jj_3R_46()) jj_scanpos = xsp; 2416 return false; 2417 } 2418 2419 private boolean jj_3R_38() 2420 { 2421 if (jj_3R_52()) return true; 2422 Token xsp; 2423 xsp = jj_scanpos; 2424 if (jj_3R_57()) { 2425 jj_scanpos = xsp; 2426 if (jj_3R_58()) return true; 2427 } 2428 return false; 2429 } 2430 2431 private boolean jj_3R_97() 2432 { 2433 if (jj_3R_52()) return true; 2434 return false; 2435 } 2436 2437 private boolean jj_3R_79() 2438 { 2439 if (jj_3R_98()) return true; 2440 Token xsp; 2441 while (true) { 2442 xsp = jj_scanpos; 2443 if (jj_3R_99()) { jj_scanpos = xsp; break; } 2444 } 2445 return false; 2446 } 2447 2448 private boolean jj_3R_32() 2449 { 2450 if (jj_scan_token(REGEX)) return true; 2451 return false; 2452 } 2453 2454 private boolean jj_3R_40() 2455 { 2456 if (jj_scan_token(LPAR)) return true; 2457 if (jj_3R_22()) return true; 2458 if (jj_3R_59()) return true; 2459 if (jj_scan_token(RPAR)) return true; 2460 return false; 2461 } 2462 2463 private boolean jj_3R_63() 2464 { 2465 if (jj_3R_37()) return true; 2466 Token xsp; 2467 while (true) { 2468 xsp = jj_scanpos; 2469 if (jj_3R_94()) { jj_scanpos = xsp; break; } 2470 } 2471 return false; 2472 } 2473 2474 private boolean jj_3R_39() 2475 { 2476 if (jj_3R_23()) return true; 2477 return false; 2478 } 2479 2480 private boolean jj_3R_47() 2481 { 2482 Token xsp; 2483 xsp = jj_scanpos; 2484 if (jj_3R_62()) { 2485 jj_scanpos = xsp; 2486 if (jj_3R_63()) return true; 2487 } 2488 return false; 2489 } 2490 2491 private boolean jj_3R_62() 2492 { 2493 if (jj_3R_93()) return true; 2494 return false; 2495 } 2496 2497 private boolean jj_3R_102() 2498 { 2499 if (jj_3R_37()) return true; 2500 return false; 2501 } 2502 2503 private boolean jj_3_6() 2504 { 2505 if (jj_3R_27()) return true; 2506 if (jj_3R_26()) return true; 2507 if (jj_scan_token(RSQUARE)) return true; 2508 return false; 2509 } 2510 2511 private boolean jj_3R_95() 2512 { 2513 Token xsp; 2514 xsp = jj_scanpos; 2515 if (jj_3R_102()) { 2516 jj_scanpos = xsp; 2517 if (jj_3R_103()) return true; 2518 } 2519 return false; 2520 } 2521 2522 private boolean jj_3R_92() 2523 { 2524 if (jj_scan_token(HEXCOLOR)) return true; 2525 return false; 2526 } 2527 2528 private boolean jj_3R_91() 2529 { 2530 if (jj_3R_52()) return true; 2531 return false; 2532 } 2533 2534 private boolean jj_3R_21() 2535 { 2536 Token xsp; 2537 xsp = jj_scanpos; 2538 if (jj_3R_39()) { 2539 jj_scanpos = xsp; 2540 if (jj_3R_40()) return true; 2541 } 2542 return false; 2543 } 2544 2545 private boolean jj_3_5() 2546 { 2547 if (jj_3R_25()) return true; 2548 if (jj_3R_26()) return true; 2549 if (jj_scan_token(RSQUARE)) return true; 2550 return false; 2551 } 2552 2553 private boolean jj_3_14() 2554 { 2555 if (jj_3R_38()) return true; 2556 return false; 2557 } 2558 2559 private boolean jj_3R_90() 2560 { 2561 if (jj_scan_token(PLUS)) return true; 2562 if (jj_3R_52()) return true; 2563 return false; 2564 } 2565 2566 private boolean jj_3R_80() 2567 { 2568 if (jj_scan_token(QUESTION)) return true; 2569 if (jj_3R_34()) return true; 2570 if (jj_3R_55()) return true; 2571 if (jj_scan_token(COLON)) return true; 2572 if (jj_3R_34()) return true; 2573 if (jj_3R_55()) return true; 2574 return false; 2575 } 2576 2577 private boolean jj_3_2() 2578 { 2579 if (jj_3R_21()) return true; 2580 if (jj_3R_22()) return true; 2581 if (jj_scan_token(PP_OR)) return true; 2582 return false; 2583 } 2584 2585 private boolean jj_3R_89() 2586 { 2587 if (jj_3R_93()) return true; 2588 return false; 2589 } 2590 2591 private boolean jj_3R_37() 2592 { 2593 Token xsp; 2594 xsp = jj_scanpos; 2595 if (jj_scan_token(12)) { 2596 jj_scanpos = xsp; 2597 if (jj_scan_token(11)) return true; 2598 } 2599 return false; 2600 } 2601 2602 private boolean jj_3R_51() 2603 { 2604 if (jj_3R_24()) return true; 2605 return false; 2606 } 2607 2608 private boolean jj_3R_88() 2609 { 2610 if (jj_scan_token(IDENT)) return true; 2611 return false; 2612 } 2613 2614 private boolean jj_3_1() 2615 { 2616 if (jj_3R_21()) return true; 2617 if (jj_3R_22()) return true; 2618 if (jj_scan_token(PP_AND)) return true; 2619 return false; 2620 } 2621 2622 private boolean jj_3R_101() 2623 { 2624 if (jj_scan_token(PP_OR)) return true; 2625 if (jj_3R_22()) return true; 2626 if (jj_3R_21()) return true; 2627 if (jj_3R_22()) return true; 2628 return false; 2629 } 2630 2631 private boolean jj_3R_84() 2632 { 2633 if (jj_3R_21()) return true; 2634 if (jj_3R_22()) return true; 2635 return false; 2636 } 2637 2638 private boolean jj_3R_55() 2639 { 2640 if (jj_3R_79()) return true; 2641 Token xsp; 2642 xsp = jj_scanpos; 2643 if (jj_3R_80()) jj_scanpos = xsp; 2644 return false; 2645 } 2646 2647 private boolean jj_3_13() 2648 { 2649 if (jj_3R_37()) return true; 2650 if (jj_scan_token(HEXCOLOR)) return true; 2651 return false; 2652 } 2653 2654 private boolean jj_3R_61() 2655 { 2656 Token xsp; 2657 xsp = jj_scanpos; 2658 if (jj_3_13()) { 2659 jj_scanpos = xsp; 2660 if (jj_3R_88()) { 2661 jj_scanpos = xsp; 2662 if (jj_3R_89()) { 2663 jj_scanpos = xsp; 2664 if (jj_3R_90()) { 2665 jj_scanpos = xsp; 2666 if (jj_3_14()) { 2667 jj_scanpos = xsp; 2668 if (jj_3R_91()) { 2669 jj_scanpos = xsp; 2670 if (jj_3R_92()) return true; 2671 } 2672 } 2673 } 2674 } 2675 } 2676 } 2677 return false; 2678 } 2679 2680 private boolean jj_3R_100() 2681 { 2682 if (jj_scan_token(PP_AND)) return true; 2683 if (jj_3R_22()) return true; 2684 if (jj_3R_21()) return true; 2685 if (jj_3R_22()) return true; 2686 return false; 2687 } 2688 2689 private boolean jj_3R_83() 2690 { 2691 if (jj_3R_21()) return true; 2692 if (jj_3R_22()) return true; 2693 Token xsp; 2694 if (jj_3R_101()) return true; 2695 while (true) { 2696 xsp = jj_scanpos; 2697 if (jj_3R_101()) { jj_scanpos = xsp; break; } 2698 } 2699 return false; 2700 } 2701 2702 private boolean jj_3R_93() 2703 { 2704 if (jj_scan_token(STRING)) return true; 2705 return false; 2706 } 2707 2708 private boolean jj_3R_82() 2709 { 2710 if (jj_3R_21()) return true; 2711 if (jj_3R_22()) return true; 2712 Token xsp; 2713 if (jj_3R_100()) return true; 2714 while (true) { 2715 xsp = jj_scanpos; 2716 if (jj_3R_100()) { jj_scanpos = xsp; break; } 2717 } 2718 return false; 2719 } 2720 2721 private boolean jj_3R_81() 2722 { 2723 if (jj_scan_token(PP_NOT)) return true; 2724 if (jj_3R_22()) return true; 2725 if (jj_3R_21()) return true; 2726 if (jj_3R_22()) return true; 2727 return false; 2728 } 2729 2730 private boolean jj_3R_35() 2731 { 2732 if (jj_3R_55()) return true; 2733 return false; 2734 } 2735 2736 private boolean jj_3R_128() 2737 { 2738 if (jj_scan_token(COMMA)) return true; 2739 if (jj_3R_34()) return true; 2740 if (jj_3R_35()) return true; 2741 return false; 2742 } 2743 2744 private boolean jj_3R_96() 2745 { 2746 if (jj_scan_token(MINUS)) return true; 2747 if (jj_3R_52()) return true; 2748 return false; 2749 } 2750 2751 private boolean jj_3R_77() 2752 { 2753 Token xsp; 2754 xsp = jj_scanpos; 2755 if (jj_3R_96()) { 2756 jj_scanpos = xsp; 2757 if (jj_3R_97()) return true; 2758 } 2759 return false; 2760 } 2761 2762 private boolean jj_3_11() 2763 { 2764 if (jj_3R_35()) return true; 2765 Token xsp; 2766 xsp = jj_scanpos; 2767 if (jj_scan_token(41)) { 2768 jj_scanpos = xsp; 2769 if (jj_scan_token(19)) return true; 2770 } 2771 return false; 2772 } 2773 2774 private boolean jj_3R_59() 2775 { 2776 Token xsp; 2777 xsp = jj_scanpos; 2778 if (jj_3R_81()) { 2779 jj_scanpos = xsp; 2780 if (jj_3R_82()) { 2781 jj_scanpos = xsp; 2782 if (jj_3R_83()) { 2783 jj_scanpos = xsp; 2784 if (jj_3R_84()) return true; 2785 } 2786 } 2787 } 2788 return false; 2789 } 2790 2791 private boolean jj_3_4() 2792 { 2793 if (jj_3R_24()) return true; 2794 if (jj_scan_token(MINUS)) return true; 2795 return false; 2796 } 2797 2798 private boolean jj_3R_56() 2799 { 2800 if (jj_3R_35()) return true; 2801 Token xsp; 2802 while (true) { 2803 xsp = jj_scanpos; 2804 if (jj_3R_128()) { jj_scanpos = xsp; break; } 2805 } 2806 return false; 2807 } 2808 2809 private boolean jj_3_10() 2810 { 2811 if (jj_3R_33()) return true; 2812 if (jj_3R_34()) return true; 2813 Token xsp; 2814 xsp = jj_scanpos; 2815 if (jj_scan_token(41)) { 2816 jj_scanpos = xsp; 2817 if (jj_scan_token(19)) return true; 2818 } 2819 return false; 2820 } 2821 2822 private boolean jj_3R_52() 2823 { 2824 Token xsp; 2825 xsp = jj_scanpos; 2826 if (jj_scan_token(25)) { 2827 jj_scanpos = xsp; 2828 if (jj_scan_token(13)) return true; 2829 } 2830 return false; 2831 } 2832 2833 private boolean jj_3R_36() 2834 { 2835 if (jj_3R_37()) return true; 2836 if (jj_3R_34()) return true; 2837 if (jj_scan_token(LPAR)) return true; 2838 if (jj_3R_34()) return true; 2839 Token xsp; 2840 xsp = jj_scanpos; 2841 if (jj_3R_56()) jj_scanpos = xsp; 2842 if (jj_scan_token(RPAR)) return true; 2843 return false; 2844 } 2845 2846 private boolean jj_3R_127() 2847 { 2848 if (jj_scan_token(LPAR)) return true; 2849 if (jj_3R_34()) return true; 2850 if (jj_3R_35()) return true; 2851 if (jj_scan_token(RPAR)) return true; 2852 return false; 2853 } 2854 2855 private boolean jj_3R_28() 2856 { 2857 Token xsp; 2858 xsp = jj_scanpos; 2859 if (jj_3R_50()) { 2860 jj_scanpos = xsp; 2861 if (jj_3R_51()) return true; 2862 } 2863 return false; 2864 } 2865 2866 private boolean jj_3R_50() 2867 { 2868 if (jj_scan_token(MINUS)) return true; 2869 if (jj_3R_24()) return true; 2870 return false; 2871 } 2872 2873 private boolean jj_3R_126() 2874 { 2875 if (jj_3R_61()) return true; 2876 return false; 2877 } 2878 2879 private boolean jj_3R_24() 2880 { 2881 if (jj_scan_token(UINT)) return true; 2882 return false; 2883 } 2884 2885 private boolean jj_3R_121() 2886 { 2887 Token xsp; 2888 xsp = jj_scanpos; 2889 if (jj_3_12()) { 2890 jj_scanpos = xsp; 2891 if (jj_3R_126()) { 2892 jj_scanpos = xsp; 2893 if (jj_3R_127()) return true; 2894 } 2895 } 2896 return false; 2897 } 2898 2899 private boolean jj_3_12() 2900 { 2901 if (jj_3R_36()) return true; 2902 return false; 2903 } 2904 2905 private boolean jj_3R_123() 2906 { 2907 if (jj_scan_token(SLASH)) return true; 2908 return false; 2909 } 2910 2911 private boolean jj_3R_125() 2912 { 2913 if (jj_scan_token(EXCLAMATION)) return true; 2914 if (jj_3R_34()) return true; 2915 return false; 2916 } 2917 2918 private boolean jj_3R_124() 2919 { 2920 if (jj_scan_token(MINUS)) return true; 2921 if (jj_3R_34()) return true; 2922 return false; 2923 } 2924 2925 private boolean jj_3R_120() 2926 { 2927 Token xsp; 2928 xsp = jj_scanpos; 2929 if (jj_3R_124()) { 2930 jj_scanpos = xsp; 2931 if (jj_3R_125()) return true; 2932 } 2933 return false; 2934 } 2935 2936 private boolean jj_3R_116() 2937 { 2938 Token xsp; 2939 xsp = jj_scanpos; 2940 if (jj_3R_120()) jj_scanpos = xsp; 2941 if (jj_3R_121()) return true; 2942 if (jj_3R_34()) return true; 2943 return false; 2944 } 2945 2946 private boolean jj_3R_119() 2947 { 2948 if (jj_scan_token(MINUS)) return true; 2949 return false; 2950 } 2951 2952 private boolean jj_3R_122() 2953 { 2954 if (jj_scan_token(STAR)) return true; 2955 return false; 2956 } 2957 2958 private boolean jj_3R_117() 2959 { 2960 Token xsp; 2961 xsp = jj_scanpos; 2962 if (jj_3R_122()) { 2963 jj_scanpos = xsp; 2964 if (jj_3R_123()) return true; 2965 } 2966 if (jj_3R_34()) return true; 2967 if (jj_3R_116()) return true; 2968 return false; 2969 } 2970 2971 private boolean jj_3R_41() 2972 { 2973 if (jj_3R_60()) return true; 2974 return false; 2975 } 2976 2977 private boolean jj_3R_22() 2978 { 2979 Token xsp; 2980 while (true) { 2981 xsp = jj_scanpos; 2982 if (jj_3R_41()) { jj_scanpos = xsp; break; } 2983 } 2984 return false; 2985 } 2986 2987 private boolean jj_3R_108() 2988 { 2989 if (jj_3R_116()) return true; 2990 Token xsp; 2991 while (true) { 2992 xsp = jj_scanpos; 2993 if (jj_3R_117()) { jj_scanpos = xsp; break; } 2994 } 2995 return false; 2996 } 2997 2998 private boolean jj_3R_87() 2999 { 3000 if (jj_scan_token(PP_COMMENT_START)) return true; 3001 if (jj_scan_token(PP_COMMENT_END)) return true; 3002 return false; 3003 } 3004 3005 private boolean jj_3R_86() 3006 { 3007 if (jj_scan_token(PP_WHITESPACE)) return true; 3008 return false; 3009 } 3010 3011 private boolean jj_3R_85() 3012 { 3013 if (jj_scan_token(PP_NEWLINECHAR)) return true; 3014 return false; 3015 } 3016 3017 private boolean jj_3R_60() 3018 { 3019 Token xsp; 3020 xsp = jj_scanpos; 3021 if (jj_3R_85()) { 3022 jj_scanpos = xsp; 3023 if (jj_3R_86()) { 3024 jj_scanpos = xsp; 3025 if (jj_3R_87()) return true; 3026 } 3027 } 3028 return false; 3029 } 3030 3031 private boolean jj_3R_76() 3032 { 3033 if (jj_scan_token(LESS)) return true; 3034 return false; 3035 } 3036 3037 private boolean jj_3R_75() 3038 { 3039 if (jj_scan_token(LESS_EQUAL)) return true; 3040 return false; 3041 } 3042 3043 private boolean jj_3R_74() 3044 { 3045 if (jj_scan_token(GREATER)) return true; 3046 return false; 3047 } 3048 3049 private boolean jj_3R_118() 3050 { 3051 if (jj_scan_token(PLUS)) return true; 3052 return false; 3053 } 3054 3055 private boolean jj_3R_72() 3056 { 3057 if (jj_3R_95()) return true; 3058 return false; 3059 } 3060 3061 private boolean jj_3R_73() 3062 { 3063 if (jj_scan_token(GREATER_EQUAL)) return true; 3064 return false; 3065 } 3066 3067 private boolean jj_3R_109() 3068 { 3069 Token xsp; 3070 xsp = jj_scanpos; 3071 if (jj_3R_118()) { 3072 jj_scanpos = xsp; 3073 if (jj_3R_119()) return true; 3074 } 3075 if (jj_3R_34()) return true; 3076 if (jj_3R_108()) return true; 3077 return false; 3078 } 3079 3080 private boolean jj_3R_71() 3081 { 3082 if (jj_3R_77()) return true; 3083 return false; 3084 } 3085 3086 private boolean jj_3R_106() 3087 { 3088 if (jj_3R_108()) return true; 3089 Token xsp; 3090 while (true) { 3091 xsp = jj_scanpos; 3092 if (jj_3R_109()) { jj_scanpos = xsp; break; } 3093 } 3094 return false; 3095 } 3096 3097 private boolean jj_3R_42() 3098 { 3099 if (jj_scan_token(COLON)) return true; 3100 if (jj_3R_22()) return true; 3101 if (jj_3R_61()) return true; 3102 return false; 3103 } 3104 3105 private boolean jj_3R_49() 3106 { 3107 Token xsp; 3108 xsp = jj_scanpos; 3109 if (jj_3R_73()) { 3110 jj_scanpos = xsp; 3111 if (jj_3R_74()) { 3112 jj_scanpos = xsp; 3113 if (jj_3R_75()) { 3114 jj_scanpos = xsp; 3115 if (jj_3R_76()) return true; 3116 } 3117 } 3118 } 3119 if (jj_3R_26()) return true; 3120 if (jj_3R_77()) return true; 3121 return false; 3122 } 3123 3124 private boolean jj_3_8() 3125 { 3126 if (jj_3R_28()) return true; 3127 return false; 3128 } 3129 3130 private boolean jj_3R_69() 3131 { 3132 if (jj_scan_token(STAR)) return true; 3133 if (jj_scan_token(EQUAL)) return true; 3134 return false; 3135 } 3136 3137 private boolean jj_3R_68() 3138 { 3139 if (jj_scan_token(DOLLAR)) return true; 3140 if (jj_scan_token(EQUAL)) return true; 3141 return false; 3142 } 3143 3144 private boolean jj_3R_70() 3145 { 3146 if (jj_scan_token(STAR)) return true; 3147 return false; 3148 } 3149 3150 private boolean jj_3R_115() 3151 { 3152 if (jj_scan_token(EXCLAMATION)) return true; 3153 if (jj_scan_token(EQUAL)) return true; 3154 return false; 3155 } 3156 3157 private boolean jj_3R_67() 3158 { 3159 if (jj_scan_token(CARET)) return true; 3160 if (jj_scan_token(EQUAL)) return true; 3161 return false; 3162 } 3163 3164 private boolean jj_3R_114() 3165 { 3166 if (jj_scan_token(EQUAL)) return true; 3167 Token xsp; 3168 xsp = jj_scanpos; 3169 if (jj_scan_token(37)) jj_scanpos = xsp; 3170 return false; 3171 } 3172 3173 private boolean jj_3R_66() 3174 { 3175 if (jj_scan_token(TILDE)) return true; 3176 if (jj_scan_token(EQUAL)) return true; 3177 return false; 3178 } 3179 3180 private boolean jj_3R_113() 3181 { 3182 if (jj_scan_token(LESS)) return true; 3183 return false; 3184 } 3185 3186 private boolean jj_3R_65() 3187 { 3188 if (jj_scan_token(EQUAL)) return true; 3189 return false; 3190 } 3191 3192 private boolean jj_3R_112() 3193 { 3194 if (jj_scan_token(GREATER)) return true; 3195 return false; 3196 } 3197 3198 private boolean jj_3R_64() 3199 { 3200 if (jj_scan_token(EXCLAMATION)) return true; 3201 if (jj_scan_token(EQUAL)) return true; 3202 return false; 3203 } 3204 3205 private boolean jj_3R_111() 3206 { 3207 if (jj_scan_token(LESS_EQUAL)) return true; 3208 return false; 3209 } 3210 3211 private boolean jj_3R_110() 3212 { 3213 if (jj_scan_token(GREATER_EQUAL)) return true; 3214 return false; 3215 } 3216 3217 private boolean jj_3R_30() 3218 { 3219 if (jj_scan_token(EXCLAMATION)) return true; 3220 if (jj_scan_token(TILDE)) return true; 3221 return false; 3222 } 3223 3224 private boolean jj_3R_107() 3225 { 3226 Token xsp; 3227 xsp = jj_scanpos; 3228 if (jj_3R_110()) { 3229 jj_scanpos = xsp; 3230 if (jj_3R_111()) { 3231 jj_scanpos = xsp; 3232 if (jj_3R_112()) { 3233 jj_scanpos = xsp; 3234 if (jj_3R_113()) { 3235 jj_scanpos = xsp; 3236 if (jj_3R_114()) { 3237 jj_scanpos = xsp; 3238 if (jj_3R_115()) return true; 3239 } 3240 } 3241 } 3242 } 3243 } 3244 if (jj_3R_34()) return true; 3245 if (jj_3R_106()) return true; 3246 return false; 3247 } 3248 3249 private boolean jj_3R_29() 3250 { 3251 if (jj_scan_token(EQUAL)) return true; 3252 if (jj_scan_token(TILDE)) return true; 3253 return false; 3254 } 3255 3256 private boolean jj_3R_48() 3257 { 3258 Token xsp; 3259 xsp = jj_scanpos; 3260 if (jj_3R_64()) { 3261 jj_scanpos = xsp; 3262 if (jj_3R_65()) { 3263 jj_scanpos = xsp; 3264 if (jj_3R_66()) { 3265 jj_scanpos = xsp; 3266 if (jj_3R_67()) { 3267 jj_scanpos = xsp; 3268 if (jj_3R_68()) { 3269 jj_scanpos = xsp; 3270 if (jj_3R_69()) return true; 3271 } 3272 } 3273 } 3274 } 3275 } 3276 if (jj_3R_26()) return true; 3277 xsp = jj_scanpos; 3278 if (jj_3R_70()) jj_scanpos = xsp; 3279 xsp = jj_scanpos; 3280 if (jj_3_8()) { 3281 jj_scanpos = xsp; 3282 if (jj_3R_71()) { 3283 jj_scanpos = xsp; 3284 if (jj_3R_72()) return true; 3285 } 3286 } 3287 return false; 3288 } 3289 3290 private boolean jj_3R_31() 3291 { 3292 if (jj_scan_token(STAR)) return true; 3293 return false; 3294 } 3295 3296 private boolean jj_3R_53() 3297 { 3298 if (jj_scan_token(COMMA)) return true; 3299 if (jj_3R_26()) return true; 3300 if (jj_3R_52()) return true; 3301 return false; 3302 } 3303 3304 private boolean jj_3R_104() 3305 { 3306 if (jj_3R_106()) return true; 3307 Token xsp; 3308 xsp = jj_scanpos; 3309 if (jj_3R_107()) jj_scanpos = xsp; 3310 return false; 3311 } 3312 3313 private boolean jj_3R_33() 3314 { 3315 if (jj_3R_52()) return true; 3316 Token xsp; 3317 if (jj_3R_53()) return true; 3318 while (true) { 3319 xsp = jj_scanpos; 3320 if (jj_3R_53()) { jj_scanpos = xsp; break; } 3321 } 3322 return false; 3323 } 3324 3325 /** Generated Token Manager. */ 3326 public MapCSSParserTokenManager token_source; 3327 SimpleCharStream jj_input_stream; 3328 /** Current token. */ 3329 public Token token; 3330 /** Next token. */ 3331 public Token jj_nt; 3332 private int jj_ntk; 3333 private Token jj_scanpos, jj_lastpos; 3334 private int jj_la; 3335 private int jj_gen; 3336 final private int[] jj_la1 = new int[84]; 3337 static private int[] jj_la1_0; 3338 static private int[] jj_la1_1; 3339 static { 3340 jj_la1_init_0(); 3341 jj_la1_init_1(); 3342 } 3343 private static void jj_la1_init_0() { 3344 jj_la1_0 = new int[] {0x1f671fe,0x1f2700e,0x1f671fe,0x2,0x4,0x8,0x100000,0x100000,0x800000,0x400000,0x101008,0x8,0x2,0x2,0x101000,0x800000,0x1c0,0x1c0,0x2000,0x2002000,0x2002000,0x1800,0x5800,0x10000000,0x10000000,0x10000000,0x400000,0x20001000,0x400000,0x0,0x80800000,0x80800000,0x0,0x0,0x20001000,0x20001000,0x0,0x80800000,0x80800000,0x0,0x2000,0x0,0x2000,0xa107800,0x800000,0x5800,0x0,0x25800,0x0,0x0,0x20000000,0x20000000,0x20000000,0x2007800,0x0,0x20000000,0x0,0x800000,0x20101800,0x1800,0x0,0x0,0x80000,0x80000,0x80000,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x60000000,0x0,0x0,0xa107800,0x400000,0xa107800,0x5000,0xa002000,0x1800,}; 3345 } 3346 private static void jj_la1_init_1() { 3347 jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x0,0x2000,0x0,0x0,0x0,0x400000,0x400000,0x0,0x0,0x0,0x1018,0x40040,0x40040,0x301018,0x301018,0x301018,0x0,0x800,0x40040,0x40040,0x100,0x0,0x2000,0x0,0x3040,0x0,0x0,0x40,0x0,0x8000,0x60,0x0,0x300e0,0x0,0x2000,0x1e,0x300fe,0x40,0x40000,0x0,0x0,0x40000,0x20,0x200,0x200,0x200,0x0,0x8000,0x400,0x4000,0x20,0x7e,0x7e,0x3000,0x3000,0x0,0x0,0x2040,0x2040,0x1000,0x0,0x3040,0x1000,0x0,0x80000,}; 3348 } 3349 final private JJCalls[] jj_2_rtns = new JJCalls[14]; 3350 private boolean jj_rescan = false; 3351 private int jj_gc = 0; 3352 3353 /** Constructor with InputStream. */ 3354 public MapCSSParser(java.io.InputStream stream) { 3355 this(stream, null); 3356 } 3357 /** Constructor with InputStream and supplied encoding */ 3358 public MapCSSParser(java.io.InputStream stream, String encoding) { 3359 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 3360 token_source = new MapCSSParserTokenManager(jj_input_stream); 3361 token = new Token(); 3362 jj_ntk = -1; 3363 jj_gen = 0; 3364 for (int i = 0; i < 84; i++) jj_la1[i] = -1; 3365 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 3366 } 3367 3368 /** Reinitialise. */ 3369 public void ReInit(java.io.InputStream stream) { 3370 ReInit(stream, null); 3371 } 3372 /** Reinitialise. */ 3373 public void ReInit(java.io.InputStream stream, String encoding) { 3374 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 3375 token_source.ReInit(jj_input_stream); 3376 token = new Token(); 3377 jj_ntk = -1; 3378 jj_gen = 0; 3379 for (int i = 0; i < 84; i++) jj_la1[i] = -1; 3380 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 3381 } 3382 3383 /** Constructor. */ 3384 public MapCSSParser(java.io.Reader stream) { 3385 jj_input_stream = new SimpleCharStream(stream, 1, 1); 3386 token_source = new MapCSSParserTokenManager(jj_input_stream); 3387 token = new Token(); 3388 jj_ntk = -1; 3389 jj_gen = 0; 3390 for (int i = 0; i < 84; i++) jj_la1[i] = -1; 3391 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 3392 } 3393 3394 /** Reinitialise. */ 3395 public void ReInit(java.io.Reader stream) { 3396 if (jj_input_stream == null) { 3397 jj_input_stream = new SimpleCharStream(stream, 1, 1); 3398 } else { 3399 jj_input_stream.ReInit(stream, 1, 1); 3400 } 3401 if (token_source == null) { 3402 token_source = new MapCSSParserTokenManager(jj_input_stream); 3403 } 3404 3405 token_source.ReInit(jj_input_stream); 3406 token = new Token(); 3407 jj_ntk = -1; 3408 jj_gen = 0; 3409 for (int i = 0; i < 84; i++) jj_la1[i] = -1; 3410 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 3411 } 3412 3413 /** Constructor with generated Token Manager. */ 3414 public MapCSSParser(MapCSSParserTokenManager tm) { 3415 token_source = tm; 3416 token = new Token(); 3417 jj_ntk = -1; 3418 jj_gen = 0; 3419 for (int i = 0; i < 84; i++) jj_la1[i] = -1; 3420 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 3421 } 3422 3423 /** Reinitialise. */ 3424 public void ReInit(MapCSSParserTokenManager tm) { 3425 token_source = tm; 3426 token = new Token(); 3427 jj_ntk = -1; 3428 jj_gen = 0; 3429 for (int i = 0; i < 84; i++) jj_la1[i] = -1; 3430 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 3431 } 3432 3433 private Token jj_consume_token(int kind) throws ParseException { 3434 Token oldToken; 3435 if ((oldToken = token).next != null) token = token.next; 3436 else token = token.next = token_source.getNextToken(); 3437 jj_ntk = -1; 3438 if (token.kind == kind) { 3439 jj_gen++; 3440 if (++jj_gc > 100) { 3441 jj_gc = 0; 3442 for (int i = 0; i < jj_2_rtns.length; i++) { 3443 JJCalls c = jj_2_rtns[i]; 3444 while (c != null) { 3445 if (c.gen < jj_gen) c.first = null; 3446 c = c.next; 3447 } 3448 } 3449 } 3450 return token; 3451 } 3452 token = oldToken; 3453 jj_kind = kind; 3454 throw generateParseException(); 3455 } 3456 3457 @SuppressWarnings("serial") 3458 static private final class LookaheadSuccess extends java.lang.Error { } 3459 final private LookaheadSuccess jj_ls = new LookaheadSuccess(); 3460 private boolean jj_scan_token(int kind) { 3461 if (jj_scanpos == jj_lastpos) { 3462 jj_la--; 3463 if (jj_scanpos.next == null) { 3464 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); 3465 } else { 3466 jj_lastpos = jj_scanpos = jj_scanpos.next; 3467 } 3468 } else { 3469 jj_scanpos = jj_scanpos.next; 3470 } 3471 if (jj_rescan) { 3472 int i = 0; Token tok = token; 3473 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } 3474 if (tok != null) jj_add_error_token(kind, i); 3475 } 3476 if (jj_scanpos.kind != kind) return true; 3477 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; 3478 return false; 3479 } 3480 3481 3482 /** Get the next Token. */ 3483 final public Token getNextToken() { 3484 if (token.next != null) token = token.next; 3485 else token = token.next = token_source.getNextToken(); 3486 jj_ntk = -1; 3487 jj_gen++; 3488 return token; 3489 } 3490 3491 /** Get the specific Token. */ 3492 final public Token getToken(int index) { 3493 Token t = token; 3494 for (int i = 0; i < index; i++) { 3495 if (t.next != null) t = t.next; 3496 else t = t.next = token_source.getNextToken(); 3497 } 3498 return t; 3499 } 3500 3501 private int jj_ntk_f() { 3502 if ((jj_nt=token.next) == null) 3503 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 3504 else 3505 return (jj_ntk = jj_nt.kind); 3506 } 3507 3508 private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>(); 3509 private int[] jj_expentry; 3510 private int jj_kind = -1; 3511 private int[] jj_lasttokens = new int[100]; 3512 private int jj_endpos; 3513 3514 private void jj_add_error_token(int kind, int pos) { 3515 if (pos >= 100) { 3516 return; 3517 } 3518 3519 if (pos == jj_endpos + 1) { 3520 jj_lasttokens[jj_endpos++] = kind; 3521 } else if (jj_endpos != 0) { 3522 jj_expentry = new int[jj_endpos]; 3523 3524 for (int i = 0; i < jj_endpos; i++) { 3525 jj_expentry[i] = jj_lasttokens[i]; 3526 } 3527 3528 for (int[] oldentry : jj_expentries) { 3529 if (oldentry.length == jj_expentry.length) { 3530 boolean isMatched = true; 3531 3532 for (int i = 0; i < jj_expentry.length; i++) { 3533 if (oldentry[i] != jj_expentry[i]) { 3534 isMatched = false; 3535 break; 3536 } 3537 3538 } 3539 if (isMatched) { 3540 jj_expentries.add(jj_expentry); 3541 break; 3542 } 3543 } 3544 } 3545 3546 if (pos != 0) { 3547 jj_lasttokens[(jj_endpos = pos) - 1] = kind; 3548 } 3549 } 3550 } 3551 3552 /** Generate ParseException. */ 3553 public ParseException generateParseException() { 3554 jj_expentries.clear(); 3555 boolean[] la1tokens = new boolean[58]; 3556 if (jj_kind >= 0) { 3557 la1tokens[jj_kind] = true; 3558 jj_kind = -1; 3559 } 3560 for (int i = 0; i < 84; i++) { 3561 if (jj_la1[i] == jj_gen) { 3562 for (int j = 0; j < 32; j++) { 3563 if ((jj_la1_0[i] & (1<<j)) != 0) { 3564 la1tokens[j] = true; 3565 } 3566 if ((jj_la1_1[i] & (1<<j)) != 0) { 3567 la1tokens[32+j] = true; 3568 } 3569 } 3570 } 3571 } 3572 for (int i = 0; i < 58; i++) { 3573 if (la1tokens[i]) { 3574 jj_expentry = new int[1]; 3575 jj_expentry[0] = i; 3576 jj_expentries.add(jj_expentry); 3577 } 3578 } 3579 jj_endpos = 0; 3580 jj_rescan_token(); 3581 jj_add_error_token(0, 0); 3582 int[][] exptokseq = new int[jj_expentries.size()][]; 3583 for (int i = 0; i < jj_expentries.size(); i++) { 3584 exptokseq[i] = jj_expentries.get(i); 3585 } 3586 return new ParseException(token, exptokseq, tokenImage); 3587 } 3588 3589 /** Enable tracing. */ 3590 final public void enable_tracing() { 3591 } 3592 3593 /** Disable tracing. */ 3594 final public void disable_tracing() { 3595 } 3596 3597 private void jj_rescan_token() { 3598 jj_rescan = true; 3599 for (int i = 0; i < 14; i++) { 3600 try { 3601 JJCalls p = jj_2_rtns[i]; 3602 3603 do { 3604 if (p.gen > jj_gen) { 3605 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; 3606 switch (i) { 3607 case 0: jj_3_1(); break; 3608 case 1: jj_3_2(); break; 3609 case 2: jj_3_3(); break; 3610 case 3: jj_3_4(); break; 3611 case 4: jj_3_5(); break; 3612 case 5: jj_3_6(); break; 3613 case 6: jj_3_7(); break; 3614 case 7: jj_3_8(); break; 3615 case 8: jj_3_9(); break; 3616 case 9: jj_3_10(); break; 3617 case 10: jj_3_11(); break; 3618 case 11: jj_3_12(); break; 3619 case 12: jj_3_13(); break; 3620 case 13: jj_3_14(); break; 3621 } 3622 } 3623 p = p.next; 3624 } while (p != null); 3625 3626 } catch(LookaheadSuccess ls) { } 3627 } 3628 jj_rescan = false; 3629 } 3630 3631 private void jj_save(int index, int xla) { 3632 JJCalls p = jj_2_rtns[index]; 3633 while (p.gen > jj_gen) { 3634 if (p.next == null) { p = p.next = new JJCalls(); break; } 3635 p = p.next; 3636 } 3637 3638 p.gen = jj_gen + xla - jj_la; 3639 p.first = token; 3640 p.arg = xla; 3641 } 3642 3643 static final class JJCalls { 3644 int gen; 3645 Token first; 3646 int arg; 3647 JJCalls next; 3648 } 3649 3650 } -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserConstants.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserConstants.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserConstants.java new file mode 100644 index 0000000..34b1b33
- + 1 /* Generated By:JavaCC: Do not edit this line. MapCSSParserConstants.java */ 2 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 3 4 5 /** 6 * Token literal values and constants. 7 * Generated by org.javacc.parser.OtherFilesGen#start() 8 */ 9 public interface MapCSSParserConstants { 10 11 /** End of File. */ 12 int EOF = 0; 13 /** RegularExpression Id. */ 14 int PP_AND = 1; 15 /** RegularExpression Id. */ 16 int PP_OR = 2; 17 /** RegularExpression Id. */ 18 int PP_NOT = 3; 19 /** RegularExpression Id. */ 20 int PP_SUPPORTS = 4; 21 /** RegularExpression Id. */ 22 int PP_MEDIA = 5; 23 /** RegularExpression Id. */ 24 int PP_NEWLINECHAR = 6; 25 /** RegularExpression Id. */ 26 int PP_WHITESPACE = 7; 27 /** RegularExpression Id. */ 28 int PP_COMMENT_START = 8; 29 /** RegularExpression Id. */ 30 int PP_COMMENT_END = 9; 31 /** RegularExpression Id. */ 32 int SET = 11; 33 /** RegularExpression Id. */ 34 int IDENT = 12; 35 /** RegularExpression Id. */ 36 int UINT = 13; 37 /** RegularExpression Id. */ 38 int STRING = 14; 39 /** RegularExpression Id. */ 40 int PREDEFINED = 15; 41 /** RegularExpression Id. */ 42 int REGEX_CHAR_WITHOUT_STAR = 16; 43 /** RegularExpression Id. */ 44 int REGEX = 17; 45 /** RegularExpression Id. */ 46 int LBRACE = 18; 47 /** RegularExpression Id. */ 48 int RBRACE = 19; 49 /** RegularExpression Id. */ 50 int LPAR = 20; 51 /** RegularExpression Id. */ 52 int RPAR = 21; 53 /** RegularExpression Id. */ 54 int COMMA = 22; 55 /** RegularExpression Id. */ 56 int COLON = 23; 57 /** RegularExpression Id. */ 58 int PP_SOMETHING_ELSE = 24; 59 /** RegularExpression Id. */ 60 int UFLOAT = 25; 61 /** RegularExpression Id. */ 62 int H = 26; 63 /** RegularExpression Id. */ 64 int HEXCOLOR = 27; 65 /** RegularExpression Id. */ 66 int S = 28; 67 /** RegularExpression Id. */ 68 int STAR = 29; 69 /** RegularExpression Id. */ 70 int SLASH = 30; 71 /** RegularExpression Id. */ 72 int LSQUARE = 31; 73 /** RegularExpression Id. */ 74 int RSQUARE = 32; 75 /** RegularExpression Id. */ 76 int GREATER_EQUAL = 33; 77 /** RegularExpression Id. */ 78 int LESS_EQUAL = 34; 79 /** RegularExpression Id. */ 80 int GREATER = 35; 81 /** RegularExpression Id. */ 82 int LESS = 36; 83 /** RegularExpression Id. */ 84 int EQUAL = 37; 85 /** RegularExpression Id. */ 86 int EXCLAMATION = 38; 87 /** RegularExpression Id. */ 88 int TILDE = 39; 89 /** RegularExpression Id. */ 90 int DCOLON = 40; 91 /** RegularExpression Id. */ 92 int SEMICOLON = 41; 93 /** RegularExpression Id. */ 94 int PIPE = 42; 95 /** RegularExpression Id. */ 96 int PIPE_Z = 43; 97 /** RegularExpression Id. */ 98 int PLUS = 44; 99 /** RegularExpression Id. */ 100 int MINUS = 45; 101 /** RegularExpression Id. */ 102 int AMPERSAND = 46; 103 /** RegularExpression Id. */ 104 int QUESTION = 47; 105 /** RegularExpression Id. */ 106 int DOLLAR = 48; 107 /** RegularExpression Id. */ 108 int CARET = 49; 109 /** RegularExpression Id. */ 110 int FULLSTOP = 50; 111 /** RegularExpression Id. */ 112 int DEG = 51; 113 /** RegularExpression Id. */ 114 int ELEMENT_OF = 52; 115 /** RegularExpression Id. */ 116 int CROSSING = 53; 117 /** RegularExpression Id. */ 118 int COMMENT_START = 54; 119 /** RegularExpression Id. */ 120 int UNEXPECTED_CHAR = 55; 121 /** RegularExpression Id. */ 122 int COMMENT_END = 56; 123 124 /** Lexical state. */ 125 int PREPROCESSOR = 0; 126 /** Lexical state. */ 127 int PP_COMMENT = 1; 128 /** Lexical state. */ 129 int DEFAULT = 2; 130 /** Lexical state. */ 131 int COMMENT = 3; 132 133 /** Literal token values. */ 134 String[] tokenImage = { 135 "<EOF>", 136 "\"and\"", 137 "\"or\"", 138 "\"not\"", 139 "\"@supports\"", 140 "\"@media\"", 141 "<PP_NEWLINECHAR>", 142 "<PP_WHITESPACE>", 143 "\"/*\"", 144 "\"*/\"", 145 "<token of kind 10>", 146 "\"set\"", 147 "<IDENT>", 148 "<UINT>", 149 "<STRING>", 150 "<PREDEFINED>", 151 "<REGEX_CHAR_WITHOUT_STAR>", 152 "<REGEX>", 153 "\"{\"", 154 "\"}\"", 155 "\"(\"", 156 "\")\"", 157 "\",\"", 158 "\":\"", 159 "<PP_SOMETHING_ELSE>", 160 "<UFLOAT>", 161 "<H>", 162 "<HEXCOLOR>", 163 "<S>", 164 "\"*\"", 165 "\"/\"", 166 "\"[\"", 167 "\"]\"", 168 "\">=\"", 169 "\"<=\"", 170 "\">\"", 171 "\"<\"", 172 "\"=\"", 173 "\"!\"", 174 "\"~\"", 175 "\"::\"", 176 "\";\"", 177 "\"|\"", 178 "\"|z\"", 179 "\"+\"", 180 "\"-\"", 181 "\"&\"", 182 "\"?\"", 183 "\"$\"", 184 "\"^\"", 185 "\".\"", 186 "\"\\u00b0\"", 187 "\"\\u2208\"", 188 "\"\\u29c9\"", 189 "\"/*\"", 190 "<UNEXPECTED_CHAR>", 191 "\"*/\"", 192 "<token of kind 57>", 193 }; 194 195 } -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserTokenManager.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserTokenManager.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/MapCSSParserTokenManager.java new file mode 100644 index 0000000..8ff2c29
- + 1 /* MapCSSParserTokenManager.java */ 2 /* Generated By:JavaCC: Do not edit this line. MapCSSParserTokenManager.java */ 3 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 4 import java.io.InputStream; 5 import java.io.Reader; 6 import java.util.ArrayList; 7 import java.util.Arrays; 8 import java.util.Collections; 9 import java.util.List; 10 import java.util.Locale; 11 import org.openstreetmap.josm.Main; 12 import org.openstreetmap.josm.gui.mappaint.Keyword; 13 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition; 14 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Context; 15 import org.openstreetmap.josm.gui.mappaint.mapcss.Expression; 16 import org.openstreetmap.josm.gui.mappaint.mapcss.ExpressionFactory; 17 import org.openstreetmap.josm.gui.mappaint.mapcss.ExpressionFactory.NullExpression; 18 import org.openstreetmap.josm.gui.mappaint.mapcss.Instruction; 19 import org.openstreetmap.josm.gui.mappaint.mapcss.LiteralExpression; 20 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSException; 21 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule; 22 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule.Declaration; 23 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource; 24 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector; 25 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector; 26 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector; 27 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.LinkSelector; 28 import org.openstreetmap.josm.gui.mappaint.mapcss.Subpart; 29 import org.openstreetmap.josm.tools.ColorHelper; 30 import org.openstreetmap.josm.tools.Pair; 31 import org.openstreetmap.josm.tools.Utils; 32 33 /** Token Manager. */ 34 @SuppressWarnings("unused")public class MapCSSParserTokenManager implements MapCSSParserConstants { 35 36 /** Debug output. */ 37 public java.io.PrintStream debugStream = System.out; 38 /** Set debug output. */ 39 public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } 40 private int jjStopAtPos(int pos, int kind) 41 { 42 jjmatchedKind = kind; 43 jjmatchedPos = pos; 44 return pos + 1; 45 } 46 private int jjMoveStringLiteralDfa0_2(){ 47 switch(curChar) 48 { 49 case 33: 50 jjmatchedKind = 38; 51 return jjMoveNfa_2(0, 0); 52 case 36: 53 jjmatchedKind = 48; 54 return jjMoveNfa_2(0, 0); 55 case 38: 56 jjmatchedKind = 46; 57 return jjMoveNfa_2(0, 0); 58 case 40: 59 jjmatchedKind = 20; 60 return jjMoveNfa_2(0, 0); 61 case 41: 62 jjmatchedKind = 21; 63 return jjMoveNfa_2(0, 0); 64 case 42: 65 jjmatchedKind = 29; 66 return jjMoveNfa_2(0, 0); 67 case 43: 68 jjmatchedKind = 44; 69 return jjMoveNfa_2(0, 0); 70 case 44: 71 jjmatchedKind = 22; 72 return jjMoveNfa_2(0, 0); 73 case 45: 74 jjmatchedKind = 45; 75 return jjMoveNfa_2(0, 0); 76 case 46: 77 jjmatchedKind = 50; 78 return jjMoveNfa_2(0, 0); 79 case 47: 80 jjmatchedKind = 30; 81 return jjMoveStringLiteralDfa1_2(0x40000000000000L); 82 case 58: 83 jjmatchedKind = 23; 84 return jjMoveStringLiteralDfa1_2(0x10000000000L); 85 case 59: 86 jjmatchedKind = 41; 87 return jjMoveNfa_2(0, 0); 88 case 60: 89 jjmatchedKind = 36; 90 return jjMoveStringLiteralDfa1_2(0x400000000L); 91 case 61: 92 jjmatchedKind = 37; 93 return jjMoveNfa_2(0, 0); 94 case 62: 95 jjmatchedKind = 35; 96 return jjMoveStringLiteralDfa1_2(0x200000000L); 97 case 63: 98 jjmatchedKind = 47; 99 return jjMoveNfa_2(0, 0); 100 case 83: 101 return jjMoveStringLiteralDfa1_2(0x800L); 102 case 91: 103 jjmatchedKind = 31; 104 return jjMoveNfa_2(0, 0); 105 case 93: 106 jjmatchedKind = 32; 107 return jjMoveNfa_2(0, 0); 108 case 94: 109 jjmatchedKind = 49; 110 return jjMoveNfa_2(0, 0); 111 case 115: 112 return jjMoveStringLiteralDfa1_2(0x800L); 113 case 123: 114 jjmatchedKind = 18; 115 return jjMoveNfa_2(0, 0); 116 case 124: 117 jjmatchedKind = 42; 118 return jjMoveStringLiteralDfa1_2(0x80000000000L); 119 case 125: 120 jjmatchedKind = 19; 121 return jjMoveNfa_2(0, 0); 122 case 126: 123 jjmatchedKind = 39; 124 return jjMoveNfa_2(0, 0); 125 case 176: 126 jjmatchedKind = 51; 127 return jjMoveNfa_2(0, 0); 128 case 8712: 129 jjmatchedKind = 52; 130 return jjMoveNfa_2(0, 0); 131 case 10697: 132 jjmatchedKind = 53; 133 return jjMoveNfa_2(0, 0); 134 default : 135 return jjMoveNfa_2(0, 0); 136 } 137 } 138 private int jjMoveStringLiteralDfa1_2(long active0){ 139 try { curChar = input_stream.readChar(); } 140 catch(java.io.IOException e) { 141 return jjMoveNfa_2(0, 0); 142 } 143 switch(curChar) 144 { 145 case 42: 146 if ((active0 & 0x40000000000000L) != 0L) 147 { 148 jjmatchedKind = 54; 149 jjmatchedPos = 1; 150 } 151 break; 152 case 58: 153 if ((active0 & 0x10000000000L) != 0L) 154 { 155 jjmatchedKind = 40; 156 jjmatchedPos = 1; 157 } 158 break; 159 case 61: 160 if ((active0 & 0x200000000L) != 0L) 161 { 162 jjmatchedKind = 33; 163 jjmatchedPos = 1; 164 } 165 else if ((active0 & 0x400000000L) != 0L) 166 { 167 jjmatchedKind = 34; 168 jjmatchedPos = 1; 169 } 170 break; 171 case 69: 172 return jjMoveStringLiteralDfa2_2(active0, 0x800L); 173 case 101: 174 return jjMoveStringLiteralDfa2_2(active0, 0x800L); 175 case 122: 176 if ((active0 & 0x80000000000L) != 0L) 177 { 178 jjmatchedKind = 43; 179 jjmatchedPos = 1; 180 } 181 break; 182 default : 183 break; 184 } 185 return jjMoveNfa_2(0, 1); 186 } 187 private int jjMoveStringLiteralDfa2_2(long old0, long active0){ 188 if (((active0 &= old0)) == 0L) 189 return jjMoveNfa_2(0, 1); 190 try { curChar = input_stream.readChar(); } 191 catch(java.io.IOException e) { 192 return jjMoveNfa_2(0, 1); 193 } 194 switch(curChar) 195 { 196 case 84: 197 if ((active0 & 0x800L) != 0L) 198 { 199 jjmatchedKind = 11; 200 jjmatchedPos = 2; 201 } 202 break; 203 case 116: 204 if ((active0 & 0x800L) != 0L) 205 { 206 jjmatchedKind = 11; 207 jjmatchedPos = 2; 208 } 209 break; 210 default : 211 break; 212 } 213 return jjMoveNfa_2(0, 2); 214 } 215 static final long[] jjbitVec0 = { 216 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL 217 }; 218 static final long[] jjbitVec2 = { 219 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL 220 }; 221 private int jjMoveNfa_2(int startState, int curPos) 222 { 223 int strKind = jjmatchedKind; 224 int strPos = jjmatchedPos; 225 int seenUpto; 226 input_stream.backup(seenUpto = curPos + 1); 227 try { curChar = input_stream.readChar(); } 228 catch(java.io.IOException e) { throw new Error("Internal Error"); } 229 curPos = 0; 230 int startsAt = 0; 231 jjnewStateCnt = 53; 232 int i = 1; 233 jjstateSet[0] = startState; 234 int kind = 0x7fffffff; 235 for (;;) 236 { 237 if (++jjround == 0x7fffffff) 238 ReInitRounds(); 239 if (curChar < 64) 240 { 241 long l = 1L << curChar; 242 do 243 { 244 switch(jjstateSet[--i]) 245 { 246 case 0: 247 if ((0x3ff000000000000L & l) != 0L) 248 { 249 if (kind > 25) 250 kind = 25; 251 { jjCheckNAddTwoStates(35, 36); } 252 } 253 else if ((0x100003600L & l) != 0L) 254 { 255 if (kind > 28) 256 kind = 28; 257 { jjCheckNAdd(52); } 258 } 259 else if (curChar == 35) 260 jjstateSet[jjnewStateCnt++] = 39; 261 else if (curChar == 47) 262 { jjAddStates(0, 2); } 263 else if (curChar == 34) 264 { jjCheckNAddStates(3, 5); } 265 if ((0x3fe000000000000L & l) != 0L) 266 { 267 if (kind > 13) 268 kind = 13; 269 { jjCheckNAdd(3); } 270 } 271 break; 272 case 1: 273 if ((0x3ff200000000000L & l) == 0L) 274 break; 275 if (kind > 12) 276 kind = 12; 277 jjstateSet[jjnewStateCnt++] = 1; 278 break; 279 case 2: 280 if ((0x3fe000000000000L & l) == 0L) 281 break; 282 if (kind > 13) 283 kind = 13; 284 { jjCheckNAdd(3); } 285 break; 286 case 3: 287 if ((0x3ff000000000000L & l) == 0L) 288 break; 289 if (kind > 13) 290 kind = 13; 291 { jjCheckNAdd(3); } 292 break; 293 case 4: 294 case 8: 295 if (curChar == 34) 296 { jjCheckNAddStates(3, 5); } 297 break; 298 case 5: 299 if ((0xfffffffb00000000L & l) != 0L) 300 { jjCheckNAddStates(3, 5); } 301 break; 302 case 6: 303 if (curChar == 34 && kind > 14) 304 kind = 14; 305 break; 306 case 10: 307 if (curChar == 47) 308 { jjAddStates(0, 2); } 309 break; 310 case 11: 311 if ((0xffff7bff00000000L & l) != 0L) 312 { jjCheckNAddStates(6, 9); } 313 break; 314 case 12: 315 if ((0xffff7fff00000000L & l) != 0L) 316 { jjCheckNAddStates(6, 9); } 317 break; 318 case 15: 319 if (curChar == 47 && kind > 17) 320 kind = 17; 321 break; 322 case 17: 323 if (curChar == 36) 324 { jjCheckNAddStates(6, 9); } 325 break; 326 case 19: 327 if (curChar == 42) 328 { jjCheckNAddStates(6, 9); } 329 break; 330 case 20: 331 if (curChar == 63) 332 { jjCheckNAddStates(6, 9); } 333 break; 334 case 23: 335 if (curChar == 41) 336 { jjCheckNAddStates(6, 9); } 337 break; 338 case 24: 339 if (curChar == 40) 340 { jjCheckNAddStates(6, 9); } 341 break; 342 case 25: 343 if (curChar == 34) 344 { jjCheckNAddStates(6, 9); } 345 break; 346 case 26: 347 if (curChar == 39) 348 { jjCheckNAddStates(6, 9); } 349 break; 350 case 27: 351 if (curChar == 46) 352 { jjCheckNAddStates(6, 9); } 353 break; 354 case 28: 355 if (curChar == 43) 356 { jjCheckNAddStates(6, 9); } 357 break; 358 case 32: 359 if (curChar == 47) 360 { jjCheckNAddStates(6, 9); } 361 break; 362 case 35: 363 if ((0x3ff000000000000L & l) == 0L) 364 break; 365 if (kind > 25) 366 kind = 25; 367 { jjCheckNAddTwoStates(35, 36); } 368 break; 369 case 36: 370 if (curChar == 46) 371 { jjCheckNAdd(37); } 372 break; 373 case 37: 374 if ((0x3ff000000000000L & l) == 0L) 375 break; 376 if (kind > 25) 377 kind = 25; 378 { jjCheckNAdd(37); } 379 break; 380 case 38: 381 if (curChar == 35) 382 jjstateSet[jjnewStateCnt++] = 39; 383 break; 384 case 39: 385 if ((0x3ff000000000000L & l) != 0L) 386 { jjAddStates(10, 12); } 387 break; 388 case 40: 389 if ((0x3ff000000000000L & l) != 0L) 390 jjstateSet[jjnewStateCnt++] = 41; 391 break; 392 case 41: 393 if ((0x3ff000000000000L & l) != 0L) 394 jjstateSet[jjnewStateCnt++] = 42; 395 break; 396 case 42: 397 if ((0x3ff000000000000L & l) != 0L) 398 jjstateSet[jjnewStateCnt++] = 43; 399 break; 400 case 43: 401 if ((0x3ff000000000000L & l) != 0L) 402 jjstateSet[jjnewStateCnt++] = 44; 403 break; 404 case 44: 405 if ((0x3ff000000000000L & l) != 0L) 406 jjstateSet[jjnewStateCnt++] = 45; 407 break; 408 case 45: 409 case 50: 410 case 51: 411 if ((0x3ff000000000000L & l) != 0L) 412 { jjCheckNAdd(46); } 413 break; 414 case 46: 415 if ((0x3ff000000000000L & l) != 0L && kind > 27) 416 kind = 27; 417 break; 418 case 47: 419 if ((0x3ff000000000000L & l) != 0L) 420 jjstateSet[jjnewStateCnt++] = 48; 421 break; 422 case 48: 423 if ((0x3ff000000000000L & l) != 0L) 424 jjstateSet[jjnewStateCnt++] = 49; 425 break; 426 case 49: 427 if ((0x3ff000000000000L & l) != 0L) 428 jjstateSet[jjnewStateCnt++] = 50; 429 break; 430 case 52: 431 if ((0x100003600L & l) == 0L) 432 break; 433 if (kind > 28) 434 kind = 28; 435 { jjCheckNAdd(52); } 436 break; 437 default : break; 438 } 439 } while(i != startsAt); 440 } 441 else if (curChar < 128) 442 { 443 long l = 1L << (curChar & 077); 444 do 445 { 446 switch(jjstateSet[--i]) 447 { 448 case 0: 449 case 1: 450 if ((0x7fffffe87fffffeL & l) == 0L) 451 break; 452 if (kind > 12) 453 kind = 12; 454 { jjCheckNAdd(1); } 455 break; 456 case 5: 457 if ((0x7fffffffefffffffL & l) != 0L) 458 { jjCheckNAddStates(3, 5); } 459 break; 460 case 7: 461 if (curChar == 92) 462 { jjAddStates(13, 14); } 463 break; 464 case 9: 465 if (curChar == 92) 466 { jjCheckNAddStates(3, 5); } 467 break; 468 case 11: 469 case 12: 470 if ((0x7fffffffefffffffL & l) != 0L) 471 { jjCheckNAddStates(6, 9); } 472 break; 473 case 13: 474 case 33: 475 if (curChar == 92) 476 { jjCheckNAdd(14); } 477 break; 478 case 14: 479 if ((0x488001404880096L & l) != 0L) 480 { jjCheckNAddStates(6, 9); } 481 break; 482 case 16: 483 if (curChar == 92) 484 { jjCheckNAddStates(15, 30); } 485 break; 486 case 18: 487 if (curChar == 94) 488 { jjCheckNAddStates(6, 9); } 489 break; 490 case 21: 491 if (curChar == 125) 492 { jjCheckNAddStates(6, 9); } 493 break; 494 case 22: 495 if (curChar == 123) 496 { jjCheckNAddStates(6, 9); } 497 break; 498 case 29: 499 if (curChar == 93) 500 { jjCheckNAddStates(6, 9); } 501 break; 502 case 30: 503 if (curChar == 91) 504 { jjCheckNAddStates(6, 9); } 505 break; 506 case 31: 507 if (curChar == 92) 508 { jjCheckNAddStates(6, 9); } 509 break; 510 case 34: 511 if (curChar == 92) 512 { jjCheckNAddStates(31, 46); } 513 break; 514 case 39: 515 if ((0x7e0000007eL & l) != 0L) 516 { jjAddStates(10, 12); } 517 break; 518 case 40: 519 if ((0x7e0000007eL & l) != 0L) 520 jjstateSet[jjnewStateCnt++] = 41; 521 break; 522 case 41: 523 if ((0x7e0000007eL & l) != 0L) 524 jjstateSet[jjnewStateCnt++] = 42; 525 break; 526 case 42: 527 if ((0x7e0000007eL & l) != 0L) 528 jjstateSet[jjnewStateCnt++] = 43; 529 break; 530 case 43: 531 if ((0x7e0000007eL & l) != 0L) 532 jjstateSet[jjnewStateCnt++] = 44; 533 break; 534 case 44: 535 if ((0x7e0000007eL & l) != 0L) 536 jjstateSet[jjnewStateCnt++] = 45; 537 break; 538 case 45: 539 case 50: 540 case 51: 541 if ((0x7e0000007eL & l) != 0L) 542 { jjCheckNAdd(46); } 543 break; 544 case 46: 545 if ((0x7e0000007eL & l) != 0L && kind > 27) 546 kind = 27; 547 break; 548 case 47: 549 if ((0x7e0000007eL & l) != 0L) 550 jjstateSet[jjnewStateCnt++] = 48; 551 break; 552 case 48: 553 if ((0x7e0000007eL & l) != 0L) 554 jjstateSet[jjnewStateCnt++] = 49; 555 break; 556 case 49: 557 if ((0x7e0000007eL & l) != 0L) 558 jjstateSet[jjnewStateCnt++] = 50; 559 break; 560 default : break; 561 } 562 } while(i != startsAt); 563 } 564 else 565 { 566 int hiByte = (curChar >> 8); 567 int i1 = hiByte >> 6; 568 long l1 = 1L << (hiByte & 077); 569 int i2 = (curChar & 0xff) >> 6; 570 long l2 = 1L << (curChar & 077); 571 do 572 { 573 switch(jjstateSet[--i]) 574 { 575 case 5: 576 if (jjCanMove_0(hiByte, i1, i2, l1, l2)) 577 { jjAddStates(3, 5); } 578 break; 579 case 11: 580 case 12: 581 if (jjCanMove_0(hiByte, i1, i2, l1, l2)) 582 { jjCheckNAddStates(6, 9); } 583 break; 584 default : if (i1 == 0 || l1 == 0 || i2 == 0 || l2 == 0) break; else break; 585 } 586 } while(i != startsAt); 587 } 588 if (kind != 0x7fffffff) 589 { 590 jjmatchedKind = kind; 591 jjmatchedPos = curPos; 592 kind = 0x7fffffff; 593 } 594 ++curPos; 595 if ((i = jjnewStateCnt) == (startsAt = 53 - (jjnewStateCnt = startsAt))) 596 break; 597 try { curChar = input_stream.readChar(); } 598 catch(java.io.IOException e) { break; } 599 } 600 if (jjmatchedPos > strPos) 601 return curPos; 602 603 int toRet = Math.max(curPos, seenUpto); 604 605 if (curPos < toRet) 606 for (i = toRet - Math.min(curPos, seenUpto); i-- > 0; ) 607 try { curChar = input_stream.readChar(); } 608 catch(java.io.IOException e) { throw new Error("Internal Error : Please send a bug report."); } 609 610 if (jjmatchedPos < strPos) 611 { 612 jjmatchedKind = strKind; 613 jjmatchedPos = strPos; 614 } 615 else if (jjmatchedPos == strPos && jjmatchedKind > strKind) 616 jjmatchedKind = strKind; 617 618 return toRet; 619 } 620 private final int jjStopStringLiteralDfa_0(int pos, long active0){ 621 switch (pos) 622 { 623 case 0: 624 if ((active0 & 0xeL) != 0L) 625 { 626 jjmatchedKind = 12; 627 return 3; 628 } 629 if ((active0 & 0x100L) != 0L) 630 return 13; 631 return -1; 632 case 1: 633 if ((active0 & 0x4L) != 0L) 634 return 3; 635 if ((active0 & 0xaL) != 0L) 636 { 637 jjmatchedKind = 12; 638 jjmatchedPos = 1; 639 return 3; 640 } 641 return -1; 642 case 2: 643 if ((active0 & 0xaL) != 0L) 644 return 3; 645 return -1; 646 default : 647 return -1; 648 } 649 } 650 private final int jjStartNfa_0(int pos, long active0){ 651 return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1); 652 } 653 private int jjMoveStringLiteralDfa0_0(){ 654 switch(curChar) 655 { 656 case 40: 657 return jjStopAtPos(0, 20); 658 case 41: 659 return jjStopAtPos(0, 21); 660 case 44: 661 return jjStopAtPos(0, 22); 662 case 47: 663 return jjMoveStringLiteralDfa1_0(0x100L); 664 case 58: 665 return jjStopAtPos(0, 23); 666 case 64: 667 return jjMoveStringLiteralDfa1_0(0x30L); 668 case 97: 669 return jjMoveStringLiteralDfa1_0(0x2L); 670 case 110: 671 return jjMoveStringLiteralDfa1_0(0x8L); 672 case 111: 673 return jjMoveStringLiteralDfa1_0(0x4L); 674 case 123: 675 return jjStopAtPos(0, 18); 676 case 125: 677 return jjStopAtPos(0, 19); 678 default : 679 return jjMoveNfa_0(0, 0); 680 } 681 } 682 private int jjMoveStringLiteralDfa1_0(long active0){ 683 try { curChar = input_stream.readChar(); } 684 catch(java.io.IOException e) { 685 jjStopStringLiteralDfa_0(0, active0); 686 return 1; 687 } 688 switch(curChar) 689 { 690 case 42: 691 if ((active0 & 0x100L) != 0L) 692 return jjStopAtPos(1, 8); 693 break; 694 case 109: 695 return jjMoveStringLiteralDfa2_0(active0, 0x20L); 696 case 110: 697 return jjMoveStringLiteralDfa2_0(active0, 0x2L); 698 case 111: 699 return jjMoveStringLiteralDfa2_0(active0, 0x8L); 700 case 114: 701 if ((active0 & 0x4L) != 0L) 702 return jjStartNfaWithStates_0(1, 2, 3); 703 break; 704 case 115: 705 return jjMoveStringLiteralDfa2_0(active0, 0x10L); 706 default : 707 break; 708 } 709 return jjStartNfa_0(0, active0); 710 } 711 private int jjMoveStringLiteralDfa2_0(long old0, long active0){ 712 if (((active0 &= old0)) == 0L) 713 return jjStartNfa_0(0, old0); 714 try { curChar = input_stream.readChar(); } 715 catch(java.io.IOException e) { 716 jjStopStringLiteralDfa_0(1, active0); 717 return 2; 718 } 719 switch(curChar) 720 { 721 case 100: 722 if ((active0 & 0x2L) != 0L) 723 return jjStartNfaWithStates_0(2, 1, 3); 724 break; 725 case 101: 726 return jjMoveStringLiteralDfa3_0(active0, 0x20L); 727 case 116: 728 if ((active0 & 0x8L) != 0L) 729 return jjStartNfaWithStates_0(2, 3, 3); 730 break; 731 case 117: 732 return jjMoveStringLiteralDfa3_0(active0, 0x10L); 733 default : 734 break; 735 } 736 return jjStartNfa_0(1, active0); 737 } 738 private int jjMoveStringLiteralDfa3_0(long old0, long active0){ 739 if (((active0 &= old0)) == 0L) 740 return jjStartNfa_0(1, old0); 741 try { curChar = input_stream.readChar(); } 742 catch(java.io.IOException e) { 743 jjStopStringLiteralDfa_0(2, active0); 744 return 3; 745 } 746 switch(curChar) 747 { 748 case 100: 749 return jjMoveStringLiteralDfa4_0(active0, 0x20L); 750 case 112: 751 return jjMoveStringLiteralDfa4_0(active0, 0x10L); 752 default : 753 break; 754 } 755 return jjStartNfa_0(2, active0); 756 } 757 private int jjMoveStringLiteralDfa4_0(long old0, long active0){ 758 if (((active0 &= old0)) == 0L) 759 return jjStartNfa_0(2, old0); 760 try { curChar = input_stream.readChar(); } 761 catch(java.io.IOException e) { 762 jjStopStringLiteralDfa_0(3, active0); 763 return 4; 764 } 765 switch(curChar) 766 { 767 case 105: 768 return jjMoveStringLiteralDfa5_0(active0, 0x20L); 769 case 112: 770 return jjMoveStringLiteralDfa5_0(active0, 0x10L); 771 default : 772 break; 773 } 774 return jjStartNfa_0(3, active0); 775 } 776 private int jjMoveStringLiteralDfa5_0(long old0, long active0){ 777 if (((active0 &= old0)) == 0L) 778 return jjStartNfa_0(3, old0); 779 try { curChar = input_stream.readChar(); } 780 catch(java.io.IOException e) { 781 jjStopStringLiteralDfa_0(4, active0); 782 return 5; 783 } 784 switch(curChar) 785 { 786 case 97: 787 if ((active0 & 0x20L) != 0L) 788 return jjStopAtPos(5, 5); 789 break; 790 case 111: 791 return jjMoveStringLiteralDfa6_0(active0, 0x10L); 792 default : 793 break; 794 } 795 return jjStartNfa_0(4, active0); 796 } 797 private int jjMoveStringLiteralDfa6_0(long old0, long active0){ 798 if (((active0 &= old0)) == 0L) 799 return jjStartNfa_0(4, old0); 800 try { curChar = input_stream.readChar(); } 801 catch(java.io.IOException e) { 802 jjStopStringLiteralDfa_0(5, active0); 803 return 6; 804 } 805 switch(curChar) 806 { 807 case 114: 808 return jjMoveStringLiteralDfa7_0(active0, 0x10L); 809 default : 810 break; 811 } 812 return jjStartNfa_0(5, active0); 813 } 814 private int jjMoveStringLiteralDfa7_0(long old0, long active0){ 815 if (((active0 &= old0)) == 0L) 816 return jjStartNfa_0(5, old0); 817 try { curChar = input_stream.readChar(); } 818 catch(java.io.IOException e) { 819 jjStopStringLiteralDfa_0(6, active0); 820 return 7; 821 } 822 switch(curChar) 823 { 824 case 116: 825 return jjMoveStringLiteralDfa8_0(active0, 0x10L); 826 default : 827 break; 828 } 829 return jjStartNfa_0(6, active0); 830 } 831 private int jjMoveStringLiteralDfa8_0(long old0, long active0){ 832 if (((active0 &= old0)) == 0L) 833 return jjStartNfa_0(6, old0); 834 try { curChar = input_stream.readChar(); } 835 catch(java.io.IOException e) { 836 jjStopStringLiteralDfa_0(7, active0); 837 return 8; 838 } 839 switch(curChar) 840 { 841 case 115: 842 if ((active0 & 0x10L) != 0L) 843 return jjStopAtPos(8, 4); 844 break; 845 default : 846 break; 847 } 848 return jjStartNfa_0(7, active0); 849 } 850 private int jjStartNfaWithStates_0(int pos, int kind, int state) 851 { 852 jjmatchedKind = kind; 853 jjmatchedPos = pos; 854 try { curChar = input_stream.readChar(); } 855 catch(java.io.IOException e) { return pos + 1; } 856 return jjMoveNfa_0(state, pos + 1); 857 } 858 private int jjMoveNfa_0(int startState, int curPos) 859 { 860 int startsAt = 0; 861 jjnewStateCnt = 37; 862 int i = 1; 863 jjstateSet[0] = startState; 864 int kind = 0x7fffffff; 865 for (;;) 866 { 867 if (++jjround == 0x7fffffff) 868 ReInitRounds(); 869 if (curChar < 64) 870 { 871 long l = 1L << curChar; 872 do 873 { 874 switch(jjstateSet[--i]) 875 { 876 case 0: 877 if ((0x3fe000000000000L & l) != 0L) 878 { 879 if (kind > 13) 880 kind = 13; 881 { jjCheckNAdd(5); } 882 } 883 else if ((0x3400L & l) != 0L) 884 { 885 if (kind > 6) 886 kind = 6; 887 } 888 else if ((0x100000200L & l) != 0L) 889 { 890 if (kind > 7) 891 kind = 7; 892 } 893 else if (curChar == 47) 894 { jjAddStates(47, 49); } 895 else if (curChar == 34) 896 { jjCheckNAddStates(50, 52); } 897 break; 898 case 13: 899 if ((0xffff7bff00000000L & l) != 0L) 900 { jjCheckNAddStates(53, 56); } 901 break; 902 case 1: 903 if ((0x100000200L & l) != 0L && kind > 7) 904 kind = 7; 905 break; 906 case 3: 907 if ((0x3ff200000000000L & l) == 0L) 908 break; 909 if (kind > 12) 910 kind = 12; 911 jjstateSet[jjnewStateCnt++] = 3; 912 break; 913 case 4: 914 if ((0x3fe000000000000L & l) == 0L) 915 break; 916 if (kind > 13) 917 kind = 13; 918 { jjCheckNAdd(5); } 919 break; 920 case 5: 921 if ((0x3ff000000000000L & l) == 0L) 922 break; 923 if (kind > 13) 924 kind = 13; 925 { jjCheckNAdd(5); } 926 break; 927 case 6: 928 case 10: 929 if (curChar == 34) 930 { jjCheckNAddStates(50, 52); } 931 break; 932 case 7: 933 if ((0xfffffffb00000000L & l) != 0L) 934 { jjCheckNAddStates(50, 52); } 935 break; 936 case 8: 937 if (curChar == 34 && kind > 14) 938 kind = 14; 939 break; 940 case 12: 941 if (curChar == 47) 942 { jjAddStates(47, 49); } 943 break; 944 case 14: 945 if ((0xffff7fff00000000L & l) != 0L) 946 { jjCheckNAddStates(53, 56); } 947 break; 948 case 17: 949 if (curChar == 47 && kind > 17) 950 kind = 17; 951 break; 952 case 19: 953 if (curChar == 36) 954 { jjCheckNAddStates(53, 56); } 955 break; 956 case 21: 957 if (curChar == 42) 958 { jjCheckNAddStates(53, 56); } 959 break; 960 case 22: 961 if (curChar == 63) 962 { jjCheckNAddStates(53, 56); } 963 break; 964 case 25: 965 if (curChar == 41) 966 { jjCheckNAddStates(53, 56); } 967 break; 968 case 26: 969 if (curChar == 40) 970 { jjCheckNAddStates(53, 56); } 971 break; 972 case 27: 973 if (curChar == 34) 974 { jjCheckNAddStates(53, 56); } 975 break; 976 case 28: 977 if (curChar == 39) 978 { jjCheckNAddStates(53, 56); } 979 break; 980 case 29: 981 if (curChar == 46) 982 { jjCheckNAddStates(53, 56); } 983 break; 984 case 30: 985 if (curChar == 43) 986 { jjCheckNAddStates(53, 56); } 987 break; 988 case 34: 989 if (curChar == 47) 990 { jjCheckNAddStates(53, 56); } 991 break; 992 default : break; 993 } 994 } while(i != startsAt); 995 } 996 else if (curChar < 128) 997 { 998 long l = 1L << (curChar & 077); 999 do 1000 { 1001 switch(jjstateSet[--i]) 1002 { 1003 case 0: 1004 case 3: 1005 if ((0x7fffffe87fffffeL & l) == 0L) 1006 break; 1007 if (kind > 12) 1008 kind = 12; 1009 { jjCheckNAdd(3); } 1010 break; 1011 case 13: 1012 if ((0x7fffffffefffffffL & l) != 0L) 1013 { jjCheckNAddStates(53, 56); } 1014 else if (curChar == 92) 1015 { jjCheckNAddStates(57, 72); } 1016 if (curChar == 92) 1017 { jjCheckNAdd(16); } 1018 break; 1019 case 7: 1020 if ((0x7fffffffefffffffL & l) != 0L) 1021 { jjCheckNAddStates(50, 52); } 1022 break; 1023 case 9: 1024 if (curChar == 92) 1025 { jjAddStates(73, 74); } 1026 break; 1027 case 11: 1028 if (curChar == 92) 1029 { jjCheckNAddStates(50, 52); } 1030 break; 1031 case 14: 1032 if ((0x7fffffffefffffffL & l) != 0L) 1033 { jjCheckNAddStates(53, 56); } 1034 break; 1035 case 15: 1036 if (curChar == 92) 1037 { jjCheckNAdd(16); } 1038 break; 1039 case 16: 1040 if ((0x488001404880096L & l) != 0L) 1041 { jjCheckNAddStates(53, 56); } 1042 break; 1043 case 18: 1044 if (curChar == 92) 1045 { jjCheckNAddStates(75, 90); } 1046 break; 1047 case 20: 1048 if (curChar == 94) 1049 { jjCheckNAddStates(53, 56); } 1050 break; 1051 case 23: 1052 if (curChar == 125) 1053 { jjCheckNAddStates(53, 56); } 1054 break; 1055 case 24: 1056 if (curChar == 123) 1057 { jjCheckNAddStates(53, 56); } 1058 break; 1059 case 31: 1060 if (curChar == 93) 1061 { jjCheckNAddStates(53, 56); } 1062 break; 1063 case 32: 1064 if (curChar == 91) 1065 { jjCheckNAddStates(53, 56); } 1066 break; 1067 case 33: 1068 if (curChar == 92) 1069 { jjCheckNAddStates(53, 56); } 1070 break; 1071 case 35: 1072 if (curChar == 92) 1073 { jjCheckNAdd(16); } 1074 break; 1075 case 36: 1076 if (curChar == 92) 1077 { jjCheckNAddStates(57, 72); } 1078 break; 1079 default : break; 1080 } 1081 } while(i != startsAt); 1082 } 1083 else 1084 { 1085 int hiByte = (curChar >> 8); 1086 int i1 = hiByte >> 6; 1087 long l1 = 1L << (hiByte & 077); 1088 int i2 = (curChar & 0xff) >> 6; 1089 long l2 = 1L << (curChar & 077); 1090 do 1091 { 1092 switch(jjstateSet[--i]) 1093 { 1094 case 13: 1095 case 14: 1096 if (jjCanMove_0(hiByte, i1, i2, l1, l2)) 1097 { jjCheckNAddStates(53, 56); } 1098 break; 1099 case 7: 1100 if (jjCanMove_0(hiByte, i1, i2, l1, l2)) 1101 { jjAddStates(50, 52); } 1102 break; 1103 default : if (i1 == 0 || l1 == 0 || i2 == 0 || l2 == 0) break; else break; 1104 } 1105 } while(i != startsAt); 1106 } 1107 if (kind != 0x7fffffff) 1108 { 1109 jjmatchedKind = kind; 1110 jjmatchedPos = curPos; 1111 kind = 0x7fffffff; 1112 } 1113 ++curPos; 1114 if ((i = jjnewStateCnt) == (startsAt = 37 - (jjnewStateCnt = startsAt))) 1115 return curPos; 1116 try { curChar = input_stream.readChar(); } 1117 catch(java.io.IOException e) { return curPos; } 1118 } 1119 } 1120 private int jjMoveStringLiteralDfa0_1(){ 1121 switch(curChar) 1122 { 1123 case 42: 1124 return jjMoveStringLiteralDfa1_1(0x200L); 1125 default : 1126 return 1; 1127 } 1128 } 1129 private int jjMoveStringLiteralDfa1_1(long active0){ 1130 try { curChar = input_stream.readChar(); } 1131 catch(java.io.IOException e) { 1132 return 1; 1133 } 1134 switch(curChar) 1135 { 1136 case 47: 1137 if ((active0 & 0x200L) != 0L) 1138 return jjStopAtPos(1, 9); 1139 break; 1140 default : 1141 return 2; 1142 } 1143 return 2; 1144 } 1145 private int jjMoveStringLiteralDfa0_3(){ 1146 switch(curChar) 1147 { 1148 case 42: 1149 return jjMoveStringLiteralDfa1_3(0x100000000000000L); 1150 default : 1151 return 1; 1152 } 1153 } 1154 private int jjMoveStringLiteralDfa1_3(long active0){ 1155 try { curChar = input_stream.readChar(); } 1156 catch(java.io.IOException e) { 1157 return 1; 1158 } 1159 switch(curChar) 1160 { 1161 case 47: 1162 if ((active0 & 0x100000000000000L) != 0L) 1163 return jjStopAtPos(1, 56); 1164 break; 1165 default : 1166 return 2; 1167 } 1168 return 2; 1169 } 1170 static final int[] jjnextStates = { 1171 11, 33, 34, 5, 6, 7, 12, 13, 15, 16, 40, 47, 51, 8, 9, 17, 1172 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 1173 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 13, 1174 35, 36, 7, 8, 9, 14, 15, 17, 18, 34, 33, 32, 31, 30, 29, 28, 1175 27, 26, 25, 24, 23, 22, 21, 20, 19, 10, 11, 19, 20, 21, 22, 23, 1176 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 1177 }; 1178 private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) 1179 { 1180 switch(hiByte) 1181 { 1182 case 0: 1183 return ((jjbitVec2[i2] & l2) != 0L); 1184 default : 1185 if ((jjbitVec0[i1] & l1) != 0L) 1186 return true; 1187 return false; 1188 } 1189 } 1190 1191 /** Token literal values. */ 1192 public static final String[] jjstrLiteralImages = { 1193 "", "\141\156\144", "\157\162", "\156\157\164", 1194 "\100\163\165\160\160\157\162\164\163", "\100\155\145\144\151\141", null, null, "\57\52", null, null, null, null, null, 1195 null, null, null, null, "\173", "\175", "\50", "\51", "\54", "\72", null, null, null, 1196 null, null, "\52", "\57", "\133", "\135", "\76\75", "\74\75", "\76", "\74", "\75", 1197 "\41", "\176", "\72\72", "\73", "\174", "\174\172", "\53", "\55", "\46", "\77", 1198 "\44", "\136", "\56", "\260", "\u2208", "\u29c9", "\57\52", null, "\52\57", null, }; 1199 protected Token jjFillToken() 1200 { 1201 final Token t; 1202 final String curTokenImage; 1203 final int beginLine; 1204 final int endLine; 1205 final int beginColumn; 1206 final int endColumn; 1207 String im = jjstrLiteralImages[jjmatchedKind]; 1208 curTokenImage = (im == null) ? input_stream.GetImage() : im; 1209 beginLine = input_stream.getBeginLine(); 1210 beginColumn = input_stream.getBeginColumn(); 1211 endLine = input_stream.getEndLine(); 1212 endColumn = input_stream.getEndColumn(); 1213 t = Token.newToken(jjmatchedKind, curTokenImage); 1214 1215 t.beginLine = beginLine; 1216 t.endLine = endLine; 1217 t.beginColumn = beginColumn; 1218 t.endColumn = endColumn; 1219 1220 return t; 1221 } 1222 1223 int curLexState = 2; 1224 int defaultLexState = 2; 1225 int jjnewStateCnt; 1226 int jjround; 1227 int jjmatchedPos; 1228 int jjmatchedKind; 1229 1230 /** Get the next Token. */ 1231 public Token getNextToken() 1232 { 1233 Token matchedToken; 1234 int curPos = 0; 1235 1236 EOFLoop : 1237 for (;;) 1238 { 1239 try 1240 { 1241 curChar = input_stream.BeginToken(); 1242 } 1243 catch(Exception e) 1244 { 1245 jjmatchedKind = 0; 1246 jjmatchedPos = -1; 1247 matchedToken = jjFillToken(); 1248 return matchedToken; 1249 } 1250 1251 for (;;) 1252 { 1253 switch(curLexState) 1254 { 1255 case 0: 1256 jjmatchedKind = 0x7fffffff; 1257 jjmatchedPos = 0; 1258 curPos = jjMoveStringLiteralDfa0_0(); 1259 if (jjmatchedPos == 0 && jjmatchedKind > 24) 1260 { 1261 jjmatchedKind = 24; 1262 } 1263 break; 1264 case 1: 1265 jjmatchedKind = 0x7fffffff; 1266 jjmatchedPos = 0; 1267 curPos = jjMoveStringLiteralDfa0_1(); 1268 if (jjmatchedPos == 0 && jjmatchedKind > 10) 1269 { 1270 jjmatchedKind = 10; 1271 } 1272 break; 1273 case 2: 1274 jjmatchedKind = 0x7fffffff; 1275 jjmatchedPos = 0; 1276 curPos = jjMoveStringLiteralDfa0_2(); 1277 if (jjmatchedPos == 0 && jjmatchedKind > 55) 1278 { 1279 jjmatchedKind = 55; 1280 } 1281 break; 1282 case 3: 1283 jjmatchedKind = 0x7fffffff; 1284 jjmatchedPos = 0; 1285 curPos = jjMoveStringLiteralDfa0_3(); 1286 if (jjmatchedPos == 0 && jjmatchedKind > 57) 1287 { 1288 jjmatchedKind = 57; 1289 } 1290 break; 1291 } 1292 if (jjmatchedKind != 0x7fffffff) 1293 { 1294 if (jjmatchedPos + 1 < curPos) 1295 input_stream.backup(curPos - jjmatchedPos - 1); 1296 if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) 1297 { 1298 matchedToken = jjFillToken(); 1299 if (jjnewLexState[jjmatchedKind] != -1) 1300 curLexState = jjnewLexState[jjmatchedKind]; 1301 return matchedToken; 1302 } 1303 else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) 1304 { 1305 if (jjnewLexState[jjmatchedKind] != -1) 1306 curLexState = jjnewLexState[jjmatchedKind]; 1307 continue EOFLoop; 1308 } 1309 if (jjnewLexState[jjmatchedKind] != -1) 1310 curLexState = jjnewLexState[jjmatchedKind]; 1311 curPos = 0; 1312 jjmatchedKind = 0x7fffffff; 1313 try { 1314 curChar = input_stream.readChar(); 1315 continue; 1316 } 1317 catch (java.io.IOException e1) { } 1318 } 1319 int error_line = input_stream.getEndLine(); 1320 int error_column = input_stream.getEndColumn(); 1321 String error_after = null; 1322 boolean EOFSeen = false; 1323 try { input_stream.readChar(); input_stream.backup(1); } 1324 catch (java.io.IOException e1) { 1325 EOFSeen = true; 1326 error_after = curPos <= 1 ? "" : input_stream.GetImage(); 1327 if (curChar == '\n' || curChar == '\r') { 1328 error_line++; 1329 error_column = 0; 1330 } 1331 else 1332 error_column++; 1333 } 1334 if (!EOFSeen) { 1335 input_stream.backup(1); 1336 error_after = curPos <= 1 ? "" : input_stream.GetImage(); 1337 } 1338 throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); 1339 } 1340 } 1341 } 1342 1343 private void jjCheckNAdd(int state) 1344 { 1345 if (jjrounds[state] != jjround) 1346 { 1347 jjstateSet[jjnewStateCnt++] = state; 1348 jjrounds[state] = jjround; 1349 } 1350 } 1351 private void jjAddStates(int start, int end) 1352 { 1353 do { 1354 jjstateSet[jjnewStateCnt++] = jjnextStates[start]; 1355 } while (start++ != end); 1356 } 1357 private void jjCheckNAddTwoStates(int state1, int state2) 1358 { 1359 jjCheckNAdd(state1); 1360 jjCheckNAdd(state2); 1361 } 1362 1363 private void jjCheckNAddStates(int start, int end) 1364 { 1365 do { 1366 jjCheckNAdd(jjnextStates[start]); 1367 } while (start++ != end); 1368 } 1369 1370 /** Constructor. */ 1371 public MapCSSParserTokenManager(SimpleCharStream stream){ 1372 1373 if (SimpleCharStream.staticFlag) 1374 throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer."); 1375 1376 input_stream = stream; 1377 } 1378 1379 /** Constructor. */ 1380 public MapCSSParserTokenManager (SimpleCharStream stream, int lexState){ 1381 ReInit(stream); 1382 SwitchTo(lexState); 1383 } 1384 1385 /** Reinitialise parser. */ 1386 public void ReInit(SimpleCharStream stream) 1387 { 1388 1389 jjmatchedPos = jjnewStateCnt = 0; 1390 curLexState = defaultLexState; 1391 input_stream = stream; 1392 ReInitRounds(); 1393 } 1394 1395 private void ReInitRounds() 1396 { 1397 int i; 1398 jjround = 0x80000001; 1399 for (i = 53; i-- > 0;) 1400 jjrounds[i] = 0x80000000; 1401 } 1402 1403 /** Reinitialise parser. */ 1404 public void ReInit( SimpleCharStream stream, int lexState) 1405 { 1406 1407 ReInit( stream); 1408 SwitchTo(lexState); 1409 } 1410 1411 /** Switch to specified lex state. */ 1412 public void SwitchTo(int lexState) 1413 { 1414 if (lexState >= 4 || lexState < 0) 1415 throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); 1416 else 1417 curLexState = lexState; 1418 } 1419 1420 /** Lexer state names. */ 1421 public static final String[] lexStateNames = { 1422 "PREPROCESSOR", 1423 "PP_COMMENT", 1424 "DEFAULT", 1425 "COMMENT", 1426 }; 1427 1428 /** Lex State array. */ 1429 public static final int[] jjnewLexState = { 1430 -1, -1, -1, -1, -1, -1, -1, -1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1431 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1432 -1, -1, -1, -1, 3, -1, 2, -1, 1433 }; 1434 static final long[] jjtoToken = { 1435 0x1fffffffbfe7bffL, 1436 }; 1437 static final long[] jjtoSkip = { 1438 0x200000000000000L, 1439 }; 1440 static final long[] jjtoMore = { 1441 0x400L, 1442 }; 1443 protected SimpleCharStream input_stream; 1444 1445 private final int[] jjrounds = new int[53]; 1446 private final int[] jjstateSet = new int[2 * 53]; 1447 1448 1449 protected int curChar; 1450 } -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/ParseException.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/ParseException.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/ParseException.java new file mode 100644 index 0000000..c86ad69
- + 1 /* Generated By:JavaCC: Do not edit this line. ParseException.java Version 6.1 */ 2 /* JavaCCOptions:KEEP_LINE_COLUMN=true */ 3 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 4 5 /** 6 * This exception is thrown when parse errors are encountered. 7 * You can explicitly create objects of this exception type by 8 * calling the method generateParseException in the generated 9 * parser. 10 * 11 * You can modify this class to customize your error reporting 12 * mechanisms so long as you retain the public fields. 13 */ 14 public class ParseException extends Exception { 15 16 /** 17 * The version identifier for this Serializable class. 18 * Increment only if the <i>serialized</i> form of the 19 * class changes. 20 */ 21 private static final long serialVersionUID = 1L; 22 23 /** 24 * The end of line string for this machine. 25 */ 26 protected static String EOL = System.getProperty("line.separator", "\n"); 27 28 /** 29 * This constructor is used by the method "generateParseException" 30 * in the generated parser. Calling this constructor generates 31 * a new object of this type with the fields "currentToken", 32 * "expectedTokenSequences", and "tokenImage" set. 33 */ 34 public ParseException(Token currentTokenVal, 35 int[][] expectedTokenSequencesVal, 36 String[] tokenImageVal 37 ) 38 { 39 super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal)); 40 currentToken = currentTokenVal; 41 expectedTokenSequences = expectedTokenSequencesVal; 42 tokenImage = tokenImageVal; 43 } 44 45 /** 46 * The following constructors are for use by you for whatever 47 * purpose you can think of. Constructing the exception in this 48 * manner makes the exception behave in the normal way - i.e., as 49 * documented in the class "Throwable". The fields "errorToken", 50 * "expectedTokenSequences", and "tokenImage" do not contain 51 * relevant information. The JavaCC generated code does not use 52 * these constructors. 53 */ 54 55 public ParseException() { 56 super(); 57 } 58 59 /** Constructor with message. */ 60 public ParseException(String message) { 61 super(message); 62 } 63 64 65 /** 66 * This is the last token that has been consumed successfully. If 67 * this object has been created due to a parse error, the token 68 * followng this token will (therefore) be the first error token. 69 */ 70 public Token currentToken; 71 72 /** 73 * Each entry in this array is an array of integers. Each array 74 * of integers represents a sequence of tokens (by their ordinal 75 * values) that is expected at this point of the parse. 76 */ 77 public int[][] expectedTokenSequences; 78 79 /** 80 * This is a reference to the "tokenImage" array of the generated 81 * parser within which the parse error occurred. This array is 82 * defined in the generated ...Constants interface. 83 */ 84 public String[] tokenImage; 85 86 /** 87 * It uses "currentToken" and "expectedTokenSequences" to generate a parse 88 * error message and returns it. If this object has been created 89 * due to a parse error, and you do not catch it (it gets thrown 90 * from the parser) the correct error message 91 * gets displayed. 92 */ 93 private static String initialise(Token currentToken, 94 int[][] expectedTokenSequences, 95 String[] tokenImage) { 96 97 StringBuffer expected = new StringBuffer(); 98 int maxSize = 0; 99 for (int i = 0; i < expectedTokenSequences.length; i++) { 100 if (maxSize < expectedTokenSequences[i].length) { 101 maxSize = expectedTokenSequences[i].length; 102 } 103 for (int j = 0; j < expectedTokenSequences[i].length; j++) { 104 expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' '); 105 } 106 if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { 107 expected.append("..."); 108 } 109 expected.append(EOL).append(" "); 110 } 111 String retval = "Encountered \""; 112 Token tok = currentToken.next; 113 for (int i = 0; i < maxSize; i++) { 114 if (i != 0) retval += " "; 115 if (tok.kind == 0) { 116 retval += tokenImage[0]; 117 break; 118 } 119 retval += " " + tokenImage[tok.kind]; 120 retval += " \""; 121 retval += add_escapes(tok.image); 122 retval += " \""; 123 tok = tok.next; 124 } 125 if (currentToken.next != null) { 126 retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; 127 } 128 retval += "." + EOL; 129 130 131 if (expectedTokenSequences.length == 0) { 132 // Nothing to add here 133 } else { 134 if (expectedTokenSequences.length == 1) { 135 retval += "Was expecting:" + EOL + " "; 136 } else { 137 retval += "Was expecting one of:" + EOL + " "; 138 } 139 retval += expected.toString(); 140 } 141 142 return retval; 143 } 144 145 146 /** 147 * Used to convert raw characters to their escaped version 148 * when these raw version cannot be used as part of an ASCII 149 * string literal. 150 */ 151 static String add_escapes(String str) { 152 StringBuffer retval = new StringBuffer(); 153 char ch; 154 for (int i = 0; i < str.length(); i++) { 155 switch (str.charAt(i)) 156 { 157 case '\b': 158 retval.append("\\b"); 159 continue; 160 case '\t': 161 retval.append("\\t"); 162 continue; 163 case '\n': 164 retval.append("\\n"); 165 continue; 166 case '\f': 167 retval.append("\\f"); 168 continue; 169 case '\r': 170 retval.append("\\r"); 171 continue; 172 case '\"': 173 retval.append("\\\""); 174 continue; 175 case '\'': 176 retval.append("\\\'"); 177 continue; 178 case '\\': 179 retval.append("\\\\"); 180 continue; 181 default: 182 if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { 183 String s = "0000" + Integer.toString(ch, 16); 184 retval.append("\\u" + s.substring(s.length() - 4, s.length())); 185 } else { 186 retval.append(ch); 187 } 188 continue; 189 } 190 } 191 return retval.toString(); 192 } 193 194 } 195 /* JavaCC - OriginalChecksum=548bceecbf58182b12388d687653c3d7 (do not edit this line) */ -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/SimpleCharStream.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/SimpleCharStream.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/SimpleCharStream.java new file mode 100644 index 0000000..2057b40
- + 1 /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 6.1 */ 2 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ 3 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 4 5 /** 6 * An implementation of interface CharStream, where the stream is assumed to 7 * contain only ASCII characters (without unicode processing). 8 */ 9 10 public class SimpleCharStream 11 { 12 /** Whether parser is static. */ 13 public static final boolean staticFlag = false; 14 int bufsize; 15 int available; 16 int tokenBegin; 17 /** Position in buffer. */ 18 public int bufpos = -1; 19 protected int bufline[]; 20 protected int bufcolumn[]; 21 22 protected int column = 0; 23 protected int line = 1; 24 25 protected boolean prevCharIsCR = false; 26 protected boolean prevCharIsLF = false; 27 28 protected java.io.Reader inputStream; 29 30 protected char[] buffer; 31 protected int maxNextCharInd = 0; 32 protected int inBuf = 0; 33 protected int tabSize = 1; 34 protected boolean trackLineColumn = true; 35 36 public void setTabSize(int i) { tabSize = i; } 37 public int getTabSize() { return tabSize; } 38 39 40 41 protected void ExpandBuff(boolean wrapAround) 42 { 43 char[] newbuffer = new char[bufsize + 2048]; 44 int newbufline[] = new int[bufsize + 2048]; 45 int newbufcolumn[] = new int[bufsize + 2048]; 46 47 try 48 { 49 if (wrapAround) 50 { 51 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); 52 System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos); 53 buffer = newbuffer; 54 55 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); 56 System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); 57 bufline = newbufline; 58 59 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); 60 System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); 61 bufcolumn = newbufcolumn; 62 63 maxNextCharInd = (bufpos += (bufsize - tokenBegin)); 64 } 65 else 66 { 67 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); 68 buffer = newbuffer; 69 70 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); 71 bufline = newbufline; 72 73 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); 74 bufcolumn = newbufcolumn; 75 76 maxNextCharInd = (bufpos -= tokenBegin); 77 } 78 } 79 catch (Throwable t) 80 { 81 throw new Error(t.getMessage()); 82 } 83 84 85 bufsize += 2048; 86 available = bufsize; 87 tokenBegin = 0; 88 } 89 90 protected void FillBuff() throws java.io.IOException 91 { 92 if (maxNextCharInd == available) 93 { 94 if (available == bufsize) 95 { 96 if (tokenBegin > 2048) 97 { 98 bufpos = maxNextCharInd = 0; 99 available = tokenBegin; 100 } 101 else if (tokenBegin < 0) 102 bufpos = maxNextCharInd = 0; 103 else 104 ExpandBuff(false); 105 } 106 else if (available > tokenBegin) 107 available = bufsize; 108 else if ((tokenBegin - available) < 2048) 109 ExpandBuff(true); 110 else 111 available = tokenBegin; 112 } 113 114 int i; 115 try { 116 if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1) 117 { 118 inputStream.close(); 119 throw new java.io.IOException(); 120 } 121 else 122 maxNextCharInd += i; 123 return; 124 } 125 catch(java.io.IOException e) { 126 --bufpos; 127 backup(0); 128 if (tokenBegin == -1) 129 tokenBegin = bufpos; 130 throw e; 131 } 132 } 133 134 /** Start. */ 135 public char BeginToken() throws java.io.IOException 136 { 137 tokenBegin = -1; 138 char c = readChar(); 139 tokenBegin = bufpos; 140 141 return c; 142 } 143 144 protected void UpdateLineColumn(char c) 145 { 146 column++; 147 148 if (prevCharIsLF) 149 { 150 prevCharIsLF = false; 151 line += (column = 1); 152 } 153 else if (prevCharIsCR) 154 { 155 prevCharIsCR = false; 156 if (c == '\n') 157 { 158 prevCharIsLF = true; 159 } 160 else 161 line += (column = 1); 162 } 163 164 switch (c) 165 { 166 case '\r' : 167 prevCharIsCR = true; 168 break; 169 case '\n' : 170 prevCharIsLF = true; 171 break; 172 case '\t' : 173 column--; 174 column += (tabSize - (column % tabSize)); 175 break; 176 default : 177 break; 178 } 179 180 bufline[bufpos] = line; 181 bufcolumn[bufpos] = column; 182 } 183 184 /** Read a character. */ 185 public char readChar() throws java.io.IOException 186 { 187 if (inBuf > 0) 188 { 189 --inBuf; 190 191 if (++bufpos == bufsize) 192 bufpos = 0; 193 194 return buffer[bufpos]; 195 } 196 197 if (++bufpos >= maxNextCharInd) 198 FillBuff(); 199 200 char c = buffer[bufpos]; 201 202 UpdateLineColumn(c); 203 return c; 204 } 205 206 @Deprecated 207 /** 208 * @deprecated 209 * @see #getEndColumn 210 */ 211 212 public int getColumn() { 213 return bufcolumn[bufpos]; 214 } 215 216 @Deprecated 217 /** 218 * @deprecated 219 * @see #getEndLine 220 */ 221 222 public int getLine() { 223 return bufline[bufpos]; 224 } 225 226 /** Get token end column number. */ 227 public int getEndColumn() { 228 return bufcolumn[bufpos]; 229 } 230 231 /** Get token end line number. */ 232 public int getEndLine() { 233 return bufline[bufpos]; 234 } 235 236 /** Get token beginning column number. */ 237 public int getBeginColumn() { 238 return bufcolumn[tokenBegin]; 239 } 240 241 /** Get token beginning line number. */ 242 public int getBeginLine() { 243 return bufline[tokenBegin]; 244 } 245 246 /** Backup a number of characters. */ 247 public void backup(int amount) { 248 249 inBuf += amount; 250 if ((bufpos -= amount) < 0) 251 bufpos += bufsize; 252 } 253 254 /** Constructor. */ 255 public SimpleCharStream(java.io.Reader dstream, int startline, 256 int startcolumn, int buffersize) 257 { 258 inputStream = dstream; 259 line = startline; 260 column = startcolumn - 1; 261 262 available = bufsize = buffersize; 263 buffer = new char[buffersize]; 264 bufline = new int[buffersize]; 265 bufcolumn = new int[buffersize]; 266 } 267 268 /** Constructor. */ 269 public SimpleCharStream(java.io.Reader dstream, int startline, 270 int startcolumn) 271 { 272 this(dstream, startline, startcolumn, 4096); 273 } 274 275 /** Constructor. */ 276 public SimpleCharStream(java.io.Reader dstream) 277 { 278 this(dstream, 1, 1, 4096); 279 } 280 281 /** Reinitialise. */ 282 public void ReInit(java.io.Reader dstream, int startline, 283 int startcolumn, int buffersize) 284 { 285 inputStream = dstream; 286 line = startline; 287 column = startcolumn - 1; 288 289 if (buffer == null || buffersize != buffer.length) 290 { 291 available = bufsize = buffersize; 292 buffer = new char[buffersize]; 293 bufline = new int[buffersize]; 294 bufcolumn = new int[buffersize]; 295 } 296 prevCharIsLF = prevCharIsCR = false; 297 tokenBegin = inBuf = maxNextCharInd = 0; 298 bufpos = -1; 299 } 300 301 /** Reinitialise. */ 302 public void ReInit(java.io.Reader dstream, int startline, 303 int startcolumn) 304 { 305 ReInit(dstream, startline, startcolumn, 4096); 306 } 307 308 /** Reinitialise. */ 309 public void ReInit(java.io.Reader dstream) 310 { 311 ReInit(dstream, 1, 1, 4096); 312 } 313 /** Constructor. */ 314 public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, 315 int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException 316 { 317 this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); 318 } 319 320 /** Constructor. */ 321 public SimpleCharStream(java.io.InputStream dstream, int startline, 322 int startcolumn, int buffersize) 323 { 324 this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); 325 } 326 327 /** Constructor. */ 328 public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, 329 int startcolumn) throws java.io.UnsupportedEncodingException 330 { 331 this(dstream, encoding, startline, startcolumn, 4096); 332 } 333 334 /** Constructor. */ 335 public SimpleCharStream(java.io.InputStream dstream, int startline, 336 int startcolumn) 337 { 338 this(dstream, startline, startcolumn, 4096); 339 } 340 341 /** Constructor. */ 342 public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException 343 { 344 this(dstream, encoding, 1, 1, 4096); 345 } 346 347 /** Constructor. */ 348 public SimpleCharStream(java.io.InputStream dstream) 349 { 350 this(dstream, 1, 1, 4096); 351 } 352 353 /** Reinitialise. */ 354 public void ReInit(java.io.InputStream dstream, String encoding, int startline, 355 int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException 356 { 357 ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); 358 } 359 360 /** Reinitialise. */ 361 public void ReInit(java.io.InputStream dstream, int startline, 362 int startcolumn, int buffersize) 363 { 364 ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); 365 } 366 367 /** Reinitialise. */ 368 public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException 369 { 370 ReInit(dstream, encoding, 1, 1, 4096); 371 } 372 373 /** Reinitialise. */ 374 public void ReInit(java.io.InputStream dstream) 375 { 376 ReInit(dstream, 1, 1, 4096); 377 } 378 /** Reinitialise. */ 379 public void ReInit(java.io.InputStream dstream, String encoding, int startline, 380 int startcolumn) throws java.io.UnsupportedEncodingException 381 { 382 ReInit(dstream, encoding, startline, startcolumn, 4096); 383 } 384 /** Reinitialise. */ 385 public void ReInit(java.io.InputStream dstream, int startline, 386 int startcolumn) 387 { 388 ReInit(dstream, startline, startcolumn, 4096); 389 } 390 /** Get token literal value. */ 391 public String GetImage() 392 { 393 if (bufpos >= tokenBegin) 394 return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); 395 else 396 return new String(buffer, tokenBegin, bufsize - tokenBegin) + 397 new String(buffer, 0, bufpos + 1); 398 } 399 400 /** Get the suffix. */ 401 public char[] GetSuffix(int len) 402 { 403 char[] ret = new char[len]; 404 405 if ((bufpos + 1) >= len) 406 System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); 407 else 408 { 409 System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, 410 len - bufpos - 1); 411 System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); 412 } 413 414 return ret; 415 } 416 417 /** Reset buffer when finished. */ 418 public void Done() 419 { 420 buffer = null; 421 bufline = null; 422 bufcolumn = null; 423 } 424 425 /** 426 * Method to adjust line and column numbers for the start of a token. 427 */ 428 public void adjustBeginLineColumn(int newLine, int newCol) 429 { 430 int start = tokenBegin; 431 int len; 432 433 if (bufpos >= tokenBegin) 434 { 435 len = bufpos - tokenBegin + inBuf + 1; 436 } 437 else 438 { 439 len = bufsize - tokenBegin + bufpos + 1 + inBuf; 440 } 441 442 int i = 0, j = 0, k = 0; 443 int nextColDiff = 0, columnDiff = 0; 444 445 while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) 446 { 447 bufline[j] = newLine; 448 nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; 449 bufcolumn[j] = newCol + columnDiff; 450 columnDiff = nextColDiff; 451 i++; 452 } 453 454 if (i < len) 455 { 456 bufline[j] = newLine++; 457 bufcolumn[j] = newCol + columnDiff; 458 459 while (i++ < len) 460 { 461 if (bufline[j = start % bufsize] != bufline[++start % bufsize]) 462 bufline[j] = newLine++; 463 else 464 bufline[j] = newLine; 465 } 466 } 467 468 line = bufline[j]; 469 column = bufcolumn[j]; 470 } 471 boolean getTrackLineColumn() { return trackLineColumn; } 472 void setTrackLineColumn(boolean tlc) { trackLineColumn = tlc; } 473 } 474 /* JavaCC - OriginalChecksum=2f6b7f39a94ff76199e633e8579cec6c (do not edit this line) */ -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/Token.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/Token.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/Token.java new file mode 100644 index 0000000..1e940cd
- + 1 /* Generated By:JavaCC: Do not edit this line. Token.java Version 6.1 */ 2 /* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COLUMN=true,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ 3 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 4 5 /** 6 * Describes the input token stream. 7 */ 8 9 public class Token implements java.io.Serializable { 10 11 /** 12 * The version identifier for this Serializable class. 13 * Increment only if the <i>serialized</i> form of the 14 * class changes. 15 */ 16 private static final long serialVersionUID = 1L; 17 18 /** 19 * An integer that describes the kind of this token. This numbering 20 * system is determined by JavaCCParser, and a table of these numbers is 21 * stored in the file ...Constants.java. 22 */ 23 public int kind; 24 25 /** The line number of the first character of this Token. */ 26 public int beginLine; 27 /** The column number of the first character of this Token. */ 28 public int beginColumn; 29 /** The line number of the last character of this Token. */ 30 public int endLine; 31 /** The column number of the last character of this Token. */ 32 public int endColumn; 33 34 /** 35 * The string image of the token. 36 */ 37 public String image; 38 39 /** 40 * A reference to the next regular (non-special) token from the input 41 * stream. If this is the last token from the input stream, or if the 42 * token manager has not read tokens beyond this one, this field is 43 * set to null. This is true only if this token is also a regular 44 * token. Otherwise, see below for a description of the contents of 45 * this field. 46 */ 47 public Token next; 48 49 /** 50 * This field is used to access special tokens that occur prior to this 51 * token, but after the immediately preceding regular (non-special) token. 52 * If there are no such special tokens, this field is set to null. 53 * When there are more than one such special token, this field refers 54 * to the last of these special tokens, which in turn refers to the next 55 * previous special token through its specialToken field, and so on 56 * until the first special token (whose specialToken field is null). 57 * The next fields of special tokens refer to other special tokens that 58 * immediately follow it (without an intervening regular token). If there 59 * is no such token, this field is null. 60 */ 61 public Token specialToken; 62 63 /** 64 * An optional attribute value of the Token. 65 * Tokens which are not used as syntactic sugar will often contain 66 * meaningful values that will be used later on by the compiler or 67 * interpreter. This attribute value is often different from the image. 68 * Any subclass of Token that actually wants to return a non-null value can 69 * override this method as appropriate. 70 */ 71 public Object getValue() { 72 return null; 73 } 74 75 /** 76 * No-argument constructor 77 */ 78 public Token() {} 79 80 /** 81 * Constructs a new token for the specified Image. 82 */ 83 public Token(int kind) 84 { 85 this(kind, null); 86 } 87 88 /** 89 * Constructs a new token for the specified Image and Kind. 90 */ 91 public Token(int kind, String image) 92 { 93 this.kind = kind; 94 this.image = image; 95 } 96 97 /** 98 * Returns the image. 99 */ 100 public String toString() 101 { 102 return image; 103 } 104 105 /** 106 * Returns a new Token object, by default. However, if you want, you 107 * can create and return subclass objects based on the value of ofKind. 108 * Simply add the cases to the switch for all those special cases. 109 * For example, if you have a subclass of Token called IDToken that 110 * you want to create if ofKind is ID, simply add something like : 111 * 112 * case MyParserConstants.ID : return new IDToken(ofKind, image); 113 * 114 * to the following switch statement. Then you can cast matchedToken 115 * variable to the appropriate type and use sit in your lexical actions. 116 */ 117 public static Token newToken(int ofKind, String image) 118 { 119 switch(ofKind) 120 { 121 default : return new Token(ofKind, image); 122 } 123 } 124 125 public static Token newToken(int ofKind) 126 { 127 return newToken(ofKind, null); 128 } 129 130 } 131 /* JavaCC - OriginalChecksum=9a5dc89ff6b77704ef74bd54f3677052 (do not edit this line) */ -
new file src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/TokenMgrError.java
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/TokenMgrError.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/TokenMgrError.java new file mode 100644 index 0000000..56b083c
- + 1 /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 6.1 */ 2 /* JavaCCOptions: */ 3 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen; 4 5 /** Token Manager Error. */ 6 public class TokenMgrError extends Error 7 { 8 9 /** 10 * The version identifier for this Serializable class. 11 * Increment only if the <i>serialized</i> form of the 12 * class changes. 13 */ 14 private static final long serialVersionUID = 1L; 15 16 /* 17 * Ordinals for various reasons why an Error of this type can be thrown. 18 */ 19 20 /** 21 * Lexical error occurred. 22 */ 23 public static final int LEXICAL_ERROR = 0; 24 25 /** 26 * An attempt was made to create a second instance of a static token manager. 27 */ 28 public static final int STATIC_LEXER_ERROR = 1; 29 30 /** 31 * Tried to change to an invalid lexical state. 32 */ 33 public static final int INVALID_LEXICAL_STATE = 2; 34 35 /** 36 * Detected (and bailed out of) an infinite loop in the token manager. 37 */ 38 public static final int LOOP_DETECTED = 3; 39 40 /** 41 * Indicates the reason why the exception is thrown. It will have 42 * one of the above 4 values. 43 */ 44 int errorCode; 45 46 /** 47 * Replaces unprintable characters by their escaped (or unicode escaped) 48 * equivalents in the given string 49 */ 50 protected static final String addEscapes(String str) { 51 StringBuffer retval = new StringBuffer(); 52 char ch; 53 for (int i = 0; i < str.length(); i++) { 54 switch (str.charAt(i)) 55 { 56 case '\b': 57 retval.append("\\b"); 58 continue; 59 case '\t': 60 retval.append("\\t"); 61 continue; 62 case '\n': 63 retval.append("\\n"); 64 continue; 65 case '\f': 66 retval.append("\\f"); 67 continue; 68 case '\r': 69 retval.append("\\r"); 70 continue; 71 case '\"': 72 retval.append("\\\""); 73 continue; 74 case '\'': 75 retval.append("\\\'"); 76 continue; 77 case '\\': 78 retval.append("\\\\"); 79 continue; 80 default: 81 if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { 82 String s = "0000" + Integer.toString(ch, 16); 83 retval.append("\\u" + s.substring(s.length() - 4, s.length())); 84 } else { 85 retval.append(ch); 86 } 87 continue; 88 } 89 } 90 return retval.toString(); 91 } 92 93 /** 94 * Returns a detailed message for the Error when it is thrown by the 95 * token manager to indicate a lexical error. 96 * Parameters : 97 * EOFSeen : indicates if EOF caused the lexical error 98 * curLexState : lexical state in which this error occurred 99 * errorLine : line number when the error occurred 100 * errorColumn : column number when the error occurred 101 * errorAfter : prefix that was seen before this error occurred 102 * curchar : the offending character 103 * Note: You can customize the lexical error message by modifying this method. 104 */ 105 protected static String LexicalErr(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, int curChar) { 106 char curChar1 = (char)curChar; 107 return("Lexical error at line " + 108 errorLine + ", column " + 109 errorColumn + ". Encountered: " + 110 (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar1)) + "\"") + " (" + (int)curChar + "), ") + 111 "after : \"" + addEscapes(errorAfter) + "\""); 112 } 113 114 /** 115 * You can also modify the body of this method to customize your error messages. 116 * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not 117 * of end-users concern, so you can return something like : 118 * 119 * "Internal Error : Please file a bug report .... " 120 * 121 * from this method for such cases in the release version of your parser. 122 */ 123 public String getMessage() { 124 return super.getMessage(); 125 } 126 127 /* 128 * Constructors of various flavors follow. 129 */ 130 131 /** No arg constructor. */ 132 public TokenMgrError() { 133 } 134 135 /** Constructor with message and reason. */ 136 public TokenMgrError(String message, int reason) { 137 super(message); 138 errorCode = reason; 139 } 140 141 /** Full Constructor. */ 142 public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, int curChar, int reason) { 143 this(LexicalErr(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); 144 } 145 } 146 /* JavaCC - OriginalChecksum=0e1a6491f37ae169ef267e06e7e99988 (do not edit this line) */ -
src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java index dacece7..3a1ec63 100644
a b import org.openstreetmap.josm.data.preferences.CollectionProperty; 29 29 import org.openstreetmap.josm.data.preferences.StringProperty; 30 30 import org.openstreetmap.josm.data.projection.CustomProjection; 31 31 import org.openstreetmap.josm.data.projection.Projection; 32 import org.openstreetmap.josm.gui.NavigatableComponent;33 32 import org.openstreetmap.josm.gui.preferences.PreferenceSetting; 34 33 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory; 35 34 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; … … public class ProjectionPreference implements SubPreferenceSetting { 383 382 } 384 383 385 384 int i = unitsCombo.getSelectedIndex(); 386 NavigatableComponent.setSystemOfMeasurement(unitsValues[i]);385 SystemOfMeasurement.setSystemOfMeasurement(unitsValues[i]); 387 386 388 387 return false; 389 388 }