package cgeo.geocaching.connector.gc; import org.eclipse.jdt.annotation.NonNull; import java.util.Locale; import java.util.regex.Pattern; /** * These patterns have been optimized for speed. Improve them only if you can prove * that *YOUR* pattern is faster. Use RegExRealPerformanceTest to show. * * For further information about patterns have a look at * http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html */ public final class GCConstants { static final String GC_URL = "http://www.geocaching.com/"; private static final String GC_TILE_URL = "http://tiles.geocaching.com/"; /** Live Map */ final static @NonNull String URL_LIVE_MAP = GC_URL + "map/default.aspx"; /** Live Map pop-up */ final static @NonNull String URL_LIVE_MAP_DETAILS = GC_TILE_URL + "map.details"; /** Caches in a tile */ final static @NonNull String URL_MAP_INFO = GC_TILE_URL + "map.info"; /** Tile itself */ final static @NonNull String URL_MAP_TILE = GC_TILE_URL + "map.png"; /** Format used by geocaching.com when user is not logged in. */ public static final String DEFAULT_GC_DATE = "MM/dd/yyyy"; /** * Patterns for parsing the result of a (detailed) search */ final static Pattern PATTERN_HINT = Pattern.compile("
]*>(.*?)
", Pattern.DOTALL); final static Pattern PATTERN_DESC = Pattern.compile("(.*?)\\s*\\s*

\\s*

\\s*

", Pattern.DOTALL); final static Pattern PATTERN_SHORTDESC = Pattern.compile("(.*?)\\s*", Pattern.DOTALL); final static Pattern PATTERN_GEOCODE = Pattern.compile("class=\"CoordInfoCode\">(GC[0-9A-Z]+)"); final static Pattern PATTERN_CACHEID = Pattern.compile("/seek/log\\.aspx\\?ID=(\\d+)"); final static Pattern PATTERN_GUID = Pattern.compile(Pattern.quote("&wid=") + "([0-9a-z\\-]+)" + Pattern.quote("&")); final static Pattern PATTERN_SIZE = Pattern.compile("

[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"\\w+:]*>[^<]*[^<]*[^<]*[^<]*

"); final static Pattern PATTERN_LATLON = Pattern.compile("]*>(.*?)"); final static Pattern PATTERN_LATLON_ORIG = Pattern.compile("\\{\"isUserDefined\":true[^}]+?\"oldLatLngDisplay\":\"([^\"]+)\"\\}"); final static Pattern PATTERN_LOCATION = Pattern.compile(Pattern.quote("In ") + "(?:]*>)?(.*?)<"); final static Pattern PATTERN_PERSONALNOTE = Pattern.compile("]*>(.*?)", Pattern.DOTALL); final static Pattern PATTERN_NAME = Pattern.compile("(.*?)"); final static Pattern PATTERN_DIFFICULTY = Pattern.compile("]*>[^<]*]*>[^<]*hidden or"); final static Pattern PATTERN_FOUND = Pattern.compile("ctl00_ContentBody_GeoNav_logText\">(Found It|Attended)"); final static Pattern PATTERN_FOUND_ALTERNATIVE = Pattern.compile("
[^<]+([^<]+)"); final static Pattern PATTERN_TYPE = Pattern.compile("\\W*Hidden[\\s:]*([^<]+?)
"); final static Pattern PATTERN_HIDDENEVENT = Pattern.compile("Event\\s*Date\\s*:\\s*([^<]+)
", Pattern.DOTALL); final static Pattern PATTERN_FAVORITE = Pattern.compile("
"); // without 'class="hideMe"' inside the tag ! final static Pattern PATTERN_FAVORITECOUNT = Pattern.compile("\\D*([0-9]+?)\\D*"); final static Pattern PATTERN_COUNTLOGS = Pattern.compile(""); /** Two groups ! */ final static Pattern PATTERN_COUNTLOG = Pattern.compile("]+> (\\d*[,.]?\\d+)"); static final Pattern PATTERN_PREMIUMMEMBERS = Pattern.compile("

This is a Premium Member Only cache.

"); final static Pattern PATTERN_ATTRIBUTES = Pattern.compile("Attributes\\s*[^<]*
((?:[^<]*\"[^\"]+\"[^]*>)+?)[^<]*]+>([^<]+)(?:
([^<]+)

)?"); final static Pattern PATTERN_INVENTORY = Pattern.compile("\\W*Inventory[^<]*[^<]*[^<]*
([^<]*