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);
+ }
+}