From 17e35aa8dbc5ddb5e3542a57f14dd16627d37d64 Mon Sep 17 00:00:00 2001 From: Joop Kiefte Date: Mon, 31 Dec 2018 21:40:58 +0100 Subject: First working version. Fountain support is still very bad. --- lex/example.go | 5 ----- lex/example.lex | 6 ++++++ lex/parse.go | 29 +++++++++++++++++++++++++++++ lex/type.go | 14 -------------- lex/write.go | 12 ++++++++++++ 5 files changed, 47 insertions(+), 19 deletions(-) delete mode 100644 lex/example.go create mode 100644 lex/parse.go create mode 100644 lex/write.go (limited to 'lex') diff --git a/lex/example.go b/lex/example.go deleted file mode 100644 index 164e71a..0000000 --- a/lex/example.go +++ /dev/null @@ -1,5 +0,0 @@ -package lex - -var Example = ` - -` diff --git a/lex/example.lex b/lex/example.lex index 2b39de5..4a1dfee 100644 --- a/lex/example.lex +++ b/lex/example.lex @@ -1,12 +1,18 @@ scene: INT. HOUSE - DAY +empty speaker: MARY dialog: I can't believe how easy it is to write in Fountain. +empty speaker: TOM paren: (typing) dialog: Look! I just made a parenthetical! +empty action: SOMETHING HAPPENS! +action: action: (what? I don't know...) +empty scene: EXT. GARDEN +empty speaker: TOM dialog: What am I doing here now? dialog: To be honest, I have absolutely no idea! diff --git a/lex/parse.go b/lex/parse.go new file mode 100644 index 0000000..ebd4dda --- /dev/null +++ b/lex/parse.go @@ -0,0 +1,29 @@ +package lex + +import ( + "io" + "bufio" + "strings" +) + +func Parse(file io.Reader) (out Screenplay) { + f := bufio.NewReader(file) + var err error + var s string + for err == nil { + var line Line + s, err = f.ReadString('\n') + split := strings.SplitN(s, ":", 2) + switch len(split){ + case 0,1: + line.Type = strings.Trim(s,": \n\r") + case 2: + line.Type = split[0] + line.Contents = strings.TrimSpace(split[1]) + } + if strings.TrimSpace(split[0]) != "" { + out = append(out, line) + } + } + return out +} diff --git a/lex/type.go b/lex/type.go index 47439f4..3b49eee 100644 --- a/lex/type.go +++ b/lex/type.go @@ -1,10 +1,5 @@ package lex -import ( - "io" - "fmt" -) - type Screenplay []Line type Line struct{ @@ -12,12 +7,3 @@ type Line struct{ Contents string } -func Parse(file io.Reader) (out Screenplay) { - var err error - line := Line{} - for err == nil { - _, err = fmt.Fscanf(file, "%s: %s", &line.Type, &line.Contents) - out = append(out, line) - } - return out -} diff --git a/lex/write.go b/lex/write.go new file mode 100644 index 0000000..b8ee6c2 --- /dev/null +++ b/lex/write.go @@ -0,0 +1,12 @@ +package lex + +import ( + "fmt" + "io" +) + +func Write(s Screenplay, out io.Writer) { + for _, line := range s { + fmt.Fprintf(out, "%s: %s\n", line.Type, line.Contents) + } +} -- cgit v1.2.3-70-g09d2