diff --git a/README.md b/README.md index aa64fe26..9836ee64 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ -# Montréal STM Subway for [MonTransit](https://github.com/mtransitapps/mtransit-for-android) + +# Société de Transport de Montréal subways for [MonTransit](https://github.com/mtransitapps/mtransit-for-android) -## Download on Google Play +## Download on the Play Store @@ -16,9 +17,7 @@ ## Social -* [Facebook](https://www.facebook.com/MonTransit) - -* [Twitter](https://twitter.com/montransit) +[Facebook](https://www.facebook.com/MonTransit) | [Twitter/X](https://twitter.com/montransit) | [Instagram](https://www.instagram.com/mtransit.apps) | [Threads](https://www.threads.com/@mtransit.apps) ## BETA program @@ -26,4 +25,4 @@ Learn more about the BETA program [here](https://github.com/mtransitapps/mtransi ## License -* [Apache Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) +* [Apache Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.html) diff --git a/agency-parser/parser_class b/agency-parser/parser_class deleted file mode 100755 index 0d676813..00000000 --- a/agency-parser/parser_class +++ /dev/null @@ -1 +0,0 @@ -org.mtransit.parser.ca_montreal_stm_subway.MontrealSTMSubwayAgencyTools \ No newline at end of file diff --git a/agency-parser/src/main/java/org/mtransit/parser/ca_montreal_stm_subway/MontrealSTMSubwayAgencyTools.java b/agency-parser/src/main/java/org/mtransit/parser/ca_montreal_stm_subway/MontrealSTMSubwayAgencyTools.java deleted file mode 100644 index 5a69967d..00000000 --- a/agency-parser/src/main/java/org/mtransit/parser/ca_montreal_stm_subway/MontrealSTMSubwayAgencyTools.java +++ /dev/null @@ -1,162 +0,0 @@ -package org.mtransit.parser.ca_montreal_stm_subway; - -import static org.mtransit.commons.CleanUtils.SPACE; -import static org.mtransit.commons.RegexUtils.WHITESPACE_CAR; -import static org.mtransit.commons.RegexUtils.any; -import static org.mtransit.commons.RegexUtils.group; -import static org.mtransit.commons.StringUtils.EMPTY; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.mtransit.commons.CleanUtils; -import org.mtransit.commons.Cleaner; -import org.mtransit.parser.DefaultAgencyTools; -import org.mtransit.parser.gtfs.data.GRoute; -import org.mtransit.parser.gtfs.data.GStop; -import org.mtransit.parser.mt.data.MAgency; - -import java.util.List; -import java.util.Locale; -import java.util.regex.Pattern; - -// https://www.stm.info/en/about/developers -// https://www.stm.info/fr/a-propos/developpeurs -public class MontrealSTMSubwayAgencyTools extends DefaultAgencyTools { - - public static void main(@NotNull String[] args) { - new MontrealSTMSubwayAgencyTools().start(args); - } - - @Nullable - @Override - public List getSupportedLanguages() { - return LANG_FR_EN; - } - - @NotNull - @Override - public String getAgencyName() { - return "STM"; - } - - @NotNull - @Override - public Integer getAgencyRouteType() { - return MAgency.ROUTE_TYPE_SUBWAY; - } - - @Nullable - @Override - public String getServiceIdCleanupRegex() { - return "(^\\d{2}[A-Z]-)"; // starts with YY + 1 Letter + dash // 26J-Globaux-01-I - } - - @Override - public boolean defaultRouteIdEnabled() { - return true; - } - - @Override - public boolean useRouteShortNameForRouteId() { - return false; // route ID == default route short name - } - - @NotNull - @Override - public String getRouteShortName(@NotNull GRoute gRoute) { - return EMPTY; // no route short name - } - - @Override - public boolean defaultRouteLongNameEnabled() { - return false; // route ID used to target Twitter news ... - } - - @NotNull - @Override - public String cleanRouteShortName(@NotNull String routeShortName) { - return super.cleanRouteShortName(routeShortName); - } - - private static final Cleaner FIX_BLEU = new Cleaner("(BLEU)", "BLEUE"); - private static final Cleaner STARTS_WITH_LINES_ = new Cleaner("(^(line|ligne) (\\d+) - )", "$3: ", true); - - @NotNull - @Override - public String cleanRouteLongName(@NotNull String routeLongName) { - routeLongName = FIX_BLEU.clean(routeLongName); - routeLongName = STARTS_WITH_LINES_.clean(routeLongName); - return super.cleanRouteLongName(routeLongName); - } - - @NotNull - @Override - public String getStopCode(@NotNull GStop gStop) { - return EMPTY; // no stop code - } - - @Override - public boolean defaultAgencyColorEnabled() { - return true; - } - - @Nullable - @Override - public String fixColor(@Nullable String color) { - if (color != null && !color.isEmpty()) { - return color; // keep provided colors - } - return super.fixColor(color); - } - - private static final Pattern UDEM = CleanUtils.cleanWords("universit[é|e][-| ]de[-| ]montr[é|e]al"); - private static final String UDEM_REPLACEMENT = CleanUtils.cleanWordsReplacement("UdeM"); - - private static final Pattern U_DE_S = CleanUtils.cleanWords("universit[e|é][-| ]de[-| ]sherbrooke"); - private static final String U_DE_S_REPLACEMENT = CleanUtils.cleanWordsReplacement("UdeS"); - - private static final Cleaner ENDS_WITH_ZONE = new Cleaner( - group(any(WHITESPACE_CAR) + "-" + any(WHITESPACE_CAR) + "zone [a-z]+$"), - true - ); - - @NotNull - @Override - public String cleanTripHeadsign(@NotNull String tripHeadsign) { - tripHeadsign = CleanUtils.toLowerCaseUpperCaseWords(Locale.FRENCH, tripHeadsign, getIgnoreWords()); - tripHeadsign = ENDS_WITH_ZONE.clean(tripHeadsign); - tripHeadsign = U_DE_S.matcher(tripHeadsign).replaceAll(U_DE_S_REPLACEMENT); - tripHeadsign = STATION_.matcher(tripHeadsign).replaceAll(SPACE); - tripHeadsign = CleanUtils.SAINT.matcher(tripHeadsign).replaceAll(CleanUtils.SAINT_REPLACEMENT); - tripHeadsign = CleanUtils.cleanStreetTypesFRCA(tripHeadsign); - return CleanUtils.cleanLabel(getFirstLanguageNN(), tripHeadsign); - } - - @NotNull - private String[] getIgnoreWords() { - return new String[]{ - "UQAM", "UQAM", "OACI", "IX" - }; - } - - @Override - public boolean directionFinderEnabled() { - return true; // required to merge trips into 1 direction - } - - private static final Pattern STATION_ = Pattern.compile("(station )", Pattern.CASE_INSENSITIVE); - private static final Pattern ENDS_WITH_DIGITS = Pattern.compile("( \\d+$)", Pattern.CASE_INSENSITIVE); - - @NotNull - @Override - public String cleanStopName(@NotNull String stopName) { - stopName = CleanUtils.toLowerCaseUpperCaseWords(Locale.FRENCH, stopName, getIgnoreWords()); - stopName = ENDS_WITH_DIGITS.matcher(stopName).replaceAll(EMPTY); - stopName = UDEM.matcher(stopName).replaceAll(UDEM_REPLACEMENT); - stopName = U_DE_S.matcher(stopName).replaceAll(U_DE_S_REPLACEMENT); - stopName = STATION_.matcher(stopName).replaceAll(SPACE); - stopName = CleanUtils.SAINT.matcher(stopName).replaceAll(CleanUtils.SAINT_REPLACEMENT); - stopName = CleanUtils.cleanStreetTypesFRCA(stopName); - return super.cleanStopName(stopName); - } -} diff --git a/app-android/.gitignore b/app-android/.gitignore index f57259e5..e3db34ef 100644 --- a/app-android/.gitignore +++ b/app-android/.gitignore @@ -76,6 +76,7 @@ proguard/ /src/main/res/values/module_app_icon_color.xml /src/main/res/values/parent_agency_values.xml /src/main/res/values-fr/bike_station_strings.xml +/src/main/res/values-fr/gtfs_rts_strings.xml /src/main/res/values-fr/strings.xml # trigger change 1 diff --git a/app-android/src/main/play/listings/en-US/full-description.txt b/app-android/src/main/play/listings/en-US/full-description.txt deleted file mode 100644 index d3abf0c3..00000000 --- a/app-android/src/main/play/listings/en-US/full-description.txt +++ /dev/null @@ -1,22 +0,0 @@ -This app adds Montreal STM subways information to MonTransit. - -This app provides the planned schedule as well as real time service updates from www.stm.info and the latest news from www.stm.info and @stminfo, @stm_Orange, @stm_Verte, @stm_Bleue, @stm_Jaune and @stm_nouvelles on Twitter. - -STM subways serve Montreal, Laval and Longueuil in Quebec, Canada. - -Once this application is installed, the MonTransit app will display subways information (schedule...). - -This application only has a temporary icon: download the MonTransit app (free) in the "More ..." section bellow or by following this Google Play link https://bit.ly/MonTransitPlay - -You can install this application on the SD card but it is not recommended. - -The information comes from the GTFS file provided by the Société de Transport de Montréal. -https://www.stm.info/en/about/developers - -This application is free and open-source: -https://github.com/mtransitapps/ca-montreal-stm-subway-android - -This application is not related with the Société de Transport de Montréal. - -Permissions: -- Other: required to load subways service updates and read the news from www.stm.info and Twitter. diff --git a/app-android/src/main/play/listings/en-US/short-description.txt b/app-android/src/main/play/listings/en-US/short-description.txt deleted file mode 100644 index 682bc7e7..00000000 --- a/app-android/src/main/play/listings/en-US/short-description.txt +++ /dev/null @@ -1 +0,0 @@ -Montreal STM subways for MonTransit. Schedule. Real-Time Service Updates. News. diff --git a/app-android/src/main/play/listings/en-US/title.txt b/app-android/src/main/play/listings/en-US/title.txt index 066576d2..c6fb6089 100644 --- a/app-android/src/main/play/listings/en-US/title.txt +++ b/app-android/src/main/play/listings/en-US/title.txt @@ -1 +1 @@ -Montreal Subway - MonTransit +Montreal subways - MonTransit diff --git a/app-android/src/main/play/listings/fr-FR/full-description.txt b/app-android/src/main/play/listings/fr-FR/full-description.txt deleted file mode 100644 index b8f6fdc0..00000000 --- a/app-android/src/main/play/listings/fr-FR/full-description.txt +++ /dev/null @@ -1,22 +0,0 @@ -Cette app ajoute les informations des métros STM de Montréal à MonTransit. - -Cette app fournie les horaires planifiées ainsi que l'état de service en temps réel de www.stm.info et les dernières nouvelles de www.stm.info et @stminfo, @stm_Orange, @stm_Verte, @stm_Bleue, @stm_Jaune et @stm_nouvelles sur Twitter. - -Les métros de la STM desservent Montréal, Laval et Longueuil au Québec, Canada. - -Une fois cette application installée, l'application MonTransit affichera les informations des métros (horaires ...). - -Cette application a seulement une icône temporaire : télécharger l'app MonTransit (gratuit) dans la section "Autres ..." ci-dessous ou en cliquant sur ce lien Google Play https://bit.ly/MonTransitPlay - -Vous pouvez installer cette application sur la carte SD mais ce n'est pas recommandé. - -Ces horaires sont générées à partir du fichier GTFS fourni par la Société de Transport de Montréal. -https://www.stm.info/fr/a-propos/developpeurs - -Cette application est gratuite et open-source : -https://github.com/mtransitapps/ca-montreal-stm-subway-android - -Cette application n'est pas associée à la Société de Transport de Montréal. - -Autorisations : -- Autres : requis pour le chargement de l'état du service métro et pour lire les nouvelles de www.stm.info et Twitter. diff --git a/app-android/src/main/play/listings/fr-FR/short-description.txt b/app-android/src/main/play/listings/fr-FR/short-description.txt deleted file mode 100644 index 2ac3dd0c..00000000 --- a/app-android/src/main/play/listings/fr-FR/short-description.txt +++ /dev/null @@ -1 +0,0 @@ -Métros STM de Montréal pour MonTransit. Horaires. État de service. Nouvelles. diff --git a/app-android/src/main/play/listings/fr-FR/title.txt b/app-android/src/main/play/listings/fr-FR/title.txt deleted file mode 100644 index 152b9bec..00000000 --- a/app-android/src/main/play/listings/fr-FR/title.txt +++ /dev/null @@ -1 +0,0 @@ -Métro STM Montréal - MonTrans… diff --git a/app-android/src/main/res-current/raw/current_gtfs_rts_stops b/app-android/src/main/res-current/raw/current_gtfs_rts_stops index d08b0132..9f7fbbe8 100644 --- a/app-android/src/main/res-current/raw/current_gtfs_rts_stops +++ b/app-android/src/main/res-current/raw/current_gtfs_rts_stops @@ -8,7 +8,7 @@ 9,'','Mont-Royal',45.52482,-73.58171,1,57 10,'','Sherbrooke',45.51906,-73.56922,2,1567 12,'','Champ-De-Mars',45.51006,-73.55645,1,1569 -13,'','Pl-D''Armes',45.50635,-73.55955,1,1570 +13,'','Place-D''Armes',45.50635,-73.55955,1,1570 14,'','Square-Victoria–OACI',45.50191,-73.56310,2,1571 15,'','Bonaventure',45.49813,-73.56729,1,1572 16,'','Lucien-L''Allier',45.49477,-73.57110,2,1573 @@ -25,8 +25,8 @@ 27,'','Frontenac',45.53353,-73.55222,2,1605 28,'','Papineau',45.52412,-73.55296,2,1606 29,'','Beaudry',45.51949,-73.55731,2,1607 -30,'','St-Laurent',45.51108,-73.56496,2,1629 -31,'','Pl-Des-Arts',45.50822,-73.56843,1,1630 +30,'','Saint-Laurent',45.51108,-73.56496,2,1629 +31,'','Place-Des-Arts',45.50822,-73.56843,1,1630 32,'','McGill',45.50410,-73.57166,1,1631 33,'','Peel',45.50088,-73.57472,2,1632 34,'','Guy-Concordia',45.49557,-73.57931,2,1633 @@ -39,12 +39,12 @@ 41,'','Jolicoeur',45.45703,-73.58195,1,1661 42,'','Monk',45.45116,-73.59324,2,1662 43,'','Angrignon',45.44647,-73.60312,1,1663 -44,'','Longueuil-UdeS -Zone B',45.52463,-73.52198,2,1664 +44,'','Longueuil-UdeS (Z:B)',45.52463,-73.52198,2,1664 45,'','Jean-Drapeau',45.51245,-73.53313,2,1665 -46,'','Pl-St-Henri',45.47732,-73.58663,2,1666 +46,'','Place-Saint-Henri',45.47732,-73.58663,2,1666 47,'','Vendôme',45.47391,-73.60376,1,1667 48,'','Villa-Maria',45.47975,-73.61976,1,1668 -50,'','Côte-Ste-Catherine',45.49234,-73.63310,2,1691 +50,'','Côte-Sainte-Catherine',45.49234,-73.63310,2,1691 51,'','Plamondon',45.49466,-73.63827,2,1692 52,'','Namur',45.49469,-73.65278,2,1693 53,'','De La Savane',45.50009,-73.66158,2,1694 @@ -58,11 +58,11 @@ 61,'','De Castelnau',45.53547,-73.61987,2,1723 62,'','Fabre',45.54674,-73.60815,2,1724 63,'','D''Iberville',45.55358,-73.60199,2,1725 -64,'','St-Michel',45.55957,-73.60002,2,1726 +64,'','Saint-Michel',45.55957,-73.60002,2,1726 65,'','Côte-Vertu',45.51425,-73.68275,1,1727 -66,'','Cartier -Zone B',45.56004,-73.68223,1,1728 -67,'','De La Concorde -Zone B',45.56069,-73.70939,1,1729 -68,'','Montmorency -Zone B',45.55846,-73.72242,1,1730 +66,'','Cartier (Z:B)',45.56004,-73.68223,1,1728 +67,'','De La Concorde (Z:B)',45.56069,-73.70939,1,1729 +68,'','Montmorency (Z:B)',45.55846,-73.72242,1,1730 9999052,'','Jean-Talon',45.53891,-73.61394,1,734350477 9999055,'','Jean-Talon',45.53920,-73.61506,1,734350480 9999111,'','Berri-UQAM',45.51532,-73.56108,1,734351313 diff --git a/app-android/src/main/res-current/raw/current_gtfs_rts_trips b/app-android/src/main/res-current/raw/current_gtfs_rts_trips index 710de11c..e47f8886 100644 --- a/app-android/src/main/res-current/raw/current_gtfs_rts_trips +++ b/app-android/src/main/res-current/raw/current_gtfs_rts_trips @@ -4,5 +4,5 @@ 200,0,'Montmorency',2 400,0,'Berri-UQAM',4 401,0,'Longueuil-UdeS',4 +500,0,'Saint-Michel',5 501,0,'Snowdon',5 -500,0,'St-Michel',5 diff --git a/app-android/src/main/res/values-fr/gtfs_rts_strings.xml b/app-android/src/main/res/values-fr/gtfs_rts_strings.xml deleted file mode 100755 index bfba3cc8..00000000 --- a/app-android/src/main/res/values-fr/gtfs_rts_strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Métro STM - STM - \ No newline at end of file diff --git a/app-android/src/main/res/values-fr/strings.xml b/app-android/src/main/res/values-fr/strings.xml deleted file mode 100755 index 8e62b7d2..00000000 --- a/app-android/src/main/res/values-fr/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - MonTransit STM Métro (Montréal) - Données du métro de la STM à Montréal pour MonTransit. - \ No newline at end of file diff --git a/app-android/src/main/res/values/gtfs_rts_strings.xml b/app-android/src/main/res/values/gtfs_rts_strings.xml deleted file mode 100755 index a50c3b14..00000000 --- a/app-android/src/main/res/values/gtfs_rts_strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - STM Subway - STM - \ No newline at end of file diff --git a/app-android/src/main/res/values/strings.xml b/app-android/src/main/res/values/strings.xml deleted file mode 100644 index 5652906c..00000000 --- a/app-android/src/main/res/values/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - MonTransit STM Subway (Montreal) - Montreal STM Subway data for MonTransit. - \ No newline at end of file diff --git a/commons b/commons index 691e1daa..914ca673 160000 --- a/commons +++ b/commons @@ -1 +1 @@ -Subproject commit 691e1daa11d3e7b1903a4a710ea682bd82907849 +Subproject commit 914ca6731033726c84fc4afc03e4f4e3f14d6801 diff --git a/commons-android b/commons-android index 32f71240..b41c133a 160000 --- a/commons-android +++ b/commons-android @@ -1 +1 @@ -Subproject commit 32f7124079bc40e6fc26bb9f81a126a6f7edb0c0 +Subproject commit b41c133aae614115fea5ab82f1e10cfedec664f6 diff --git a/commons-java b/commons-java index fe1138c3..9fd8a062 160000 --- a/commons-java +++ b/commons-java @@ -1 +1 @@ -Subproject commit fe1138c3af3485ac673dfe3799dc7ce897c93b54 +Subproject commit 9fd8a0628e32068e75d103cb457e91ca32642d6c diff --git a/config/agency_location b/config/agency_location new file mode 100644 index 00000000..5e31604f --- /dev/null +++ b/config/agency_location @@ -0,0 +1 @@ +Montréal \ No newline at end of file diff --git a/config/agency_name b/config/agency_name new file mode 100644 index 00000000..c3d9f49f --- /dev/null +++ b/config/agency_name @@ -0,0 +1,2 @@ +STM +Société de Transport de Montréal \ No newline at end of file diff --git a/config/cities b/config/cities new file mode 100644 index 00000000..820c7107 --- /dev/null +++ b/config/cities @@ -0,0 +1 @@ +Montreal, Laval, Longueuil \ No newline at end of file diff --git a/config/fr/source_url b/config/fr/source_url new file mode 100644 index 00000000..59c31851 --- /dev/null +++ b/config/fr/source_url @@ -0,0 +1 @@ +https://www.stm.info/fr/a-propos/developpeurs \ No newline at end of file diff --git a/config/gtfs/agency.json b/config/gtfs/agency.json new file mode 100644 index 00000000..0bc131a6 --- /dev/null +++ b/config/gtfs/agency.json @@ -0,0 +1,16 @@ +{ + "target_route_type_id": 1, + "additional_languages": [ + "en" + ], + "default_color": "009EE0", + "default_color_comment": "STM bleue", + "default_strings_cleaner_enabled": true, + "ignore_upper_case_words": [ + "UQAM", + "OACI", + "IX" + ], + "service_id_cleanup_regex": "(^\\d{2}[A-Z]-)", + "service_id_cleanup_regex_comment": "starts with YY + 1 Letter + dash // 26J-Globaux-01-I" +} \ No newline at end of file diff --git a/config/gtfs/route.json b/config/gtfs/route.json new file mode 100644 index 00000000..082abea2 --- /dev/null +++ b/config/gtfs/route.json @@ -0,0 +1,99 @@ +{ + "default_route_id_enabled": true, + "use_route_short_name_for_route_id": false, + "use_route_short_name_for_route_id_comment": "route ID == default route short name", + "route_short_name_cleaners_comment": "route short name in long name because of logo", + "route_short_name_cleaners": [ + { + "regex": ".*" + } + ], + "route_to_short_name_configs": [ + { + "route_id": "1", + "route_short_name": "" + }, + { + "route_id": "2", + "route_short_name": "" + }, + { + "route_id": "4", + "route_short_name": "" + }, + { + "route_id": "5", + "route_short_name": "" + } + ], + "default_route_long_name_enabled": false, + "default_route_long_name_enabled_comment": "route ID used to target Twitter news ...", + "route_long_name_cleaners": [ + { + "regex": "bleu", + "ignore_case": true, + "is_word": true, + "replacement": "Bleue" + }, + { + "regex": "(^(line|ligne) (\\d+) - )", + "ignore_case": true, + "replacement": "$3: " + } + ], + "route_colors_ignored": [ + "FFD900" + ], + "route_colors": [ + { + "route_comment": "Jaune https://www.stm.info/en/info/networks/metro/ligne-4---jaune", + "route_id": "4", + "route_short_name": "4", + "color": "FFD900" + } + ], + "trip_headsign_cleaners": [ + { + "regex": "universit[é|e][-| ]de[-| ]montr[é|e]al", + "ignore_case": true, + "is_word": true, + "replacement": "UdeM" + }, + { + "regex": "universit[e|é][-| ]de[-| ]sherbrooke", + "ignore_case": true, + "is_word": true, + "replacement": "UdeS" + }, + { + "regex": "\\s*\\-\\s*zone\\s+([a-z]+)", + "ignore_case": true + } + ], + "direction_finder_enabled": true, + "stop_code_cleaners_comment": "stop code not visible on official website", + "stop_code_cleaners": [ + { + "regex": ".*" + } + ], + "stop_name_cleaners": [ + { + "regex": "universit[é|e][-| ]de[-| ]montr[é|e]al", + "ignore_case": true, + "is_word": true, + "replacement": "UdeM" + }, + { + "regex": "universit[e|é][-| ]de[-| ]sherbrooke", + "ignore_case": true, + "is_word": true, + "replacement": "UdeS" + }, + { + "regex": "\\s*\\-\\s*zone\\s+([a-z]+)", + "ignore_case": true, + "replacement": "(Z:$1)" + } + ] +} \ No newline at end of file diff --git a/config/source_url b/config/source_url new file mode 100644 index 00000000..4b2ef78e --- /dev/null +++ b/config/source_url @@ -0,0 +1 @@ +https://www.stm.info/en/about/developers \ No newline at end of file diff --git a/config/state b/config/state new file mode 100644 index 00000000..c54dbcca --- /dev/null +++ b/config/state @@ -0,0 +1,2 @@ +QC +Québec \ No newline at end of file diff --git a/parser b/parser index 2f2cf1f4..74282b73 160000 --- a/parser +++ b/parser @@ -1 +1 @@ -Subproject commit 2f2cf1f462fee8b3809f31a22d3831c63c41c399 +Subproject commit 74282b730c413a62164d1982026e12eae532ec1a