diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java
index 53c6ed1f..3d35052d 100644
--- a/src/de/schildbach/pte/SbbProvider.java
+++ b/src/de/schildbach/pte/SbbProvider.java
@@ -39,12 +39,39 @@ public class SbbProvider implements NetworkProvider
public boolean hasCapabilities(final Capability... capabilities)
{
- return false;
+ for (final Capability capability : capabilities)
+ if (capability != Capability.DEPARTURES)
+ return false;
+
+ return true;
}
+ private static final String NAME_URL = "http://fahrplan.sbb.ch/bin/bhftafel.exe/dox?input=";
+ private static final Pattern P_SINGLE_NAME = Pattern.compile(".*?.*",
+ Pattern.DOTALL);
+ private static final Pattern P_MULTI_NAME = Pattern.compile("\n?" //
+ + "(.*?)\n?" //
+ + "", Pattern.DOTALL);
+
public List autoCompleteStationName(final CharSequence constraint) throws IOException
{
- throw new UnsupportedOperationException();
+ final CharSequence page = ParserUtils.scrape(NAME_URL + ParserUtils.urlEncode(constraint.toString()));
+
+ final List names = new ArrayList();
+
+ final Matcher mSingle = P_SINGLE_NAME.matcher(page);
+ if (mSingle.matches())
+ {
+ names.add(ParserUtils.resolveEntities(mSingle.group(1)));
+ }
+ else
+ {
+ final Matcher mMulti = P_MULTI_NAME.matcher(page);
+ while (mMulti.find())
+ names.add(ParserUtils.resolveEntities(mMulti.group(2)));
+ }
+
+ return names;
}
public List nearbyStations(final double lat, final double lon, final int maxDistance, final int maxStations) throws IOException