This module is built on top of slexer and can parse LilyPond input and other formats.
The base functionality is delegated to modules with an underscore in this package. The modules describing parsing modes (filetypes) are the files without underscore.
Currently available are modes for lilypond, latex, html, texinfo, scheme, and docbook.
The ‘underscored’ modules should not be imported in application code. What is needed from them is available here, in the ly.lex namespace.
If you add new files for parsing other file types, you should add them in _mode.py. The _token.py module contains base Token types and Token mixin classes.
The State, Parser, FallthroughParser and Fridge classes from slexer are all slightly extended here,
Usage:
>>> import ly.lex
>>> txt = r"\relative c' { c d e f-^ g }"
>>> s = ly.lex.state("lilypond")
>>> for t in s.tokens(txt):
... print(t, t.__class__.__name__)
\relative Command
Space
c Name
' Unparsed
Space
{ SequentialStart
Space
c Note
Space
d Note
Space
e Note
Space
f Note
- Direction
^ ScriptAbbreviation
Space
g Note
Space
} SequentialEnd
A State() is used to parse text. The text is given to the tokens() method, that returns an iterator iterating over Token instances as they are found. Each token has a ‘pos’ and an ‘end’ attribute describing its position in the original string.
While iterating over the tokens(), the State maintains information about what kind of text is parsed. (So don’t iterate over more than one call to tokens() of the same State object at the same time.)
Use ly.lex.state(“name”) to get a state for a specific mode to start parsing with. If you don’t know the type of text, you can use ly.lex.guessState(text), where text is the text you want to parse. A quick heuristic is then used to determine the type of the text.
See for more information the documentation of the slexer module.
Bases: ly.slexer.State
Bases: ly.slexer.Parser
Bases: ly.slexer.Fridge
Tries to guess the type of the input text, using a quite fast heuristic.
Returns one of the strings also present as key in the modes dictionary.
Bases: ly.slexer.Token
Bases: ly.lex._token.Token
Represents an unparsed piece of input text.
Bases: ly.lex._token.Token
Base class for tokens that belong to a comment.
Bases: ly.lex._token.Comment
Base class for items that are a whole line comment.
Bases: ly.lex._token.Comment
Base class for tokens that belong to a block/multiline comment.
Bases: ly.lex._token.BlockComment
Base class for tokens that start a block/multiline comment.
Bases: ly.lex._token.BlockComment
Base class for tokens that end a block/multiline comment.
Bases: ly.lex._token.Token
Base class for tokens that belong to a quote-delimited string.
Bases: ly.lex._token.String
Base class for tokens that start a quote-delimited string.
Bases: ly.lex._token.String
Base class for tokens that end a quote-delimited string.
Bases: ly.lex._token.Token
Base class for tokens that are an (escaped) character.
Bases: ly.lex._token.Token
Base class for tokens that are a numerical value.
Bases: ly.lex._token.Token
Base class for tokens that represent erroneous input.
Bases: object
Mixin class for tokens that have a matching token forward in the text.
The matchname attribute should give a unique name.
Bases: object
Mixin class for tokens that have a matching token backward in the text.
The matchname attribute should give a unique name.
Bases: object
Mixin class for tokens that have the text on the next line indent more.
Bases: object
Mixin class for tokens that have the text on the next line indent less.
Parses and tokenizes DocBook input, recognizing LilyPond in DocBook.
Parses and tokenizes HTML input, recognizing LilyPond in HTML.
Bases: ly.lex.html.Comment, ly.lex._token.Leaver, ly.lex._token.BlockCommentEnd
Bases: ly.lex.html.Comment, ly.lex._token.BlockCommentStart
Bases: ly.lex._token.Character
Bases: ly.lex.html.LilyPondTag, ly.lex._token.Leaver
Bases: ly.lex.html.LilyPondTag
Bases: ly.lex.html.LilyPondTag, ly.lex._token.Leaver
Bases: ly.lex.html.LilyPondTag
Bases: ly.lex.html.LilyPondTag, ly.lex._token.Leaver
Bases: ly.lex.html.Tag
Bases: ly.lex.html.LilyPondTag
Bases: ly.lex.html.LilyPondTag
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.lilypond.ParseGlobal
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.lilypond.ParseMusic
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.FallthroughParser
Finds a value or drops back.
Bases: ly.lex.html.String, ly.lex._token.StringEnd, ly.lex._token.Leaver
Bases: ly.lex.html.String, ly.lex._token.StringStart
Bases: ly.lex.html.String, ly.lex._token.StringEnd, ly.lex._token.Leaver
Bases: ly.lex.html.String, ly.lex._token.StringStart
Bases: ly.lex.html.Tag, ly.lex._token.Leaver
Bases: ly.lex.html.Tag
Parses and tokenizes LaTeX input, recognizing LilyPond in LaTeX.
Parses and tokenizes LilyPond input.
Bases: ly.lex.lilypond.Accidental
Bases: ly.lex.lilypond.Accidental
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.Specifier
Bases: ly.lex.lilypond.Command
Bases: ly.lex._token.Token
Base class for articulation things.
Bases: ly.lex.lilypond.Articulation, ly.lex.lilypond.IdentifierRef
Bases: ly.lex.lilypond.ContextName
Bases: ly.lex.lilypond.Beam, ly.lex._token.MatchEnd
Bases: ly.lex.lilypond.Beam, ly.lex._token.MatchStart
Bases: ly.lex.lilypond.Comment, ly.lex._token.BlockComment
Bases: ly.lex.lilypond.Comment, ly.lex._token.BlockCommentEnd, ly.lex._token.Leaver
Bases: ly.lex.lilypond.Comment, ly.lex._token.BlockCommentStart
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Translator
Bases: ly.lex.lilypond.Chord, ly.lex._token.Leaver
Bases: ly.lex.lilypond.InputMode
Bases: ly.lex.lilypond.ChordItem
Bases: ly.lex.lilypond.ChordItem
Bases: ly.lex.lilypond.Chord
Bases: ly.lex.lilypond.ChordItem
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.Specifier
Bases: ly.lex.lilypond.Delimiter, ly.lex._token.MatchEnd, ly.lex._token.Dedent
Bases: ly.lex.lilypond.CloseBracket
Bases: ly.lex.lilypond.Delimiter, ly.lex._token.MatchEnd, ly.lex._token.Dedent
Bases: ly.lex._token.Item, ly.lex.lilypond.IdentifierRef
Bases: ly.lex.lilypond.Translator
Bases: ly.lex._token.Token
Bases: ly.lex.lilypond.Variable
Bases: ly.lex.lilypond.Value
Bases: ly.lex.lilypond.Duration
Bases: ly.lex.lilypond.ChordItem
Bases: ly.lex.lilypond.Delimiter
A dot in dotted path notation.
Bases: ly.lex.lilypond.InputMode
Bases: ly.lex._token.Token
Bases: ly.lex.lilypond.Error
Bases: ly.lex.lilypond.ExpectOpenBracket
alias of ParseBookPart
Bases: ly.lex.lilypond.ExpectMusicList
alias of ParseChordMode
Bases: ly.lex.lilypond.ExpectOpenBracket
alias of ParseContext
Bases: ly.lex.lilypond.ExpectMusicList
alias of ParseDrumMode
Bases: ly.lex.lilypond.ExpectMusicList
alias of ParseFigureMode
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ExpectOpenBracket
alias of ParseHeader
Bases: ly.lex.lilypond.ExpectOpenBracket
alias of ParseLayout
Bases: ly.lex.lilypond.ExpectMusicList
alias of ParseLyricMode
Bases: ly.lex.FallthroughParser, ly.lex.lilypond.ParseLilyPond
Waits for an OpenBracket or << and then replaces the parser with the class set in the replace attribute.
Subclass this to set the destination for the OpenBracket.
Bases: ly.lex.lilypond.ExpectMusicList
alias of ParseNoteMode
Bases: ly.lex.FallthroughParser, ly.lex.lilypond.ParseLilyPond
Waits for an OpenBracket and then replaces the parser with the class set in the replace attribute.
Subclass this to set the destination for the OpenBracket.
Bases: ly.lex.lilypond.ExpectOpenBracket
alias of ParsePaper
Bases: ly.lex.lilypond.ExpectOpenBracket
alias of ParseScore
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.Figure
A figure accidental.
Bases: ly.lex.lilypond.Figure
Bases: ly.lex.lilypond.Figure, ly.lex._token.Leaver
Bases: ly.lex.lilypond.InputMode
Bases: ly.lex.lilypond.Figure
A figure modifier.
Bases: ly.lex.lilypond.Figure
Bases: ly.lex.lilypond.Figure
A step figure number or the underscore.
Bases: ly.lex.lilypond.Articulation, ly.lex._token.Leaver
Bases: ly.lex.lilypond.Value
Bases: ly.lex._token.Token
Bases: ly.lex.lilypond.Variable
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Variable
A variable inside Header. Always follow this one by UserVariable.
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex._token.Token
A variable name, like some-variable.
Bases: ly.lex._token.Token
A reference to an identifier, e.g. \some-variable.
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.DecimalValue
Bases: ly.lex.lilypond.Command
Bases: ly.lex._token.Item, ly.lex.lilypond.IdentifierRef
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Variable
A variable inside Header. Always follow this one by UserVariable.
Bases: ly.lex.lilypond.Duration
Bases: ly.lex.lilypond.Ligature, ly.lex._token.MatchEnd
Bases: ly.lex.lilypond.Ligature, ly.lex._token.MatchStart
Bases: ly.lex.lilypond.Comment, ly.lex._token.LineComment
Bases: ly.lex.lilypond.Lyric
Bases: ly.lex.lilypond.Lyric
Bases: ly.lex.lilypond.InputMode
Bases: ly.lex.lilypond.Lyric
Bases: ly.lex.lilypond.Lyric
Bases: ly.lex.lilypond.Markup, ly.lex.lilypond.IdentifierRef
A markup command.
Bases: ly.lex.lilypond.Markup
Bases: ly.lex.lilypond.Markup
Bases: ly.lex.lilypond.Markup
Bases: ly.lex.lilypond.Markup, ly.lex.lilypond.Command
Bases: ly.lex.lilypond.Markup, ly.lex.lilypond.IdentifierRef
A user-defined markup (i.e. not in the words markupcommands list).
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex._token.Token
A note, rest, spacer, \skip or q.
Bases: ly.lex.lilypond.UserVariable
A variable name without prefix.
Bases: ly.lex.lilypond.Translator
Bases: ly.lex.lilypond.MusicItem
Bases: ly.lex.lilypond.InputMode
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Delimiter, ly.lex._token.MatchStart, ly.lex._token.Indent
An open bracket, does not enter different parser, subclass or reimplement Parser.update_state().
Bases: ly.lex.lilypond.OpenBracket
Bases: ly.lex.lilypond.Delimiter, ly.lex._token.MatchStart, ly.lex._token.Indent
An open double French quote, does not enter different parser, subclass or reimplement Parser.update_state().
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Variable
A variable inside Paper. Always follow this one by UserVariable.
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.Parser
alias of BlockComment
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \book {, leaving at }
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \bookpart {, leaving at }
Bases: ly.lex.lilypond.ParseMusic
LilyPond inside chords < >
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseInputMode, ly.lex.lilypond.ParseMusic
Parser for \chords and \chordmode.
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after (\layout {) \context {, leaving at }
Bases: ly.lex.FallthroughParser
Parses a decimal value without a # before it (if present).
Bases: ly.lex.lilypond.ParseInputMode, ly.lex.lilypond.ParseMusic
Parser for \drums and \drummode.
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseDuration
Bases: ly.lex.Parser
Parse inside < > in figure mode.
Bases: ly.lex.lilypond.ParseInputMode, ly.lex.lilypond.ParseMusic
Parser for \figures and \figuremode.
Bases: ly.lex.lilypond.ParseLilyPond
Parses LilyPond from the toplevel of a file.
Bases: ly.lex.FallthroughParser, ly.lex.lilypond.ParseLilyPond
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \header {, leaving at }
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseLilyPond
Base class for parser for mode-changing music commands.
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \layout {, leaving at }
Bases: ly.lex.Parser
Bases: ly.lex.lilypond.ParseInputMode
Parser for \lyrics, \lyricmode, \addlyrics, etc.
Bases: ly.lex.Parser
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \midi {, leaving at }
Bases: ly.lex.lilypond.ParseLilyPond
Parses LilyPond music expressions.
Bases: ly.lex.lilypond.ParseMusic
Parser for \notes and \notemode. Same as Music itself.
Bases: ly.lex.lilypond.ParseLilyPond
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \paper {, leaving at }
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
parse the arguments of \revert
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \score {, leaving at }
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseLilyPond
Bases: ly.lex.Parser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.FallthroughParser
Bases: ly.lex.lilypond.ParseLilyPond
Parses the expression after \with {, leaving at }
Bases: ly.lex.lilypond.SlurEnd
Bases: ly.lex.lilypond.SlurStart
Bases: ly.lex.lilypond.Delimiter
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.MusicItem
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.IntegerValue, ly.lex._token.Leaver
Bases: ly.lex.lilypond.Specifier
Bases: ly.lex.lilypond.MusicItem
Bases: ly.lex.lilypond.Override
Bases: ly.lex.lilypond.Duration
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Articulation, ly.lex._token.Leaver
Bases: ly.lex.lilypond.CloseBracket
Bases: ly.lex.lilypond.OpenBracket
Bases: ly.lex.lilypond.Override
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.MusicItem
Bases: ly.lex.lilypond.Slur, ly.lex._token.MatchEnd
Bases: ly.lex.lilypond.Slur, ly.lex._token.MatchStart
Bases: ly.lex.lilypond.MusicItem
Bases: ly.lex.lilypond.Articulation
Bases: ly.lex._token.Character
Bases: ly.lex.lilypond.String, ly.lex._token.StringEnd
Bases: ly.lex.lilypond.String, ly.lex._token.StringStart
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.Delimiter
Bases: ly.lex.lilypond.Slur
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.Tremolo
Bases: ly.lex.lilypond.Tremolo, ly.lex._token.Leaver
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Command
Bases: ly.lex.lilypond.Keyword
Bases: ly.lex.lilypond.Identifier
Bases: ly.lex.lilypond.Identifier
Bases: ly.lex.lilypond.Delimiter
Parses and tokenizes Scheme input.
Bases: ly.lex.scheme.Comment, ly.lex._token.BlockComment
Bases: ly.lex.scheme.Comment, ly.lex._token.BlockCommentEnd, ly.lex._token.Leaver
Bases: ly.lex.scheme.Comment, ly.lex._token.BlockCommentStart
Bases: ly.lex.scheme.Scheme, ly.lex._token.Item
Bases: ly.lex.scheme.Scheme, ly.lex._token.Item
Bases: ly.lex.scheme.Scheme, ly.lex._token.MatchEnd, ly.lex._token.Dedent
Bases: ly.lex.scheme.Word
Bases: ly.lex.scheme.Scheme
Bases: ly.lex.scheme.Number
Bases: ly.lex.scheme.Number
Bases: ly.lex.scheme.Word
Bases: ly.lex.scheme.Word
Bases: ly.lex.scheme.LilyPond, ly.lex._token.Leaver, ly.lex._token.MatchEnd, ly.lex._token.Dedent
Bases: ly.lex.scheme.LilyPond, ly.lex._token.MatchStart, ly.lex._token.Indent
Bases: ly.lex.scheme.Comment, ly.lex._token.LineComment
Bases: ly.lex._token.Item, ly.lex._token.Numeric
Bases: ly.lex.scheme.Scheme, ly.lex._token.MatchStart, ly.lex._token.Indent
Bases: ly.lex.Parser
alias of BlockComment
Bases: ly.lex.lilypond.ParseMusic
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.scheme.Scheme
Bases: ly.lex.scheme.String, ly.lex._token.StringEnd
Bases: ly.lex.scheme.String, ly.lex._token.StringStart
Bases: ly.lex.scheme.Word
Bases: ly.lex.scheme.OpenParen
Bases: ly.lex.scheme.Scheme, ly.lex._token.Item
Parses and tokenizes Texinfo input, recognizing LilyPond in Texinfo.
Bases: ly.lex.texinfo.EscapeChar
Bases: ly.lex.texinfo.Comment, ly.lex._token.Leaver, ly.lex._token.BlockCommentEnd
Bases: ly.lex.texinfo.Comment, ly.lex._token.BlockCommentStart
Bases: ly.lex.texinfo.Block, ly.lex._token.Leaver
Bases: ly.lex.texinfo.Block
Bases: ly.lex.texinfo.Attribute, ly.lex._token.Leaver
Bases: ly.lex.texinfo.Attribute
Bases: ly.lex.texinfo.Block, ly.lex._token.Leaver
Bases: ly.lex.texinfo.Block
Bases: ly.lex.texinfo.Block
Bases: ly.lex.texinfo.Keyword, ly.lex._token.Leaver
Bases: ly.lex.texinfo.Keyword
Bases: ly.lex.texinfo.Block
Bases: ly.lex.texinfo.Block
Bases: ly.lex.texinfo.Comment, ly.lex._token.LineComment
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.lilypond.ParseGlobal
Bases: ly.lex.Parser
Bases: ly.lex.lilypond.ParseGlobal
Bases: ly.lex.FallthroughParser
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.Parser
Bases: ly.lex.texinfo.Keyword, ly.lex._token.Leaver