/usr/share/denemo/actions/lyimport-lexer.scm is in denemo-data 2.0.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | ;"Magical Token". Wrapper to make returning a token easier, without all the positions and input ports
(define (lyimport::mtoken symbol value)
(make-lexical-token symbol (make-source-location (current-input-port) (lexer-get-line) (lexer-get-column) (lexer-get-offset) -1) value)
)
(define (lyimport::pop_state)
;(format #t "Now popping the state ~a becomes ~a~%~%" lyimport::state (cdr lyimport::state))
(set! lyimport::state (cdr lyimport::state)))
;Accumulator for a string in double quotes (used by quote state of lexer)
(define lyimport::quoted_string "")
(define (lyimport::start_quote)
(set! lyimport::quoted_string "")
;;(format #t "Now pushing the state ~a becomes ~a~%~%" lyimport::state (cons 'quote lyimport::state))
(set! lyimport::state (cons 'quote lyimport::state)))
(define (lyimport::quote-append str)
(set! lyimport::quoted_string (string-append lyimport::quoted_string str)))
(define lyimport::block_string "")
(define lyimport::brace_count 0)
(define (lyimport::start_block)
(set! lyimport::block_string "")
(set! lyimport::brace_count 1)
;;(format #t "Now pushing the state ~a becomes ~a~%~%" lyimport::state (cons 'block lyimport::state))
(set! lyimport::state (cons 'block lyimport::state)))
(define (lyimport::block-append str)
(set! lyimport::block_string (string-append lyimport::block_string str)))
(define (lyimport::start_incl)
(set! lyimport::state (cons 'incl lyimport::state)))
; List of Notenames
(define lyimport::list_of_notenames
(list "c" "cis" "ces" "cisis" "ceses" "d" "dis" "des" "disis" "deses" "e" "eis" "es" "ees" "eisis" "eses" "eeses" "f" "fis" "fes" "fisis" "feses" "g" "gis" "ges" "gisis" "geses" "a" "ais" "as" "aes" "aisis" "aeses" "ases" "b" "bis" "bes" "bisis" "beses" "h" "his" "hes" "hisis" "heses")
)
; List of Special Identifiers
(define lyimport::list_of_special_scm_identifiers
(list "major" "minor" "dorian" "phrygian" "lydian" "mixolydian")
)
;Lilyponds "try_special_identifiers" is a part of scan_escaped_words in Denemo and needs this function:
(define (lyimport::try_special_identifiers_scm? yytext)
;Helper function to test if the string matches any string of a list of strings, the scm identifiers.
(let loop ((counter 0))
(cond
((> (+ counter 1) (length lyimport::list_of_special_scm_identifiers)) #f)
((and (<= counter (length lyimport::list_of_special_scm_identifiers)) (string-ci=? yytext (list-ref lyimport::list_of_special_scm_identifiers counter))) #t)
(else (loop (+ counter 1)))
)
)
)
;Three functions to handle assignments. The creation function is in the main file and its used in the parser. The lexer only looks for already existing assignments, triggered with \user-created-keyword-through-assignment
(define (lyimport::as-type key)
(car (hashq-ref lyimport::AssignmentTable (string->symbol key)))
)
(define (lyimport::as-value key)
(cdr (hashq-ref lyimport::AssignmentTable (string->symbol key)))
)
(define (lyimport::as-eval key)
(lyimport::mtoken 'MUSIC_IDENTIFIER (lyimport::as-value key))
)
;Any time the lexer gets a \keyword is looks up if its a fixed expression, a identifier or an assignment (or wrong)
(define (lyimport::scan_escaped_word yytext)
(cond
; Converted from Denemo
((string-ci=? "alias" yytext) (lyimport::mtoken 'ALIAS yytext))
((string-ci=? "apply" yytext) (lyimport::mtoken 'APPLY yytext))
((string-ci=? "arpeggio" yytext) (lyimport::mtoken 'ARPEGGIO yytext))
((string-ci=? "autochange" yytext) (lyimport::mtoken 'AUTOCHANGE yytext))
((string-ci=? "spanrequest" yytext) (lyimport::mtoken 'SPANREQUEST yytext))
((string-ci=? "commandspanrequest" yytext) (lyimport::mtoken 'COMMANDSPANREQUEST yytext))
((string-ci=? "simultaneous" yytext) (lyimport::mtoken 'SIMULTANEOUS yytext))
((string-ci=? "sequential" yytext) (lyimport::mtoken 'SEQUENTIAL yytext))
((string-ci=? "accepts" yytext) (lyimport::mtoken 'ACCEPTS}, yytext))
((string-ci=? "alternative" yytext) (lyimport::mtoken 'ALTERNATIVE yytext))
((string-ci=? "bar" yytext) (lyimport::mtoken 'BAR yytext))
((string-ci=? "breathe" yytext) (lyimport::mtoken 'BREATHE yytext))
;;; ((string-ci=? "break" yytext) (lyimport::mtoken 'BREAK yytext))
((string-ci=? "break" yytext) (lyimport::multilexer));;denemo special ignore break
((string-ci=? "char" yytext) (lyimport::mtoken 'CHAR_T yytext))
((string-ci=? "chordmodifiers" yytext) (lyimport::mtoken 'CHORDMODIFIERS yytext))
((string-ci=? "chords" yytext) (lyimport::mtoken 'CHORDS yytext))
((string-ci=? "clef" yytext) (lyimport::mtoken 'CLEF yytext))
((string-ci=? "cm" yytext) (lyimport::mtoken 'CM_T yytext))
((string-ci=? "consists" yytext) (lyimport::mtoken 'CONSISTS yytext))
((string-ci=? "consistsend" yytext) (lyimport::mtoken 'CONSISTSEND yytext))
((string-ci=? "context" yytext) (lyimport::mtoken 'CONTEXT yytext))
((string-ci=? "default" yytext) (lyimport::mtoken 'DEFAULT yytext))
((string-ci=? "denies" yytext) (lyimport::mtoken 'DENIES yytext))
((string-ci=? "duration" yytext) (lyimport::mtoken 'DURATION yytext))
((string-ci=? "dynamicscript" yytext) (lyimport::mtoken 'DYNAMICSCRIPT yytext))
((string-ci=? "grobdescriptions" yytext) (lyimport::mtoken 'GROBDESCRIPTIONS yytext))
((string-ci=? "fermata" yytext) (lyimport::mtoken 'FERMATA yytext))
((string-ci=? "figures" yytext) (lyimport::mtoken 'FIGURES yytext))
((string-ci=? "grace" yytext) (lyimport::mtoken 'GRACE yytext))
((string-ci=? "glissando" yytext) (lyimport::mtoken 'GLISSANDO yytext))
((string-ci=? "header" yytext) (lyimport::mtoken 'HEADER yytext))
((string-ci=? "in" yytext) (lyimport::mtoken 'IN_T yytext))
((string-ci=? "key" yytext) (lyimport::mtoken 'KEY yytext))
((string-ci=? "mark" yytext) (lyimport::mtoken 'MARK yytext))
((string-ci=? "new" yytext) (lyimport::mtoken 'NEWCONTEXT yytext))
((string-ci=? "pitch" yytext) (lyimport::mtoken 'PITCH yytext))
((string-ci=? "time" yytext) (lyimport::mtoken 'TIME_T yytext))
((string-ci=? "times" yytext) (lyimport::mtoken 'TIMES yytext))
((string-ci=? "layout" yytext) (lyimport::mtoken 'LAYOUT yytext))
((string-ci=? "lyricmode" yytext) (lyimport::mtoken 'LYRICMODE yytext))
((string-ci=? "lyrics" yytext) (lyimport::mtoken 'LYRICS yytext))
((string-ci=? "lyricsto" yytext) (lyimport::mtoken 'LYRICSTO yytext))
((string-ci=? "midi" yytext) (lyimport::mtoken 'MIDI yytext))
((string-ci=? "mm" yytext) (lyimport::mtoken 'MM_T yytext))
((string-ci=? "name" yytext) (lyimport::mtoken 'NAME yytext))
((string-ci=? "pitchnames" yytext) (lyimport::mtoken 'PITCHNAMES yytext))
((string-ci=? "notes" yytext) (lyimport::mtoken 'NOTES yytext))
((string-ci=? "outputproperty" yytext) (lyimport::mtoken 'OUTPUTPROPERTY yytext))
((string-ci=? "override" yytext) (lyimport::mtoken 'OVERRIDE yytext))
((string-ci=? "set" yytext) (lyimport::mtoken 'SET yytext))
((string-ci=? "rest" yytext) (lyimport::mtoken 'REST yytext))
((string-ci=? "revert" yytext) (lyimport::mtoken 'REVERT yytext))
((string-ci=? "partial" yytext) (lyimport::mtoken 'PARTIAL yytext))
((string-ci=? "paper" yytext) (lyimport::mtoken 'PAPER yytext))
((string-ci=? "penalty" yytext) (lyimport::mtoken 'PENALTY yytext))
((string-ci=? "property" yytext) (lyimport::mtoken 'PROPERTY yytext))
((string-ci=? "pt" yytext) (lyimport::mtoken 'PT_T yytext))
((string-ci=? "relative" yytext) (lyimport::mtoken 'RELATIVE yytext))
((string-ci=? "remove" yytext) (lyimport::mtoken 'REMOVE yytext))
((string-ci=? "repeat" yytext) (lyimport::mtoken 'REPEAT yytext))
((string-ci=? "addlyrics" yytext) (lyimport::mtoken 'ADDLYRICS yytext))
((string-ci=? "partcombine" yytext) (lyimport::mtoken 'PARTCOMBINE yytext))
((string-ci=? "score" yytext) (lyimport::mtoken 'SCORE yytext))
((string-ci=? "script" yytext) (lyimport::mtoken 'SCRIPT yytext))
((string-ci=? "stylesheet" yytext) (lyimport::mtoken 'STYLESHEET yytext))
((string-ci=? "skip" yytext) (lyimport::mtoken 'SKIP yytext))
((string-ci=? "tempo" yytext) (lyimport::mtoken 'TEMPO yytext))
((string-ci=? "translator" yytext) (lyimport::mtoken 'TRANSLATOR yytext))
((string-ci=? "transpose" yytext) (lyimport::mtoken 'TRANSPOSE yytext))
((string-ci=? "type" yytext) (lyimport::mtoken 'TYPE yytext))
((string-ci=? "unset" yytext) (lyimport::mtoken 'UNSET yytext))
((string-ci=? "version" yytext) (lyimport::mtoken 'LILYVERSION yytext))
;From parser.yy %token TOKEN "\\keyword"
((string-ci=? "change" yytext) (lyimport::mtoken 'CHANGE yytext))
((string-ci=? "with" yytext) (lyimport::mtoken 'WITH yytext))
((string-ci=? "book" yytext) (lyimport::mtoken 'BOOK yytext))
((string-ci=? "bookpart" yytext) (lyimport::mtoken 'BOOKPART yytext))
((string-ci=? "chordmode" yytext) (lyimport::mtoken 'CHORDMODE yytext))
((string-ci=? "defaultchild" yytext) (lyimport::mtoken 'DEFAULTCHILD yytext))
((string-ci=? "description" yytext) (lyimport::mtoken 'DESCRIPTION yytext))
((string-ci=? "drummode" yytext) (lyimport::mtoken 'DRUMMODE yytext))
((string-ci=? "drums" yytext) (lyimport::mtoken 'DRUMS yytext))
((string-ci=? "figuremode" yytext) (lyimport::mtoken 'FIGUREMODE yytext))
((string-ci=? "invalid" yytext) (lyimport::mtoken 'INVALID yytext))
((string-ci=? "markup" yytext) (lyimport::mtoken 'MARKUP yytext))
((string-ci=? "markuplines" yytext) (lyimport::mtoken 'MARKUPLINES yytext))
((string-ci=? "notemode" yytext) (lyimport::mtoken 'NOTEMODE yytext))
((string-ci=? "octave" yytext) (lyimport::mtoken 'OCTAVE yytext))
((string-ci=? "applyContext" yytext) (lyimport::mtoken 'APPLY_CONTEXT yytext))
; Denemo specific
;; we have to swallow # and an embedded scheme integer following barNumberCheck
((string-ci=? "barNumberCheck" yytext)
(begin (let loop ((c #f)) (set! c (lexer-getc)) (if (char-whitespace? c) (loop c))) (read (make-soft-port (vector #f #f #f (lambda () (lexer-getc)) #f) "r"))(lyimport::multilexer)))
;If its not a known keyword its probably a user assignment:
((hashq-ref lyimport::AssignmentTable (string->symbol yytext)) (lyimport::as-eval yytext))
;Next test for an try_special_identifiers
((lyimport::try_special_identifiers_scm? yytext) (lyimport::mtoken 'SCM_IDENTIFIER yytext))
;If its not a keyword, assignment or special identifier then its wrong
; (else (begin (display (string-append "error: Unknown word: " yytext " (Line: "(number->string (lexer-get-line)) " Column: " (number->string ;(lexer-get-column)) ")\n"))(lyimport::multilexer))
; )
(else (lyimport::multilexer)
;(else (lyimport::mtoken 'DENEMODIRECTIVE (string-append "\\" yytext))
)
)
)
(define (lyimport::scan_bare_word yytext)
;Helper function to test if the string matches any string of a list of strings, the notenames.
(define (notename_pitch? yytext)
(let loop ((counter 0))
(cond
((> (+ counter 1) (length lyimport::list_of_notenames)) #f)
((and (<= counter (length lyimport::list_of_notenames)) (string-ci=? yytext (list-ref lyimport::list_of_notenames counter))) #t)
(else (loop (+ counter 1)))
)
)
)
(cond
((notename_pitch? yytext) (lyimport::mtoken 'NOTENAME_PITCH yytext))
(else (lyimport::mtoken 'STRING yytext))
)
)
(define (lyimport::scan_fraction yytext)
(lyimport::mtoken 'FRACTION yytext)
;{
;ssize i = frac.find ('/');
;string left = frac.substr (0, i);
;string right = frac.substr (i + 1, (frac.length () - i + 1));
;int n = String_convert::dec2int (left);
;int d = String_convert::dec2int (right);
;return scm_cons (scm_from_int (n), scm_from_int (d));
;}
)
|