2

В этом вопросе я спросил о том, как выделить несколько элементов пунктуации в списке уценок. Теперь я хочу расширить подсветку и на римские цифры, потому что они поддерживаются расширениями Pandoc, которые я использую для создания PDF-файлов из источника уценки.

В Markdown Extended syntax definition в line 1180 я вставил следующее regex:

^\s{0,4}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)\.(?=\s\w)

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

list-paragraph:
- match: \G\s+(?=\S)
    push:
        - meta_scope: meta.paragraph.list.markdown
        - match: ^\s*$
            pop: true
        - match: '^\s{0,4}([*+-])(?=\s)'
            scope: punctuation.definition.list_item.markdown
        - match: '^\s{0,4}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)\.(?=\s\w)'
            captures:
                1: punctuation.definition.list_item.markdown punctuation.definition.list_item.number.markdown
                2: punctuation.definition.list_item.markdown
        - include: inline

Я понимаю, что это не учитывает действительность римских чисел, но я все равно буду их правильно печатать, поэтому меня не волнует, выделяет ли это и другие недействительные римские числа. Также, когда список в уценке начинается с действительного числа, обычно i. нумерация автоматически рассчитывается Pandoc при создании PDF, чтобы можно было ввести i. 10 раз, и все равно это будут римские цифры от 1 до 10 в PDF.

Я проверил это регулярное выражение с помощью онлайн-тестера и отладчика регулярных выражений. Я использовал режим mg , потому что я читал следующее на сайтах SublimeText:

Регулярные выражения запускаются только для одной строки текста за раз.

g находит совпадение после нахождения совпадения. m заставляет сопоставление рассматривать ^ как начало строки и $ как конец строки.

Это то, что я понимаю, SublimeText делает внутренне.

Мой тестовый текст следующий:

## Normal Equation

When the number of features for an $x^{(i)}$ of the training data is not too high, maybe lower than $9000$, an alternative way to [gradient descent](#gradient-descent-algorithm) for solving the optimization problem of the [cost function](#cost-function), using the normal equation, is feasible.

The vector $\theta$, which contains the coefficients for the hypothesis function can be optimized in one step using the following formula:

$$\theta = (X^T X)^{-1} X^T y$$

Where $X$ is a matrix, is constructed as follows:


+as
+ as
-as
-asa
* asas
* asas

asas

1. 
2. 1212
3. 1212

qqq

I. asas
II. asa
III. asa

qqq

i. sa
ii. 1212
iii. asas

asdasd *asasas* 1. sadqwqe. *This is fat text!* **double** ewwrew ass a as as asa aas  asasasas  1. ewr34 43543

Тест на регулярное выражение полностью успешен, он выделяется именно так, как я хочу. Однако, когда я вставляю его в определение синтаксиса Markdown Extended, римские цифры остаются белыми и не выделяются.

Пример скриншота:

снимок экрана с возвышенным текстом без выделения римских цифр

Так что я не знаю, что не так с регулярным выражением. Как мне нужно изменить его, чтобы включить римские цифры (не обязательно правильные, действительные римские цифры)?

Дополнительная информация

  • SublimeText версия: 3103
  • ОС: Xubuntu 14.04

1 ответ1

2

Само регулярное выражение работает нормально, но никогда не запускается в нумерованных списках. Вы также должны адаптировать регулярное выражение в строке 693 к '^[ ]{0,3}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)(\.)(?=\s)' . В этой строке list-paragraph контекст абзаца списка . Однако вы должны знать, что это также будет выделено (и уже выделено):

1. ...
ii. ...

Если вы хотите избежать этого, вы можете добавить контекстный list-paragraph-roman и вставить его для римских чисел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .