Hi, I would like to use in my documents double braces for the footnote – for easily matching entire footnotes with RegEx (thus it can't confuse with the nested braces) ... text\footnote{{this is {\it one} tiny note\index{note}!}} ... and match the entire footnote with search regex for \\footnote\{\ {.+\}\} Is this save? Or are there unwanted side-effects when using \footnote {{ ... }} ? Steffen
Hi Steffen,
I don't really know regex, but how does your double brace work with
the following
\footnote{{This $\frac{a}{b^{c+d}}$ is a strange footnote}}
note the double }} in the math formula.
/Micke P
On Jan 21, 2008 3:45 PM, Steffen Wolfrum
Hi,
I would like to use in my documents double braces for the footnote – for easily matching entire footnotes with RegEx (thus it can't confuse with the nested braces) ...
text\footnote{{this is {\it one} tiny note\index{note}!}}
... and match the entire footnote with search regex for \\footnote\{\ {.+\}\}
Is this save? Or are there unwanted side-effects when using \footnote {{ ... }} ?
Steffen
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
math formula is one of the few things I definitely don't have to take care for =o) up to now ... thanks for the tip! steffen Am 21.01.2008 um 16:02 schrieb Mikael Persson:
Hi Steffen,
I don't really know regex, but how does your double brace work with the following
\footnote{{This $\frac{a}{b^{c+d}}$ is a strange footnote}}
note the double }} in the math formula.
/Micke P
On Jan 21, 2008 3:45 PM, Steffen Wolfrum
wrote: Hi,
I would like to use in my documents double braces for the footnote – for easily matching entire footnotes with RegEx (thus it can't confuse with the nested braces) ...
text\footnote{{this is {\it one} tiny note\index{note}!}}
... and match the entire footnote with search regex for \\footnote\{\ {.+\}\}
Is this save? Or are there unwanted side-effects when using \footnote {{ ... }} ?
Steffen
_____________________________________________________________________ ______________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net _____________________________________________________________________ ______________
______________________________________________________________________ _____________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ______________________________________________________________________ _____________
On Mon, Jan 21 2008, Steffen Wolfrum wrote:
I would like to use in my documents double braces for the footnote – for easily matching entire footnotes with RegEx (thus it can't confuse with the nested braces) ...
text\footnote{{this is {\it one} tiny note\index{note}!}}
... and match the entire footnote with search regex for \\footnote\{\ {.+\}\}
Hi Steffen, have you already tried http://archive.contextgarden.net/message/20060730.070820.14c7c91e.en.html (extended regexp)? Cheers, Peter -- http://pmrb.free.fr/contact/
On Wed, Jan 23 2008, Peter Münster wrote:
On Mon, Jan 21 2008, Steffen Wolfrum wrote:
I would like to use in my documents double braces for the footnote – for easily matching entire footnotes with RegEx (thus it can't confuse with the nested braces) ...
text\footnote{{this is {\it one} tiny note\index{note}!}}
... and match the entire footnote with search regex for \\footnote\{\ {.+\}\}
have you already tried http://archive.contextgarden.net/message/20060730.070820.14c7c91e.en.html (extended regexp)?
I've just seen, that it does not work for nested braces: \footnote{x{y}z}: ok \footnote{x{y{z}}}: not ok The next one (normal regexp, not extended) has support for up to one level of nesting: \\footnote{[^{}]*\([^{}]*{[^{}]*\([^{}]*{[^{}]*}[^{}]*\)*[^{}]*}[^{}]*\)*[^{}]*} These examples seem to work: \footnote{x{y}z} \footnote{x{y{z}}} \footnote{x{y}z} \footnote{x{y{z}}x{y{z}}x{y}z} \footnote{x{y{z}}x{y{z}y{z}y}x{y}z} Cheers, Peter -- http://pmrb.free.fr/contact/
On Jan 23, 2008, at 10:50 PM, Peter Münster wrote:
I've just seen, that it does not work for nested braces: \footnote{x{y}z}: ok \footnote{x{y{z}}}: not ok
The next one (normal regexp, not extended) has support for up to one level of nesting:
\\footnote{[^{}]*\([^{}]*{[^{}]*\([^{}]*{[^{}]*}[^{}]*\)*[^{}]*} [^{}]*\)*[^{}]*}
These examples seem to work: \footnote{x{y}z} \footnote{x{y{z}}} \footnote{x{y}z} \footnote{x{y{z}}x{y{z}}x{y}z} \footnote{x{y{z}}x{y{z}y{z}y}x{y}z}
Cheers, Peter
You could also use a nice scripting language like ... lua!! lua has support for "balanced strings," so no nesting trickery is needed, see http://www.lua.org/pil/20.2.html (scroll to the bottom of the page). Or you could try and nag Hans into giving a nice tutorial on the lua lpeg library at Bohinj! :-) All best Thomas
On Wed, 23 Jan 2008, Thomas A. Schmitz wrote:
On Jan 23, 2008, at 10:50 PM, Peter Münster wrote:
I've just seen, that it does not work for nested braces: \footnote{x{y}z}: ok \footnote{x{y{z}}}: not ok
The next one (normal regexp, not extended) has support for up to one level of nesting:
\\footnote{[^{}]*\([^{}]*{[^{}]*\([^{}]*{[^{}]*}[^{}]*\)*[^{}]*} [^{}]*\)*[^{}]*}
Wow. This shows regexes are easier to write than read. I would have never managed to read what this does (and I know regexes fairly well).
These examples seem to work: \footnote{x{y}z} \footnote{x{y{z}}} \footnote{x{y}z} \footnote{x{y{z}}x{y{z}}x{y}z} \footnote{x{y{z}}x{y{z}y{z}y}x{y}z}
Cheers, Peter
You could also use a nice scripting language like ... lua!! lua has support for "balanced strings," so no nesting trickery is needed, see http://www.lua.org/pil/20.2.html (scroll to the bottom of the page). Or you could try and nag Hans into giving a nice tutorial on the lua lpeg library at Bohinj! :-)
Another option is Gema http://gema.sourceforge.net/new/index.shtml (also has a lua library gel http://gema.sourceforge.net/new/gel.shtml). You can define regions and matching nested braces quite easily. Aditya
On Jan 24, 2008, at 12:19 AM, Aditya Mahajan wrote:
Another option is Gema http://gema.sourceforge.net/new/index.shtml (also has a lua library gelhttp://gema.sourceforge.net/new/ gel.shtml). You can define regions and matching nested braces quite easily.
Aditya
Hi Aditya, I remember I had a look at gema before but couldn't really find out what was special about it and would warrant further attention. I also haven't seen anything about nested braces etc. (which would be great for processing TeX files but is a major pain in the back with regexs). You seem to know more about it: could you give an example of how it's possible to have nested braces in a gema pattern? Thomas
Hi Thomas, Sorry for the delay in the reply, I was travelling last week. On Sat, 26 Jan 2008, Thomas A. Schmitz wrote:
On Jan 24, 2008, at 12:19 AM, Aditya Mahajan wrote:
Another option is Gema http://gema.sourceforge.net/new/index.shtml (also has a lua library gelhttp://gema.sourceforge.net/new/ gel.shtml). You can define regions and matching nested braces quite easily.
Aditya
I remember I had a look at gema before but couldn't really find out what was special about it and would warrant further attention. I also haven't seen anything about nested braces etc. (which would be great for processing TeX files but is a major pain in the back with regexs). You seem to know more about it: could you give an example of how it's possible to have nested braces in a gema pattern?
Nested patterns is something where gema really excels. Here is a gema script to convert \footnote{{something}} to \footnote{something} :\\footnote\W\{\{<matchbrace>\}\}=\\footnote\{$1\} matchbrace:\{#\}=\{#\} matchbrace:\\<Y1>=\\$1 Save it as footnote.gema and then run gema -f footnote.gema tex-file > output-file It handles these expressions correctly: \footnote{{This $\frac{a}{b^{c+d}}$ is a strange footnote}} \footnote{{This $\frac{a}{b^{c+d}}$ is a strange footnote with multiple {nested {expressions}}}} \footnote{{This $\frac{\left[\frac {a}{b}\right\}}{c}$ is a strange footnote}} It is much easier to write than regular expressions. Unfortunately, gema expressions can be as hard as regular expressions to read. Aditya
Actually I use this to highlight footnotes in my texteditor: colorize entire footnotes for for easier reading. I am quite happy to have (on MacOSX) a text-editor that gives such "syntax coloring" flexibility: it is Satoshi Matsumoto's Jedit X. And here RegularExpressions are used for that purpose. If someone knows an editor that does "syntax coloring" with lua or gema, I'd be very interested! Thanks, Steffen
On Wed, 6 Feb 2008, Steffen Wolfrum wrote:
Actually I use this to highlight footnotes in my texteditor: colorize entire footnotes for for easier reading.
I am quite happy to have (on MacOSX) a text-editor that gives such "syntax coloring" flexibility: it is Satoshi Matsumoto's Jedit X. And here RegularExpressions are used for that purpose.
If someone knows an editor that does "syntax coloring" with lua or gema, I'd be very interested!
In vim you can highlight comands and their "regions" using region start, region end, and region contains. That can be used to highlight footnotes. (I once used something similar for highlighting sections in LaTeX, but no longer have that code). Of course, vim comes with rest of its baggage. Aditya
On Wed, 6 Feb 2008, Steffen Wolfrum wrote:
Actually I use this to highlight footnotes in my texteditor: colorize entire footnotes for for easier reading.
I am quite happy to have (on MacOSX) a text-editor that gives such "syntax coloring" flexibility: it is Satoshi Matsumoto's Jedit X. And here RegularExpressions are used for that purpose.
If someone knows an editor that does "syntax coloring" with lua or gema, I'd be very interested!
BBEdit on MacOSX also recognizes lua files, at least in version 8.7.2 Hans van der Meer
Am 06.02.2008 um 20:20 schrieb Hans van der Meer:
On Wed, 6 Feb 2008, Steffen Wolfrum wrote:
Actually I use this to highlight footnotes in my texteditor: colorize entire footnotes for for easier reading.
I am quite happy to have (on MacOSX) a text-editor that gives such "syntax coloring" flexibility: it is Satoshi Matsumoto's Jedit X. And here RegularExpressions are used for that purpose.
If someone knows an editor that does "syntax coloring" with lua or gema, I'd be very interested!
BBEdit on MacOSX also recognizes lua files, at least in version 8.7.2
Sure, but how does that affect syntax coloring?? Steffen
On 6 feb 2008, at 21:01, Steffen Wolfrum wrote:
Am 06.02.2008 um 20:20 schrieb Hans van der Meer:
On Wed, 6 Feb 2008, Steffen Wolfrum wrote:
Actually I use this to highlight footnotes in my texteditor: colorize entire footnotes for for easier reading.
I am quite happy to have (on MacOSX) a text-editor that gives such "syntax coloring" flexibility: it is Satoshi Matsumoto's Jedit X. And here RegularExpressions are used for that purpose.
If someone knows an editor that does "syntax coloring" with lua or gema, I'd be very interested!
BBEdit on MacOSX also recognizes lua files, at least in version 8.7.2
Sure, but how does that affect syntax coloring??
It recognizes keywords, string constants and comments, each can have a different (user definable) color. The comment start (usually --) and optionally comment end can be chosen via a preference panel. Hans van der Meer
On 6 févr. 08, at 10:11, Steffen Wolfrum wrote:
[…]
If someone knows an editor that does "syntax coloring" with lua or gema, I'd be very interested!
Hi Steffen, Smultron does this on MacOS X: http://smultron.sourceforge.net/ In fact one can define easily a set of syntax colouring for almost anything with Smultron. Best regards: OK
Hi Aditya, now I need to apologize for being so slow to reply: thanks a lot, this looks really fascinating! I don't know how many things I've read on the web to understand if regexps can handle nested delimiters or not (I think the long and short of it was that on some mathematical principle it just isn't possible); there is some pretty obscure perl stuff that might be able to do it but is highly experimental. If gema really can do this, it should be a godsend for processing TeX files. I have it installed now on my OS X box (but couldn't build the gel binary) and am looking forward to experimenting with it. All best, and thanks! Thomas On Feb 6, 2008, at 8:01 AM, Aditya Mahajan wrote:
Nested patterns is something where gema really excels. Here is a gema script to convert \footnote{{something}} to \footnote{something}
:\\footnote\W\{\{<matchbrace>\}\}=\\footnote\{$1\} matchbrace:\{#\}=\{#\} matchbrace:\\<Y1>=\\$1
Save it as footnote.gema and then run
gema -f footnote.gema tex-file > output-file
It handles these expressions correctly:
\footnote{{This $\frac{a}{b^{c+d}}$ is a strange footnote}}
\footnote{{This $\frac{a}{b^{c+d}}$ is a strange footnote with multiple {nested {expressions}}}}
\footnote{{This $\frac{\left[\frac {a}{b}\right\}}{c}$ is a strange footnote}}
It is much easier to write than regular expressions. Unfortunately, gema expressions can be as hard as regular expressions to read.
Aditya
Thomas A. Schmitz wrote:
Hi Aditya,
now I need to apologize for being so slow to reply: thanks a lot, this looks really fascinating! I don't know how many things I've read on the web to understand if regexps can handle nested delimiters or not (I think the long and short of it was that on some mathematical principle it just isn't possible); there is some pretty obscure perl stuff that might be able to do it but is highly experimental. If gema really can do this, it should be a godsend for processing TeX files. I have it installed now on my OS X box (but couldn't build the gel binary) and am looking forward to experimenting with it.
lua's pattern matcher can hanle nested {} (syntax: %b{} and such) more clever things can be done with lpeg, bla {bla\{bla} and such if you're up to date you may try mtxrun --script check sometexfile.tex this is a (for the mooment simple) syntax checker i wrote a while ago which shows the principles 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 -----------------------------------------------------------------
On Tue, 12 Feb 2008, Hans Hagen wrote:
Thomas A. Schmitz wrote:
Hi Aditya,
now I need to apologize for being so slow to reply: thanks a lot, this looks really fascinating! I don't know how many things I've read on the web to understand if regexps can handle nested delimiters or not (I think the long and short of it was that on some mathematical principle it just isn't possible); there is some pretty obscure perl stuff that might be able to do it but is highly experimental. If gema really can do this, it should be a godsend for processing TeX files. I have it installed now on my OS X box (but couldn't build the gel binary) and am looking forward to experimenting with it.
lua's pattern matcher can hanle nested {} (syntax: %b{} and such)
more clever things can be done with lpeg, bla {bla\{bla} and such
if you're up to date you may try
mtxrun --script check sometexfile.tex
this is a (for the mooment simple) syntax checker i wrote a while ago which shows the principles
I have been looking at different ways to parse TeX syntax since I occassionally do ConTeXt -> LaTeX conversion. Things like gema and regexs are ok for small things: e.g., convert ConTeXt section commands to LaTeX section commnads, convert figures, etc. Gema is better if you also want to convert ConTeXt font commands to LaTeX; since it is easier to write nested conversions. However, both fail miserably if you want to convert things like ConTeXt multi-line math statements to LaTeX. For that a real parser is needed. I have looked at Parsec (and Pandoc project) in Haskell, but have not made too much progress there. Maybe lpeg is an easier to understand parser. (But I sometimes get the feeling that the whole thing will be easier in TeX, since TeX already parses itself :) Aditya
Aditya Mahajan wrote:
I have been looking at different ways to parse TeX syntax since I occassionally do ConTeXt -> LaTeX conversion. Things like gema and regexs are ok for small things: e.g., convert ConTeXt section commands to LaTeX section commnads, convert figures, etc. Gema is better if you also want to convert ConTeXt font commands to LaTeX; since it is easier to write nested conversions. However, both fail miserably if you want to convert things like ConTeXt multi-line math statements to LaTeX. For that a real parser is needed. I have looked at Parsec (and Pandoc project) in Haskell, but have not made too much progress there. Maybe lpeg is an easier to understand parser. (But I sometimes get the feeling that the whole thing will be easier in TeX, since TeX already parses itself :)
This is actualy pretty easy, I did that for a TeX->XML conversion once. You have to redefine each and every command and make all special chars like $ and _ \active, but it is in fact pretty easy and fairly reliable. I would not do it like that again, these days I would use lpeg, but it was not nearly as complicated to do it in tex macros as I had anticipated. Best wishes, Taco
I would not do it like that again, these days I would use lpeg, but it was not nearly as complicated to do it in tex macros as I had anticipated. A bit off-topic: suppose that I , while I'm making format , I need to trace macro definitions (\edef,\xdef,\def,\let and eventually alias like \let\define\def, so also \define too,...) This can be do only hacking web source , or not ?
-- luigi it's new . it's powerful . it's luatex . http://www.luatex.org
luigi scarso wrote:
I would not do it like that again, these days I would use lpeg, but it was not nearly as complicated to do it in tex macros as I had anticipated. A bit off-topic: suppose that I , while I'm making format , I need to trace macro definitions (\edef,\xdef,\def,\let and eventually alias like \let\define\def, so also \define too,...) This can be do only hacking web source , or not ?
If you set \tracingassigns=1 \tracingrestores=1 you will get a dump in the log of all assignments (and that includes definitions) as well as restores. You will not get the full definitions of macros though, just the first 32 tokens. If you want the full definition, you really have to hack the web source. Best wishes, Taco
A bit off-topic: suppose that I , while I'm making format , I need to trace macro definitions (\edef,\xdef,\def,\let and eventually alias like \let\define\def, so also \define too,...) This can be do only hacking web source , or not ?
If you set \tracingassigns=1 \tracingrestores=1 you will get a dump in the log of all assignments (and that includes definitions) as well as restores.
You will not get the full definitions of macros though, just the first 32 tokens. If you want the full definition, you really have to hack the web source.
ok, I suppose it. Hacking the web source should be also permit to trace primitive of luatex . Thank you very much -- luigi it's new . it's powerful . it's luatex . http://www.luatex.org
Thomas A. Schmitz wrote:
You could also use a nice scripting language like ... lua!! lua has support for "balanced strings," so no nesting trickery is needed, see http://www.lua.org/pil/20.2.html (scroll to the bottom of the page). Or you could try and nag Hans into giving a nice tutorial on the lua lpeg library at Bohinj! :-)
Even in bare lua, it is very easy to match balanced braces: local data = "\\footnote{x{y}z}" local match = "\\footnote%s%b{}" local i = 0 while true do i,j = string.find(data, match, i+1) if i == nil then break end print(string.sub(data, i, j)) end with lpeg, the code looks a bit harder, but is still short and relatively shortforward: local matchtable = { "TEXT", SP = lpeg.S" \n\t"^0, BODY = lpeg.P{ "{" * ((1 - lpeg.S"{}") + lpeg.V(1))^0 * "}" }, FOOTNOTE = lpeg.P"\\footnote" * lpeg.V"SP" * lpeg.V"BODY" / print, TEXT = (lpeg.V"FOOTNOTE" + 1)^0 * -1, } lpeg.match(matchtable, data) Best wishes, Taco
Taco Hoekwater wrote:
with lpeg, the code looks a bit harder, but is still short and relatively shortforward:
Here is a smarter lpeg that takes care of embedded \{ as well: local P, S, V = lpeg.P, lpeg.S, lpeg.V local matchtable = { "TEXT", TEXT = (V("FOOTNOTE") + 1)^0 * -1, SP = S(" \n\t")^0, BODY = "{"*(P("\\{")+P("\\}")+(1 - S("{}"))+V("BODY"))^0*"}", FOOTNOTE = "\\footnote" * V("SP") * V("BODY") / print, } lpeg.match(matchtable, data) Quick explanation: the symbol + is alternation, * is concatenation, - is exclusion, ^ is a repeat modifier, "" and P("") match strings, numbers match bytes, S("") matches byte sets. the "matchtable" describes the input data. In there, matchtable[1] points to the "top" rule, which is "TEXT". The other key-value pairs in the table say roughly this: TEXT = an optional sequence [^0] of either footnote items [V("FOOTNOTE")] or non-footnote bytes [1], until the end of the data is reached [-1] FOOTNOTE = the string '\footnote', followed by optional space, followed by the footnote body. SP = zero or more occurrences of a space, tab, or newline byte BODY = a left brace, followed by an optional sequence of four possible things: 1. the string "\{" [P("\\{")] 2. the string "\}" [P("\\}")] 3. a byte that is not "{" nor "}" [(1 - S("{}"))] 4. a recursively included braced body [V("BODY")], followed by a right brace. The [/print] runs the print() command on each successful FOOTNOTE match. Best wishes, Taco
participants (10)
-
Aditya Mahajan
-
Hans Hagen
-
Hans van der Meer
-
luigi scarso
-
Mikael Persson
-
Otared Kavian
-
Peter Münster
-
Steffen Wolfrum
-
Taco Hoekwater
-
Thomas A. Schmitz