summaryrefslogtreecommitdiff
path: root/lex
diff options
context:
space:
mode:
authorJoop Kiefte <ikojba@gmail.com>2018-12-31 21:40:58 +0100
committerJoop Kiefte <ikojba@gmail.com>2018-12-31 21:40:58 +0100
commit17e35aa8dbc5ddb5e3542a57f14dd16627d37d64 (patch)
tree54c4905d49cc5abfa9f63e2d402b035ac147a459 /lex
parent32b146fc5411f8db35824c82e9cafc4cdb6f1d41 (diff)
First working version. Fountain support is still very bad.
Diffstat (limited to 'lex')
-rw-r--r--lex/example.go5
-rw-r--r--lex/example.lex6
-rw-r--r--lex/parse.go29
-rw-r--r--lex/type.go14
-rw-r--r--lex/write.go12
5 files changed, 47 insertions, 19 deletions
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)
+ }
+}