]> git.donarmstrong.com Git - lilypond.git/commitdiff
LSR: escape double backslashes.
authorGraham Percival <graham@percival-music.ca>
Sun, 19 Sep 2010 15:37:17 +0000 (16:37 +0100)
committerGraham Percival <graham@percival-music.ca>
Sun, 19 Sep 2010 16:05:04 +0000 (17:05 +0100)
4+4+10 backslashes on one line to do this?!  How the bloody mao
can people (including myself) still refer to python as a "highly
readable language" ?

Also, I'm appalled at the state of makelsr.py.  A few years ago it
was a nice and simple script; now it's a confusing mess of regex,
some stuff in functions, some stuff in global, etc.  It took me
over an hour to add the "escape double backslahes" to this script.

Granted, I'm an idiot without previous experience with regex...
but hey, I'm the only person to work on this bug in the over 3
years.  I think our python+build scripts need to be written with
idiots in mind, because smart people are too busy doing other
stuff.

scripts/auxiliar/makelsr.py

index d012f1faca4a1e9b4460036cea3909771dbf78d7..be4e7daff3a2bfd15b16aef6d6c5d69e737110a6 100755 (executable)
@@ -119,6 +119,20 @@ def update_translated_texidoc (m, snippet_path, visited_languages):
     else:
         return m.group (0)
 
+def escape_backslashes_in_header(snippet):
+    # ASSUME: the \header exists.
+    header_char_number_start = snippet.find('\header {')
+    header_char_number_end = snippet.find('} % begin verbatim')
+
+    header = snippet[header_char_number_start:header_char_number_end]
+    # two levels of escaping happening here -- 4\ means 1\
+    # and the 10\ means two \ backslashes (that's 8\ ), and
+    # one backreference to group 1 (that's two 2\ ).
+    new_header = re.sub("@code\{\\\\([a-zA-Z])", "@code{\\\\\\\\\\1", header)
+    escaped_snippet = (snippet[:header_char_number_start] +
+       new_header + snippet[header_char_number_end:])
+    return escaped_snippet
+
 def copy_ly (srcdir, name, tags):
     global unsafe
     global unconverted
@@ -146,6 +160,7 @@ def copy_ly (srcdir, name, tags):
     s = mark_verbatim_section (s)
     s = lsr_comment_re.sub ('', s)
     s = strip_white_spaces_re.sub ('', s)
+    s = escape_backslashes_in_header (s)
     open (dest, 'w').write (s)
 
     e = os.system (convert_ly+(" -e '%s'" % dest))
@@ -223,6 +238,8 @@ def update_ly_in_place (snippet_path):
         else:
             need_line_break_workaround = True
     contents = doctitle_re.sub (doctitle_sub, contents)
+    contents = escape_backslashes_in_header (contents)
+
     # workaround for a bug in the regex's that I'm not smart
     # enough to figure out.  -gp
     if need_line_break_workaround: