ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
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
___________________________________________________________________________________


  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).