From 9648dabdc22076f629444e8ae889a4877d35fa77 Mon Sep 17 00:00:00 2001 From: "andreas.schildbach@gmail.com" Date: Mon, 28 Feb 2011 12:28:13 +0000 Subject: [PATCH] parse more departure locations git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@515 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- src/de/schildbach/pte/BvgProvider.java | 57 ++++++++++++++------------ 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/src/de/schildbach/pte/BvgProvider.java b/src/de/schildbach/pte/BvgProvider.java index 45859f4d..45268569 100644 --- a/src/de/schildbach/pte/BvgProvider.java +++ b/src/de/schildbach/pte/BvgProvider.java @@ -440,8 +440,13 @@ public final class BvgProvider extends AbstractHafasProvider private static final Pattern P_CONNECTION_DETAILS_HEAD = Pattern.compile(".*(?:Datum|Abfahrt): (\\d\\d\\.\\d\\d\\.\\d\\d).*", Pattern.DOTALL); private static final Pattern P_CONNECTION_DETAILS_COARSE = Pattern.compile("

\n(.+?)

", Pattern.DOTALL); - static final Pattern P_CONNECTION_DETAILS_FINE = Pattern.compile("(?:(?:\n)?" // departureId - + "(.+?)(?:\n)?)?.*?" // departure + static final Pattern P_CONNECTION_DETAILS_FINE = Pattern.compile("" // + + "(?:" // + + "(?:\n)?" // departureId + + "(.+?)(?:\n)?" // departureName + + "|" // + + "([^<]*)" // departureLat,departureLon,departureName + + ")?.*?" // + "(?:" // + "ab (\\d+:\\d+)\n" // departureTime + "(Gl\\. \\d+)?.*?" // departurePosition @@ -450,13 +455,13 @@ public final class BvgProvider extends AbstractHafasProvider + "an (\\d+:\\d+)\n" // arrivalTime + "(Gl\\. \\d+)?.*?" // arrivalPosition + "\n" // arrivalId - + "([^<]*)" // arrival + + "([^<]*)" // arrivalName + "|" // + "(\\d+) Min\\.\n" // footway + "(?:Fussweg|Übergang)\n" // + "
\n" // + "(?:
\n" // arrivalId - + "([^<]*)|([^<]*)|([^<]*)).*?" // arrival + + "([^<]*)|([^<]*)|([^<]*)).*?" // arrivalName,arrivalLat,arrivalLon,arrivalName,arrivalName + ").*?", Pattern.DOTALL); @Override @@ -481,43 +486,44 @@ public final class BvgProvider extends AbstractHafasProvider final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(mDetCoarse.group(1)); if (mDetFine.matches()) { - final String departureName = ParserUtils.resolveEntities(mDetFine.group(2)); + final String departureName = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDetFine.group(2), mDetFine.group(5))); + + final int departureId = mDetFine.group(1) != null ? Integer.parseInt(mDetFine.group(1)) : 0; + final int departureLon = mDetFine.group(3) != null ? Integer.parseInt(mDetFine.group(3)) : 0; + final int departureLat = mDetFine.group(4) != null ? Integer.parseInt(mDetFine.group(4)) : 0; + final Location departure; if (departureName != null) - { - final int departureId = Integer.parseInt(mDetFine.group(1)); - departure = new Location(departureId != 0 ? LocationType.STATION : LocationType.ANY, departureId, null, departureName); - } + departure = new Location(departureId != 0 ? LocationType.STATION : LocationType.ANY, departureId, departureLat, departureLon, + null, departureName); else - { departure = lastArrival; - } if (departure != null && firstDeparture == null) firstDeparture = departure; - final String min = mDetFine.group(11); + final String min = mDetFine.group(14); if (min == null) { - Date departureTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(3))); + Date departureTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(6))); if (lastArrivalTime != null && departureTime.before(lastArrivalTime)) departureTime = ParserUtils.addDays(departureTime, 1); - final String departurePosition = mDetFine.group(4); + final String departurePosition = mDetFine.group(7); - final String line = normalizeLine(ParserUtils.resolveEntities(mDetFine.group(5))); + final String line = normalizeLine(ParserUtils.resolveEntities(mDetFine.group(8))); - final Location destination = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(6))); + final Location destination = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(9))); - Date arrivalTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(7))); + Date arrivalTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(10))); if (departureTime.after(arrivalTime)) arrivalTime = ParserUtils.addDays(arrivalTime, 1); - final String arrivalPosition = mDetFine.group(8); + final String arrivalPosition = mDetFine.group(11); - final int arrivalId = Integer.parseInt(mDetFine.group(9)); + final int arrivalId = Integer.parseInt(mDetFine.group(12)); - final Location arrival = new Location(LocationType.STATION, arrivalId, null, ParserUtils.resolveEntities(mDetFine.group(10))); + final Location arrival = new Location(LocationType.STATION, arrivalId, null, ParserUtils.resolveEntities(mDetFine.group(13))); parts.add(new Connection.Trip(line, destination, departureTime, departurePosition, departure, arrivalTime, arrivalPosition, arrival, null, null)); @@ -530,14 +536,13 @@ public final class BvgProvider extends AbstractHafasProvider } else { - final int arrivalId = mDetFine.group(12) != null ? Integer.parseInt(mDetFine.group(12)) : 0; + final int arrivalId = mDetFine.group(15) != null ? Integer.parseInt(mDetFine.group(15)) : 0; - final int arrivalLon = mDetFine.group(14) != null ? Integer.parseInt(mDetFine.group(14)) : 0; + final int arrivalLon = mDetFine.group(17) != null ? Integer.parseInt(mDetFine.group(17)) : 0; + final int arrivalLat = mDetFine.group(18) != null ? Integer.parseInt(mDetFine.group(18)) : 0; - final int arrivalLat = mDetFine.group(15) != null ? Integer.parseInt(mDetFine.group(15)) : 0; - - final String arrivalName = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDetFine.group(13), mDetFine.group(16), - mDetFine.group(17))); + final String arrivalName = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDetFine.group(16), mDetFine.group(19), + mDetFine.group(20))); final Location arrival = new Location(arrivalId != 0 ? LocationType.STATION : LocationType.ANY, arrivalId, arrivalLat, arrivalLon, null, arrivalName);