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
1 change: 1 addition & 0 deletions common/is-sport-showing.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const sportShowings = [
/EUROPA LEAGUE QUALIFIER/i,
/EUROPA LEAGUE FINAL/i,
/Enterprise National League/i,
/Fifa World Cup/i,
/FIFA Club World/i,
/FIFA CWC/i,
/NON-LEAGUE FINALS?/i,
Expand Down
15 changes: 15 additions & 0 deletions common/known-removable-phrases.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ const knownRemovablePhrases = [
"UK Charity Screening",
"London Gala Screening",
"Feature Screening",
"Repeat Screening",
"***LONDON***",
"***VHS***",
"*ADVANCE*",
Expand Down Expand Up @@ -308,6 +309,7 @@ const knownRemovablePhrases = [
"with Tim Robey",
"with TOMISIN ADEPEJU",
"with tommy wiseau live on stage",
"with Rebelle Voices",
"with Sammy Baloji",
"with Selina Robertson & Isabel Moir",
"with Special Guest Sviatoslav Vakarchuk",
Expand All @@ -330,6 +332,9 @@ const knownRemovablePhrases = [
"with Morgan M. Page",
"with Ronan Bennett",
"with score by Joe Harvey-Whyte",
"WITH HORRORITUAL!",
"with Free Chai & Samosas!",
"with Odorama!",
"w/ Reece Shearsmith intro",
"w/ Ben Wheatley Q&A",
"w/ Peter Strickland Q&A",
Expand Down Expand Up @@ -512,8 +517,10 @@ const knownRemovablePhrases = [
"by Rebecca Salvadori",
"by Louisa May Alcott",
"by Paromita Vohra",
"by Renátó Olasz",
"by Fassbinder",
"by Joe Harvey-Whyte",
"C.O.F.F.I.N '",
"COLD ISLANDERS:",
"Cold War Visions:",
"Mamoru Hosoda's",
Expand Down Expand Up @@ -546,6 +553,7 @@ const knownRemovablePhrases = [
"CELLULOID JAM!",
"CinemaLive:",
"CINESOCIAL:",
"CINEMA MENTIRÉ:",
"Cinema Film Screening Konrad Wolf Film Series:",
"Cinema Film Screening Konrad Wolf:",
"Cinema Film Screening & Talk:",
Expand All @@ -564,6 +572,7 @@ const knownRemovablePhrases = [
"Clermont-Ferrand:",
"Closing Ceremony: “Shaw Festival – London 2026”",
"Create 2026:",
"Copy of Copy of ",
"Copy of ",
"CIFF2025:",
"CYFF:",
Expand Down Expand Up @@ -659,6 +668,7 @@ const knownRemovablePhrases = [
"Senior Community Cinema x The Old Ways:",
"Senior Community Cinema:",
"Sneak Peek & Intro",
"Sneak Peek 2.0:",
"The Old Ways:",
"SCS: The Old Ways",
"FILM CLUB FRIDAYS:",
Expand Down Expand Up @@ -750,6 +760,7 @@ const knownRemovablePhrases = [
"The Woman Behind Visconti's Masterpiece",
"Cinebug turns 1:",
"Hussein Kamal's",
"Ido Fluk:",
"IFF:",
"IFF 2024:",
"IFF 2025:",
Expand Down Expand Up @@ -986,6 +997,7 @@ const knownRemovablePhrases = [
": Staff Picks!",
"Stephanie Rothman:",
"Movie Subtitled",
"Movie Bottomless Brunch Party",
"Subtitled screen ",
"SUBTITLED ",
"SUBTITLED:",
Expand Down Expand Up @@ -1076,6 +1088,7 @@ const knownRemovablePhrases = [
", a queer romance",
"Documentary Screenings",
"Documentary Screening",
"Documentary Premiere",
"1994 version",
"3rd annual screening",
"4th annual screening",
Expand Down Expand Up @@ -1167,7 +1180,9 @@ const knownRemovablePhrases = [
"Short Film Screenings",
"Short Film Screening",
"Bloomsday Film Screening",
": London film screening",
"Film Screening",
"Film premiere and",
"Film Premiere:",
"Fundraising Screening",
"Fundraiser Q&A:",
Expand Down
14 changes: 13 additions & 1 deletion common/normalize-title.js
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,10 @@ function normalizeTitle(title, options) {
[/(classic )?secret scre(e|a)(n|m)ing( \d+)?/i, "mystery movie"],
[/secret (classic )?bollywood cinema/i, "mystery movie"],
[/scre(e|a)(n|m) unseen/i, "mystery movie"],
[/(Orange Box )?Secret Film Screenings?/i, "mystery movie"],
[
/(Orange Box )?Secret Film Screenings?(: Summer Series)?/i,
"mystery movie",
],
[/^.* \+ mystery movie/i, "mystery movie"],
["vhs film", "movie"],
[/The Bill Reunion \d+/i, "The Bill Reunion"],
Expand Down Expand Up @@ -728,11 +731,19 @@ function normalizeTitle(title, options) {
["A Night of Latin Jazz - ", "A Night of Latin Jazz: "],
["Classic Night - ", "Classic Night: "],
["Weird Wednesday - ", "Weird Wednesday: "],
["Bar Trash: 4TH BIRTHDAY - ", "Bar Trash: 4TH BIRTHDAY: "],
["Elon Musk Unveiled -", "Elon Musk Unveiled: "],
["Goethe-Kino - ", "Goethe-Kino: "],
["The Life + Legacy", "The Life and Legacy"],
[" - Oggi", ": Oggi"],
[" x metropolis", " metropolis"],
["Nick Drake: A Skin Too Few", "A Skin Too Few: The Days of Nick Drake"],
["(Screening) / ", "(Screening) & "],
[
"BEYOND ILLUSION - MAGIC DOCUMENTARY",
"Beyond Illusion: The Making of a Magician - ",
],
[/The Band - The Show/i, "The Band The Show"],
// Variant families collapsed from known-removable-phrases.js
// Each pattern covers multiple near-identical string entries that shared a common structure
[/dog[- ]?friendly(?:\s+screening)?[:\s]*/i, ""],
Expand Down Expand Up @@ -987,6 +998,7 @@ function normalizeTitle(title, options) {
.replace(/^the (?=\S+\s+(?![[(]))/i, "")
.replace(/([a-z])-([a-z])/gi, "$1$2")
.replace(/\s+q&a$/i, "")
.replace("?s", "s")
.replace(/\s3d$/i, "")
.replace(/[+?]$/, "")
.replace(/\(\d{4}-[^)]+\)$/, "") // Remove any date range suffixes
Expand Down
15 changes: 12 additions & 3 deletions common/standardize-prefixing-for-theatre-performances.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,11 @@ function standardizePrefixingForMetropolitanOperaPerformances(title, options) {
title = title.replace(/\s+&\s+/, " and ").replace(/\s+-\s+/, ": ");

// Update if "met opera" is a suffix
if (title.toLowerCase().includes(": met opera ")) {
title = `The Metropolitan Opera: ${title.replace(/: Met Opera /i, " ")}`;
if (
title.toLowerCase().includes(": met opera ") ||
title.toLowerCase().includes(": the met opera ")
) {
title = `The Metropolitan Opera: ${title.replace(/: (The )?Met Opera /i, " ")}`;
}

let updatedPrefixTitle = metOperaPrefixes.reduce(
Expand Down Expand Up @@ -144,6 +147,8 @@ const rboPrefixes = [
/Royal Opera House[:|\s]/i,
/^The Royal Ballet[:|\s]/i,
/^The Royal Opera[:|\s]/i,
/: The Royal Ballet[:|\s]/i,
/: The Royal Opera[:|\s]/i,
/RB&O Live:/i,
/RB&O:/i,
/Live From Royal Ballet/i,
Expand All @@ -152,6 +157,7 @@ const rboPrefixes = [
function standardizePrefixingForRoyalBalletOperaPerformances(title) {
title = title
.replace(/Captured Live /i, "")
.replace(/-\s?Live\s?-/i, "-")
.replace(/Hoffman(\s|$)/i, "Hoffmann$1")
.replace(/\s+&\s+/, " and ")
.replace(/\s+-\s+/, ": ");
Expand Down Expand Up @@ -257,7 +263,8 @@ function standardizePrefixingForTheatrePerformances(
lowercaseTitle.includes("the metropolitan opera:")) ||
(lowercaseTitle.startsWith("rbo ") &&
lowercaseTitle.includes("the met opera -")) ||
lowercaseTitle.includes(" - met opera")
lowercaseTitle.includes(" - met opera") ||
lowercaseTitle.includes(" - the met opera")
) {
return standardizePrefixingForMetropolitanOperaPerformances(title, options);
}
Expand All @@ -270,7 +277,9 @@ function standardizePrefixingForTheatrePerformances(
lowercaseTitle.startsWith("royal opera") ||
lowercaseTitle.startsWith("royal ballet") ||
lowercaseTitle.startsWith("the royal opera") ||
lowercaseTitle.includes("- the royal opera") ||
lowercaseTitle.startsWith("the royal ballet") ||
lowercaseTitle.includes("- the royal ballet") ||
lowercaseTitle.startsWith("roh royal opera") ||
lowercaseTitle.startsWith("roh ") ||
lowercaseTitle.startsWith("roh: ") ||
Expand Down
Loading