diff --git a/README.md b/README.md index d67476958..04da68f47 100644 --- a/README.md +++ b/README.md @@ -39,22 +39,22 @@ translators for Pygments lexers and styles. | A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Agda, AL, Alloy, AMPL, Angular2, ANTLR, ApacheConf, APL, AppleScript, ArangoDB AQL, Arduino, ArmAsm, ATL, AutoHotkey, AutoIt, Awk | B | Ballerina, Bash, Bash Session, Batchfile, Beef, BibTeX, Bicep, BlitzBasic, BNF, BQN, Brainfuck | C | C, C#, C++, C3, Caddyfile, Caddyfile Directives, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Chapel, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Core, Crystal, CSS, CSV, CUE, Cython -| D | D, Dart, Dax, Desktop file, Diff, Django/Jinja, dns, Docker, DTD, Dylan -| E | EBNF, Elixir, Elm, EmacsLisp, Erlang +| D | D, Dart, Dax, Desktop file, Devicetree, Diff, Django/Jinja, dns, Docker, DTD, Dylan +| E | EBNF, Elixir, Elm, EmacsLisp, ERB, Erlang | F | Factor, Fennel, Fish, Forth, Fortran, FortranFixed, FSharp | G | GAS, GDScript, GDScript3, Gemtext, Genshi, Genshi HTML, Genshi Text, Gettext, Gherkin, Gleam, GLSL, Gnuplot, Go, Go HTML Template, Go Template, Go Text Template, GraphQL, Groff, Groovy | H | Handlebars, Hare, Haskell, Haxe, HCL, Hexdump, HLB, HLSL, HolyC, HTML, HTTP, Hy | I | Idris, Igor, INI, Io, ISCdhcpd | J | J, Janet, Java, JavaScript, JSON, JSONata, Jsonnet, Julia, Jungle -| K | Kakoune, Kotlin -| L | Lean4, Lighttpd configuration file, LLVM, lox, Lua, Luau -| M | Makefile, Mako, markdown, Markless, Mason, Materialize SQL dialect, Mathematica, Matlab, MCFunction, Meson, Metal, MiniZinc, MLIR, Modelica, Modula-2, Mojo, MonkeyC, MoonScript, MorrowindScript, Myghty, MySQL +| K | Kakoune, KDL, Kotlin +| L | Lateralus, Lean4, Lighttpd configuration file, LilyPond, LLVM, lox, Lua, Luau +| M | Makefile, Mako, markdown, Markless, Mason, Materialize SQL dialect, Mathematica, Matlab, MCFunction, Meson, Metal, microcad, MiniZinc, MLIR, Modelica, Modula-2, Mojo, MonkeyC, MoonBit, MoonScript, MorrowindScript, Myghty, MySQL | N | NASM, Natural, NDISASM, Newspeak, Nginx configuration file, Nim, Nix, NSIS, Nu | O | Objective-C, ObjectPascal, OCaml, Octave, Odin, OnesEnterprise, OpenEdge ABL, OpenSCAD, Org Mode | P | PacmanConf, Perl, PHP, PHTML, Pig, PkgConfig, PL/pgSQL, plaintext, Plutus Core, Pony, PostgreSQL SQL dialect, PostScript, POVRay, PowerQuery, PowerShell, Prolog, Promela, PromQL, properties, Protocol Buffer, Protocol Buffer Text Format, PRQL, PSL, Puppet, Python, Python 2 | Q | QBasic, QML | R | R, Racket, Ragel, Raku, react, ReasonML, reg, Rego, reStructuredText, Rexx, RGBDS Assembly, Ring, RPGLE, RPMSpec, Ruby, Rust -| S | SAS, Sass, Scala, Scheme, Scilab, SCSS, Sed, Sieve, Smali, Smalltalk, Smarty, SNBT, Snobol, Solidity, SourcePawn, Spade, SPARQL, SQL, SquidConf, Standard ML, stas, Stylus, Svelte, Swift, SYSTEMD, systemverilog +| S | SAS, Sass, Scala, scdoc, Scheme, Scilab, SCSS, Sed, Sieve, Smali, Smalltalk, Smarty, SNBT, Snobol, Solidity, SourcePawn, Spade, SPARQL, SQL, SquidConf, Standard ML, stas, Stylus, Svelte, Swift, SYSTEMD, systemverilog | T | TableGen, Tal, TASM, Tcl, Tcsh, Termcap, Terminfo, Terraform, TeX, Thrift, TOML, TradingView, Transact-SQL, Turing, Turtle, Twig, TypeScript, TypoScript, TypoScriptCssData, TypoScriptHtmlData, Typst | U | ucode | V | V, V shell, Vala, VB.net, verilog, VHDL, VHS, VimL, vue diff --git a/lexers/embedded/lilypond.xml b/lexers/embedded/lilypond.xml new file mode 100644 index 000000000..fe4ac8ed3 --- /dev/null +++ b/lexers/embedded/lilypond.xml @@ -0,0 +1,133 @@ + + + + LilyPond + lilypond + *.ly + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lexers/testdata/lilypond/chords.actual b/lexers/testdata/lilypond/chords.actual new file mode 100644 index 000000000..87d5d3389 --- /dev/null +++ b/lexers/testdata/lilypond/chords.actual @@ -0,0 +1,17 @@ +% Chord example + +\new ChordNames { + \chordmode { + c1 | f | g:7 | c | + c:m | f:dim | g:aug | c:maj7 | + } +} + +\new Staff { + \relative c' { + c4 e g c | + f, a c f | + g, b d f | + c e g c | + } +} diff --git a/lexers/testdata/lilypond/chords.expected b/lexers/testdata/lilypond/chords.expected new file mode 100644 index 000000000..5a9ff5b26 --- /dev/null +++ b/lexers/testdata/lilypond/chords.expected @@ -0,0 +1,119 @@ +[ + {"type":"CommentSingle","value":"% Chord example"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"\\new"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameBuiltin","value":"ChordNames"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Keyword","value":"\\chordmode"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"c"}, + {"type":"LiteralNumber","value":"1"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"Punctuation","value":":"}, + {"type":"LiteralNumber","value":"7"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"c"}, + {"type":"Punctuation","value":":"}, + {"type":"Operator","value":"m"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"Punctuation","value":":"}, + {"type":"Operator","value":"dim"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"Punctuation","value":":"}, + {"type":"Operator","value":"aug"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"Punctuation","value":":"}, + {"type":"Operator","value":"maj"}, + {"type":"LiteralNumber","value":"7"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"\\new"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameBuiltin","value":"Staff"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"\\relative"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c'"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"c"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"f,"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g,"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"b"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n"} +] diff --git a/lexers/testdata/lilypond/melody.actual b/lexers/testdata/lilypond/melody.actual new file mode 100644 index 000000000..890342a8e --- /dev/null +++ b/lexers/testdata/lilypond/melody.actual @@ -0,0 +1,19 @@ +% From lilypond.org examples + +\header { + title = "Simple Song" + composer = "Composer Name" +} + +\relative c' { + \time 3/4 + \key g \major + + % Melody with dynamics + g8\mf( a b c d4) | + e8( d c b a g) | + a4 b8( c) d4 | + g,2.~ | + g4 r r | + \bar "|." +} diff --git a/lexers/testdata/lilypond/melody.expected b/lexers/testdata/lilypond/melody.expected new file mode 100644 index 000000000..8cdd1ac00 --- /dev/null +++ b/lexers/testdata/lilypond/melody.expected @@ -0,0 +1,109 @@ +[ + {"type":"CommentSingle","value":"% From lilypond.org examples"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"\\header"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"title"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"="}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"Simple Song\""}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"composer"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"="}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"Composer Name\""}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"NameBuiltin","value":"\\relative"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c'"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"\\time"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralNumber","value":"3/4"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"\\key"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameBuiltin","value":"\\major"}, + {"type":"TextWhitespace","value":"\n \n "}, + {"type":"CommentSingle","value":"% Melody with dynamics"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g"}, + {"type":"LiteralNumber","value":"8"}, + {"type":"NameBuiltin","value":"\\mf("}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"b"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"NameBuiltin","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"e"}, + {"type":"LiteralNumber","value":"8"}, + {"type":"NameBuiltin","value":"("}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"b"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"NameBuiltin","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"a"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"b"}, + {"type":"LiteralNumber","value":"8"}, + {"type":"NameBuiltin","value":"("}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"NameBuiltin","value":")"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g,"}, + {"type":"LiteralNumber","value":"2."}, + {"type":"NameBuiltin","value":"~"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"r"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"r"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"\\bar"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"|.\""}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n"} +] diff --git a/lexers/testdata/lilypond/simple.actual b/lexers/testdata/lilypond/simple.actual new file mode 100644 index 000000000..6f0b5cb0b --- /dev/null +++ b/lexers/testdata/lilypond/simple.actual @@ -0,0 +1,25 @@ +% Simple LilyPond example +\version "2.24.0" + +\relative c' { + \key c \major + \time 4/4 + + % A simple melody + c4 d e f | + g2 a | + b4 c8 d e4 f | + g1 | + + % Dynamics and articulations + c4\p d\< e f\! | + g2\f a-> | + + % Chords + 4 | +} + +\addlyrics { + Do re mi fa + sol la ti do +} diff --git a/lexers/testdata/lilypond/simple.expected b/lexers/testdata/lilypond/simple.expected new file mode 100644 index 000000000..5a812ace8 --- /dev/null +++ b/lexers/testdata/lilypond/simple.expected @@ -0,0 +1,150 @@ +[ + {"type":"CommentSingle","value":"% Simple LilyPond example"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Keyword","value":"\\version"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"2.24.0\""}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"NameBuiltin","value":"\\relative"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c'"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"\\key"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameBuiltin","value":"\\major"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameBuiltin","value":"\\time"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralNumber","value":"4/4"}, + {"type":"TextWhitespace","value":"\n \n "}, + {"type":"CommentSingle","value":"% A simple melody"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"c"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g"}, + {"type":"LiteralNumber","value":"2"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"b"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"LiteralNumber","value":"8"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"e"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g"}, + {"type":"LiteralNumber","value":"1"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n \n "}, + {"type":"CommentSingle","value":"% Dynamics and articulations"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"c"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"NameBuiltin","value":"\\p"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"d"}, + {"type":"NameBuiltin","value":"\\\u003c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"NameBuiltin","value":"\\!"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"g"}, + {"type":"LiteralNumber","value":"2"}, + {"type":"NameBuiltin","value":"\\f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"NameBuiltin","value":"-\u003e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n \n "}, + {"type":"CommentSingle","value":"% Chords"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Punctuation","value":"\u003c"}, + {"type":"NameVariable","value":"c"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"Punctuation","value":"\u003e"}, + {"type":"LiteralNumber","value":"4"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"\u003c"}, + {"type":"NameVariable","value":"d"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"Punctuation","value":"\u003e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"\u003c"}, + {"type":"NameVariable","value":"e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"g"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"b"}, + {"type":"Punctuation","value":"\u003e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"\u003c"}, + {"type":"NameVariable","value":"f"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"a"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"c"}, + {"type":"Punctuation","value":"\u003e"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"|"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"\\addlyrics"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Punctuation","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Text","value":"Do"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"re"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"mi"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"fa"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"NameVariable","value":"sol"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"la"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Text","value":"ti"}, + {"type":"TextWhitespace","value":" "}, + {"type":"NameVariable","value":"do"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Punctuation","value":"}"}, + {"type":"TextWhitespace","value":"\n"} +]