From: "Thomas A. Schmitz" <thomas.schmitz@uni-bonn.de>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: lua questions
Date: Fri, 23 Jan 2009 14:04:31 +0100 [thread overview]
Message-ID: <5BEDCB43-C327-46EA-AB92-480BA2A0F450@uni-bonn.de> (raw)
In-Reply-To: <4979A64B.1080906@wxs.nl>
On Jan 23, 2009, at 12:13 PM, Hans Hagen wrote:
>
> here is a variant that implements a function (and does not use the
> env trick)
>
> do
> local add = function (x,y) return x+y end
> local P,Ca,Cc= lpeg.P,lpeg.Ca,lpeg.Cc
> local symbols =
> { I=1,V=5,X=10,L=50,C=100,D=500,M=1000,IV=4,IX=9,XL=40,CD=400,CM=900}
> local adders = { }
> for s,n in pairs(symbols) do adders[s] = P(s)*Cc(n)/add end
> local MS = adders.M^0
> local CS = (adders.D*adders.C^(-4)+adders.CD+adders.CM
> +adders.C^(-4))^(-1)
> local XS = (adders.L*adders.X^(-4)+adders.XL+adders.X^(-4))^(-1)
> local IS = (adders.V*adders.I^(-4)+adders.IX+adders.IV
> +adders.I^(-4))^(-1)
> local p = Ca(Cc(0)*MS*CS*XS*IS)
> function string:romantonumber()
> return p:match(self:upper())
> end
> end
>
> print(string.romantonumber("MMIX"))
> print(string.romantonumber("MMIIIX"))
>
>
> just run such script using
>
> mtxrun --script yourscript.lua
>
> as luatex (texlua) has the latest lpeg built in)
>
Brilliant! This one does work when I use it with luatex (not with my
system lua though, even though I have the latest released version of
lpeg 0.9 installed. Bizarre...
>
>> 2. How can I check if a string begins with a class of words "(Der |
>> Die |Das |The |An )" etc. and strip these words from the string? I
>> do it with a compiled regexp in python, but "Programming in lua"
>> has this to say: "Unlike some other systems, in Lua a modifier can
>> only be applied to a character class; there is no way to group
>> patterns under a modifier. For instance, there is no pattern that
>> matches an optional word (unless the word has only one letter).
>> Usually you can circumvent this limitation using some of the
>> advanced techniques that we will see later." I haven't found these
>> techniques yet.
>
> local stripped = {
> "Der", "Die", "Das"
> }
>
> local p = lpeg.P(false)
>
> for k, v in ipairs(stripped) do
> p = p + lpeg.P(v)
> end
>
> local w = p * " "
>
> local stripper = lpeg.Cs(((w/"") + lpeg.C(1))^0)
>
> lpeg.print(stripper)
>
> str = "Germans somehow always talk about Der Thomas and Der Hans"
>
> print(stripper:match(str))
>
Brilliant again! I can run with that, looks great! And who doesn't
want a "local stripper" in his code?
>
>> 3. How can I compare strings with utf8 characters? My naive approach
>> if string.find(record, "Résumé")
>> doesn't appear to work (while the same method does work if the
>> string has only ASCII characters).
>
> since lua is 8 bit clean utf should just work
OK, then the problem must be somewhere else. I'll investigate.
Thanks a lot, and best wishes
Thomas
___________________________________________________________________________________
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
___________________________________________________________________________________
next prev parent reply other threads:[~2009-01-23 13:04 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-22 21:24 Thomas A. Schmitz
2009-01-23 11:13 ` Hans Hagen
2009-01-23 13:04 ` Thomas A. Schmitz [this message]
2009-01-29 12:35 ` Thomas A. Schmitz
2009-01-29 12:42 ` Taco Hoekwater
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5BEDCB43-C327-46EA-AB92-480BA2A0F450@uni-bonn.de \
--to=thomas.schmitz@uni-bonn.de \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).