Skip to main content

Crate osf

Crate osf 

Source
Expand description

§OSF — Open Screenplay Format Parser

A Rust parser for Open Screenplay Format (OSF) files, the native format of Fade In Pro screenwriting software.

§Supported Versions

VersionAttribute StyleTitle PageNotes
1.2basestylename<info> attributesMetadata embedded in <info> element
2.0/2.1baseStyleName (camelCase)<titlepage> bookmarksSeparate title page section
4.0basestyle (snake_case)<titlepage> bookmarksCurrent version

§File Format

.fadein files are ZIP archives containing an XML file called document.xml in the Open Screenplay Format. The parser handles both the ZIP container and raw XML input.

§Usage

// Parse a .fadein file from disk
let data = std::fs::read("screenplay.fadein").unwrap();
let doc = osf::parse(&data).unwrap();

println!("Title: {:?}", doc.title_page.title);
println!("Authors: {:?}", doc.title_page.authors);
println!("Scenes: {}", doc.scenes.len());

for scene in &doc.scenes {
    println!("  Scene {}: {}", scene.number, scene.heading);
}

§Raw XML

You can also parse raw OSF XML directly:

let xml = r#"<?xml version="1.0" encoding="UTF-8"?>
<document type="Open Screenplay Format document" version="40">
  <info uuid="test" pagecount="1"/>
  <settings/><styles/>
  <paragraphs>
    <para><style basestyle="Scene Heading"/><text>INT. OFFICE - DAY</text></para>
    <para><style basestyle="Action"/><text>A desk. A chair.</text></para>
  </paragraphs>
  <titlepage/><lists/>
</document>"#;

let doc = osf::parse(xml.as_bytes()).unwrap();
assert_eq!(doc.scenes.len(), 1);
assert_eq!(doc.scenes[0].heading, "INT. OFFICE - DAY");

Structs§

OsfDocument
A fully parsed OSF screenplay document.
Paragraph
A single paragraph from the OSF XML.
Scene
A single scene in the screenplay.
TitlePage
Title page metadata extracted from an OSF document.

Enums§

OsfError
Errors that can occur when parsing an OSF document.
OsfVersion
OSF format version.
ParaStyle
Screenplay paragraph element types.

Functions§

parse
Parse a .fadein file or raw OSF XML bytes into an OsfDocument.