Giter VIP home page Giter VIP logo

fountain-js's Introduction

Fountain-js

NPM

A simple parser for Fountain, a markup language for formatting screenplays. Originally based on Matt Daly's Fountain.js.

Special thanks to Nathan Hoad for the Fountain-js package namespace.

Syntax Support

Supports up to v 1.1 of the Fountain syntax.

Currently Fountain-js supports a limited range of key-value pairs for title pages -

  • Title, Credit, Author/s, Source, Notes, Draft date, Date, Contact, Copyright

Install

npm install fountain-js

How To

Import Fountain and create a new instance of it.

import { Fountain } from 'fountain-js';

let fountain = new Fountain();

An extended example.

import { Fountain } from 'fountain-js';
import * as assert from 'assert';

const text = `.OPENING TITLES

            > BRICK & STEEL <
            > FULL RETIRED <

            SMASH CUT TO:`;
        
let fountain = new Fountain();

let output = fountain.parse(text);
let actual = output.html.script;

const expected = '<h3>OPENING TITLES</h3><p class="centered">BRICK & STEEL <br /> FULL RETIRED</p><h2>SMASH CUT TO:</h2>';

assert.strictEqual(actual, expected);

Output

The output provided by Fountain-js is an object literal in the format { title: '...', html: { title_page: '...', script: '...' } }.

Fountain-js is natively written in Typescript, therefore a Script interface is also available:

interface Script {
    title?: string,
    html: {
        title_page: string,
        script: string
    },
    tokens?: Token[]
}

Parser Tokens

If you want access to the tokens that Fountain-js generates, simply attach a true parameter to your parse calls. Requesting tokens adds a tokens property to the output generated by Fountain-js.

let output = fountain.parse(script, true);
console.log(output.tokens);

Below is a small sample of the tokens output from Brick & Steel.

[ 
  ..., 
  { type: "scene_heading", text: "EXT. BRICK'S PATIO - DAY", scene_number: "1"},
  { type: "action", text: "A gorgeous day. The su...emplating -- something."},
  { type: "action", text: "The SCREEN DOOR slides ...es with two cold beers."},
  { type: "dialogue_begin"},
  { type: "character", text: "STEEL"},
  { type: "dialogue", text: "Beer's ready!"},
  { type: "dialogue_end"},
  { type: "dialogue_begin"},
  { type: "character", text: "BRICK"},
  { type: "dialogue", text: "Are they cold?"},
  { type: "dialogue_end"},
  { type: "page_break"},
  { type: "dialogue_begin"},
  { type: "character", text: "STEEL"},
  { type: "dialogue", text: "Does a bear crap in the woods?"},
  { type: "dialogue_end"},
  { type: "action", text: "Steel sits. They laugh at the dumb joke."},
  { type: "dialogue_begin"},
  { type: "character", text: "STEEL"},
  { type: "parenthetical", text: "(beer raised)"},
  { type: "dialogue", text: "To retirement."},
  { type: "dialogue_end"},
  { type: "dialogue_begin"},
  { type: "character", text: "BRICK"},
  { type: "dialogue", text: "To retirement."},
  { type: "dialogue_end"}
  ...
]

As shown above, Fountain-js attaches some extra tokens, such as 'dialogue_begin' and 'dialogue_end' to block together dialogue sections.

In the case of dual dialogue, this allows Fountain-js to attach a dual property to blocks of dialogue at the dialogue_begin token to indicate page positioning.

[
  ...
  { type: 'action', text: 'The men look at each other.' },
  { type: 'dual_dialogue_begin'},
  { type: 'dialogue_begin', dual: 'left'},
  { type: 'character', text: 'STEEL' },
  { type: 'dialogue', text: 'Screw retirement.' },
  { type: 'dialogue_end'},
  { type: 'dialogue_begin', dual: 'right'},
  { type: 'character', text: 'BRICK' },
  { type: 'dialogue', text: 'Screw retirement.' },
  { type: 'dialogue_end'},
  { type: 'dual_dialogue_end'},
  { type: 'transition', text: 'SMASH CUT TO:' }
  ...
]

Additionally, Fountain-js provides a Typescript interface for a Token as follows:

interface Token {
    type: string,
    is_title?: boolean,
    text?: string,
    scene_number?: string,
    dual?: string,
    depth?: number
}

Fountain.ts

For those looking for Fountain.ts, please note that this package has been deprecated in its original form and is now Fountain-js. Please source and upgrade packages from the Fountain-js NPM package to receive all updates and fixes.

fountain-js's People

Contributors

billiam avatar dependabot[bot] avatar jonnygreenwald avatar

Forkers

micapam

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.