]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/lilypond.words.py
Add some lost `relative'
[lilypond.git] / buildscripts / lilypond.words.py
index 338b65d523c26992c4e2dd1824c326838c3129fe..0de3329c8080c42059be9607eb98f2adab32cd27 100755 (executable)
@@ -1,25 +1,26 @@
 #!@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
@@ -27,7 +28,7 @@ F = open('scm/new-markup.scm', 'r')
 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
@@ -48,32 +49,43 @@ for name in [
     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 name in [
+'ly/catalan.ly',
+'ly/deutsch.ly',
+'ly/drumpitch-init.ly',
+'ly/english.ly',
+'ly/espanol.ly',
+'ly/italiano.ly',
+'ly/nederlands.ly',
+'ly/norsk.ly',
+'ly/suomi.ly',
+'ly/svenska.ly',
+]:
+    F = open(name, 'r')
+    for line in F.readlines():
+       m = re.search(r"^(\s*\()([a-z]+)([^l]+ly:make-pitch)",line)
+       if m:
+           notes = notes + ['' + m.group(2)]
+    F.close()
+
+
+    
 # reserved words
 for name in [
 'ly/engraver-init.ly',
@@ -88,28 +100,66 @@ 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], '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 [
-'-/( - _ -/) -',
-'-/[ - _ -/] -',
-'-///( - _ -///) -',
+'/( - _ /) -',
+'/[ - _ /] -',
+'< - _ > -',
+'<< - _ >> -',
+'///( - _ ///) -',
 '///[ - _ ///] -',
-'-///< - _ -///! -',
-'-///> - _ -///! -',
+'///< - _ ///! -',
+'///> - _ ///! -',
 '//center - / << _ >> -',
 '//column - / << _ >> -',
 '//context/ Staff/ = - % { _ } -',
 '//context/ Voice/ = - % { _ } -',
-'-//markup - { _ } -',
+'//markup - { _ } -',
 '//notes - { _ } -',
 '//relative - % { _ } -',
 '//score - { //n /? //simultaneous { //n _ //n } /! //n //paper {  } //n /? //midi {  } //n /! } //n -',
@@ -119,14 +169,7 @@ 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()