diff options
Diffstat (limited to 'fountain/parse.go')
-rw-r--r-- | fountain/parse.go | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/fountain/parse.go b/fountain/parse.go index c0fff65..8d3bf4e 100644 --- a/fountain/parse.go +++ b/fountain/parse.go @@ -9,7 +9,7 @@ import ( "strings" ) -var Scene = []string{"INT", "EXT", "EST", "INT./EXT", "INT/EXT", "I/E"} +var Scene = []string{"INT", "EXT", "EST", "INT./EXT", "INT/EXT", "EXT/INT", "EXT./INT", "I/E"} func CheckScene(row string) (bool, string, string) { var scene bool @@ -20,24 +20,38 @@ func CheckScene(row string) (bool, string, string) { scene = true } } + if strings.HasPrefix(row, ".") { + row = row[1:] + scene = true + } return scene, "scene", row } -func CheckTransition(row string) (bool, string, string) { - var trans bool +func CheckCrow(row string) (bool, string, string) { + var crow bool + var el string row = strings.ToUpper(row) if strings.HasPrefix(row, ">") || strings.HasSuffix(row, " TO:") { - trans = true + crow = true + el = "trans" + } + if strings.HasPrefix(row, ">") && strings.HasSuffix(row, "<") { + el = "center" } - return trans, "trans", strings.Trim(row, ">< ") + return crow, el, strings.Trim(row, ">< ") } -func CheckSynopse(row string) (bool, string, string) { - var synopse bool +func CheckEqual(row string) (bool, string, string) { + var equal bool + var el string if strings.HasPrefix(row, "=") { - synopse = true + equal = true + el = "synopse" + } + if len(row) >= 3 && strings.Trim(row, "=") == "" { + el = "newpage" } - return synopse, "synopse", strings.TrimLeft(row, "= ") + return equal, el, strings.TrimLeft(row, "= ") } func CheckSection(row string) (bool, string, string) { @@ -75,8 +89,8 @@ func Parse(file io.Reader) (out lex.Screenplay) { // Backtracking for elements that need a following empty line checkfuncs := []func(string) (bool, string, string){ CheckScene, - CheckTransition, - CheckSynopse, + CheckCrow, + CheckEqual, CheckSection, } for _, checkfunc := range checkfuncs { |