ChordPro Default Configuration

// Configuration for ChordPro
// 
// This is a really relaxed JSON document, see
// https://metacpan.org/pod/JSON::Relaxed#REALLY-RELAXED-EXTENSIONS

// For GUI.
config {

    // Type of config: config, style, style_mod, instrument, task...
    type : config

    // Title for menus, choices, if applicable.
    title : ChordPro

    // Helpful descriptive text.
    description : "Main ChordPro config."

    // Exclusive control.
    // If multiple configs have the same exclude_id, only one will be used.
    exclude_id: false

    // True if this is the default config for a specific type.
    // Do not use unless you know what you are doing!
    default: true
}

// Includes are processed first, before the rest of
// the config file.
// 
// "include" takes a list of either filenames or preset names.
include : [ guitar ]

// General settings, often changed by configs and command line.
settings {

    // Chords parsing strategy.
    // Strict (only known chords) or relaxed (anything that looks sane)
    strict : true

    // Obsolete.
    lineinfo : true

    // Titles flush: default center.
    titles : center

    // Number of columns, default: 1.
    columns : 1

    // Suppress empty chord lines.
    // Command line: -a (--single-space).
    suppress-empty-chords : true

    // Suppress blank lyrics lines.
    suppress-empty-lyrics : true

    // Suppress chords.
    // Command line: -l (--lyrics-only)
    lyrics-only : false

    // Deprecated, Do not use.
    memorize : false

    // Chords inline instead of above.
    // May be a string containing pretext %s posttext.
    // Defaults to "[%s]" if set to a value that doesn't contain "%s".
    inline-chords : false

    // Same, for annotations. Ignored unless inline-chords is set.
    // Must be a string containing pretext %s posttext.
    // Default is "%s".
    inline-annotations : %s

    // Chords under the lyrics.
    chords-under : false

    // Transpose chords.
    transpose : 0

    // Force enharmonic when transposing (experimental).
    enharmonic-transpose : true

    // Transcode chords.
    transcode : ""

    // Eliminate capo by transposing chords.
    decapo : false

    // Strictness of parsing chord names.
    chordnames : strict

    // Allow parsing of note names in [].
    notenames : false

    // Always replace chords by their canonical form.
    chords-canonical : false

    // If false, chorus labels are used as tags.
    choruslabels : true

    // Substitute Unicode sharp/flats in chord names.
    // Will fallback to the ChordProSymbols font if the selected chord font
    // doesn't have the glyphs.
    truesf : false

    // Substitute delta for maj7 in chord names.
    // Will fallback to the ChordProSymbols font if the selected chord font
    // doesn't have the glyphs.
    maj7delta : false

    // Indent for wrapped lines. Actual indent is the stringwidth.
    wrapindent : x

    // Consider text flowed.
    flowtext : false
}

// Metadata.
// For these keys you can use {meta key ...} as well as {key ...}.
// Important: "title" and "subtitle" must always be in this list.
metadata {

    // Known metadata items.
    keys : [
        title
        subtitle
        album
        arranger
        artist
        capo
        composer
        copyright
        duration
        key
        lyricist
        sortartist
        sorttitle
        tag
        tempo
        time
        year
    ]

    // If strict, only the keys named here are allowed.
    // Otherwise, {meta ...} will accept any key.
    strict : true

    // The separator is used to concatenate multiple values.
    // If autosplit is true, the separator is also used to split
    // values upon input.
    separator : "; "

    // Split data on separator.
    autosplit : true
}

// Globally defined (added) meta data,
// This is explicitly NOT intended for the metadata items above.
// Do NOT remove or change "_configversion"!
meta._configversion : "6.081"

// Assets (placeholder).
assets {}

// Date formats. Format is a strftime template.
dates.today.format : "%A, %B %e, %Y"

// User settings. Actual values are usually set by a separate config file.
user {

    // Short user name.
    name : ""

    // Full user name
    fullname : ""
}

// Description of the instrument.
// Actual values are set from an included instrument config.
instrument {

    // Instrument type.
    type : ""

    // Descriptive instrument name.
    description : ""
}

// Definition of the strings for this instrument.
// This is usually set from an included instrument config.
// Note that string 1 is the highest string.
tuning : [ E2 A2 D3 G3 B3 E4 ]

// Note (chord root) names.
// In case of alternatives, the first one is used for output.
// Note that it is tempting to use real sharps and flats for output,
// but most fonts don't have the glyphs.
notes {

    // The note system used.
    system : common

    // Note names, using sharps. \u266f is MUSICAL SYMBOL SHARP.
    sharp : [
        C   [ C# Cis "C\u266f" ]
        D   [ D# Dis "D\u266f" ]
        E
        F   [ F# Fis "F\u266f" ]
        G   [ G# Gis "G\u266f" ]
        A   [ A# Ais "A\u266f" ]
        B
    ]

    // Note names, using flats. \u266f is MUSICAL SYMBOL FLAT.
    flat : [
        C
        [ Db    Des "D\u266d" ]   D
        [ Eb Es Ees "E\u266d" ]   E
        F
        [ Gb    Ges "G\u266d" ]   G
        [ Ab As Aes "A\u266d" ]   A
        [ Bb    Bes "B\u266d" ]   B
    ]

    // Movable means position independent (e.g. nashville).
    movable : false
}

// User defined chords (placeholder).
// This is an array of hashes, one for each chord.
// Each hash should contain the following fields:
//   "name":    name of the chord
//   "base":    base fret (optional, defaults to 1)
//   "frets":   the frets (optional, use 0 for an empty string,
//              and -1 or "x" for a muted string)
//   "fingers": finger positions (optional)
//   "display": (optional) can be used to change the way the chord is displayed
chords : []

// Format to show chord names. May contain markup
chord-formats {

    // Format string for rendering common chord names.
    common : "%{root|%{}%{qual|%{}}%{ext|%{}}%{bass|/%{}}|%{name}}"

    // Format string for rendering roman chord names.
    roman : "%{root|%{}%{qual|<sup>%{}</sup>}%{ext|<sup>%{}</sup>}%{bass|/<sub>%{}</sub>}|%{name}}"

    // Format string for rendering nashville chord names.
    nashville : "%{root|%{}%{qual|<sup>%{}</sup>}%{ext|<sup>%{}</sup>}%{bass|/<sub>%{}</sub>}|%{name}}"
}

// Selects which chords to print at the end of the song.
// Note that the type of diagram (strings, keyboard) is determined
// by the value of "instrument.type".
diagrams {

    // Shows selected or all chord diagrams at end.
    // "all": shows all chords
    // "user": shows user defined chords only
    // "none": suppresses chords from being printed
    show : all

    // Sorts the diagrams by key. Default is order of appearance.
    sorted : false

    // Chords (names) that will not generate diagrams, e.g. if they
    // are considered trivial.
    suppress : []
}

// Format for error messages.
diagnostics.format : '"%f", line %n, %m\n\t%l'

// Tables of contents.
// An array of hashes each describing one table of contents.
contents : [
    {

        // An identifying name for this table of contents.
        name : table_of_contents

        // The metadata for this toc. One or two items.
        fields : [ songindex ]

        // The label (title) for this toc.
        label : "Table of Contents"

        // The format for the toc lines.
        line : "%{title}"

        // The format for the page numbers in the toc.
        pageno : "%{page}"

        // For future use.
        fold : false

        // Omit this toc.
        omit : false

        // Template song for the toc.
        template : stdtoc
    }
    {

        // An identifying name for this table of contents.
        name : contents_by_title

        // The metadata for this toc. One or two items.
        fields : [ title artist ]

        // The label (title) for this toc.
        label : "Contents by Title"

        // The format for the toc lines.
        line : "%{title}%{artist| - %{}}"

        // The format for the page numbers in the toc.
        pageno : "%{page}"

        // For future use.
        fold : false

        // Omit this toc.
        omit : false

        // Template song for the toc.
        template : stdtoc
    }
    {

        // An identifying name for this table of contents.
        name : contents_by_artist

        // The metadata for this toc. One or two items.
        fields : [ artist title ]

        // The label (title) for this toc.
        label : "Contents by Artist"

        // A break value to group toc entries with.
        break : "%{sortartist|%{}|%{artist}}"

        // The format for the toc lines.
        line : "    %{title}"

        // The format for the page numbers in the toc.
        pageno : "%{page}"

        // For future use.
        fold : false

        // Omit this toc.
        omit : true

        // Template song for the toc.
        template : stdtoc
    }
]

// Table of Contents (obsolete, do not use).
toc {
    title : "Table of Contents"
    line  : "%{title}"
    order : page
}

// Grid strum overrides.
gridstrum.symbols {}

// Delegates.
// Basically a delegate is a section {start_of_XXX} which content is
// collected and handled later by the delegate module.
// Each delegate has at least the following fields:
// "type": "image", "none" or "omit".
//   type = "none" treats the section as a generic section,
//   type = "omit" ignores the section
// "module": the name of the module that implements the delegate
// "handler": the entry point in the module.
delegates {

    // Embedding ABC.
    abc {
        type       : image
        module     : ABC

        // Default handler "abc2svg" uses program (if set),
        // otherwise embedded QuickJS or external QuickJS.
        // Handler "quickjs_xs" uses embedded QuickJS only.
        // Handler "quickjs_qjs" uses external QuickJS only.
        // Handler "quickjs" uses internal or external QuickJS.
        handler : abc2svg
        program    : ""

        // No longer used -- ./default.abc will be used if program tool.
        config : default
        preamble   : [
            "%%textfont pdf.fonts.text"
            "%%vocalfont pdf.fonts.text"
            "%%gchordfont pdf.fonts.chord"
        ]

        // Obsolete. Please use parser.preprocess.env-... instead.
        preprocess.abc : []
    }

    // Embedding Lilypond.
    ly {
        type       : image
        module     : Lilypond
        handler    : ly2svg
        program    : ""
        config     : default

        // The preamble is a list of lines inserted before the lilipond data,
        // This is a good place to set the version and global customizations.
        preamble : [
            '\\version "2.21.0"'
            "\\header { tagline = ##f }"
        ]

        // Obsolete. Please use parser.preprocess.env-... instead.
        preprocess.ly : []
    }

    // Embedding SVG.
    svg {
        type    : image
        module  : SVG
        handler : svg2svg
    }

    // Embedding textblock.
    textblock {
        type    : image
        module  : TextBlock
        handler : txt2xform
    }
}

// Settings for PDF output.
pdf {

    // Choose a PDF::API2 compatible library, or leave empty to
    // have ChordPro choose one for you.
    library : ""

    // PDF Properties. Arbitrary key/values may be added.
    // Note that the context for substitutions is the first song.
    info {

        // Document title.
        title : "%{title}"

        // Name of the author.
        author : ""

        // Document subject.
        subject : ""

        // Document keywords.
        keywords : ""
    }

    // Output paper size, e.g. "a4" or [595,842].
    papersize : a4

    // For future use.
    page_layout : false

    // Theme
    theme {

        // Foreground colour. Usually black.
        foreground : black

        // Light foreground colour
        foreground-medium : grey70

        // Very light foreground colour
        foreground-light : grey90

        // Background colour. Usually white.
        background : none
    }

    // Distance between columns in multi-column mode.
    columnspace : 20

    // Page top margin, excluding headspace.
    margintop : 80

    // Page bottom margin, excluding footspace.
    marginbottom : 40

    // Page left margin.
    marginleft : 40

    // Page right margin.
    marginright : 40

    // Space for page titles.
    headspace : 60

    // Space for page footers.
    footspace : 20

    // Heading on first page only, add the headspace to
    // the other pages so they become larger.
    head-first-only : false

    // Baseline distances as a factor of the font size.
    spacing {

        // Spacing for page titles.
        title : 1.2

        // Spacing for lyrics.
        lyrics : 1.2

        // Spacing for chord names.
        chords : 1.2

        // Spacing for diagram chords.
        diagramchords : 1.2

        // Spacing for grid lines.
        grid : 1.2

        // Spacing for tab lines.
        tab : 1

        // Spacing for table of contents lines.
        toc : 1.4

        // Spacing for empty (blank) lines.
        // By setting this to a small value you get fine-grained control over
        // the distance between song elements by adding empty lines.
        empty : 1
    }

    // Appearance of chorus.
    chorus {

        // Indent of the chorus, not including bar.
        indent : 0

        // Appearance of side bar.
        bar {

            // Bar offset to the left of the text. Suppress when zero.
            offset : 8

            // Bar width. Suppress when zero.
            width : 1

            // Bar colour.
            color : foreground
        }

        // Label for Chorus.
        tag : Chorus

        // Appearance of chorus recall.
        recall {

            // Quote the chorus like a chorus.
            choruslike : false

            // Label for recalled chorus.
            tag : Chorus

            // Font for tag text.
            type : comment

            // Quote the chorus.
            quote : false
        }
    }

    // This opens a margin for margin labels.
    labels {

        // Margin width. Default is 0 (no margin labels).
        // "auto" will automatically reserve a margin if labels are used.
        width : auto

        // Alignment for the labels. Default is left.
        align : left

        // Alternatively, render labels as comments.
        // Values are "comment", "comment_italic" and "comment_box".
        comment : ""
    }

    // Alternative songlines with chords in a side column.
    // Value is the column position.
    chordscolumn : 0

    // Value for Capo heading when using chordscolumn.
    capoheading : "%{capo|Capo: %{}}"

    // A {titles: left} directive may conflict with customized formats.
    // Set to true to ignore the directive.
    titles-directive-ignore : false

    // Appearance of chord diagrams for string instruments.
    // A chord diagram consists of a number of cells.
    // Cell dimensions are specified by "width" and "height".
    // The horizontal number of cells depends on the number of strings.
    // The vertical number of cells is "vcells", which should
    // be 4 or larger to accommodate most chords.
    // The horizontal distance between diagrams is "hspace" cells.
    // The vertical distance is "vspace" cells.
    diagrams {

        // Diagrams for all chords of the song can be shown at the
        // "top", "bottom" or "right" side of the first page,
        // or "below" the last song line.
        show : bottom

        // Alignment for "top", "bottom" and "below".
        // Possible values are "left" (default), "right", "center" and "spread".
        align : left

        // Width of each diagram cell.
        width : 6

        // Height of each diagram cell.
        height : 6

        // The number of frets shown.
        vcells : 4

        // Thickness of the diagram lines as a fraction of 'width'.
        linewidth : 0.1

        // Thickness of the top nut, in 'linewidth'.
        nutwidth : 5

        // Horizontal space between diagrams.
        hspace : 3.95

        // Vertical space between diagrams.
        vspace : 3

        // Size of the fret dot, fraction of cell width.
        dotsize : 0.8

        // Style of bars, line or arc.
        barstyle : line

        // Thickness of bars, fraction of dot width.
        barwidth : 0.8

        // Show finger settings, if available.
        fingers : true

        // Text to show the fret base, if greater than one.
        // "%s" will be replaced by the actual fret base number.
        fretbasetext : %s

        // Position for the fret base, left (default) or right.
        fretbaseposition : left
    }

    // Appearance of chord diagrams for keyboards.
    // A keyboard diagram consists of a number of keys.
    // Dimensions are specified by "width" and "height".
    // The horizontal distance between diagrams is "hspace" * "keys" * "width".
    kbdiagrams {

        // Diagrams for all chords of the song can be shown at the
        // "top", "bottom" or "right" side of the first page,
        // or "below" the last song line.
        show : bottom

        // Alignment for "top", "bottom" and "below".
        // Possible values are "left" (default), "right", "center" and "spread".
        align : left

        // Width of a single (white) key.
        width : 4

        // Height of the diagram.
        height : 20

        // The number of white keys shown.
        keys : 14

        // The leftmost white key. Must be "C" or "F".
        base : C

        // Thickness of the diagram lines as a fraction of "width".
        linewidth : 0.1

        // Color of the 'pressed' keys.
        pressed : foreground-medium

        // Horizontal space between diagrams.
        hspace : 3.95

        // Vertical space between diagrams.
        vspace : 0.3
    }

    // Grid section lines.
    // Suppress when "show" is false, e.g. for singers.
    // The width and colour of the cell bar lines can be specified.
    // Enable by setting the width to the desired width.
    grids {
        cellbar {

            // Width of the cell bar.
            width : 0

            // Colour of the cell bar.
            color : foreground-medium
        }

        // Show grid context in output.
        show : true

	// Stretch the bar lines vertically.
	stretch : 0.825

        // Colour of special symbols.
        symbols.color : blue

        // Properties of the volta.
        volta {

            // Volta span (fraction of measure).
            span : 0.7

            // Colour of the volta.
            color : blue
        }
    }

    // New style page control.
    songbook {

	// Dual (odd/even) pages when set to true.
	// False means all pages will be the same (odd, right).
	// With dual pages, all the parts of the songbook (covers,
	// tables of contents, etc.) are always aligned to a right page.
	dual-pages : true

	// With dual pages, align individual tables of content
	// to right pages by inserting a blank filler page.
	// Values are true, false, or "song". In the latter case the
	// pagealign settings for songs are used for the tables of contents.
	align-tocs : true

	// With dual pages, a true value aligns songs to right pages
	// by inserting a blank filler page if necessary.
	// If false, no alignment takes place, all pages follow
	// each other.
	align-songs : true

	// If true, all songs will start on left pages instead of right pages.
	align-songs-spread : false

	// If true, the fill pages will have headings and footers
	// as if they were part of the song.
	align-songs-extend : false

	// Sort songs by "title" or "subtitle".
	// title    : sort pages alphabetically by title.
	// subtitle : sort pages alphabetically by subtitle. If this is
	//            used together with title, only title is used.
	// Put a minus sign before title and/or subtitle to obtain
	// descending order.
	sort-songs : false

	// If true, the order of the songs is adjusted to make the
	// songbook as compact as possible, while each of the songs
	// require minimal page turns.
	// Note: this option requires extra processing time since
	// the songbook has to be processed twice.
	compact-songs : false

	// PDF file to add as cover page(s).
	cover : false

	// PDF file to add as front matter.
	front-matter : false

	// PDF file to add as back matter.
	back-matter : false
    }

    // Legacy settings. These will be converted to new style page controls.
    // However, if a config contains any new style page controls they
    // will all be ignoredd.
    /*
    even-odd-pages  : true
    pagealign-songs : true
    sort-pages :      false
    front-matter :    false
    back-matter :     false
    */

    // Formats.
    // Pages have two title elements and one footer element. They also
    // can have a page of an existing PDF file as underlay (background).
    // Topmost is "title". It uses the "title" font as defined further below.
    // Second is "subtitle". It uses the "subtitle" font.
    // The "footer" uses the "footer" font.
    // All elements can have three fields, that are placed to the left side,
    // centered, and right side of the page.
    // The contents of all fields is defined below. You can use metadata
    // items in the fields as shown. By default, the "title" element shows the
    // value of metadata item "title", centered on the page. Likewise
    // "subtitle".
    // NOTE: The "title" and "subtitle" page elements have the same names
    // as the default metadata values which may be confusing. To show
    // metadata item, e.g. "artist", add its value to one of the
    // title/subtitle fields. Don't try to add an artist page element.
    // 
    // The left, center and right parts are for odd pages.
    // On even pages, the left and right parts are swapped.
    // It is possible to define distinct even page formats with "default-even",
    // "title-even" and "first-even".
    //    
    // When a background document is specified, with odd/even printing,
    // the 1st background page is used for left pages and
    // the next page (if it exists) for right pages.
    // For even/odd printing, the order is reversed.
    formats {

        // By default, a page has:
        default {

            // Three-part title format specification, left, center, right.
            title : [ "" "" "" ]

            // Three-part title format specification, left, center, right.
            subtitle : [ "" "" "" ]

            // Three-part title format specification, left, center, right.
            footer : [ "%{title}" "" "%{page}" ]

            // Background page.
            background : ""
        }

        // The first page of a song has:
        title {

            // Three-part title format specification, left, center, right.
            title : [ "" "%{title}" "" ]

            // Three-part title format specification, left, center, right.
            subtitle : [ "" "%{subtitle}" "" ]

            // Three-part title format specification, left, center, right.
            footer : [ "" "" "%{page}" ]

            // Background page.
            background : ""
        }

        // The very first output page is slightly different:
        first {

            // Three-part title format specification, left, center, right.
            footer : [ "" "" "" ]

            // Background page.
            background : ""
        }

        // Filler pages (for alignment) are empty by default.
        filler.background : ""
    }

    // Split marker for syllables that are smaller than chord width.
    // split-marker is a 3-part array: "start", "repeat", and "final".
    // "final" is always printed, last.
    // "start" is printed if there is enough room.
    // "repeat" is printed repeatedly to fill the rest.
    // If split-marker is a single string, this is "start".
    // All elements may be left empty strings.
    split-marker : [ "" "" "" ]

    // Font families and properties.
    // "fontconfig" maps members of font families to physical fonts.
    // Optionally, additional properties of the fonts can be specified.
    // Physical fonts can be the names of TrueType/OpenType fonts,
    // or names of built-in fonts (corefonts).
    // Relative filenames are looked up in the fontdir.
    // For example:
    // "fontdir" : [ "/usr/share/fonts/liberation", "/home/me/fonts" ]
    fontdir : []

    // Experimental: Remap corefonts to real truetype fonts.
    // This requires a set of truetype fonts to be available in the
    // fontdir under a well-defined name. See the docs.
    // Fontsets currenly supported are "free" for the GNU Free Fonts,
    // and "tex" for the Tex Gyre fonts.
    // Value "false" inhibits remapping.
    // Value "null" will have ChordPro look for the fonts itself.
    corefonts.remap : null

    // The font families.
    fontconfig {
        serif {
            ""         : Times-Roman
            bold       : Times-Bold
            italic     : Times-Italic
            bolditalic : Times-BoldItalic
        }
        times {
            ""         : Times-Roman
            bold       : Times-Bold
            italic     : Times-Italic
            bolditalic : Times-BoldItalic
        }
        helvetica {
            ""          : Helvetica
            bold        : Helvetica-Bold
            oblique     : Helvetica-Oblique
            boldoblique : Helvetica-BoldOblique
        }
        "sans, sans-serif" {
            ""         : Helvetica
            bold       : Helvetica-Bold
            italic     : Helvetica-Oblique
            bolditalic : Helvetica-BoldOblique
        }
        courier {
            ""         : Courier
            bold       : Courier-Bold
            italic     : Courier-Oblique
            bolditalic : Courier-BoldOblique
        }
        "mono, monospace" {
            ""         : Courier
            bold       : Courier-Bold
            italic     : Courier-Oblique
            bolditalic : Courier-BoldOblique
        }
        "muse, musejazztext" {
            ""         : MuseJazzText.otf
            bold       : MuseJazzText.otf
            italic     : MuseJazzText.otf
            bolditalic : MuseJazzText.otf
        }
        dingbats.          : ZapfDingbats
    }

    // "fonts" maps output elements to fonts as defined in "fontconfig".
    // The elements can have a background colour associated.
    // Colours are "#RRGGBB" or predefined names like "black", "white",
    // and lots of others.
    // NOTE: In the built-in config we use only "name" since that can
    // be overruled with user settings.
    // 
    // Some element mappings can be specified, but need not since
    // they default to other elements.
    // subtitle       --> text
    // chorus         --> text
    // comment        --> text
    // comment_italic --> chord
    // comment_box    --> chord
    // annotation     --> chord
    // toc            --> text
    // grid           --> chord
    // grid_margin    --> comment
    // footer         --> subtitle @ 60%
    // empty          --> text
    // diagram        --> comment
    // diagram_base   --> text (but at a small size)
    fonts {

        // Font for typesetting titles.
        title : "Times-Bold 14"

        // Font for typesetting lyrics.
        text : "Times-Roman 12"

        // Font for typesetting chord names.
        chord : "Helvetica-Oblique 10"

        // Font for numbers in chord diagram dots.
        // Color is for the numbers.
        // Numbercolor is for the dots.
        // Size doesn't matter unless diagrams.fingers = below.
        chordfingers : "sans; numbercolor=background"

        // Font for typesetting comment text.
        comment : "Helvetica 12; background=foreground-light"

        // Font for typesetting italised comment text.
        comment_italic : "Helvetica-Oblique 12"

        // Font for typesetting boxed comment text.
        comment_box : "Helvetica 12; frame=1"

        // Font for typesetting tabs.
        tab : "Courier 10"

        // Font for typesetting the table of contents.
        toc : "Times-Roman 11"

        // Font for typesetting grids.
        grid : "Helvetica 10"

        // Font for typesetting gridstrum symbols.
        // You can set size and colours, but you cannot change the font.
        gridstrum : "ChordProSymbols 13"

        // Font for typesetting grilles.
        grille : "Helvetica 10"
    }

    // PDF outlines (index) can be used in most PDF viewers
    // for quick navigation.
    outlines : [
        {

            // An identifying name for this outline.
            name : by_title

            // Primary and (optional) secondary fields.
            fields : [ sorttitle artist ]

            // Title, omitted if there's only one outline.
            label : "By Title"

            // The format for the outline entries.
            line : "%{title}%{artist| - %{}}"

            // Initial display is collapsed.
            collapse : false

            // Make letter level if more entries than this value.
            letter : 5

            // For future use.
            fold : false
        }
        {

            // An identifying name for this outline.
            name : by_artist

            // Primary and (optional) secondary fields.
            fields : [ artist sorttitle ]

            // Title, omitted if there's only one outline.
            label : "By Artist"

            // The format for the outline entries.
            line : "%{artist|%{} - }%{title}"

            // Initial display is collapsed.
            collapse : false

            // Make letter level if more entries than this value.
            letter : 5

            // For future use.
            fold : false
        }
        {

            // An identifying name for this outline.
            name : bookmarks

            // Primary and (optional) secondary fields.
            fields : [ bookmark ]

            // Omit this outline.
            omit : true

            // Title, omitted if there's only one outline.
            label : Bookmarks

            // The format for the outline entries.
            line : "%{bookmark}"

            // Initial display is collapsed.
            collapse : true

            // Make letter level if more entries than this value.
            letter : 0

            // For future use.
            fold : false
        }
    ]

    // Show the page layout structure.
    // This is mainly for design and debugging.
    showlayout : false

    // CSV generation for MobileSheetsPro. May need adaptation for other tools.
    // Note that the resultant file will conform to RFC 4180.
    // 
    // Add "omit" : true to omit a field; to add fields with fixed
    // values, use "value". See the entry with name "my_field".
    csv {

        // The fields for the CSV.
        fields : [
            { name : title         meta : title      }
            { name : pages         meta : pagerange  }
            { name : "sort title"  meta : sorttitle  }
            { name : artists       meta : artist     }
            { name : composers     meta : composer   }
            { name : collections   meta : collection }
            { name : keys          meta : key_actual }
            { name : years         meta : year       }
            { name : my_field     value : text       omit  : true}
        ]

        // Separator to join field values.
        separator : ;

        // Separator to join meta values.
        vseparator : |

        // Restrict CSV to song pages only (do not include matter pages)
        songsonly : true
    }
}

// Settings for ChordPro (output) backend.
chordpro {

    // Appearance of chorus recall.
    // Default: print the tag using the type.
    // Alternatively quote the lines of the preceding chorus.
    // If no tag+type or quote: use {chorus}.
    // Note: Variant 'msp' always uses {chorus}.
    chorus.recall {
        tag   : ""
        type  : ""
        quote : false
    }

    // Retain comments in the output.
    comments : retain
}

// Settings for HTML output.
// Styles for display and printing.
html.styles {
    display : chordpro.css
    print   : chordpro_print.css
}

// Settings for LaTeX backend.
latex {

    // Include paths for templates.
    template_include_path : []

    // Templates for LaTeX generation.
    templates {

        // Master template to render the songbook.
        songbook : songbook.tt

        // Helper template to render comments.
        comment : comment.tt

        // Helper template to render images.
        image : image.tt
    }
}

// Settings for Text (output) backend.
// See the ChordPro backend for details.
text.chorus.recall {
    tag   : ""
    type  : ""
    quote : false
}

// Settings for A2Crd (input) frontend.
a2crd {

    // Treat leading lyrics lines as title/subtitle lines.
    infer-titles : true

    // Analysis strategy.
    classifier : pct_chords

    // Tab stop width for tab expansion. Set to zero to disable.
    tabstop : 8
}

// Settings for the markup processor.
// Shortcodes allow user defined markup, e.g. <foo>...</foo>.
// markup.shortcode {
//    heavy :  "weight='bold' size='large'"
// }
// Each occurrence of <heavy>...</heavy> will be replaced by
// <span weight='bold' size='large'>...</span>.
markup.shortcodes {}

// Settings for the parser.
parser {

    // For the exceptional case you need brackets [] in your lyrics or annotations.
    // These characters are replaced by normal brackets **after** chord analysis.
    // E.g. parser.altbrackets: "«»"
    // Use wisely. Better still, don't use this.
    altbrackets : null

    // Settings for the parser/preprocessor.
    // For selected lines, you can specify a series of 
    // { "target" : "xxx", "replace" : "yyy" }
    // Every occurrence of "xxx" will be replaced by "yyy".
    // Use "pattern" instead of "target" for regular expression replacement.
    // Use wisely.
    preprocess {
        all       : []
        directive : []
        songline  : []
    }
}

// Miscellaneous debug settings.
debug {
    runtimeinfo : 1
    a2crd       : 0
    abc         : 0
    assets      : 0
    chords      : 0
    config      : 0
    csv         : 0
    echo        : 0
    fit         : 0
    fonts       : 0
    images      : 0
    layout      : 0
    ly          : 0
    meta        : 0
    mma         : 0
    ops         : 0
    pages       : 0
    pagectrl    : 0
    paths       : 0
    pgm         : 0
    pp          : 0
    song        : 0
    songfull    : 0
    spacing     : 0
    svg         : 0
    txtblk      : 0
    x1          : 0
    x2          : 0
    x3          : 0
}