[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Xemacs psgml mode
On Tue, Oct 06, 1998 at 11:32:41AM +0400, Alexey Vyskubov wrote:
> А существует какой-либо несложный (т.е. не требующий многочасового копания
> в Лиспе) способ научить xemacs в psgml-mode, что в данном конкретном
> документе я хочу покрасить все от, скажем, <head> до </head> в зеленый
> цвет?
>
> Я даже готов не писать <head/.../ или <head>...</> по такому случаю.
hilit'ом - да, font-lock'ом - нет.
Вообще я font-lock не люблю, слишком он жесткий, нерасширяемый, но
зато поддерживает lazy/fast lock. Вот если бы hilit этому научить...
В hilit'е можно задать абстрактные сущности, которые хайлайтятся неким
заданным образом, а затем в каждой моде, где эти сущности имеют смысл
задать regexp'ы, которые эти сущности для этой моды определяют.
А font-lock только и знает про keyword'ы и еще несколько жестко
заданных вещей.
Например для Java:
;; Определяем, что есть такая сущность, как doc-comment, и говорим,
;; как ее надо рисовать
(hilit-translate doc-comment 'firebrick-bold-italic)
Потом в mode patterns для Java пишем: ("/\\*\\*" "\\*/" doc-comment) и
вуаля. Причем, если в какой то моде еще будут иметь смысл эти самые
doc-comment, то пишешь в том mode paterns нужный regexp и
наслаждаешься.
Посмотри как это сделано в html-helper-mode:
(if (fboundp 'hilit-set-mode-patterns)
(hilit-set-mode-patterns
'html-helper-mode
'(("<!--" "-->" comment)
("<a\\b" ">" define)
("</a>" nil define)
("<img\\b" ">" include)
("<b>" "</b>" bold)
("<i>" "</i>" italic)
("<u>" "</u>" underline)
("&" ";" string)
("<" ">" keyword))
nil 'case-insensitive)
nil)
Причем ты можешь опять же написать hilit-translate и писать не
конкретные face'ы - a мнемоничные имена.
HTH.
SY, Uwe
--
uwe@ptc.spbu.ru | Zu Grunde kommen
http://www.ptc.spbu.ru/~uwe/ | Ist zu Grunde gehen