summaryrefslogtreecommitdiff
path: root/fountain/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'fountain/parse.go')
-rw-r--r--fountain/parse.go24
1 files changed, 18 insertions, 6 deletions
diff --git a/fountain/parse.go b/fountain/parse.go
index b4273d7..ba3a3e8 100644
--- a/fountain/parse.go
+++ b/fountain/parse.go
@@ -1,12 +1,23 @@
-package parse
+package fountain
import (
+ "github.com/lapingvino/lexington/lex"
"strings"
+ "bufio"
+ "io"
)
-func (t *Tree) ParseString(play string) {
- toParse := strings.Split(play, "\n")
+func Parse(file io.Reader) (out lex.Screenplay) {
+ var err error
+ var s string
+ var toParse []string
+ f := bufio.NewReader(file)
+ for err == nil {
+ s, err = f.ReadString('\n')
+ toParse = append(toParse, s)
+ }
for i, row := range toParse {
+ row = strings.TrimSpace(row)
action := "action"
if row == strings.ToUpper(row) {
action = "allcaps"
@@ -15,9 +26,9 @@ func (t *Tree) ParseString(play string) {
action = "empty"
} else {
if i > 0 {
- switch t.F[i-1].Format {
+ switch out[i-1].Type {
case "allcaps":
- t.F[i-1].Format = "speaker"
+ out[i-1].Type = "speaker"
if row[0] == '(' && row[len(row)-1] == ')' {
action = "paren"
} else {
@@ -28,6 +39,7 @@ func (t *Tree) ParseString(play string) {
}
}
}
- t.F = append(t.F, struct{ Format, Text string }{action, row})
+ out = append(out, lex.Line{action, row})
}
+ return out
}