diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index d6932e3d..943a850e 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -290,7 +290,7 @@ public final class BahnProvider implements NetworkProvider private static final Pattern P_CONNECTION_DETAILS_HEAD = Pattern.compile(".*Verbindungsdetails.*", Pattern.DOTALL); private static final Pattern P_CONNECTION_DETAILS_COARSE = Pattern.compile("
\n?(.+?)\n?
", Pattern.DOTALL); - private static final Pattern P_CONNECTION_DETAILS_FINE = Pattern.compile("\\s*(.+?)\\s*.*?" // departure + static final Pattern P_CONNECTION_DETAILS_FINE = Pattern.compile("\\s*(.+?)\\s*.*?" // departure + "(?:" // + "\\s*(.+?)\\s*.*?" // line + "ab\\s+(?:.*?)?\\s*(\\d+:\\d+)\\s*(?:.*?)?" // departureTime @@ -303,6 +303,8 @@ public final class BahnProvider implements NetworkProvider + "|" // + "(\\d+) Min\\..*?" // footway + "\\s*(.+?)\\s*
" // arrival + + "|" // + + "Übergang.*?" + "\\s*(.+?)\\s*
" // arrival + ")", Pattern.DOTALL); private static final Pattern P_CONNECTION_DETAILS_MESSAGES = Pattern .compile("Dauer: \\d+:\\d+|(Anschlusszug nicht mehr rechtzeitig)|(Anschlusszug jedoch erreicht werden)|(nur teilweise dargestellt)|(Längerer Aufenthalt)|(äquivalentem Bahnhof)|(Bahnhof wird mehrfach durchfahren)"); @@ -339,8 +341,7 @@ public final class BahnProvider implements NetworkProvider if (departure != null && firstDeparture == null) firstDeparture = departure; - final String min = mDetFine.group(10); - if (min == null) + if (mDetFine.group(2) != null) { final String line = normalizeLine(ParserUtils.resolveEntities(mDetFine.group(2))); @@ -370,8 +371,10 @@ public final class BahnProvider implements NetworkProvider lastArrival = arrival; lastArrivalTime = arrivalDateTime; } - else + else if (mDetFine.group(10) != null) { + final String min = mDetFine.group(10); + final String arrival = ParserUtils.resolveEntities(mDetFine.group(11)); if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway) @@ -386,6 +389,12 @@ public final class BahnProvider implements NetworkProvider lastArrival = arrival; } + else + { + final String arrival = ParserUtils.resolveEntities(mDetFine.group(12)); + + parts.add(new Connection.Footway(0, departure, arrival)); + } } else { diff --git a/test/de/schildbach/pte/BahnProviderTest.java b/test/de/schildbach/pte/BahnProviderTest.java new file mode 100644 index 00000000..93708db3 --- /dev/null +++ b/test/de/schildbach/pte/BahnProviderTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 2010 the original author or authors. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.schildbach.pte; + +import static junit.framework.Assert.assertTrue; + +import java.util.regex.Matcher; + +import org.junit.Test; + +/** + * @author Andreas Schildbach + */ +public class BahnProviderTest +{ + @Test + public void uebergang() + { + assertFineConnectionDetails("Berlin Hbf
\n" // + + "Übergang\n" // + + "
\n" // + + "Berlin-Lichtenberg
"); + } + + private void assertFineConnectionDetails(String s) + { + Matcher m = BahnProvider.P_CONNECTION_DETAILS_FINE.matcher(s); + assertTrue(m.matches()); + // ParserUtils.printGroups(m); + } +}