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
4 changes: 4 additions & 0 deletions common/is-non-film-event.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,12 @@ const nonFilmEvents = [
/^Innovation and the Future of Fashion Design$/i,
/^Innovation at CSM:/i,
/^Regenerative Futures$/i,
/^Creativity AI and Digital Craftsmanship$/i,
// A poetry collection's book launch, with no film attached to it.
/^Yvonne Green Collected Poems: Book Launch$/i,
// A zine-making workshop, with no film attached to it. Anchored, because
// the phrase could as easily be a film's own title.
/^Let's Make Zines$/i,
];

const isNonFilmEvent = ({ title }) =>
Expand Down
10 changes: 10 additions & 0 deletions common/known-removable-phrases.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ const knownRemovablePhrases = [
" with Live Q&A at The Prince Charles Cinema",
" with Pet Shop Boys Score",
" x PET SHOP BOYS",
// Before " with Live Score", which would otherwise leave the billing
// in front of it.
" Centenary Screening with Live Score",
" with World Premier Live Score",
" with Live Score",
" w/ Live Score",
" with live music from millie turner",
Expand All @@ -214,6 +218,7 @@ const knownRemovablePhrases = [
": conversation about hate and healing",
"– 10 Year Anniversary Screening with Q&A",
"– In Concert",
"Live To Film",
" Live in Concert",
" in concert",
"- UK PREMIERE",
Expand Down Expand Up @@ -341,6 +346,8 @@ const knownRemovablePhrases = [
"Holiday with Hitch:",
"Hard of Hearing:",
"Hitchcock for Halloween:",
// Before "Hitchcock's", which would otherwise leave the first name behind.
"Alfred Hitchcock's",
"Hitchcock's",
"Hitch-October:",
"March To Hitchcock:",
Expand Down Expand Up @@ -990,6 +997,9 @@ const knownRemovablePhrases = [
"French Film Fest UK:",
"Black Is Boundless:",
"Film Installation:",
"Derek Jarman's",
"Turn Up Film Festival:",
" with Day of the Dead workshop",
"Holding Back the Years:",
"Horror with Hitchcock:",
"Horror for a Cause:",
Expand Down
15 changes: 15 additions & 0 deletions common/normalize-title.js
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,14 @@ function normalizeTitle(title, options) {
["SEEN Charity Film Screening - ", "SEEN Charity Film Screening: "],
["Romford Horror Festival - ", "Romford Horror Festival: "],
["The Funny Life Film Festival - ", "The Funny Life Film Festival: "],
// One of the festival's listings drops the space after the dash.
// The competition is screened in numbered parts, all one programme, so the
// part number comes off for them to group together.
[
/^Turn Up Film Festival\s*-\s*Short Film Competition Part \d+/i,
"Turn Up Film Festival: Short Film Competition",
],
[/^Turn Up Film Festival\s*-\s*/i, "Turn Up Film Festival: "],
["The Peter Greenaway Season - ", "The Peter Greenaway Season: "],
// The strand is billed with "Touchstone" misspelt on some of its films.
[/^Touch(?:stone|tsone) Tuesdays\s*-\s*/i, "Touchstone Tuesdays: "],
Expand Down Expand Up @@ -682,6 +690,9 @@ function normalizeTitle(title, options) {
["Cinema Club - ", "Cinema Club: "],
["Suicide Prevention Short Film Premiere", "Suicide Prevention"],
["Film Premiere - ", "Film Premiere: "],
// Anchored, because a premiere billed after the title ("TURN IT DOWN —
// World Premiere - An absurd neighbour story") is followed by a tagline.
[/^World Premiere - /i, "World Premiere: "],
["Karaoke, crafts + ", "Karaoke, crafts & "],
["FOLIES MEURTRIÈRES + ", "FOLIES MEURTRIÈRES & "],
[/^(.+)- National Theatre Live$/i, "National Theatre Live: $1"],
Expand Down Expand Up @@ -1746,6 +1757,10 @@ function normalizeTitle(title, options) {
],
[/Momo and the Time Thieves/i, "Momo"],
["Return of the Blind Dead", "Attack of the Blind Dead"],
["Premada Ooralia", "Premada Oorali"],
["Man With a Cinema Camera", "Man with a Movie Camera"],
["Sebastiane: the Reunion!", "Sebastiane"],
["Strange Case of Dr Jekyll and Mr Hyde", "Dr Jekyll and Mr Hyde"],
// The film's a mystery, but here's a hint ...
["FREE Kids Movie Club: A Whole New World", "aladdin"],
["FREE Kids Movie Club: Carnival Weekend", "princess and the frog"],
Expand Down
2 changes: 2 additions & 0 deletions common/tests/is-non-film-event.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ describe("isNonFilmEvent", () => {
["Innovation at CSM: Beyond the Scroll"],
["Regenerative Futures"],
["Yvonne Green, Collected Poems: Book Launch"],
["Creativity, AI and Digital Craftsmanship"],
["Let's Make Zines"],
])("flags '%s' as a non-film event", (title) => {
expect(isNonFilmEvent({ title })).toBe(true);
});
Expand Down
144 changes: 142 additions & 2 deletions common/tests/test-titles.json
Original file line number Diff line number Diff line change
Expand Up @@ -18525,7 +18525,7 @@
},
{
"input": "Derek Jarman’s Sketchbooks",
"output": "derek jarmans sketchbooks"
"output": "sketchbooks"
},
{
"input": "Andre Rieu’s 2025 Maastricht Concert",
Expand Down Expand Up @@ -62185,7 +62185,7 @@
},
{
"input": "DEREK JARMAN'S BLUE ",
"output": "derek jarmans blue"
"output": "blue"
},
{
"input": "GREY GARDENS ",
Expand Down Expand Up @@ -100962,5 +100962,145 @@
{
"input": "Heritage in Frame 衣映千年-中国影视与舞台服饰展",
"output": "heritage in frame 衣映千年-中国影视与舞台服饰展"
},
{
"input": "That'll Be the Day",
"output": "thatll be the day"
},
{
"input": "Moving Waves Movie Premiere",
"output": "moving waves"
},
{
"input": "Film Africa: O Profeta",
"output": "o profeta"
},
{
"input": "Premada Ooralia",
"output": "premada oorali"
},
{
"input": "Kung Fu Soccer",
"output": "kung fu soccer"
},
{
"input": "TRANSMISSIONS PRESENTS: Alien 3 (Assembly Cut)",
"output": "alien 3"
},
{
"input": "In The Shadows + Q&A",
"output": "in the shadows"
},
{
"input": "WICFF Closing Celebrations + Short Films + Pressure + Art + After Party",
"output": "wicff closing celebrations"
},
{
"input": "Poraattam",
"output": "poraattam"
},
{
"input": "Changing Rooms: Celebrating Trans Domesticities",
"output": "changing rooms celebrating trans domesticities"
},
{
"input": "Screen Unseen (21 October)",
"output": "mystery movie"
},
{
"input": "World Premiere - Merry Christmas Aubrey Flint",
"output": "merry christmas aubrey flint"
},
{
"input": "Derek Jarman's Sebastiane: the Reunion!",
"output": "sebastiane"
},
{
"input": "Turn Up Film Festival - Short Film Competition Part 1 + Q&A",
"output": "short film competition"
},
{
"input": "Turn Up Film Festival - Short Film Competition Part 2 + Q&A",
"output": "short film competition"
},
{
"input": "Turn Up Film Festival - Short Film Competition Part 3 + Q&A",
"output": "short film competition"
},
{
"input": "Turn Up Film Festival - Short Film Competition Part 5 + Q&A",
"output": "short film competition"
},
{
"input": "Turn Up Film Festival - Short Film Competition Part 6 + Q&A",
"output": "short film competition"
},
{
"input": "Turn Up Film Festival -Short Film Competition Part 4 + Q&A",
"output": "short film competition"
},
{
"input": "Whiplash in Concert (15)",
"output": "whiplash"
},
{
"input": "Cine-Real presents: The Evil Dead",
"output": "evil dead"
},
{
"input": "Orlando: My Political Biography - Trans Awareness Programme 2026",
"output": "orlando my political biography"
},
{
"input": "Ponyboi - Trans Awareness Programme 2026",
"output": "ponyboi"
},
{
"input": "Queens of the Dead - Trans Awareness Programme 2026",
"output": "queens of the dead"
},
{
"input": "Wolfwalkers - Trans Awareness Programme 2026",
"output": "wolfwalkers"
},
{
"input": "Mississippi Records presents - A PEOPLE'S HISTORY OF MUSIC ",
"output": "peoples history of music"
},
{
"input": "Dead Good Cinema presents COCO with Day of the Dead workshop",
"output": "coco"
},
{
"input": "Alfred Hitchcock’s Blackmail (Silent Version 1929) with World Premier Live Score",
"output": "blackmail"
},
{
"input": "Battleship Potemkin (1925) with Live Score",
"output": "battleship potemkin (1925)"
},
{
"input": "Buster Keaton’s Steamboat Bill Jr (1928) with Live Score",
"output": "steamboat bill jr (1928)"
},
{
"input": "Harold Lloyd’s Speedy (1929) with Live Score",
"output": "speedy (1929)"
},
{
"input": "Harold Lloyd’s The Freshman (1925) with Live Score",
"output": "the freshman (1925)"
},
{
"input": "Man With a Cinema Camera (1929) with Live Score",
"output": "man with a movie camera (1929)"
},
{
"input": "Metropolis Centenary Screening with Live Score",
"output": "metropolis"
},
{
"input": "Strange Case of Dr Jekyll and Mr Hyde – In Concert, Live To Film",
"output": "dr jekyll mr hyde"
}
]
Loading