Sanjoy Mahajan wrote:
I have to find (highlight) footnotes with the entire footnote being marked/highlighted. The problems are the (potentially) nested pairs of curled brackets (like for \index, \emphasize etc etc) ...
I'm not sure what you mean by marking or highlighting the footnote. Do you mean in the printed document, or in the source file so that you can find and change them in some way?
Constructing a regexp for this is far beyond what I can write,
In the Chomsky hierarchy of grammars, regular languages, which are recognized by regexps, are below context-free grammars (CFGs). Compared to regular languages, CFGs add a stack. And you need a stack to parse nested delimiters, otherwise you can't tell whether a closing brace closes the first opening brace. So no regexp can do what you hope for.
lua reg exps have a way do handle nested () {} []
You could:
1. Use emacs (or your favorite editor) to substitute \myfootnote for \footnote, and do some ConTeXt setup magic to make \myfootnote be just like \footnote except that it highlights.
2. Use Emacs, which can find balanced braces, to make a keyboard macro (start defining it with "C-x ("). Then: a. search for \footnote. Now the point will be between the 'e' and the opening '{'. b. C-@ to set the mark. c. C-M-f ("alt-ctrl-f" to run 'forward-sexp') to move to the closing brace. Now you'll have highlighted the {...} stuff of the \footnote. d. C-x ) to end the keyboard macro definition.
Then you can use C-x e to go to and highlight the next footnote material.
But I'm not sure either is what you're trying to do?
a multistep approach is possible: - mark each { } with something that reflects nesting (say <{1> <{2> <}2> <}1> etc - you can now distinguish matching pairs and take some action - afterwards you convert the <..> things back to { } (at least that is how i did such thing until now in e.g. ruby) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------