Re: regexp for scheme blocks in lilypond language
Federico Bruni <[email protected]> Wed, 18 Jan 2012 23:55:02 +0100
| Newsgroups | gmane.comp.gnu.source-highlight.general |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------080008050604060400000800
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Il 18/01/2012 10:01, Lorenzo Bettini ha scritto:
> On 18/01/2012 09:54, Federico Bruni wrote:
>> Hi,
>>
>> lilypond files can contain blocks of scheme code in several ways.
>> The main challenge is handling conflicts between single and multiline
>> and especially blocks where the number of parentheses cannot be known in
>> advance (there's a way to match balanced parentheses?).
>
> Hi
>
> very quick answer: you can match balanced parenthesis using 'nested'
> (see the documentation);
>
Thanks, this should be the direction, but it's not so easy.
First, the doc says:
"Note that, in order for a delimited language element to be nested, its
starting and ending elements must be different"
I may be wrong, but I would add: they also have to be specular.
In my case delimiters are not specular.
Start delimiter: #(
End delimiter: )
I can't consider just parenthesis for two reasons:
- I want to highlight # as well
- ( and ) have also a different meaning (slurs) in lilypond synthax and
must be highlighted differently
So this doesn't work:
scheme_block delim "(" ")" multiline nested
I wrote this but it doesn't work correctly:
scheme_block delim '(?<!#)\(' '\)' multiline nested
The most external () block is omitted and slurs higlighting is broken
(see file attached).
What do you recommend to do?
Thanks,
Federico
--------------080008050604060400000800
Content-Type: text/html;
name="test.html"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="test.html"
<!-- Generator: GNU source-highlight 3.1.5
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">\version</font></b> <font color="#C20F0F">"2.14.2"</font>
<i><font color="#808080">% Scheme big block: currently commented out because lilypond.lang</font></i>
<i><font color="#808080">% can't handle it.</font></i>
#<b><font color="#CC33CC">(</font></b>define <font color="#A04900">(naturalize-pitch p)</font>
<font color="#A04900">(let ((o (ly:pitch-octave p))</font>
<font color="#A04900"> (a (* 4 (ly:pitch-alteration p)))</font>
<font color="#A04900"> ;; alteration, a, in quarter tone steps,</font>
<font color="#A04900"> ;; for historical reasons</font>
<font color="#A04900"> (n (ly:pitch-notename p)))</font>
<font color="#A04900"> (cond</font>
<font color="#A04900"> ((and (> a 1) (or (eq? n 6) (eq? n 2)))</font>
<font color="#A04900"> (set! a (- a 2))</font>
<font color="#A04900"> (set! n (+ n 1)))</font>
<font color="#A04900"> ((and (< a -1) (or (eq? n 0) (eq? n 3)))</font>
<font color="#A04900"> (set! a (+ a 2))</font>
<font color="#A04900"> (set! n (- n 1))))</font>
<font color="#A04900"> (cond</font>
<font color="#A04900"> ((> a 2) (set! a (- a 4)) (set! n (+ n 1)))</font>
<font color="#A04900"> ((< a -2) (set! a (+ a 4)) (set! n (- n 1))))</font>
<font color="#A04900"> (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7))))</font>
<font color="#A04900"> (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7))))</font>
<font color="#A04900"> (ly:make-pitch o n (/ a 4)))</font><b><font color="#CC33CC">)</font></b>
<i><font color="#808080">%}</font></i>
<b><font color="#000000">\header</font></b> <b><font color="#000000">{</font></b>
<font color="#0000FF">title</font> = <font color="#C20F0F">"Maple Leaf Rag"</font>
<font color="#0000FF">composer</font> = <font color="#C20F0F">"Scott Joplin"</font>
<font color="#0000FF">piece</font> = <font color="#C20F0F">"Tempo di marcia"</font>
<b><font color="#000000">}</font></b>
<b><font color="#000000">\paper</font></b> <b><font color="#000000">{</font></b>
<font color="#0000FF">top-margin</font> = <font color="#808000">15</font>
<font color="#0000FF">bottom-margin</font> = <font color="#808000">10</font>
<font color="#0000FF">system-system-spacing</font> #'padding = #<font color="#808000">8</font>
<font color="#0000FF">score-system-spacing</font> =
#'<font color="#A04900">((basic-distance . 12)</font>
<font color="#A04900"> (minimum-distance . 6)</font>
<font color="#A04900"> (padding . 1)</font>
<font color="#A04900"> (stretchability . 12))</font>
<b><font color="#000000">}</font></b>
top = <b><font color="#0000C0">\relative</font></b> c' <b><font color="#000000">{</font></b>
<b><font color="#000000">\override</font></b> <font color="#CC33CC">TextScript</font> #'padding = #<font color="#808000">2</font>
<b><font color="#0000C0">\key</font></b> as <font color="#0000FF">\major</font>
<b><font color="#0000C0">\time</font></b> <font color="#808000">2</font>/<font color="#808000">4</font>
<b><font color="#0000C0">\clef</font></b> <font color="#0000FF">treble</font>
<b><font color="#0000C0">\partial</font></b> <font color="#808000">8</font>
r<font color="#008080">8</font> <font color="#FF6600">\f</font> |
<b><font color="#0000C0">\repeat</font></b> <font color="#0000FF">volta</font> <font color="#808000">2</font> <b><font color="#000000">{</font></b>
r<font color="#008080">16</font> as' <es' es,> as, c <es es,><font color="#008080">8</font> g,<font color="#008080">16</font> |
<es' es,><font color="#008080">16</font> g, bes <es es,> <b><font color="#CC33CC">~</font></b> <es es,><font color="#008080">4</font> |
r<font color="#008080">16</font> as, <es' es,> as, c <es es,><font color="#008080">8</font> g,<font color="#008080">16</font> |
<es' es,><font color="#008080">16</font> g, bes <es es,> <b><font color="#CC33CC">~</font></b> <es es,><font color="#008080">8</font> r<font color="#008080">16</font> <es es,> |
r<font color="#008080">16</font> as, ces <fes fes,> r<font color="#008080">16</font> <es es,> r<font color="#008080">16</font> <es es,> |
r<font color="#008080">16</font> as, ces <fes fes,> r<font color="#008080">16</font> <es es,> r<font color="#008080">8</font> |
<b><font color="#0000C0">\change</font></b> <b><font color="#CC33CC">Staff</font></b> = <font color="#C20F0F">"down"</font>
<b><font color="#0000C0">\stemUp</font></b> r<font color="#008080">16</font><b><font color="#CC33CC">^</font></b><font color="#FF6600">\p</font> as,,,-<font color="#A04900">( ces as'-)</font> r as-<font color="#A04900">( ces as'-)</font> <b><font color="#0000C0">\stemNeutral</font></b> |
<b><font color="#0000C0">\change</font></b> <b><font color="#CC33CC">Staff</font></b> = <font color="#C20F0F">"up"</font>
r<font color="#008080">16</font> as-<font color="#A04900">( ces as'-)</font> r as-<font color="#A04900">( ces as'-)</font> |
<b><font color="#000000">}</font></b>
<b><font color="#000000">}</font></b>
bottom = <b><font color="#0000C0">\relative</font></b> c <b><font color="#000000">{</font></b>
<b><font color="#0000C0">\key</font></b> as <font color="#0000FF">\major</font>
<b><font color="#0000C0">\time</font></b> <font color="#808000">2</font>/<font color="#808000">4</font>
<b><font color="#0000C0">\clef</font></b> <font color="#0000FF">bass</font>
<b><font color="#0000C0">\partial</font></b> <font color="#808000">8</font>
<es es,><font color="#008080">8</font> |
<b><font color="#0000C0">\repeat</font></b> <font color="#0000FF">volta</font> <font color="#808000">2</font> <b><font color="#000000">{</font></b>
<as as,> <c as es> <c as es> <a a,> |
<bes bes,> <des g, es> <des g, es> <es, es,> |
<as as,> <c as es> <c as es> <a a,> |
<bes bes,> <des g, es> <des g, es> <es, es,> |
<fes fes,><font color="#008080">4</font> <es es,><font color="#008080">8</font> <es es,> |
<fes fes,><font color="#008080">4</font> <es es,><font color="#008080">8</font> r |
<b><font color="#0000C0">\stemDown</font></b> as,, r as' r <b><font color="#0000C0">\stemNeutral</font></b> |
as' r as' r <b><font color="#0000C0">\clef</font></b> <font color="#0000FF">treble</font> |
<b><font color="#000000">}</font></b>
<b><font color="#000000">}</font></b>
<b><font color="#000000">\score</font></b> <b><font color="#000000">{</font></b>
<b><font color="#000000">\context</font></b> <b><font color="#CC33CC">PianoStaff</font></b> <<
<b><font color="#000000">\context</font></b> <b><font color="#CC33CC">Staff</font></b> = <font color="#C20F0F">"up"</font>
<b><font color="#0000C0">\applyMusic</font></b> #<font color="#0000FF">unfold-repeats</font> <b><font color="#0000C0">\top</font></b>
<b><font color="#000000">\context</font></b> <b><font color="#CC33CC">Staff</font></b> = <font color="#C20F0F">"down"</font>
<b><font color="#0000C0">\applyMusic</font></b> #<font color="#0000FF">unfold-repeats</font> <b><font color="#0000C0">\bottom</font></b>
>>
<b><font color="#000000">\midi</font></b> <b><font color="#000000">{</font></b>
<b><font color="#000000">\context</font></b> <b><font color="#000000">{</font></b>
<b><font color="#CC33CC">\Score</font></b> <font color="#0000FF">tempoWholesPerMinute</font> = #<b><font color="#CC33CC">(</font></b>ly:<font color="#0000FF">make-moment</font> <font color="#808000">120</font> <font color="#808000">4</font><b><font color="#CC33CC">)</font></b>
<b><font color="#000000">}</font></b>
<b><font color="#000000">\context</font></b> <b><font color="#000000">{</font></b>
<b><font color="#CC33CC">\Voice</font></b>
<b><font color="#000000">\remove</font></b> Dynamic<b><font color="#CC33CC">_</font></b>performer
<b><font color="#000000">}</font></b>
<b><font color="#000000">}</font></b>
<b><font color="#000000">\layout</font></b><b><font color="#000000">{}</font></b>
<b><font color="#000000">}</font></b>
</tt></pre>
--------------080008050604060400000800
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Help-source-highlight mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-source-highlight
--------------080008050604060400000800--