SublimeText Markdown Extended adicionar realce de números romanos

2

Em esta pergunta, perguntei sobre como realce mais de um item de pontuação da lista de descontos. Agora eu quero estender o realce para números romanos também, porque eles são suportados pelas extensões do Pandoc, que eu uso para criar PDFs a partir da fonte markdown.

No Markdown Extended syntax definition , em line 1180 , inseri o seguinte regex :

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

Agora parece com isso:

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

Eu entendo que isso não leva em conta a validade dos números romanos, mas vou digitá-los corretamente de qualquer maneira, então eu não me importo em destacar outros números romanos inválidos também. Também uma vez uma lista em markdown começa com um número válido, geralmente i. , a numeração é automaticamente calculada pela Pandoc, quando cria o PDF, para que se possa digitar i. 10 vezes, e ainda seriam números romanos de 1 a 10 no PDF.

Eu verifiquei essa expressão regular com o testador e depurador de regex on-line . O modo que usei é mg , porque eu leio o seguinte nos sites do SublimeText :

Regexes are only ever run against a single line of text at a time.

g faz a correspondência depois de encontrar uma correspondência. m faz a correspondência considerar ^ como o início da linha e $ como o final da linha.

Isso é o que eu entendo que o SublimeText faz internamente.

Meu texto de teste é o seguinte:

## 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

O teste do regex é completamente bem sucedido, ele destaca exatamente como eu quero. No entanto, quando eu o colo na definição de sintaxe do Markdown Extended, os números romanos permanecem em branco, não são destacados.

Exemplo de captura de tela:

Então eu não sei o que há de errado com o regex. Como preciso alterá-lo para incluir também números romanos (não necessariamente números romanos válidos)?

Informações adicionais

  • Versão do SublimeText: 3103
  • SO: Xubuntu 14.04
por Zelphir 02.03.2016 / 15:53

1 resposta

2

O próprio regex funciona bem, mas nunca é acionado em listas numeradas. Você também precisa adaptar o regex na linha 693 to '^[ ]{0,3}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)(\.)(?=\s)' . Nesta linha, o contexto list-paragraph é enviado. No entanto, você deve estar ciente de que isso também será destacado (e já está destacado):

1. ...
ii. ...

Se você quiser evitar isso, adicione um contexto list-paragraph-roman e insira o contexto para números romanos.

    
por 12.03.2016 / 08:40