Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 30 additions & 4 deletions src/main/java/org/mtransit/commons/StringsCleaner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,21 @@ object StringsCleaner {

private const val ROUTE_LONG_NAME_SHORT_MAX_LENGTH = 33

private val LINE_AND_SHORT_NAME = Regex("""(?U)(^|\s+)line\s+(\w+)""", RegexOption.IGNORE_CASE)
private const val LINE_AND_SHORT_NAME_REPLACEMENT = "$1$2"
private val LINE_AND_SHORT_NAME = Regex(
"""(?Ux)
# Alternative 1: "line <name>" at start or after space
( (^|\s+) line \s+ (\w+) )
|
# Alternative 2: "<name> line" at the end of the string
(
^
( ( \w+ ( - | \s+(?!line\b) | ' | \.\s+(?!line\b) ) )*+ )
( \w+ ) \s+ line ( \s* $ )
)
""".trimIndent(),
RegexOption.IGNORE_CASE
)
Comment thread
mmathieum marked this conversation as resolved.
private const val LINE_AND_SHORT_NAME_REPLACEMENT = "$2$3$5$8"

private val FR_LIGNE_AND_SHORT_NAME = Regex("""(?U)(^|\s+)ligne\s+(\w+)""", RegexOption.IGNORE_CASE)
private const val FR_LIGNE_AND_SHORT_NAME_REPLACEMENT = "$1$2"
Expand Down Expand Up @@ -38,8 +51,21 @@ object StringsCleaner {
@VisibleForTesting
internal const val TRIP_HEADSIGN_SHORT_MAX_LENGTH = 13

private val STATION_AND_NAME = Regex("""(?U)(^|\s+)station\s+(\w+)""", RegexOption.IGNORE_CASE)
private const val STATION_AND_NAME_REPLACEMENT = "$1$2"
private val STATION_AND_NAME = Regex(
"""(?Ux)
# Alternative 1: "station <name>" at start or after space
( (^|\s+) station \s+ (\w+) )
|
# Alternative 2: "<name> station" at the end of the string
(
^
( ( \w+ ( - | \s+(?!station\b) | ' | \.\s+(?!station\b) ) )*+ )
( \w+ ) \s+ station ( \s* $ )
)
""".trimIndent(),
RegexOption.IGNORE_CASE
)
Comment thread
mmathieum marked this conversation as resolved.
private const val STATION_AND_NAME_REPLACEMENT = "$2$3$5$8"

private val FR_STATION_AND_NAME = Regex("""(?U)(^|\s+)station\s+(\w+)""", RegexOption.IGNORE_CASE)
private const val FR_STATION_AND_NAME_REPLACEMENT = "$1$2"
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/org/mtransit/scratch/RegexScratch.kt
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
package org.mtransit.scratch

import java.util.regex.Pattern
import org.intellij.lang.annotations.Language

@Suppress("JoinDeclarationAndAssignment", "CanBeVal", "UNUSED_VALUE", "KotlinRedundantDiagnosticSuppress")
internal object RegexScratch {
@JvmStatic
fun main(args: Array<String>) {
@Language("RegExp")
var regex: String
regex = ""
println("regex: '$regex'.")
val pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE)
val pattern = Regex(regex, RegexOption.IGNORE_CASE)

var string: String
string = ""
println("string: '$string'.")
println("=======")

val matcher = pattern.matcher(string)
while (matcher.find()) {
pattern.findAll(string).forEach { matchResult ->
println("-------")
println("- Found group: '" + matcher.group() + "' (count: '" + matcher.groupCount() + "'):")
for (g in 0..matcher.groupCount()) {
println(" - group[" + g + "]: '" + matcher.group(g) + "'.")
println("- Found group: '${matchResult.value}' (count: '${matchResult.groups.size}'):")
matchResult.groupValues.forEachIndexed { g, groupValue ->
println(" - group[$g]: '$groupValue'.")
}
println("-------")
}
Expand All @@ -30,6 +30,6 @@ internal object RegexScratch {
var replaceAll: String
replaceAll = ""
println("replaceAll: '$replaceAll'.")
println("-> '" + pattern.matcher(string).replaceAll(replaceAll) + "'.")
println("-> '${pattern.replace(string, replaceAll)}'.")
}
}
50 changes: 50 additions & 0 deletions src/test/java/org/mtransit/commons/StringsCleanerTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ class StringsCleanerTests {
}.let { result ->
assertEquals("Édouard-Montpetit", result)
}
"Union Station".let { stopName ->
StringsCleaner.cleanStopName(stopName, languages = listOf(Locale.ENGLISH), routeType = 1) // subway
}.let { result ->
assertEquals("Union", result)
}
Comment thread
mmathieum marked this conversation as resolved.
"St. George Station".let { stopName ->
StringsCleaner.cleanStopName(stopName, languages = listOf(Locale.ENGLISH), routeType = 1) // subway
}.let { result ->
assertEquals("St George", result)
}
}

@Test
Expand Down Expand Up @@ -62,11 +72,46 @@ class StringsCleanerTests {

@Test
fun test_cleanRouteLongName() {
"Yonge-University Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 1)
}.let { result ->
assertEquals("Yonge-University", result)
}
Comment thread
mmathieum marked this conversation as resolved.
"Yonge - University Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 1)
}.let { result ->
assertEquals("Yonge - University Line", result)
}
Comment thread
mmathieum marked this conversation as resolved.
"St. Clair Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 1)
}.let { result ->
assertEquals("St Clair", result)
}
"Tenth Line <> Place D'Orléans".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 3)
}.let { result ->
assertEquals("Tenth Line <> Place D'Orléans", result)
}
"Place D'Orléans <> Tenth Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 3)
}.let { result ->
assertEquals("Place D'Orléans <> Tenth Line", result)
}
"Tenth Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 3)
}.let { result ->
assertEquals("Tenth", result)
}
"Place Orléans Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 3)
}.let { result ->
assertEquals("Place Orléans", result)
}
"Place D'Orléans Line".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 3)
}.let { result ->
assertEquals("Place D'Orléans", result)
}
"Line 10".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.ENGLISH), routeType = 3)
}.let { result ->
Expand All @@ -92,6 +137,11 @@ class StringsCleanerTests {
}.let { result ->
assertEquals("John McCrae HS <> Half Moon Bay", result)
}
"Ligne Bleue".let {
StringsCleaner.cleanRouteLongName(it, languages = listOf(Locale.FRENCH), routeType = 1)
}.let { result ->
assertEquals("Bleue", result)
}
}

@Test
Expand Down