diff --git a/projects/hollywoo/src/hollywoo/FountainConversions.kiss b/projects/hollywoo/src/hollywoo/FountainConversions.kiss index 906c69c8..2f54159d 100644 --- a/projects/hollywoo/src/hollywoo/FountainConversions.kiss +++ b/projects/hollywoo/src/hollywoo/FountainConversions.kiss @@ -1,3 +1,5 @@ +// KTxt2 Conversions for Fountain files + (var wryly (R.namedGroup "wryly" (R.optional @@ -6,19 +8,19 @@ (R.repeat R.anyChar 1) (R.escape ")\n"))))) -// KTxt2 Conversions for Fountain files (registerConversion - (new ktxt2.RegexConversion "On Phone Speech" "fountain" "hollywoo" - (R.group - R.start - (R.namedGroup "name" (R.repeat R.capitalLetter 1)) - (R.escape " (O.P.)\n") - wryly - (R.namedGroup "line" (R.repeat R.anyChar 1)) - (R.namedGroup "pBreak" (R.repeat (R.escape "\n") 1)) - R.end) - #####"ONPHONESPEECH \"$(group "name")\" \"$(let [w (group "wryly")] (if w (substr w 1 -3) ""))\" ##\"$(.trim (group "line"))\"##$(group "pBreak")"##### - "m")) + (new ktxt2.StreamConversion "On Phone Speech" "fountain" "hollywoo" + ->stream ?(whenLet [(Some name) (stream.takeUntilAndDrop " (O.P.)")] true) + ->stream + (let [name (whenLet [(Some name) (stream.takeUntilAndDrop "(O.P.)")] name) + &mut output ""] + (stream.takeLine) + (loop + (let [wryly (ifLet [(Some w) (stream.takeBetween "(" ")")] w "") + line (ifLet [(Some l) (stream.takeLine)] (l.trim) (break))] + (when line + (+= output "ONPHONESPEECH \"${name}\" \"${wryly}\" ##\"${line}\"##\n")))) + output))) (registerConversion (new ktxt2.RegexConversion "Speech" "fountain" "hollywoo" @@ -31,4 +33,4 @@ (R.namedGroup "pBreak" (R.repeat (R.escape "\n") 1)) R.end) #####"NORMALSPEECH \"$(group "name")\" \"$(let [w (group "wryly")] (if w (substr w 1 -3) ""))\" ##\"$(.trim (group "line"))\"##$(group "pBreak")"##### - "m")) \ No newline at end of file + "m")) diff --git a/projects/kiss-vscode/src/ktxt2/StreamConversion.hx b/projects/kiss-vscode/src/ktxt2/StreamConversion.hx new file mode 100644 index 00000000..14fbc356 --- /dev/null +++ b/projects/kiss-vscode/src/ktxt2/StreamConversion.hx @@ -0,0 +1,8 @@ +package ktxt2; + +import kiss.Prelude; +import kiss.List; +import kiss.Stream; + +@:build(kiss.Kiss.build()) +class StreamConversion {} diff --git a/projects/kiss-vscode/src/ktxt2/StreamConversion.kiss b/projects/kiss-vscode/src/ktxt2/StreamConversion.kiss new file mode 100644 index 00000000..cf0108aa --- /dev/null +++ b/projects/kiss-vscode/src/ktxt2/StreamConversion.kiss @@ -0,0 +1,9 @@ +(defNew [&prop &mut :String name + &prop &mut :String sourceType + &prop &mut :String outputType + :Stream->Bool canConvertStream + :Stream->String convertStream] + [ + &mut :String->Bool canConvert ->block (canConvertStream (Stream.fromString block)) + &mut :String->String convert ->block (convertStream (Stream.fromString block)) + ]) \ No newline at end of file