^0 zero 1$ u 1 un 2 dos 3 tres 4 quatre 5 cinc 6 sis 7 set 8 huit # [:ca-valencia:] [:ca-ES-valencia:] 8 vuit 9 nou #10-19 10 deu 11 onze 12 dotze 13 tretze 14 catorze 15 quinze 16 setze 17 dèsset # [:ca-valencia:] [:ca-ES-valencia:] 17 desset # [:ca-balear:] [:ca-ES-balear:] 17 disset 18 devuit # [:ca-balear:] [:ca-ES-balear:] 18 díhuit # [:ca-valencia:] [:ca-ES-valencia:] 19 denou # [:ca-balear:] [:ca-ES-balear:] 19 dènou # [:ca-valencia:] [:ca-ES-valencia:] 1(\d) di$1 # 20-29 20 vint 2(\d) vint-i-$1 # 30, 40, 50, 60, 70, 80, 90 30 trenta 40 quaranta 50 cinquanta 60 seixanta 70 setanta 80 huitanta # [:ca-valencia:] [:ca-ES-valencia:] 80 vuitanta 90 noranta (\d)(\d) $(\10)-$2 #100-199 100 cent 1(\d\d) cent $1 #200-999 (\d)00 $1-cents (\d)(\d\d) $1-cents $2 #1000-1999 1000 mil 1(\d{3}) mil $1 #2000-999999 (\d{1,3})000 $1 mil (\d{1,3})(\d{3}) $1 mil $2 # our limit is number <10^606 (\d{606,}) "" # x-lions # 10000000=10^6 -> un milió 1((0{6})+) un $(pre:$(count:\1))lió 1((\d{6})+) un $(pre:$(count:\1))lió $1 # 2000000=2·10^6 -> dos milions (\d{1,6})((0{6})+) $1 $(pre:$(count:\2))lions (\d{1,6})((\d{6})+) $1 $(pre:$(count:\2))lions $2 # count number of 10^6, usefull for x-lions, and x-liards prefixes. count:.{0,5}? 0 count:.{6}.{0,5} 1 count:(.{12}).{0,5} 2 count:(.{18}).{0,5} 3 count:(.{24}).{0,5} 4 count:(.{30}).{0,5} 5 count:(.{36}).{0,5} 6 count:(.{42}).{0,5} 7 count:(.{48}).{0,5} 8 count:(.{54}).{0,5} 9 count:(.{60})(.{0,59}) 1|$(count:\2) count:(.{120})(.{0,59}) 2|$(count:\2) count:(.{180})(.{0,59}) 3|$(count:\2) count:(.{240})(.{0,59}) 4|$(count:\2) count:(.{300})(.{0,59}) 5|$(count:\2) count:(.{360})(.{0,59}) 6|$(count:\2) count:(.{420})(.{0,59}) 7|$(count:\2) count:(.{480})(.{0,59}) 8|$(count:\2) count:(.{540})(.{0,59}) 9|$(count:\2) count:(.{600})(.{0,5}) 10|$(count:\2) # our limit is 10^606-1 # prefixes needed for x-lions and x-liards, up to 10^606-1 pre:1 mi pre:2 bi pre:3 tri pre:4 quadri pre:5 quinti pre:6 sexti pre:7 septi pre:8 octi pre:9 noni pre:10 deci pre:1(\d) $(pre2:\1)|deci pre:(\d)0 $(pre3:\1) pre:(\d)(\d) $(pre2:\2)|$(pre3:\1) pre:100 centi pre2:1 uno pre2:2 duo pre2:3 tre pre2:4 quattour pre2:5 quin pre2:6 sex pre2:7 septen pre2:8 octo pre2:9 novem pre3:1 deci pre3:2 viginti pre3:3 triginti pre3:4 quadraginti pre3:5 quinquaginti pre3:6 sexaginti pre3:7 septuaginti pre3:8 octoginti pre3:9 nonoginti pre3:10 centi # negative number [--](\d+) menys |$1 # decimals "([^,]*\d)[.]((\d{3})+)([,][^,.]*)?" $(\1\2\4) "([--]?\d+)([,]0*)?" $1 "([--]?\d+)[,](\d*)" $(\1·\2) "([--]?\d+·0*)([^0]00?)0*" $1| |$2 "([--]?\d+·0*)([^0])" $1| |$2 "([--]?\d+·0*)([^0]\d)" $1| |$2 "([--]?\d+·0*)([^0]\d\d)" $1| |$2 "([--]?\d+·0*)([^0]\d\d)0*" $1| |$2 "([--]?\d+·0*)(([^0]|[^0]\d*[^0]))0*" $1| $(read:\2) "([--]?\d+)·(\d*)(\d)" $(\1·\2)| |$3 "([--]?\d+)·" $1| coma # used for decimal part #read:(\d*[^0])0*$ $(read:\1) read:(\d*[1-9])(00+)([1-9]\d*) $(read:\1)| |$(read:\2) |$(read:\3) read:(\d$) $1 read:0(\d+) $(read:0)| |$(read:\1) read:([1-9]\d) $1 read:([1-9]\d\d) $1 read:(\d\d\d) $1 read:(\d\d)((\d\d)+) $(read:\1)| |$(read:\2) read:(\d\d)((\d\d)*)(\d\d\d) $(read:\1)| |$(read:\2)| |$(read:\4) # convert masculine forms to feminine forms # it can be run after: standard number conversion; and after ordinal, partitive functions. ## runned with feminine function. f:(.*iliard)(.*) \1$(f:\2) # convert only <1,000,000,000 f:(.*ili)(.*) \1$(f:\2) # convert only <100,0000 f:(.*d)o(s[^èé]*) $(f:\1ue\2) # 2 -> dos -> dues f:(.*cent)(s.*) $(f:\1e\2) # cents -> centes f:(((.*)[^a-zèé]|))u$ \1una # vint-i-u -> vint-i-una ## runned after ord function. f:(.*[^0-9])n$ \1na # segon -> segona f:(.*[^0-9]r)$ \1a # tercer -> tercera f:(.*[^0-9]r)t$ \1ta # quart -> quarta f:(.*[^0-9])è$ \1ena # sisè -> sisena f:(.*[^0-9])é$ \1ena # sisé -> sisena ## runned after ord2 function. f:(.*[0-9])[nrtè]$ \1a # 2n -> 2a ## runnded after part function. f:(.*ter)ç$ \1cera # terç -> tercera f:(.*è[sc]i)m$ \1ma # milionèsim -> milionèsima f:(.*[^0-9]i)g$ \1tja # mig -> mitja no-centes:(.*)centes(.*) \1cents\2 no-centes:(.*) \1 # convert ordinal numbers (1st, 2nd, 3rd,... nth) to partitive (1, 1/2, 1/3, .... 1/n) p:(.*)primer$ \1unitat p:(.*)segon$ \1mig p:(.*)tercer$ \1terç p:(.*quart)$ \1 p:(.*)des[èé]$ \1dècim p:((.*)cent)[èé]$ \1èsim p:((.*)mil)[èé]$ \1·lèsim p:((.*)ilion)[èé]$ \1èsim p:((.*)iliard)[èé]$ \1èsim # fallback, ignore 1-letter not-defined fuctions .:(.*) \1 # runned after ordinal and partitive fuctions pl:(.*[^\d][nrtnec])$ \1s pl:(.*[^\d])ig$ \1igs # mig -> mitjos pl:(.*[^\d])ja$ \1ges pl:(.*[^\d])a$ \1es pl:(.*[^\d])[èé]$ \1ens # after ord2: 1r->1rs, 2n->2ns, 5è->5ns, ... pl:(\d+[rnrt])$ \1s # 1r -> 1rs, 2n -> 2ns, 4t -> 4ts pl:(\d+)[èé]$ \1ns # 5è -> 5ns pl:(\d+)a$ \1es # 2a -> 2es # after partitive pl:([^[0-9]*[sç])$ \1os # dos -> dosos, terç > terços pl:([^[0-9]*è[sc]im)$ \1s # dècim -> dècims #fallback pl:(.*) \1 # unit/subunit singular/plural # million or greater part of the number name separated by "ili" pattern # before masculine to feminine conversion us(.).:([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*) $(\1:\7)| \2 up(.).:([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*) $(\1:\7)| \3 ud(.).:([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*) $(\1:\7)| \4 ss.(.):([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*) $(\1:\7)| \5 sp.(.):([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*) $(\1:\7)| \6 # "mm" means masculine unit and masculine subunit # Usually used by Catalan users CHF:(.+),(.+) $(\2mm: franc suís, francs suïssos, de francs suïssos, cèntim, cèntims, \1) EUR:(.+),(.+) $(\2mm: euro, euros, d'euros, cèntim, cèntims, \1) GBP:(.+),(.+) $(\2fm: lliura esterlina, lliures esterlines, de lliures esterlines, penic, penics, \1) JPY:(.+),(.+) $(\2mm: ien, iens, de iens, sen, sen, \1) USD:(.+),(.+) $(\2mm: dòlar dels EUA, dòlars dels EUA, de dòlars dels EUA, centau, centaus, \1) # ACTIVE ISO 4217 CODES--A-- AED:(.+),(.+) $(\2mm: dírham dels Emirats Àrabs Units, dírhams dels Emirats Àrabs Units, de dírhams dels Emirats Àrabs Units, fils, fulús, \1) AFN:(.+),(.+) $(\2mm: afgani, afganis, d'afganis, puli, puli, \1) ALL:(.+),(.+) $(\2mm: lek, lekë, de lekë, qindarka, qindarka, \1) AMD:(.+),(.+) $(\2mm: dram, drams, de drams, luma, luma, \1) ANG:(.+),(.+) $(\2mm: florí de les Antilles Neerlandeses, florins de les Antilles Neerlandeses, de florins de les Antilles Neerlandeses, cèntim, cèntims, \1) AOA:(.+),(.+) $(\2fm: kwanza, kwanzes, de kwanzes, cèntim cèntims, \1) ARS:(.+),(.+) $(\2mm: peso argentí, pesos argentins, de pesos argentins, centau, centaus, \1) AUD(.+),(.+) $(\2mm: dòlar australià, dòlars australians, de dòlars australians, centau, centaus, \1) AWG:(.+),(.+) $(\2mm: florí d'Aruba, florins d'Aruba, de florins d'Aruba, cèntim, cèntims, \1) AZN:(.+),(.+) $(\2mm: manat azerbaidjanès, manats azerbaidjanesos, de manats azerbaidjanesos, qəpik, qəpik, \1) # ACTIVE ISO 4217 CODES --X-- #XAF Franc CFA emès pel BEAC (Banc dels Estats de l'Àfrica Central) XAG:(.+),(.+) $(\2fm: unça de plata, unces de plata, d'unces de plata, cèntim, cèntims, \1) XAU:(.+),(.+) $(\2fm: unça d'or, unces d'or, d'unces d'or, cèntim, cèntims, \1) #XBA Unitat compensatòria europea (EURCO) (unitat per al mercat d'obligacions) #XBB Unitat monetària europea (EMU-6) (unitat per al mercat d'obligacions) #XBC Unitat de compte europea 9 (EUA-9) (unitat per al mercat d'obligacions) #XBD Unitat de compte europea 17 (EUA-17) (unitat per al mercat d'obligacions) #XCD Dòlar del Carib Oriental #XDR Drets especials de gir (del Fons Monetari Internacional) #XFU Franc UIC (divisa especial) #XOF Franc CFA emès pel BCEAO (Banc Central dels Estats de l'Àfrica Occidental) XPD:(.+),(.+) $(\2fm: unça de pal·ladi, unces de pal·ladi, d'unces de pal·ladi, cèntim, cèntims, \1) #XPF Franc CFP (per als territoris francesos del Pacífic) XPT:(.+),(.+) $(\2fm: unça de platí, unces de platí, d'unces de platí, cèntim, cèntims, \1) #XTS Codi reservat per a proves #XXX Sense moneda, sense transacció monetària # OBSOLETE ISO 4217 CODES --Replaced by EUR-- ADF:(.+),(.+) $(\2mm: franc andorrà, francs andorrans, de francs andorrans, cèntim, cèntims, \1) ADP:(.+),(.+) $(\2fm: pesseta andorrana, pessetes andorranes, de pessetes andorranes, cèntim, cèntims, \1) ATS:(.+),(.+) $(\2mm: xíling austríac, xílings austríacs, de xílings austríacs, groschen, groschen, \1) BEF:(.+),(.+) $(\2mm: franc belga, francs belgues, de francs belgues, cèntim, cèntims, \1) CYP:(.+),(.+) $(\2mm: lliura xipriota, lliures xipriotes, de lliures xipriotes, cèntim, cèntims, \1) DEM:(.+),(.+) $(\2mm: marc alemany, marcs alemanys, de marcs alemanys, penic, penics, \1) ESP:(.+),(.+) $(\2fm: pesseta, pessetes, de pessetes, cèntim, cèntims, \1) FIM:(.+),(.+) $(\2mm: marc finlandès, marcs finlandesos, de marcs finlandesos, penic, penics, \1) FRF:(.+),(.+) $(\2mm: franc francès, francs francesos, de francs francesos, cèntim, cèntims, \1) GRD:(.+),(.+) $(\2fm: dracma grega, dracmes gregues, leptó, leptà, \1) IEP:(.+),(.+) $(\2fm: lliura irlandesa, lliures irlandeses, de lliures irlandeses, penic, penics, \1) ITL:(.+),(.+) $(\2fm: lira italiana, lires italianes, de lires italianes, cèntim, cèntims, \1) LUF:(.+),(.+) $(\2mm: franc luxemburguès, francs luxemburguesos, de francs luxemburguesos, cèntim, cèntims, \1) MCF:(.+),(.+) $(\2mm: franc monegasc, francs monegascs, de francs monegascs, cèntim, cèntims, \1) MTL:(.+),(.+) $(\2fm: lira maltesa, lires malteses, de lires malteses, cèntim, cèntims, \1) NLG:(.+),(.+) $(\2mm: florí neerlandès, florins neerlandesos, de florins neerlandesos, cèntim, cèntims, \1) PTE:(.+),(.+) $(\2mm: escut portuguès, escuts portuguesos, de escuts portuguesos, centau, centaus, \1) SIT:(.+),(.+) $(\2mm: tolar eslovè, tolars eslovens, de tolars eslovens, stotin, stotinov, \1) SKK:(.+),(.+) $(\2fm: corona eslovaca, corones eslovaques, de corones eslovaques, halier, halierov, \1) SML:(.+),(.+) $(\2fm: lira de San Marino, lires de San Marino, de lires de San Marino, cèntim, cèntims, \1) VAL:(.+),(.+) $(\2fm: lira vaticana, lires vaticanes, de lires vaticanes, cèntim, cèntims, \1) XEU:(.+),(.+) $(\2mm: ecu, ecus, d'ecus, cèntim, cèntims, \1) #crypto-currencies XMR:(.+),(.+) $(\2mm: monero, moneros, de moneros, piconero, piconeros, \1) #TODO: 1,000,000,000,000 piconeros = 1 monero XBT:(.+),(.+) $(\2mm: bitcoin, bitcoins, de bitcoins, satoshi, satoshis, \1) # TODO: 10,000,000 satoshis = 1,000 millibitcoin = 1 bitcoin # unknow currency [A-Z]{3}:.* "" "([A-Z]{3}) ([-−]?1)([.,]00?)?"$(\1:|$2,us) "([A-Z]{3}) ([-−]?\d+0{6,})([.,]00?)?"$(\1:|$2,ud) "([A-Z]{3}) ([-−]?\d+)([.,]00?)?"$(\1:|$2,up) "(([A-Z]{3}) [-−]?\d+)[.,](01)" $1 amb$(\2:un,ss) "(([A-Z]{3}) [-−]?\d+)[.,](\d)" $1 amb$(\2:|$(\30),sp) "(([A-Z]{3}) [-−]?\d+)[.,](\d\d)" $1 amb$(\2:|$3,sp) # detects number followed by currency code "([-−]?\d+)([.,]\d+)? ([A-Z]{3})" $(\3 \1\2) # currency symbols "€[ ]?([^ ]*)" $(EUR \1) "£[ ]?([^ ]*)" $(GBP \1) "\$[ ]?([^ ]*)" $(USD \1) "¥[ ]?([^ ]*)" $(JPY \1) "₩[ ]?([^ ]*)" $(KRW \1) "₽[ ]?([^ ]*)" $(RUB \1) "ɱ[ ]?([^ ]*)" $(XMR \1) "₿[ ]?([^ ]*)" $(XBT \1) "([^ ]+)[ ]?€$" $(EUR \1) "([^ ]+)[ ]?£$" $(GBP \1) "([^ ]+)[ ]?\$$" $(USD \1) "([^ ]+)[ ]?¥$" $(JPY \1) "([^ ]+)[ ]?₩$" $(KRW \1) "([^ ]+)[ ]?₽$" $(RUB \1) "([^ ]+)[ ]?ɱ$" $(XMR \1) "([^ ]+)[ ]?₿$" $(XBT \1) == feminine == 1 una (.*) $(f:|$1) == masculine == 1 un (.*) $1 == ordinal(-masculine)? == ([-−]\d+) "" \d+[,.] "" 0 zeroé # [:ca-valencia:] [:ca-ES-valencia:] 0 zeroè 1 primer 2 segon 3 tercer 4 quart (\d+)$ $(ordinal $2) "un ([^ ]*(ilió|iliard))$" $(ordinal \2) (.*li)ó$ \2oné # [:ca-valencia:] [:ca-ES-valencia:] (.*li)ó$ \2onè (.*(cent|mil|ion|iliard))s?$ \2é # [:ca-valencia:] [:ca-ES-valencia:] (.*(cent|mil|ion|iliard))s?$ \2è "(.* )u$" \2uné # [:ca-valencia:] [:ca-ES-valencia:] "(.* )u$" \2unè (.*-)u$ \2uné # [:ca-valencia:] [:ca-ES-valencia:] (.*-)u$ \2unè "u" primer "un" primer "dos" segon "tres" terç "quatre" quart (.*)cinc$ \2cinqué # [:ca-valencia:] [:ca-ES-valencia:] (.*)cinc$ \2cinquè (.*)dènou$ \2denové # [:ca-valencia:] [:ca-ES-valencia:] (.*)nou$ \2nové # [:ca-valencia:] [:ca-ES-valencia:] (.*)nou$ \2novè (.*)deu$ \2desé # [:ca-valencia:] [:ca-ES-valencia:] (.*)deu$ \2desè (.*)dèsset$ \2desseté # [:ca-valencia:] [:ca-ES-valencia:] (.*)díhuit$ \2dihuité # [:ca-valencia:] [:ca-ES-valencia:] (.*)[ae]$ \2é # [:ca-valencia:] [:ca-ES-valencia:] (.*)[ae]$ \2è (.*\D)$ \2é # [:ca-valencia:] [:ca-ES-valencia:] (.*\D)$ \2è == ordinal-feminine == ([-−]\d+) "" \d+[,.] "" (\d+)$ $(no-centes:$(f:$(ordinal \1))) == ordinal-masculine-plural == ([-−]?\d+) $(ordinal-masculine-plural $(ordinal \1)) primer primers segon segons (.*)è \1ens (.*)er \1ers == ordinal-feminine-plural == ([-−]?\d+) $(ordinal-feminine-plural $(ordinal-feminine \1)) (.*)a \1es == ordinal-number(-masculine)? == #(\d+) $(o:\2) 1$ 1r 2$ 2n 3$ 3r 4$ 4t (\d+)$ \2é # [:ca-valencia:] [:ca-ES-valencia:] (\d+)$ \2è == ordinal-number-feminine == (\d+)$ \1a == partitive(-masculine)? == ([--]?\d+) $(p:$(ordinal \2)) == partitive-feminine == ([--]?\d+) $(no-centes:$(f:$(p:$(ordinal \1)))) == partitive(-masculine)?-plural == ([--]?\d+) $(pl:$(p:$(ordinal $2))) == partitive-feminine-plural == ([--]?\d+) $(no-centes:$(pl:$(f:$(p:$(ordinal $1))))) == fraction(-masculine)? == ([--]?1)(/1)? $2 ([--]?1)/2 mig ([--]?1)/([3-9]\d*) $(masculine \2)| $(partitive \3) ([--]?\d+)(/1)? $2 ([--]?\d+)/([1-9]\d*) $2| $(partitive-plural \3) == fraction-feminine == ([--]?1)(/1)? $(f:$1)| unitat ([--]?1)/([1-9]\d*) $(f:$1)| $(partitive-feminine \2)| part ([--]?\d+)(/1)? $(f:$1)| unitats ([--]?\d+)/([1-9]\d*) $(f:$1)| $(partitive-feminine-plural \2)| parts == collective == 2 parell, parella o duo 3 tern, terna, tercet, trio, tríada o treset 4 qüern, tètrada, quartet, quarteta o quàdruple 5 quintern, quintet, cinquet o quíntuple 6 sextet, siset o sèxtuple 7 septet, setet o sèptuple 8 octet o òctuple 9 nònuple 10 dècada o dècuple 12 dotzena 100 centenar 144 grossa 1000 miler 10000 miríada == years == 2 bienni 3 trienni 4 quadrienni 5 quinquenni o lustre 6 sesenni 7 septenni 10 dècada o decenni 12 duodecenni 15 quindecenni 20 vintenni o vicenni 30 trentenni o tricenni 40 quarantenni 50 cinquantenni 60 seixantenni 70 setantenni 80 huitantenni [:ca-valencia:] [:ca-ES-valencia:] 80 vuitantenni 90 norantenni 100 segle o centenni 1000 mil·lenni == multiplicative == 2 doble o duple 3 triple 4 quàdruple 5 quíntuple 6 sèxtuple 7 sèptuple 8 òctuple 9 nònuple 10 dècuple 12 duodècuple 100 cèntuple 1/10 subdècuple 1/2 súbduple == help == "" $(1)|, $(2), $(3)\n$(help feminine)$(help masculine)$(help ordinal-number-masculine)$(help ordinal-number-feminine)$(help ordinal-feminine)$(help ordinal-masculine) (feminine|masculine|ordinal(-number)?(-feminine|-masculine)?) \1: $(\1 1), $(\1 2), $(\1 3)\n