From c5ae9feda128e8c2906b5b98d14c66724e73007b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Tue, 14 Jul 2026 09:45:57 -0400 Subject: [PATCH 1/2] `JSON` > + `[keep/exclude]_routes`.`route_short_name_regex` #NRT --- .../parser/config/gtfs/data/RouteConfig.kt | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt index edc2800..9ba0a48 100644 --- a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt +++ b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt @@ -170,7 +170,13 @@ data class RouteConfig( val routeId: String? = null, @SerialName("route_short_name") val routeShortName: String? = null, - ) + @SerialName("route_short_name_regex") + val routeShortNameRegex: String? = null, + ) { + internal val parsedRouteShortNameRegex by lazy { + routeShortNameRegex?.toRegex(RegexOption.IGNORE_CASE) + } + } @Serializable data class RouteTypeOverrideConfig( @@ -281,15 +287,17 @@ data class RouteConfig( fun keepRoutes(gRoute: GRoute) = this.keepRoutes.any { //noinspection DiscouragedApi - it.routeId != null && gRoute.routeId == it.routeId - || it.routeShortName != null && gRoute.routeShortName == it.routeShortName + (it.routeId != null && gRoute.routeId == it.routeId) + || (it.routeShortName != null && gRoute.routeShortName == it.routeShortName) + || (it.parsedRouteShortNameRegex?.matches(gRoute.routeShortName) == true) } fun excludeRoutes(gRoute: GRoute) = this.excludeRoutes.any { //noinspection DiscouragedApi - it.routeId != null && gRoute.routeId == it.routeId - || it.routeShortName != null && gRoute.routeShortName == it.routeShortName + (it.routeId != null && gRoute.routeId == it.routeId) + || (it.routeShortName != null && gRoute.routeShortName == it.routeShortName) + || (it.parsedRouteShortNameRegex?.matches(gRoute.routeShortName) == true) } fun overrideRouteType(originalRouteId: String?): Int? { From 99bee461fe456da136b4d11368ed161da0a8c60b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Tue, 14 Jul 2026 09:53:37 -0400 Subject: [PATCH 2/2] PR comments --- .../mtransit/parser/config/gtfs/data/RouteConfig.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt index 9ba0a48..de89190 100644 --- a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt +++ b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt @@ -174,7 +174,7 @@ data class RouteConfig( val routeShortNameRegex: String? = null, ) { internal val parsedRouteShortNameRegex by lazy { - routeShortNameRegex?.toRegex(RegexOption.IGNORE_CASE) + routeShortNameRegex?.takeIf { it.isNotBlank() }?.toRegex(RegexOption.IGNORE_CASE) } } @@ -186,7 +186,11 @@ data class RouteConfig( val originalRouteIdRegex: String? = null, @SerialName("route_type") val routeType: Int, - ) + ) { + internal val parsedOriginalRouteIdRegex by lazy { + originalRouteIdRegex?.takeIf { it.isNotBlank() }?.toRegex(RegexOption.IGNORE_CASE) + } + } @Serializable data class RouteShortNameToRouteIdConfig( @@ -236,7 +240,7 @@ data class RouteConfig( val color: String, ) { internal val parsedRouteShortNameRegex by lazy { - routeShortNameRegex?.toRegex(RegexOption.IGNORE_CASE) + routeShortNameRegex?.takeIf { it.isNotBlank() }?.toRegex(RegexOption.IGNORE_CASE) } } @@ -304,7 +308,7 @@ data class RouteConfig( return this.routeTypeOverrideConfigs .singleOrNull { config -> config.originalRouteId == originalRouteId - || originalRouteId?.let { config.originalRouteIdRegex?.toRegex(RegexOption.IGNORE_CASE)?.matches(originalRouteId) } == true + || originalRouteId?.let { config.parsedOriginalRouteIdRegex?.matches(originalRouteId) } == true } ?.routeType }