From cf0e0800a5f6c1de6e9e24124445a2286f1a784f Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 20 Mar 2023 21:15:29 -0600 Subject: [PATCH] Name-detecting entrance/exit conversions --- projects/ktxt2/src/ktxt2/NamesConversion.hx | 8 ++++++++ projects/ktxt2/src/ktxt2/NamesConversion.kiss | 9 +++++++++ .../ktxt2/conversions/FountainToHollywoo.kiss | 16 +++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 projects/ktxt2/src/ktxt2/NamesConversion.hx create mode 100644 projects/ktxt2/src/ktxt2/NamesConversion.kiss diff --git a/projects/ktxt2/src/ktxt2/NamesConversion.hx b/projects/ktxt2/src/ktxt2/NamesConversion.hx new file mode 100644 index 00000000..633e14df --- /dev/null +++ b/projects/ktxt2/src/ktxt2/NamesConversion.hx @@ -0,0 +1,8 @@ +package ktxt2; + +import kiss.Prelude; +import kiss.List; +import bad_nlp.Names; + +@:build(kiss.Kiss.build()) +class NamesConversion {} diff --git a/projects/ktxt2/src/ktxt2/NamesConversion.kiss b/projects/ktxt2/src/ktxt2/NamesConversion.kiss new file mode 100644 index 00000000..fcf82f72 --- /dev/null +++ b/projects/ktxt2/src/ktxt2/NamesConversion.kiss @@ -0,0 +1,9 @@ +(defNew [&prop &mut :String name + &prop &mut :String sourceType + &prop &mut :String outputType + :(String,Array)->Bool canConvertNames + :Array->String convertNames] + [ + &mut :String->Bool canConvert ->block ?(whenLet [names (Names.findNames block)] (canConvertNames block names)) + &mut :String->String convert ->block (let [names (Names.findNames block)] (convertNames names)) + ]) \ No newline at end of file diff --git a/projects/ktxt2/src/ktxt2/conversions/FountainToHollywoo.kiss b/projects/ktxt2/src/ktxt2/conversions/FountainToHollywoo.kiss index e84ee645..624b6143 100644 --- a/projects/ktxt2/src/ktxt2/conversions/FountainToHollywoo.kiss +++ b/projects/ktxt2/src/ktxt2/conversions/FountainToHollywoo.kiss @@ -52,4 +52,18 @@ (.replace (.replace stream.content "/*" "") "*/" "") - "*" ""))\n")) \ No newline at end of file + "*" ""))\n")) + +(function isScreenLine [:String block] + (= 1 .length (filter (block.split "\n")))) + +(function doWithCharacters [:String thing :String args] + (registerConversion + (new ktxt2.NamesConversion "${thing} characters" "fountain" "hollywoo" + ->[block names] (isScreenLine block) + ->names (+ + (.join (for name names "$(thing.toUpperCase)CHARACTER \"${name}\" $args") "\n") + "\n")))) + +(doWithCharacters "Add" " ") +(doWithCharacters "Remove" "") \ No newline at end of file