Emacs режим C++: Highlighting Casts и Sizeof

Я использую стандарт (поставленный) режим C++ Emacs, но у меня есть легкий зуд, что я надеюсь царапаться. Как я пошел бы о надлежащем выделении типов в sizeof и бросках в C++?

Например:

  1. Бросок

    Type * pointer = reinterpret_cast <Type *> (original);

  2. Sizeof

    std::cout << sizeof (Type) << "\n";

5
задан John Bellone 15 December 2009 в 16:39
поделиться

1 ответ

Добавьте эти выражения в свой .emacs или оцените их с помощью M -: .

Sizeof (это проще из два случая)

Регулярное выражение выделяет любую комбинацию (обозначенную выражением в квадратных скобках [...] ; относительно синтаксиса см. примечание ниже) буквенно-цифровых символов, пробелов и звездочки в круглых скобках, которым предшествует sizeof .

(font-lock-add-keywords 'c++-mode
  '(("\\<sizeof[[:space:]]*(\\([[:alnum:][:space:]*]+\\))"
  1 font-lock-type-face t)))

Число 1 указывает emacs выделять только первое подвыражение (отмеченное \\ (... \\) ) с помощью лица font-lock-type-face ; t означает переопределение любого предыдущего выделения.

Вы можете увидеть и изменить доступные начертания с помощью Mx customize group [RET] font-lock-faces [RET] .

C ++ слепки стилей

I ' m не уверен, какой тип имени вы хотите выделить - «оригинальное» или имя, в которое нужно преобразовать. Этот маркер отмечает оба:

(font-lock-add-keywords 'c++-mode
  '(("\\<[[:alnum:]]+_cast[[:space:]]*<\\([[:alnum:][:space:]*]+\\)>[[:space:]]*(\\([[:alnum:][:space:]*]+\\))"
  (1 font-lock-type-face t)
  (2 font-lock-type-face t))))

Опять же, '1 и 2` выбирают соответствующие подвыражения.

Обратите внимание: Регулярные выражения для имен типов не полностью соответствуют синтаксису C ++. Например, emacs с радостью выделит бессмыслицу вроде sizeof (int * 32) .

Кроме того, мое решение не принимает во внимание проблему, упомянутую Павлом в комментарии к вашему вопросу; что вы также можете использовать sizeof для переменных, которые потребуют другого выделения. Я не думаю, что это возможно, за исключением реализации полного синтаксического анализатора C в коде блокировки шрифта.

1 и 2` выбирают соответствующие подвыражения.

Обратите внимание: Регулярные выражения для имен типов не полностью соответствуют синтаксису C ++. Например, emacs с радостью выделит бессмыслицу вроде sizeof (int * 32) .

Кроме того, мое решение не принимает во внимание проблему, упомянутую Павлом в комментарии к вашему вопросу; что вы также можете использовать sizeof для переменных, которые потребуют другого выделения. Я не думаю, что это возможно, за исключением реализации полного синтаксического анализатора C в коде блокировки шрифта.

1 и 2` выбирают соответствующие подвыражения.

Обратите внимание: Регулярные выражения для имен типов не полностью соответствуют синтаксису C ++. Например, emacs с радостью выделит бессмыслицу вроде sizeof (int * 32) .

Кроме того, мое решение не принимает во внимание проблему, упомянутую Павлом в комментарии к вашему вопросу; что вы также можете использовать sizeof для переменных, которые потребуют другого выделения. Я не думаю, что это возможно, за исключением реализации полного синтаксического анализатора C в коде блокировки шрифта.

t принять во внимание проблему, которую Павел указал в комментарии к вашему вопросу; что вы также можете использовать sizeof для переменных, которые потребуют другого выделения. Я не думаю, что это возможно, за исключением реализации полного синтаксического анализатора C в коде блокировки шрифта.

t принять во внимание проблему, которую Павел указал в комментарии к вашему вопросу; что вы также можете использовать sizeof для переменных, которые потребуют другого выделения. Я не думаю, что это возможно, за исключением реализации полного синтаксического анализатора C в коде блокировки шрифта.

4
ответ дан 15 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: