This library converts Fountain screenplay documents into XML-style documents with tags that can be converted to other markup languages, like HTML or FDX. Some command-line utilities are provided to demonstrate use, including PDF conversion using PoDoFo.
I needed a fountain parser for a Geany plugin. For performance, I wanted a parser written in a compiled language, but nearly all existing (open-source) Fountain parsers are written in scripting languages. The ones that aren't are either difficult (for me) to use or were incomplete. So I was "forced" to write my own.
Calling this a "parser" would be generous since I do not recall how to write a proper parser. Fortunately, the elements of a screenplay are generally identifiable on a line-by-line basis. So this library works by:
- Identifying the type of each line: Scene Header, Transition, Action, Character, Parenthetical, Speech.
- Using regular expressions to find bold, italics, and underline formatting.
The main complication to this method is dual dialog. When encountering a dual-dialog marker (^
), the processor has to go back to modify the most-recently identified dialog node.
A detailed description of standard Fountain is available at Fountain.io. This processor recognizes a modified syntax, which is described at Fountain Syntax.
Some basic command line utilities are provided.
More details are contained in the --help
output.
ftn2xml
– Convert to native XML-style format.ftn2html
– Convert to native HTML-style format.ftn2pdf
– Export to PDF using PoDoFo library.ftn2fdx
– Convert into Final Draft document.
-
Compile as a library or include the files in your project.
-
#include "fountain.h"
-
Call a function to convert the script into the desired format:
ftn2xml()
– Convert to native XML-style format.ftn2html()
– Convert to native HTML-style format.ftn2pdf()
– Export to PDF using podofo library.ftn2fdx()
– Convert into Final Draft document.ftn2screenplain()
– Convert into HTML similar to those produced by screenplain.ftn2textplay()
– Convert into HTML similar to those produced by textplay.
- Compiler that supports C++17 standard. Both
clang++
andg++
seem to work. - CLI11 for option parsing.
- PoDoFo for PDF export.
- Courier Prime to work around PoDoFo 0.10.x font issues.
This project uses meson
build scripts with a make
wrapper for convenience.
git clone https://github.com/xiota/ftn2xml.git
cd ftn2xml
make
The makefile contains an install target.
make install
To uninstall, delete the files and folders listed in build/meson-logs/install-log.txt
.
This software is licensed under the GPL-3.0-or-later.