Почему Prettify использует стандартное регулярное выражение, даже когда я добавляю пользовательское регулярное выражение для PR_TYPE в отдельный обработчик языка?

Я пытаюсь написать надстройку языкового обработчика Google Prettify для Qiskit для реализации на бирже стека Quantum Computing. Я разветвил репозиторий кода-prettify и добавил lang-qiskit.js:

PR['registerLangHandler'](
    PR['createSimpleLexer'](
        [   
            // plain text
            [PR['PR_PLAIN'],       /^\s+/, null, ' \r\n\t\xA0'],
            // string literals
            [PR['PR_STRING'],      /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, null],
        ],
        [   // hash comments 
            [PR['PR_COMMENT'],    /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#'],
            // Python v3.7.3 keywords
            [PR['PR_KEYWORD'],     /\b(?:False|None|True|and|as|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|raise|return|try|while|with|yield)\b/],
            // valid class names
            [PR['PR_TYPE'],        /^(?:[@_]?[a-zA-Z]+[a-zA-Z0-9][A-Za-z_$@0-9]*|\w+_t\b)/, null],
            // valid literals
            [PR['PR_LITERAL'],     /^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/],
            // valid variable names
            [PR['PR_PLAIN'],       /^[a-zA-Z_$][a-zA-Z_$0-9]*/],
    ]),
['qiskit']);

Я верю PR_TYPE regex - это то, что обрабатывает имена классов (например, в Python). Поскольку переполнение стека также использует Google Prettify, я приведу пример:

from qiskit import QuantumRegister, ClassicalRegister, U3Gate
from qiskit.extensions.simulator import wait

Вы заметите, что в то время как QuantumRegister, ClassicalRegister быть выделенным, U3Gate а также wait не делайте. Это потому, что регулярное выражение PR_TYPE ^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b) ( ссылка regex101), которая не допускает слова, начинающиеся с нижнего регистра, или слова, содержащие цифру в середине. Я изменил это регулярное выражение ^(?:[@_]?[a-zA-Z]+[a-zA-Z0-9][A-Za-z_$@0-9]*|\w+_t\b) ( ссылка на regex101), как вы можете заметить в моем первом фрагменте выше.

Теперь, когда я запускаю следующий файл Javascript в соответствии с инструкциями на странице Prettify Getting Started (то есть с <script src="https://cdn.jsdelivr.net/gh/BlueStackExchange/code-prettify@master/loader/run_prettify.js?lang=qiskit&amp;skin=sunburst"></script> в шапке) до сих пор вижу что U3Gate а также wait не выделяются

<script src="https://cdn.jsdelivr.net/gh/BlueStackExchange/code-prettify@master/loader/run_prettify.js?lang=qiskit&amp;skin=sunburst"></script>
<?prettify lang=qiskit?>
<pre class="prettyprint qiskit">
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, U3Gate, wait

def build_bell_circuit():
    """Returns a circuit putting 2 qubits in the Bell state."""
    q = QuantumRegister(2)
    c = ClassicalRegister(2)
    qc = QuantumCircuit(q, c)
    qc.h(q[0])
    qc.cx(q[0], q[1])
    qc.measure(q, c)
    x = 3 + 4j
    return qc
    await async
# Create the circuit
bell_circuit = build_bell_circuit()

# Use the internal .draw() to print the circuit
print(bell_circuit)
</pre>

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

Вы можете запустить это и проверить это здесь.

В общем, мой вопрос: почему Prettify все еще использует регулярное выражение для PR_TYP, хотя я включил модифицированное регулярное выражение в дополнение? Как это исправить?

0 ответов

Другие вопросы по тегам