=head1 ChordPro Default Configuration

=encoding UTF8

    // Configuration for ChordPro
    // See the ChordPro website for more details: https://www.chordpro.org/chordpro/chordpro-configuration-file/.
    // This is a really relaxed JSON document, see https://metacpan.org/pod/JSON::Relaxed#REALLY-RELAXED-EXTENSIONS
    
    // For GUI.
    config {
    
        // The type of this config
        // One or more of `"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
    }
    
    // A config file can specify a list of other config files that are to be processed **before** the contents of the current file. This makes it straightforward to create config files that extend existing config files.
    // `"include"` takes a list of either filenames or preset names.
    // If a file name is not absolute, it is taken relative to the location of the including config file.
    include : [ guitar ]
    
    // General settings control global behaviour of the ChordPro program and can be changed by configs and command line.
    settings {
    
        // Stricter checks and more warnings.
        strict : false
    
        // Obsolete.
        lineinfo : true
    
        // Titles flush.
        // Obsolete, use page headings/footers instead.
        titles : center
    
        // Columns.
        // Either the number of columns, default: 1, or an array with column widths.
        columns : 1
    
        // Suppress empty chord lines.
        suppress-empty-chords : true
    
        // Suppress blank lyrics lines.
        suppress-empty-lyrics : true
    
        // Suppress chords, only outputs lyrics.
        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
    
        // Annotations inline instead of above. 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 the song by a number of semitones.
        // A positive number transposes up, a negative number transposes down.
        // An optional postfix of `"s"` or `"f"` can be used to enforce the use of sharps resp. flats when a transposed chord requires accidentals.
        // A postfix of `"k"` will use the key signature to determine whether flats or sharps are needed.
        transpose : 0
    
        // Always apply `"k"` semantics if no other postfix was specified.
        transpose-sf-key : false
    
        // Force enharmonic when transposing (experimental).
        enharmonic-transpose : true
    
        // Transcode chords.
        transcode : ""
    
        // Eliminate capo by transposing chords.
        decapo : false
    
        // Strictness of parsing chord names.
        // Values are `"strict"` (only known chord forms) or `"relaxed"` (anything that looks sane).
        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.
        // This will fallback to the ChordProSymbols the selected chord font doesn't have the glyphs.
        truesf : false
    
        // Substitute delta for maj7 in chord names.
        // This will fallback to the ChordProSymbols the selected chord font doesn't have the glyphs.
        maj7delta : false
    
        // Wrap long lines. This may trigger issue #355.
        wraplines : true
    
        // Indent for wrapped lines.
        // Actual indent is the width of the provided string value.
        wrapindent : x
    
        // Consider text flowed.
        flowtext : false
    }
    
    // Metadata.
    metadata {
    
        // The list of known metadata keys.
        // For these keys you can use `{meta key …}` as well as `{key …}`.
        // Important: `"title"` and `"subtitle"` must always be in this list.
        keys : [
            title
            subtitle
            album
            arranger
            artist
            capo
            composer
            copyright
            duration
            key
            lyricist
            sortartist
            sorttitle
            tag
            tempo
            time
            year
        ]
    
        // If `true`, `{meta …}` will only accept the keys named here in the `keys` field.
        // Otherwise, any key will be accepted.
        strict : true
    
        // The separator is used to concatenate multiple values when metadata are used in title fields.
        // If `autosplit` is `true`, the separator is also used to split values upon input.
        separator : "; "
    
        // Split data on separator.
        // If enabled, metadata will be split on the separator to provide multiple values.
        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.
    // Defines the date format used by the metadata value `today`.
    // Format is a `strftime` template, so the format string can use anything that `strftime` understands.
    dates.today.format : "%A, %B %e, %Y"
    
    // User settings.
    // These (optional) settings can be used to add user information.
    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 in scientific pitch notation.
    // This is usually set from an included instrument config.
    // Note that string 1 is the highest sounding string.
    // If tuning is not relevant to the instrument, setting the tuning to `[ 0 ]` flushes all existing definitions.
    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 always use real sharps and flats for output, but many 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. `\u266d` 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
    }
    
    // Key strategies.
    // ChordPro tries to follow ABC (abc2svg) as much as possible.
    keys {
    
        // Replace keys with an excessive number of sharps by their more common enharmonic equivalents.
        // See also `settings.transpose-sf-key`.
        force-common : true
    
        // The key `F#` is often used as is and not represented as an enharmonic equivalent. Set this to true if you want `Gb` instead of `F#`.
        flats : false
    }
    
    // User-defined chords.
    // This is an array of hashes, one for each chord.
    // See the docs for details.
    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}}"
    }
    
    // Showing chord diagrams. Selects which chords to show at the end of the song.
    // By default, ChordPro will include diagrams for all known chords that have been used in a song.
    // The `suppress` list can be used to filter chords from showing diagrams, for example for chords that you consider trivial.
    // Note: The type of diagram (string or keyboard) is determined by the value of `instrument.type`.
    diagrams {
    
        // Selection of chords to show.
        // 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 : []
    }
    
    // When ChordPro detects errors while analyzing a song, it will use this format description to show diagnostic messages.
    // In the format, `"%f"` will be replaced by the song file name, `"%n"` by the line number in the file where the error was detected, %m by the diagnostig message, and `"%l"` will be replaced by the original content of the line.
    // Note you cannot use song metadata here.
    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 table of contents. One or two items.
            // To change the ordering of the table, prefix the sort key with `+` to force numeric sorting, or use a `-` prefix to reverse the sort order.
            // When you specify a metadata item that has multiple values they are split out in the table.
            // `songindex` is a built-in metadata item that yields the sequence number of the song in the songbook. Sorting on `songindex` will therefore produce the songs in songbook order.
            fields : [ songindex ]
    
            // The label (title) for this table.
            label : "Table of Contents"
    
            // The format of the table's lines.
            // You can use all song metadata.
            line : "%{title}"
    
            // The format for the page number in the table.
            // You can use all song metadata.
            pageno : "%{page}"
    
            // For future use.
            fold : false
    
            // If `true`, this table is omitted.
            omit : false
    
            // The template for this table.
            template : stdtoc
        }
        {
    
            // An identifying name for this table of contents.
            name : contents_by_title
    
            // The metadata for this table of contents. One or two items.
            // To change the ordering of the table, prefix the sort key with `+` to force numeric sorting, or use a `-` prefix to reverse the sort order.
            // When you specify a metadata item that has multiple values they are split out in the table.
            // `songindex` is a built-in metadata item that yields the sequence number of the song in the songbook. Sorting on `songindex` will therefore produce the songs in songbook order.
            fields : [ title artist ]
    
            // The label (title) for this table.
            label : "Contents by Title"
    
            // The format of the table's lines.
            // You can use all song metadata.
            line : "%{title}%{artist| - %{}}"
    
            // The format for the page number in the table.
            // You can use all song metadata.
            pageno : "%{page}"
    
            // For future use.
            fold : false
    
            // If `true`, this table is omitted.
            omit : false
    
            // The template for this table.
            template : stdtoc
        }
        {
    
            // An identifying name for this table of contents.
            name : contents_by_artist
    
            // The metadata for this table of contents. One or two items.
            // To change the ordering of the table, prefix the sort key with `+` to force numeric sorting, or use a `-` prefix to reverse the sort order.
            // When you specify a metadata item that has multiple values they are split out in the table.
            // `songindex` is a built-in metadata item that yields the sequence number of the song in the songbook. Sorting on `songindex` will therefore produce the songs in songbook order.
            fields : [ artist title ]
    
            // The label (title) for this table.
            label : "Contents by Artist"
    
            // A break value to group toc entries with.
            break : "%{sortartist|%{}|%{artist}}"
    
            // The format of the table's lines.
            // You can use all song metadata.
            line : "    %{title}"
    
            // The format for the page number in the table.
            // You can use all song metadata.
            pageno : "%{page}"
    
            // For future use.
            fold : false
    
            // If `true`, this table is omitted.
            omit : true
    
            // The template for this table.
            template : stdtoc
        }
    ]
    
    // Deprecated. 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.
    delegates {
    
        // Embedding ABC.
        abc {
    
            // The result produced by the delegate handler.
            type : image
    
            // The name of the (perl) module that implements the delegate.
            module : ABC
    
            // The module's method to call.
            // Default handler uses `program` (if set), othewise embedded QuickJS or external QuickJS.
            handler : abc2svg
    
            // The program/command to execute.
            program : ""
    
            // Obsolete.
            config : default
    
            // Specific settings for the PDF backend.
            pdf.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 {
    
            // The result produced by the delegate handler.
            type : image
    
            // The name of the (perl) module that implements the delegate.
            module : Lilypond
    
            // The module's method to call.
            handler : ly2svg
    
            // The program/command to execute.
            program : ""
            config     : default
    
            // Input lines to prepend to the user data.
            preamble : [
                '\\version "2.21.0"'
                "\\header { tagline = ##f }"
            ]
    
            // Obsolete. Please use `parser.preprocess.env-...` instead.
            preprocess.ly : []
        }
    
        // Embedding Strums. EXPERIMENTAL
        strum {
    
            // The result produced by the delegate handler.
            type : none
    
            // The module's method to call.
            handler : none
    
            // Specific settings for the PDF backend.
            pdf {
                handler : strum2xo
                type    : image
            }
    
            // The name of the (perl) module that implements the delegate.
            module : Strum
        }
    
        // Embedding SVG.
        svg {
    
            // The result produced by the delegate handler.
            type : image
    
            // The name of the (perl) module that implements the delegate.
            module : SVG
    
            // The module's method to call.
            handler : svg2svg
        }
    
        // Embedding textblock.
        textblock {
    
            // The result produced by the delegate handler.
            type : none
    
            // The module's method to call.
            handler : none
    
            // The name of the (perl) module that implements the delegate.
            module : TextBlock
    
            // Specific settings for the PDF backend.
            pdf {
                handler : txt2xform
                type    : image
            }
    
            // Specific settings for the HTML backend.
            html {
                handler : txt2html
                type    : html
            }
        }
    }
    
    // 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.
        // The size can be specified either as the name of a known page size, e.g. `"a4`", or as a 2-element list containing the width and height of the page in PDF units (DTP points, pt, 1/72 inch).
        papersize : a4
    
        // For future use.
        page_layout : false
    
        // Theme
        // These settings can be used to control the foreground and background colours of the PDF output.
        // Valid values include colour names, full hex strings (`"#555555"`), or `"none"`.
        // Background `"none"` or `"white"` means there will be no background colour added to the output.
        // It may be useful to put your theme settings in a separate config file, together with additional settings that make up the theme.
        // Other configuration settings that use colours can use `foreground`, `foreground-light`, `foreground-medium`, and `background` to refer to the colours defined in the 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.
        // When output is produced in multiple columns, this is the space between the columns, in pt.
        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; the headspace is added 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 between songlines (grouped chords + lyrics).
            lyrics : 1.2
    
            // Spacing between chords and lyrics in songlines.
            chords : 1.2
    
            // Spacing between the chord name and the diagram in chord diagrams.
            diagramchords : 1.2
    
            // Spacing after each grid line.
            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 {
    
            // Indentation of the chorus, not including bar.
            indent : 0
    
            // Appearance of chorus side bar.
            // Suppress by setting offset and/or width to zero (`0`).
            bar {
    
                // Bar offset to the left of the text. Suppresses bar when zero (`0`).
                offset : 8
    
                // Bar width. Suppress when zero (`0`).
                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.
                // Possible values come from keys of `pdf.fonts`.
                type : comment
    
                // Quote the chorus.
                quote : false
            }
        }
    
        // This opens a margin for margin labels.
        labels {
    
            // Margin width.
            // `0` hides margin labels entirely. `"auto"` will automatically reserve a margin if labels are used.
            width : auto
    
            // How the labels are aligned in the margin.
            align : left
    
            // When `comment` is set to one of the suported comment types, the label will be printed as a comment before the section contents. The settings of `width` and `align` are ignored and no margin is opened.
            comment : ""
        }
    
        // This is an alternative style where the chords are placed in a separate column at the right of the lyrics. Chord changes are marked by underlining the lyrics.
        // This style is enabled by setting to a nonzero value.
        // Value is the column position.
        chordscolumn : 0
    
        // Value for Capo heading when using `chordscolumn`.
        // When a capo is set a heading indicating the current capo setting is added.
        capoheading : "%{capo|Capo: %{}}"
    
        // A `{titles: left}` directive may conflict with customized page heading/footer formats. Set this to `true` to have the directive ignores.
        titles-directive-ignore : false
    
        // Appearance of chord diagrams for string instruments.
        // A chord diagram consists of a number of cells.
        // 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.
        diagrams {
    
            // Diagrams for the chords of the song can be shown at the `"top"`, `"bottom"` or `"right"` side of the first page, or `"below"` the last song line. Set to `false` to not show any diagrams.
            show : bottom
    
            // Alignment for when `show` is set to `"top"`, `"bottom"` or `"below"`.
            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 relation to `linewidth`.
            nutwidth : 5
    
            // Horizontal space between diagrams.
            hspace : 3.95
    
            // Vertical space between diagrams
            vspace : 3
    
            // Size of the fret dot, as a fraction of cell width.
            dotsize : 0.8
    
            // Style of bars, line or arc.
            barstyle : line
    
            // Thickness of bars, as a fraction of dot width.
            barwidth : 0.8
    
            // Show finger settings, if available.
            // `"below"` displays finger settings below the diagram, rather than in the finger dot.
            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 the chords of the song can be shown at the `"top"`, `"bottom"` or `"right"` side of the first page, or `"below"` the last song line. Set to `false` to not show any diagrams.
            show : bottom
    
            // Alignment for when `show` is set to `"top"`, `"bottom"` or `"below"`.
            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.
        // Enable by setting the width to the desired width.
        grids {
    
            // The `width` and `color` of the cell bar lines.
            cellbar {
    
                // Width of the cell bar.
                width : 0
    
                // Colour of the cell bar.
                color : foreground-medium
            }
    
            // Show grid context in output.
            show : true
    
            // Stretch grid lines vertically.
            stretch : 0.825
    
            // Properties 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
        }
    
        // Page formats.
        // Each of these page classes can have settings for a page title, subtitle, footer, and background. The settings inherit from `default` to `title` to `first`. So a `title` page has everything a `default` page has, and a `first` page has everything a `title` page has. `filler` pages are empty by default.
        // All heading strings may contain references to metadata in the form %{name}, for example %{title}. The current page number can be obtained with %{page}, and the song index in the songbook with %{songindex}. For a complete description on how to use metadata in heading strings, see [here](https://chordpro.org/chordpro/chordpro-configuration-format-strings/).
        // When even/odd page printing is selected, the left and right parts are swapped on even pages.
        // 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.
        formats {
    
            // Headers/footers/background for all pages that aren't first page of the output, of a song, or alignment pages.
            default {
    
                // Topmost title element.
                // It uses the `fonts.title` font.
                title : [ "" "" "" ]
    
                // Second title element.
                // It uses the `fonts.subtitle` font.
                subtitle : [ "" "" "" ]
    
                // It uses the `fonts.footer` font.
                footer : [ "%{title}" "" "%{page}" ]
    
                // Page background.
                // This can be used to designate an existing PDF document to be used as the background of the output page. It has the form `filename` or `filename:page`. Page numbers count from one.
                // If odd/even printing is in effect, the designated page number is used for left pages, and the next page (if it exists) for right pages.
                background : ""
            }
    
            // Headers/footers/background for the first page of a song.
            title {
    
                // Topmost title element.
                // It uses the `fonts.title` font.
                title : [ "" "%{title}" "" ]
    
                // Second title element.
                // It uses the `fonts.subtitle` font.
                subtitle : [ "" "%{subtitle}" "" ]
    
                // It uses the `fonts.footer` font.
                footer : [ "" "" "%{page}" ]
    
                // Page background.
                // This can be used to designate an existing PDF document to be used as the background of the output page. It has the form `filename` or `filename:page`. Page numbers count from one.
                // If odd/even printing is in effect, the designated page number is used for left pages, and the next page (if it exists) for right pages.
                background : ""
            }
    
            // Headers/footers/background for the vefy first page of the output.
            first {
    
                // It uses the `fonts.footer` font.
                footer : [ "" "" "" ]
    
                // Page background.
                // This can be used to designate an existing PDF document to be used as the background of the output page. It has the form `filename` or `filename:page`. Page numbers count from one.
                // If odd/even printing is in effect, the designated page number is used for left pages, and the next page (if it exists) for right pages.
                background : ""
            }
    
            // Headers/footers/background for all pages for alignment.
            filler.background : ""
        }
    
        // Split marker for syllables that are smaller than chord width.
        // `split-marker` is a 3-part array: `start`, `repeat`, and `final`, or can be a single string representing `start`.
        // `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 : [ "" "" "" ]
    
        // The `fontdir` setting can be used to add one or more private font directories to the font libraries. The private directories will be searched first.
        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
    
        // 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`.
        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`.
        // 
        // Some element mappings can be specified, but it's not needed for all 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 {
    
            // The font used for page titles.
            title : "Times-Bold 14"
    
            // The font used for lyrics texts.
            text : "Times-Roman 12"
    
            // The font used for chords above the lyrics.
            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"
    
            // The font used for comments. If not set, falls back on the `text` font.
            comment : "Helvetica 12; background=foreground-light"
    
            // The font used for `comment_italic` directives. If not set, falls back on the `chord` font.
            comment_italic : "Helvetica-Oblique 12"
    
            // The font used for `comment_box` directives. If not set, falls back on the `chord` font.
            comment_box : "Helvetica 12; frame=1"
    
            // The font used for the contents of tab environments.
            tab : "Courier 10"
    
            // The font used for the table of contents. If not set, falls back on the `text` font.
            toc : "Times-Roman 11"
    
            // The font used for grid elements. If not set, falls back on the `chord` font.
            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
    
                // If there are at least as many outline items with differing first letters than the amount specified here, an extra level of outlines (letter index) is created for easy navigation. A value of zero (`0`) disables this.
                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
    
                // If there are at least as many outline items with differing first letters than the amount specified here, an extra level of outlines (letter index) is created for easy navigation. A value of zero (`0`) disables this.
                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
    
                // If there are at least as many outline items with differing first letters than the amount specified here, an extra level of outlines (letter index) is created for easy navigation. A value of zero (`0`) disables this.
                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 (standardized CSV file format).
        // To add fields with fixed values, use `"value"`. See the example with name `"my_field"`.
        csv {
    
            // The fields for the CSV.
            fields : [
                {
    
                    // The field name in the exported CSV.
                    name : title
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : title
                }
                {
    
                    // The field name in the exported CSV.
                    name : pages
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : pagerange
                }
                {
    
                    // The field name in the exported CSV.
                    name : "sort title"
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : sorttitle
                }
                {
    
                    // The field name in the exported CSV.
                    name : artists
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : artist
                }
                {
    
                    // The field name in the exported CSV.
                    name : composers
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : composer
                }
                {
    
                    // The field name in the exported CSV.
                    name : collections
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : collection
                }
                {
    
                    // The field name in the exported CSV.
                    name : keys
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : key_actual
                }
                {
    
                    // The field name in the exported CSV.
                    name : years
    
                    // The metadata key to use as the value in the exported CSV.
                    meta : year
                }
                {
    
                    // The field name in the exported CSV.
                    name : my_field
    
                    // A static value in the exported CSV. If provided, overrides the value of the provided `meta` key.
                    value : text
    
                    // `true` to omit a field.
                    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.
    html {
    
        // The actual backend module.
        module : HTML
    
        // Stylesheets for display and printing.
        styles {
    
            // Relative path to a CSS file to use for styling HTML output.
            default : chordpro.css
    
            // Relative path to a CSS file to use for styling displayed HTML output on screen media.
            screen : ""
    
            // Relative path to a CSS file to use for styling printed HTML output.
            print : chordpro_print.css
    
            // Embed the styles instead of linking to them.
            embed : false
    
            // Legacy style for `"screen"`.
            display : ""
        }
    }
    
    // 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.
        // The first non-empty, non-chord, non-directive lines are taken to be the song title and subtitle.
        infer-titles : true
    
        // Strategies to recognize chords and lyrics lines are implemented by classifiers.
        // The default classifier is `"pct_chords"` and is based on the percentage of chords recognized.
        classifier : pct_chords
    
        // Tab stop width for tab expansion. Set to `0` to disable.
        // Tabs in the input source are replaced by an appropriate amount of spaces.
        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/preprocessor
    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.
    // A boolean value or an integer. `0` means `false` and nozero means `true`.
    debug {
    
        // Insert extra debugging info into the generated PDF document.
        runtimeinfo : 1
    
        // All debug settings are intended for development and debugging and are not useful for ChordPro users.
        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
        xpose       : 0
        x1          : 0
        x2          : 0
        x3          : 0
    }
    
    // The schema for this config file.
    $schema : "https://chordpro.org/beta/resources/config.schema"
