[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