#!@PYTHON@
# Created 01 September 2003 by Heikki Junes.
-# Makes a lilypond.words file which is used by (X)Emacs and Vim.
+# Generates lilypond.words.el for (X)Emacs and lilypond.words.vim for Vim.
import string
import re
import sys
-outlines = []
-prekw = '\\\\'
+kw = []
+rw = []
+notes = []
# keywords not otherwise found
for line in ['include','maininput','version']:
- outlines = outlines + [prekw + line]
+ kw = kw + [line]
# the main keywords
F = open('lily/my-lily-lexer.cc', 'r')
for line in F.readlines():
m = re.search(r"(\s*{\")(.*)(\",\s*.*},\s*\n)",line)
if m:
- outlines = outlines + [prekw + m.group(2)]
+ kw = kw + [m.group(2)]
F.close()
# keywords in markup
for line in F.readlines():
m = re.search(r"^(\s*\(cons\s*)([a-z-]*)(-markup)",line)
if m:
- outlines = outlines + [prekw + m.group(2)]
+ kw = kw + [m.group(2)]
F.close()
# identifiers and keywords
for line in F.readlines():
m = re.search(r"^([a-zA-Z]+)(\s*=)",line)
if m:
- outlines = outlines + [prekw + m.group(1)]
+ kw = kw + [m.group(1)]
F.close()
# more identifiers
for name in [
'ly/declarations-init.ly',
-'ly/paper11-init.ly',
-'ly/paper13-init.ly',
-'ly/paper16-init.ly',
-'ly/paper19-init.ly',
-'ly/paper20-init.ly',
-'ly/paper23-init.ly',
-'ly/paper26-init.ly',
-'ly/paper-as5-init.ly',
-'ly/paper-as9-init.ly',
-'ly/paper-init.ly',
'ly/params-init.ly',
-'ly/params-as-init.ly',
]:
F = open(name, 'r')
for line in F.readlines():
m = re.search(r"^(\s*)([a-zA-Z]+)(\s*=)",line)
if m:
- outlines = outlines + [prekw + m.group(2)]
+ kw = kw + [m.group(2)]
F.close()
# note names
for line in F.readlines():
m = re.search(r"^(\s*\()([a-z]+)([^l]+ly:make-pitch)",line)
if m:
- outlines = outlines + ['' + m.group(2)]
+ notes = notes + ['' + m.group(2)]
F.close()
-# (short) drum names
-for name in [
-'share/lilypond/scm/drums.scm'
-]:
- F = open(name, 'r')
- for line in F.readlines():
- m = re.search(r"^(\s*\([a-z]+\s*)([a-z]+)(\s*,\(ly:make-pitch)",line)
- if m:
- print(m.group(2))
- outlines = outlines + ['' + m.group(2)]
- F.close()
+
# reserved words
for name in [
]:
m = re.search(pattern,line)
if m:
- outlines = outlines + ['' + m.group(2)]
+ rw = rw + ['' + m.group(2)]
F.close()
# the output file
if sys.argv[1:] == []:
- out = open('lilypond.words', 'w')
+ out_el = open('lilypond.words.el', 'w')
+ out_vim = open('lilypond.words.vim', 'w')
else:
- out = open(sys.argv[1]+'/lilypond.words', 'w')
+ out_el = open(sys.argv[1]+'/lilypond.words.el', 'w')
+ out_vim = open(sys.argv[1]+'/lilypond.words.vim', 'w')
+
+# alphabetically ordered words
+kw.sort()
+kw.reverse()
+prevline = ''
+out_vim.write('syn match lilyKeyword \"[-_^]\\?\\\\\\(');
+for line in kw:
+ if line != prevline:
+ out_el.write('\\\\' + line + '\n')
+ out_vim.write(line + '\\|')
+ prevline = line
+out_vim.write('n\\)\\(\\A\\|\\n\\)\"me=e-1\n')
+
+rw.sort()
+rw.reverse()
+prevline = ''
+out_vim.write('syn match lilyReservedWord \"\\(\\A\\|\\n\\)\\(');
+for line in rw:
+ if line != prevline:
+ out_el.write(line + '\n')
+ out_vim.write(line + '\\|')
+ prevline = line
+out_vim.write('Score\\)\\(\\A\\|\\n\\)\"ms=s+1,me=e-1\n')
+
+notes.sort()
+notes.reverse()
+prevline = ''
+out_vim.write('syn match lilyNote \"\\<\\(\\(\\(');
+for line in notes:
+ if line != prevline:
+ out_el.write(line + '\n')
+ out_vim.write(line + '\\|')
+ prevline = line
+out_vim.write('a\\)\\([,\']\\)\\{,4}\\([?!]\\)\\?\\)\\|s\\|r\\)\\(\\(128\\|64\\|32\\|16\\|8\\|4\\|2\\|1\\|\\\\breve\\|\\\\longa\\|\\\\maxima\\)[.]\\{,8}\\)\\?\\(\\A\\|\\n\\)\"me=e-1\n')
# the menu in lilypond-mode.el
for line in [
'//transpose - % { _ } -',
]:
# urg. escape char '/' is replaced with '\\' which python writes as a '\'.
- out.write(string.join(string.split(line,'/'),'\\') + '\n')
-
-# alphabetically ordered words
-outlines.sort()
-prevline = ''
-for line in outlines:
- if line != prevline:
- out.write(line + '\n')
- prevline = line
-
-out.close()
+ out_el.write(string.join(string.split(line,'/'),'\\') + '\n')
+
+out_el.close()
+out_vim.close()