ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* ConTeXt: Page numbering in words for spanish
@ 2012-11-21  9:08 Acidrums4
  2012-11-21 10:26 ` Hans Hagen
  0 siblings, 1 reply; 14+ messages in thread
From: Acidrums4 @ 2012-11-21  9:08 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hello there and thanks for finally let me into this mailing list!

So I tried to hack the macro given in the ConTeXt wiki 
(http://wiki.contextgarden.net/Page_numbering_in_words) to write pagenumbering 
in words in spanish, my native language. Things were great until I had to 
reach the 100th page. ConTeXt claims when compiling, but I don't know how to 
fix the macro so it can write hundred-numbers.

'Cien' is 100 for spanish. 'Ciento uno' for 101, 'ciento dos' for 102 and so 
(You can see a more detailed example in 
http://spanish.about.com/cs/forbeginners/a/cardinalnum_beg.htm). So basically 
I need to prepend the word 'cien' for each word number from 1 to 99 to write 
the one-hundreds, 'doscientos' for the two-hundreds... Here is my dirty hacked 
version of the macro (you may save it as 'numstr.tex' for compiling), and a 
minimal example as follows:

\input numstr
\defineconversion[numstring][\numstr]
\setupuserpagenumber[numberconversion=numstring]
\starttext
\dorecurse{100}{\recurselevel\page}
\stoptext

I'm such a noob with TeX and I cannot figure out how to do this, and I need 
this for this friday!. However, Aditya in the TeX section of StackExchange 
(http://tex.stackexchange.com/questions/82722/context-page-numbering-in-words-
for-spanish#comment178155_82722) told me that I could do this witk Lua 
(editing the file core-con.lua, as seen in 
http://repo.or.cz/w/context.git/blob/HEAD:/tex/context/base/core-con.lua
), 'cause I'm using MkIV for doing this. But I don't know anything about Lua 
(seems pretty easy, but I don't know how to test the code Aditya gave me) and 
If I knew how to do that, I don't know how to make it work in my document... 
All I could do is translate the 'words' array to spanish, but I couldn't do 
more... Could you guys give me a hand on this? Thank you so much!
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21  9:08 ConTeXt: Page numbering in words for spanish Acidrums4
@ 2012-11-21 10:26 ` Hans Hagen
  2012-11-21 11:25   ` Sietse Brouwer
  0 siblings, 1 reply; 14+ messages in thread
From: Hans Hagen @ 2012-11-21 10:26 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 11/21/2012 10:08 AM, Acidrums4 wrote:
> Hello there and thanks for finally let me into this mailing list!
>
> So I tried to hack the macro given in the ConTeXt wiki
> (http://wiki.contextgarden.net/Page_numbering_in_words) to write pagenumbering
> in words in spanish, my native language. Things were great until I had to
> reach the 100th page. ConTeXt claims when compiling, but I don't know how to
> fix the macro so it can write hundred-numbers.
>
> 'Cien' is 100 for spanish. 'Ciento uno' for 101, 'ciento dos' for 102 and so
> (You can see a more detailed example in
> http://spanish.about.com/cs/forbeginners/a/cardinalnum_beg.htm). So basically
> I need to prepend the word 'cien' for each word number from 1 to 99 to write
> the one-hundreds, 'doscientos' for the two-hundreds... Here is my dirty hacked
> version of the macro (you may save it as 'numstr.tex' for compiling), and a
> minimal example as follows:
>
> \input numstr
> \defineconversion[numstring][\numstr]
> \setupuserpagenumber[numberconversion=numstring]
> \starttext
> \dorecurse{100}{\recurselevel\page}
> \stoptext
>
> I'm such a noob with TeX and I cannot figure out how to do this, and I need
> this for this friday!. However, Aditya in the TeX section of StackExchange
> (http://tex.stackexchange.com/questions/82722/context-page-numbering-in-words-
> for-spanish#comment178155_82722) told me that I could do this witk Lua
> (editing the file core-con.lua, as seen in
> http://repo.or.cz/w/context.git/blob/HEAD:/tex/context/base/core-con.lua
> ), 'cause I'm using MkIV for doing this. But I don't know anything about Lua
> (seems pretty easy, but I don't know how to test the code Aditya gave me) and
> If I knew how to do that, I don't know how to make it work in my document...
> All I could do is translate the 'words' array to spanish, but I couldn't do
> more... Could you guys give me a hand on this? Thank you so much!

We can add a converter to core-con, but you have to do the checking (and 
tuning):

local floor = math.floor
local concat = table.concat

local verbose = { }

local words = {
         [1] = "uno",
         [2] = "dos",
         [3] = "tres",
         [4] = "cuatro",
         [5] = "cinco",
         [6] = "seis",
         [7] = "siete",
         [8] = "ocho",
         [9] = "nueve",
        [10] = "diez",
        [11] = "once",
        [12] = "doce",
        [13] = "trece",
        [14] = "catorce",
        [15] = "quince",
        [16] = "dieciséis",
        [17] = "diecisiete",
        [18] = "dieciocho",
        [19] = "diecinueve",
        [20] = "veinte",
        [21] = "veintiuno",
        [22] = "veintidós",
        [23] = "veintitrés",
        [24] = "veinticuatro",
        [25] = "veinticinco",
        [26] = "veintiséis",
        [27] = "veintisiete",
        [28] = "veintiocho",
        [29] = "veintinueve",
        [30] = "treinta",
        [40] = "cuarenta",
        [50] = "cincuenta",
        [60] = "sesenta",
        [70] = "setenta",
        [80] = "ochenta",
        [90] = "noventa",
       [100] = "ciento",
       [200] = "doscientos",
       [300] = "trescientos",
       [400] = "cuatrocientos",
       [500] = "quinientos",
       [600] = "seiscientos",
       [700] = "setecientos",
       [800] = "ochocientos",
       [900] = "novecientos",
      [1000] = "mil",
    [1000^2] = "millón",
    [1000^3] = "millones",
}

function verbose.spanish(n)
     local w = words[n]
     if w then
         return w
     end
     local t = { }
     local function compose_one(n)
         local w = words[n]
         if w then
             t[#t+1] = w
             return
         end
         local a, b = floor(n/100), n % 100
         if a == 10 then
             t[#t+1] = words[1]
             t[#t+1] = words[1000]
         elseif a > 0 then
--             t[#t+1] = words[a]
             t[#t+1] = words[100]
         end
         if words[b] then
             t[#t+1] = words[b]
         else
             a, b = floor(b/10), n % 10
             t[#t+1] = words[a*10]
t[#t+1] = "y"
             t[#t+1] = words[b]
         end
     end
     local function compose_two(n,m)
         if n > (m-1) then
             local a, b = floor(n/m), n % m
             if a > 0 then
                 compose_one(a)
             end
             t[#t+1] = words[m]
             n = b
         end
         return n
     end
     n = compose_two(n,1000^4)
     n = compose_two(n,1000^3)
     n = compose_two(n,1000^2)
     n = compose_two(n,1000^1)
     if n > 0 then
         compose_one(n)
     end
     return #t > 0 and concat(t," ") or tostring(n)
end

verbose.es = verbose.spanish

print(verbose.spanish(31))
print(verbose.spanish(101))
print(verbose.spanish(199))

sort of the english one with some patches (exceptions can be added to 
the table if needed)



-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 10:26 ` Hans Hagen
@ 2012-11-21 11:25   ` Sietse Brouwer
  2012-11-21 11:52     ` Hans Hagen
  2012-11-21 21:05     ` Acidrums4
  0 siblings, 2 replies; 14+ messages in thread
From: Sietse Brouwer @ 2012-11-21 11:25 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hi Acidrums, hi Hans,
I worked up the code below,
put it in core-con.lua,
and recompiled ConTeXt with `context --make cont-en`.
It gives the following output. Does it look correct?

Hans: the `spanishwords` is a bit hacky; probably words should have
subtables words.english and words.spanish.
Cheers,
Sietse


11.111.111 once millón cien once mil cien once
2.221.101 dos millón doscientos veintiuno mil cien uno
1.111 uno mil cien once
1.218 uno mil doscientos dieciocho
1.234 uno mil doscientos treinta y cuatro
12.345 doce mil trescientos cuarenta y cinco
12.345.678.900.000 doce billón trescientos cuarenta y cinco mil
millones seiscientos
sietenta y ocho millón novecientos mil


local spanishwords = {
        [0] = "zero",
        [1] = "uno",
        [2] = "dos",
        [3] = "tres",
        [4] = "cuatro",
        [5] = "cinco",
        [6] = "seis",
        [7] = "siete",
        [8] = "ocho",
        [9] = "nueve",
       [10] = "diez",
       [11] = "once",
       [12] = "doce",
       [13] = "trece",
       [14] = "catorce",
       [15] = "quince",
       [16] = "dieciséis",
       [17] = "diecisiete",
       [18] = "dieciocho",
       [19] = "diecinueve",
       [20] = "veinte",
       [21] = "veintiuno",
       [22] = "veintidós",
       [23] = "veintitrés",
       [24] = "veinticuatro",
       [25] = "veinticinquo",
       [26] = "veintiséis",
       [27] = "veintisiete",
       [28] = "veintiocho",
       [29] = "veintinueve",
       [30] = "treinta",
       [40] = "cuarenta",
       [50] = "cinquenta",
       [60] = "sesenta",
       [70] = "sietenta",
       [80] = "ochenta",
       [90] = "noventa",
      [100] = "cien",
      [200] = "doscientos",
      [300] = "trescientos",
      [400] = "cuatrocientos",
      [500] = "quinientos",
      [600] = "seiscientos",
      [700] = "setecientos",
      [800] = "ochocientos",
      [900] = "novecientos",
     [1000] = "mil",
   [1000^2] = "millón",
   [1000^3] = "mil millones",
   [1000^4] = "billón",
}

function verbose.spanish(n)
    local w = spanishwords[n]
    if w then
        return w
    end
    local t = { }
    local function compose_one(n)
        local w = spanishwords[n]
        if w then
            t[#t+1] = w
            return
        end
        -- a, b = hundreds, remainder
        local a, b = floor(n/100), n % 100

        -- one thousand
        if a == 10 then
            t[#t+1] = spanishwords[1]
            t[#t+1] = spanishwords[1000]
        -- x hundred (n.b. this will not give thirteen hundred because
        -- compose_one(n) is only called after
        -- `n = compose(two(n, 1000^1))`.
        elseif a > 0 then
            t[#t+1] = spanishwords[a*100]
        end

        -- the remainder
        if spanishwords[b] then
            t[#t+1] = spanishwords[b]
        else
            -- a, b = tens, remainder
            a, b = floor(b/10), n % 10
            t[#t+1] = spanishwords[a*10]
            t[#t+1] = "y"
            t[#t+1] = spanishwords[b]
        end
    end
    -- compose_two handles x billion, ... x thousand. When 1000 or less is
    -- left, compose_one takes over.
    local function compose_two(n,m)
        if n > (m-1) then
            local a, b = floor(n/m), n % m
            if a > 0 then
                compose_one(a)
            end
            t[#t+1] = spanishwords[m]
            n = b
        end
        return n
    end
    n = compose_two(n,1000^4)
    n = compose_two(n,1000^3)
    n = compose_two(n,1000^2)
    n = compose_two(n,1000^1)
    if n > 0 then
        compose_one(n)
    end
    return #t > 0 and concat(t," ") or tostring(n)
end

verbose.es = verbose.spanish

---- to test the code ---

\starttext
\def\vbes#1%
    {#1\crlf
     \ctxcommand{verbose(#1, "spanish")}}

    \obeylines
    \vbes{11111111}
    \vbes{2221101}
    \vbes{1111}
    \vbes{1218}
    \vbes{1234}
    \vbes{12345}
    \vbes{12345678900000}
\stopcode
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 11:25   ` Sietse Brouwer
@ 2012-11-21 11:52     ` Hans Hagen
  2012-11-21 12:28       ` Sietse Brouwer
  2012-11-21 21:05     ` Acidrums4
  1 sibling, 1 reply; 14+ messages in thread
From: Hans Hagen @ 2012-11-21 11:52 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 11/21/2012 12:25 PM, Sietse Brouwer wrote:

> Hans: the `spanishwords` is a bit hacky; probably words should have
> subtables words.english and words.spanish.

they are local tables ... so invisible to users

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 11:52     ` Hans Hagen
@ 2012-11-21 12:28       ` Sietse Brouwer
  0 siblings, 0 replies; 14+ messages in thread
From: Sietse Brouwer @ 2012-11-21 12:28 UTC (permalink / raw)
  To: Hans Hagen; +Cc: mailing list for ConTeXt users

> they are local tables ... so invisible to users

Fair point. I was concerned more with changeabiltity: this way someone
who writes a new function has an obvious name (numberwords.french) for
her new wordlist, and an obvious single point of alteration for her
copy of verbose.english, namely to change `local words =
numberwords.english` to `...numberwords.french`. (Algorithm tweaks
will still come after that, of course.) The code needs very little
changing. This is a minor point only, of course.
--Sietse

+ local numberwords = { }

- words = {
+ numberwords.english = {
    [1] = "one",
    ...
}

-spanishwords = {
+ numberwords.spanish = {
    [1] = "uno",
    ...
}

function verbose.english(n)
+    local words = allwords.english
    ... `words` already used throughout ...
end

function verbose.spanish(n)
+    local words = allwords.spanish
    -- to use a different table, no need to
    -- replace `spanishwords` throughout
    -- the function; just change the line above.
    ... no more `spanishwords`, just `words` ...
end
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 11:25   ` Sietse Brouwer
  2012-11-21 11:52     ` Hans Hagen
@ 2012-11-21 21:05     ` Acidrums4
  2012-11-21 23:47       ` Sietse Brouwer
  1 sibling, 1 reply; 14+ messages in thread
From: Acidrums4 @ 2012-11-21 21:05 UTC (permalink / raw)
  To: mailing list for ConTeXt users

I Sietse, I tried the procedure you described without success. I'm using 
ConTeXt 2011 (I know, it's not the latest and etc, but I got to work with this 
version because compatibility with my work and I have some troubles with 
projects). I pasted the code you wrote at the end of core-con.lua and ran 
'context --make cont-en'. But I got the following:

=== Begining of the output ===

<+ /usr/share/texmf-dist/tex/context/base/core-con.lua>
! LuaTeX error /usr/share/texmf-dist/tex/context/base/core-con.lua:924: 
attempt to index global 'verbose' (a nil value)
stack traceback:
        /usr/share/texmf-dist/tex/context/base/core-con.lua:924: in main chunk
        /usr/share/texmf-dist/tex/context/base/luat-cod.lua:42: in function 
'registercode'
        <main ctx instance>:1: in main chunk.

system          > tex > error on line 16 in file /usr/share/texmf-
dist/tex/context/base/context.mkiv: LuaTeX error  ...

 6     %D         author=Hans Hagen,
 7     %D           date=\currentdate,
 8     %D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
 9     %C
10     %C This module is part of the \CONTEXT\ macro||package and is
11     %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12     %C details.
13     
14     \catcode`\{=1 \catcode`\}=2 \catcode`\#=6
15     
16 >>  %D From the next string (which is set by the script that assembles the
17     %D distribution) later on we will calculate a number that can be used
18     %D by use modules to identify the feature level. Starting with version
19     %D 2004.8.30 the low level interface is english. Watch out and adapt
20     %D your styles an modules.
21     
22     \edef\contextformat {\jobname}
23     \edef\contextversion{2011.05.18 18:04}
24     
25     %D For those who want to use this:
26     


\registerctxluafile ...ua.registercode("#1","#2")}
                                                  
l.16 \registerctxluafile{core-con}{1.001}
                                         
?

=== End of the output ===

Any clue about this? Thanks!

PD.: Here is the correct translation of the 'words' array (and as a gift for 
your effort on this, a translation for 'days' and 'months' arrays):

local words = {
        [0] = "cero",
        [1] = "uno",
        [2] = "dos",
        [3] = "tres",
        [4] = "cuatro",
        [5] = "cinco",
        [6] = "seis",
        [7] = "siete",
        [8] = "ocho",
        [9] = "nueve",
       [10] = "diez",
       [11] = "once",
       [12] = "doce",
       [13] = "trece",
       [14] = "catorce",
       [15] = "quince",
       [16] = "sixteen",
       [17] = "seventeen",
       [18] = "eighteen",
       [19] = "nineteen",
       [20] = "veinte",
       [30] = "treinta",
       [40] = "cuarenta",
       [50] = "cincuenta",
       [60] = "sesenta",
       [70] = "setenta",
       [80] = "ochenta",
       [90] = "noventa",
      [100] = "cien",
     [1000] = "mil",
   [1000^2] = "millón",
   [1000^3] = "mil millones",
   [1000^4] = "billón",
}

local days = { -- not variables.sunday
    "domingo",
    "lunes",
    "martes",
    "miércoles",
    "jueves",
    "viernes",
    "sábado",
}

local months = { -- not variables.januari
    "enero",
    "febrero",
    "marzo",
    "abril",
    "mayo",
    "junio",
    "julio",
    "agosto",
    "septiembre",
    "octubre",
    "noviembre",
    "diciembre",
}

On Mié 21 Nov 2012 12:25:03 pm Sietse Brouwer escribió:
> I worked up the code below,
> put it in core-con.lua,
> and recompiled ConTeXt with `context --make cont-en`.
> It gives the following output. Does it look correct?
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 21:05     ` Acidrums4
@ 2012-11-21 23:47       ` Sietse Brouwer
  2012-11-22  0:03         ` Acidrums4
  2012-11-22 10:04         ` Hans Hagen
  0 siblings, 2 replies; 14+ messages in thread
From: Sietse Brouwer @ 2012-11-21 23:47 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Hans Hagen

Hi Hans,

I think the verbose.spanish code you put in the latest beta broke
verbose.english: after verbose.english is defined, a second `local
verbose = { }` at the start of the spanish code accidentally
overwrites that table.

The code below works; as a bonus, it fixes the bug where 900 was
printed as 'nine hundred zero'. It can replace the entire swath of
verbose-related code, right up to the handlers. (The English part is
mostly untouched; only that bugfix, and a tweak to use the `local
words = words.english` idiom)

Known bugs:
* 100 before 'mil' should be 'cien mil'
* 100 on its own should be 'cien'
* 100 before 'millón' -- should that be 'cien millón', or 'ciento millón'?
* what are the rules for e.g. '1001' -- should that be 'mil y una'?
And should 1004 also be mil y cuatro?

Acidrums: if you put this in core-con.lua, replacing everything
between the commands.ordinal and converters.verbose function
definitions, then run context --make cont-en, does the output look
okay to you? Also: thank you for the day and month tables!
Cheers,
Sietse

-- verbose numbers

local verbose = { }

-- verbose english

local words = { }

words.english = {
        [0] = "zero",
        [1] = "one",
        [2] = "two",
        [3] = "three",
        [4] = "four",
        [5] = "five",
        [6] = "six",
        [7] = "seven",
        [8] = "eight",
        [9] = "nine",
       [10] = "ten",
       [11] = "eleven",
       [12] = "twelve",
       [13] = "thirteen",
       [14] = "fourteen",
       [15] = "fifteen",
       [16] = "sixteen",
       [17] = "seventeen",
       [18] = "eighteen",
       [19] = "nineteen",
       [20] = "twenty",
       [30] = "thirty",
       [40] = "forty",
       [50] = "fifty",
       [60] = "sixty",
       [70] = "seventy",
       [80] = "eighty",
       [90] = "ninety",
      [100] = "hundred",
     [1000] = "thousand",
   [1000^2] = "million",
   [1000^3] = "billion",
   [1000^4] = "trillion",
}

function verbose.english(n)
    local words = words.english
    local w = words[n]
    if w then
        return w
    end
    local t = { }
    local function compose_one(n)
        local w = words[n]
        if w then
            t[#t+1] = w
            return
        end
        local a, b = floor(n/100), n % 100
        if a == 10 then
            t[#t+1] = words[1]
            t[#t+1] = words[1000]
        elseif a > 0 then
            t[#t+1] = words[a]
            t[#t+1] = words[100]
            -- don't say 'nine hundred zero'
            if b == 0 then
                return
            end
        end
        if words[b] then
            t[#t+1] = words[b]
        else
            a, b = floor(b/10), n % 10
            t[#t+1] = words[a*10]
            t[#t+1] = words[b]
        end
    end
    local function compose_two(n,m)
        if n > (m-1) then
            local a, b = floor(n/m), n % m
            if a > 0 then
                compose_one(a)
            end
            t[#t+1] = words[m]
            n = b
        end
        return n
    end
    n = compose_two(n,1000^4)
    n = compose_two(n,1000^3)
    n = compose_two(n,1000^2)
    n = compose_two(n,1000^1)
    if n > 0 then
        compose_one(n)
    end
    return #t > 0 and concat(t," ") or tostring(n)
end

verbose.en = verbose.english

-- print(verbose.english(11111111))
-- print(verbose.english(2221101))
-- print(verbose.english(1111))
-- print(verbose.english(1218))
-- print(verbose.english(1234))
-- print(verbose.english(12345))
-- print(verbose.english(12345678900000))

-- verbose spanish (unchecked)

words.spanish = {
        [1] = "uno",
        [2] = "dos",
        [3] = "tres",
        [4] = "cuatro",
        [5] = "cinco",
        [6] = "seis",
        [7] = "siete",
        [8] = "ocho",
        [9] = "nueve",
       [10] = "diez",
       [11] = "once",
       [12] = "doce",
       [13] = "trece",
       [14] = "catorce",
       [15] = "quince",
       [16] = "dieciséis",
       [17] = "diecisiete",
       [18] = "dieciocho",
       [19] = "diecinueve",
       [20] = "veinte",
       [21] = "veintiuno",
       [22] = "veintidós",
       [23] = "veintitrés",
       [24] = "veinticuatro",
       [25] = "veinticinco",
       [26] = "veintiséis",
       [27] = "veintisiete",
       [28] = "veintiocho",
       [29] = "veintinueve",
       [30] = "treinta",
       [40] = "cuarenta",
       [50] = "cincuenta",
       [60] = "sesenta",
       [70] = "setenta",
       [80] = "ochenta",
       [90] = "noventa",
      [100] = "ciento",
      [200] = "doscientos",
      [300] = "trescientos",
      [400] = "cuatrocientos",
      [500] = "quinientos",
      [600] = "seiscientos",
      [700] = "setecientos",
      [800] = "ochocientos",
      [900] = "novecientos",
     [1000] = "mil",
   [1000^2] = "millón",
   [1000^3] = "mil millónes",
   [1000^4] = "billón",
}

function verbose.spanish(n)
    local words = words.spanish
    local w = words[n]
    if w then
        return w
    end
    local t = { }
    local function compose_one(n)
        local w = words[n]
        if w then
            t[#t+1] = w
            return
        end
        -- a, b = hundreds, remainder
        local a, b = floor(n/100), n % 100
        -- one thousand
        if a == 10 then
            t[#t+1] = words[1]
            t[#t+1] = words[1000]
        -- x hundred (n.b. this will not give thirteen hundred because
        -- compose_one(n) is only called after
        -- `n = compose(two(n, 1000^1))`.
        elseif a > 0 then
            t[#t+1] = words[a*100]
        end
        -- the remainder
        if words[b] then
            t[#t+1] = words[b]
        else
            -- a, b = tens, remainder
            a, b = floor(b/10), n % 10
            t[#t+1] = words[a*10]
            t[#t+1] = "y"
            t[#t+1] = words[b]
        end
    end
    -- compose_two handles x billion, ... x thousand. When 1000 or less is
    -- left, compose_one takes over.
    local function compose_two(n,m)
        if n > (m-1) then
            local a, b = floor(n/m), n % m
            if a > 0 then
                compose_one(a)
            end
            t[#t+1] = words[m]
            n = b
        end
        return n
    end
    n = compose_two(n,1000^4)
    n = compose_two(n,1000^3)
    n = compose_two(n,1000^2)
    n = compose_two(n,1000^1)
    if n > 0 then
        compose_one(n)
    end
    return #t > 0 and concat(t," ") or tostring(n)
end

verbose.es = verbose.spanish

-- print(verbose.spanish(31))
-- print(verbose.spanish(101))
-- print(verbose.spanish(199))

---- verbose handlers come next) ----
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 23:47       ` Sietse Brouwer
@ 2012-11-22  0:03         ` Acidrums4
  2012-11-22 10:55           ` Mojca Miklavec
  2012-11-22 10:04         ` Hans Hagen
  1 sibling, 1 reply; 14+ messages in thread
From: Acidrums4 @ 2012-11-22  0:03 UTC (permalink / raw)
  To: mailing list for ConTeXt users

> Acidrums: if you put this in core-con.lua, replacing everything
> between the commands.ordinal and converters.verbose function
> definitions, then run context --make cont-en, does the output look
> okay to you? Also: thank you for the day and month tables!
> Cheers,
> Sietse

Just pasted the code you gave after commands.ordinal (there's no 
converters.verbose in my core-con.lua) and the context --make cont-en command 
worked. But when I tried the minimal ConTeXt example you gave, it claims with 
the following:

=== Beginning of output ===

! LuaTeX error <main ctx instance>:1: attempt to call field 'verbose' (a nil 
value)
stack traceback:
        <main ctx instance>:1: in main chunk.

system          > tex > error on line 7 in file prueba2.tex: LuaTeX error  ...

 1     \starttext
 2     \def\vbes#1%
 3         {#1\crlf
 4          \ctxcommand{verbose(#1, "spanish")}}
 5     
 6         \obeylines
 7 >>      \vbes{11111111}
 8         \vbes{2221101}
 9         \vbes{1111}
10         \vbes{1218}
11         \vbes{1234}
12         \vbes{12345}
13         \vbes{12345678900000}
14     \stopcode


\ctxcommand ...\directlua \zerocount {commands.#1}
                                                  
l.7     \vbes{11111111}
                       
?

=== End of output ===

For the bugs you're talking about, I would say this:

* 100 before 'mil' should be 'cien mil' -> Yes, it should be like that.
* 100 on its own should be 'cien' -> Same thing here.
* 100 before 'millón' -- should that be 'cien millón', or 'ciento millón'? -> 
It should be 'cien millones'. 'Millones', plural for 'Millón'. Maybe it should 
be a variable for plurals for millions (the only plural used for numbers in 
spanish).
* what are the rules for e.g. '1001' -- should that be 'mil y una'? -> It 
should be 'mil uno' (just put the '1' word after the '1000' word).
And should 1004 also be mil y cuatro? -> Like before, it should be 'mil 
cuatro': the '4' word after the '1000' word.

Thank you, you're so gentle!
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-21 23:47       ` Sietse Brouwer
  2012-11-22  0:03         ` Acidrums4
@ 2012-11-22 10:04         ` Hans Hagen
  1 sibling, 0 replies; 14+ messages in thread
From: Hans Hagen @ 2012-11-22 10:04 UTC (permalink / raw)
  To: Sietse Brouwer; +Cc: mailing list for ConTeXt users

On 11/22/2012 12:47 AM, Sietse Brouwer wrote:
> Hi Hans,
>
> I think the verbose.spanish code you put in the latest beta broke
> verbose.english: after verbose.english is defined, a second `local
> verbose = { }` at the start of the spanish code accidentally
> overwrites that table.

sure, it was means as standalone example (I normally test that kind of 
code in a lua file that i process with mtxrun - just hit a key in scite 
to run it)

> The code below works; as a bonus, it fixes the bug where 900 was

so where is the dutch?

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-22  0:03         ` Acidrums4
@ 2012-11-22 10:55           ` Mojca Miklavec
  2012-11-22 12:11             ` Sietse Brouwer
  2012-11-23 20:50             ` Marcin Borkowski
  0 siblings, 2 replies; 14+ messages in thread
From: Mojca Miklavec @ 2012-11-22 10:55 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Thu, Nov 22, 2012 at 1:03 AM, Acidrums4 wrote:
>
> * 100 before 'millón' -- should that be 'cien millón', or 'ciento millón'? ->
> It should be 'cien millones'. 'Millones', plural for 'Millón'. Maybe it should
> be a variable for plurals for millions (the only plural used for numbers in
> spanish).

Singular and plural don't always suffice.

1M: en milijon
2M: dva milijona
3/4M: [tri|štiri] milijone
5M: pet milijonov

(And then of course, if you want more fun, "en milijon", "enega
milijona", "enemu milijonu", "en milijon", "enem milijonu", "enim
milijonom", "dva milijona", "dveh milijonov", "dvema milijonoma", "dva
milijona", "dveh milijonih", "dvema milijonoma", ...)

I'm not suggesting to implement the forms (declinations) from the last
paragraph, but if you want to introduce separate singular and plural
forms, you might want to support more than just two forms from the
start:

http://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/Plural-forms.html

Mojca
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-22 10:55           ` Mojca Miklavec
@ 2012-11-22 12:11             ` Sietse Brouwer
  2012-11-23 20:50             ` Marcin Borkowski
  1 sibling, 0 replies; 14+ messages in thread
From: Sietse Brouwer @ 2012-11-22 12:11 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Mojca wrote:
> Singular and plural don't always suffice.

Yes ... I was studiously avoiding bringing that up. :-) I suppose one
would end up with separate languages like es-s-m, es-s-f, es-pl-m,
es-pl-f for the converter to invoke. Then es would be a synonym of the
most common form (singular masculin, probably).

Hans wrote:
> so where is the dutch?

I might ask the same of you. :-P Anyway, I've written one up. I'll
post it later, after I've had a chance to adapt it to the structure
you lay out in the new beta.

Acidrums wrote:
> (there's no converters.verbose in my core-con.lua)
What version are you using? converters.verbose was put in on november
12. Are you using the latest beta, or the TeX Live 2012 stable
version?

As for the error you got:
Try the new beta Hans just uploaded, Spanish conversions are working
in that one.
E.g. \ctxcommand{verbose(123, "es")}.
The bugs we discusses in a previous mail are also still in there ---
I'll try to get around to them.

Cheers,
Sietse
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-22 10:55           ` Mojca Miklavec
  2012-11-22 12:11             ` Sietse Brouwer
@ 2012-11-23 20:50             ` Marcin Borkowski
  2012-11-23 22:46               ` Hans Hagen
  1 sibling, 1 reply; 14+ messages in thread
From: Marcin Borkowski @ 2012-11-23 20:50 UTC (permalink / raw)
  To: ntg-context

Dnia 2012-11-22, o godz. 11:55:17
Mojca Miklavec <mojca.miklavec.lists@gmail.com> napisał(a):

> On Thu, Nov 22, 2012 at 1:03 AM, Acidrums4 wrote:
> >
> > * 100 before 'millón' -- should that be 'cien millón', or 'ciento
> > millón'? -> It should be 'cien millones'. 'Millones', plural for
> > 'Millón'. Maybe it should be a variable for plurals for millions
> > (the only plural used for numbers in spanish).
> 
> Singular and plural don't always suffice.
> 
> 1M: en milijon
> 2M: dva milijona
> 3/4M: [tri|štiri] milijone
> 5M: pet milijonov

Similarly for Polish (which is no surprise), so a more general mechanism
might be a good idea.

1M: (jeden) milion
2/3/4M: dwa/trzy/cztery miliony
5/6/7/8/9M: pięć/sześć/siedem/osiem/dziewięć milionów

32M: trzydzieści dwa miliony
57M: pięćdziesiąt siedem milionów

And similarly for thousands.

> Mojca

Best,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Adam Mickiewicz University
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-23 20:50             ` Marcin Borkowski
@ 2012-11-23 22:46               ` Hans Hagen
  2012-11-23 23:09                 ` Alan BRASLAU
  0 siblings, 1 reply; 14+ messages in thread
From: Hans Hagen @ 2012-11-23 22:46 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 11/23/2012 9:50 PM, Marcin Borkowski wrote:
> Dnia 2012-11-22, o godz. 11:55:17
> Mojca Miklavec <mojca.miklavec.lists@gmail.com> napisał(a):
>
>> On Thu, Nov 22, 2012 at 1:03 AM, Acidrums4 wrote:
>>>
>>> * 100 before 'millón' -- should that be 'cien millón', or 'ciento
>>> millón'? -> It should be 'cien millones'. 'Millones', plural for
>>> 'Millón'. Maybe it should be a variable for plurals for millions
>>> (the only plural used for numbers in spanish).
>>
>> Singular and plural don't always suffice.
>>
>> 1M: en milijon
>> 2M: dva milijona
>> 3/4M: [tri|štiri] milijone
>> 5M: pet milijonov
>
> Similarly for Polish (which is no surprise), so a more general mechanism
> might be a good idea.
>
> 1M: (jeden) milion
> 2/3/4M: dwa/trzy/cztery miliony
> 5/6/7/8/9M: pięć/sześć/siedem/osiem/dziewięć milionów
>
> 32M: trzydzieści dwa miliony
> 57M: pięćdziesiąt siedem milionów
>
> And similarly for thousands.

first we need working prototypes for several languages, then I can wrap 
it into some general mechanism. I think all languages are somewhat 
different so 'general' is 'sort of general'.

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ConTeXt: Page numbering in words for spanish
  2012-11-23 22:46               ` Hans Hagen
@ 2012-11-23 23:09                 ` Alan BRASLAU
  0 siblings, 0 replies; 14+ messages in thread
From: Alan BRASLAU @ 2012-11-23 23:09 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: pragma

On Fri, 23 Nov 2012 23:46:44 +0100
Hans Hagen <pragma@wxs.nl> wrote:

> first we need working prototypes for several languages, then I can
> wrap it into some general mechanism. I think all languages are
> somewhat different so 'general' is 'sort of general'.

For example, in French, 1000 can be une brique, une patate or un bâton,
but I guess that this is not quite the same thing as the subject
of this thread... :)

___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-11-23 23:09 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-21  9:08 ConTeXt: Page numbering in words for spanish Acidrums4
2012-11-21 10:26 ` Hans Hagen
2012-11-21 11:25   ` Sietse Brouwer
2012-11-21 11:52     ` Hans Hagen
2012-11-21 12:28       ` Sietse Brouwer
2012-11-21 21:05     ` Acidrums4
2012-11-21 23:47       ` Sietse Brouwer
2012-11-22  0:03         ` Acidrums4
2012-11-22 10:55           ` Mojca Miklavec
2012-11-22 12:11             ` Sietse Brouwer
2012-11-23 20:50             ` Marcin Borkowski
2012-11-23 22:46               ` Hans Hagen
2012-11-23 23:09                 ` Alan BRASLAU
2012-11-22 10:04         ` Hans Hagen

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