С# AvalonEdit Подсветка регулярного выражения до новой строки

Я изменяю код из AvalonEdit на С#, чтобы создать еще одну подсветку синтаксиса. Я хочу создать свой собственный стиль для LOG-файлов, выделенный код выглядит так:

введите здесь описание изображения

Время спереди синее, а текст сзади зеленый (информация), оранжевый (предупреждение), красный (ошибка). Для однострочных журналов это не было проблемой, но для многострочных. Итак, я изменил свой RuleSet на Spans:

<SyntaxDefinition name="LOG" extensions=".log" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">

<Color name="Time" foreground="#38a1d4" />
<Color name="Info" foreground="#69b26a" />
<Color name="Warning" foreground="#e1b561" />
<Color name="Error" foreground="#db5e5e" />

<RuleSet>

    <Rule color="Time">\d\d:\d\d:\d\d</Rule>
    <Rule color="Time">\d\d:\d\d:\d\d</Rule>

    <Span color="Info" multiline="true">
        <Begin>\[I\]:</Begin>
        <End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
    </Span>
    <Span color="Warning" multiline="true">
        <Begin>\[W\]:</Begin>
        <End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
    </Span>
    <Span color="Error" multiline="true">
        <Begin>\[E\]:</Begin>
        <End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
    </Span>
</RuleSet>    

</SyntaxDefinition>

Но почему End Span не работает для моей мультилинии??

введите здесь описание изображения


person Momo    schedule 02.11.2017    source источник


Ответы (1)


Наконец, я решил эту проблему с помощью dgrunwald на github. Решение почти легкое. Подсветка синтаксиса AvalonEdit отображает код построчно. Таким образом, регулярное выражение всегда сравнивается с одной строкой. Вот почему он никогда не может соответствовать \n для новой строки.

Итак, вот решение:

<Span color="Error" multiline="true">
    <Begin>\[E\]:</Begin>
    <End>^(?=\d\d:\d\d:\d\d)</End>
</Span>

Теперь результат выглядит так:

введите здесь описание изображения

Спасибо dgrunwald!

person Momo    schedule 05.11.2017