Convert many RGL modules from Latin-1 to UTF-8 to speed up compilation

Also add flags coding=utf8 to silence warnings.
This commit is contained in:
hallgren
2014-08-19 19:42:05 +00:00
parent efcec8e7e9
commit be301d8a5e
135 changed files with 2828 additions and 2810 deletions

View File

@@ -4,6 +4,7 @@ concrete ConstructionSpa of Construction = CatSpa **
open SyntaxSpa, SymbolicSpa, ParadigmsSpa,
(L = LexiconSpa), (E = ExtraSpa), (I = IrregSpa), (R = ResSpa), (C = CommonRomance),
Prelude in {
flags coding=utf8 ;
lin

View File

@@ -1,9 +1,9 @@
--# -path=.:../romance:../abstract:../common:prelude
--# -coding=latin1
instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelude in {
flags optimize=noexpand ;
coding=utf8 ;
param
Prepos = P_de | P_a ;
@@ -135,9 +135,9 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
_ => prepCase c ++ "cuyo"
} ;
pronSuch : AAgr => Str = aagrForms "tál" "tál" "tales" "tales" ;
pronSuch : AAgr => Str = aagrForms "tál" "tál" "tales" "tales" ;
quelPron : AAgr => Str = aagrForms "cuál" "cuál" "cuales" "cuales" ;
quelPron : AAgr => Str = aagrForms "cuál" "cuál" "cuales" "cuales" ;
partQIndir = [] ; ---- ?
@@ -147,7 +147,7 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
case p of {
P3 => case c of {
Acc | CPrep P_a => "se" ;
_ => "sí"
_ => "sí"
} ;
_ => pro
} ;
@@ -165,12 +165,12 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
} ;
in
\g,n,p -> case <<g,n,p> : Gender * Number * Person> of {
<_,Sg,P1> => cases "me" "mí" ;
<_,Sg,P2> => cases "te" "tí" ;
<_,Sg,P1> => cases "me" "mí" ;
<_,Sg,P2> => cases "te" "tí" ;
<_,Pl,P1> => cases "nos" "nosotras" ; --- nosotros
<_,Pl,P2> => cases "vos" "vosotras" ; --- vosotros
<Fem,Sg,P3> => cases3 "la" "le" "ella" ;
<_, Sg,P3> => cases3 "lo" "le" "èl" ;
<_, Sg,P3> => cases3 "lo" "le" "èl" ;
<Fem,Pl,P3> => cases3 "las" "les" "ellas" ;
<_, Pl,P3> => cases3 "los" "les" "ellos"
} ;

View File

@@ -11,6 +11,7 @@ incomplete concrete DocumentationSpaFunctor of Documentation = CatSpa ** open
Prelude,
HTML
in {
flags coding=utf8 ;
lincat

View File

@@ -1,11 +1,11 @@
--# -coding=latin1
concrete ExtraSpa of ExtraSpaAbs = ExtraRomanceSpa **
open CommonRomance, PhonoSpa, MorphoSpa, ParadigmsSpa, ParamX, ResSpa, BeschSpa,
Prelude in {
flags coding=utf8 ;
lin
i8fem_Pron = mkPronoun
"yo" "me" "me" "mí"
"yo" "me" "me" "mí"
"mi" "mi" "mis" "mis"
Fem Sg P1 ;
these8fem_NP = makeNP ["estas"] Fem Pl ;
@@ -20,11 +20,11 @@ concrete ExtraSpa of ExtraSpaAbs = ExtraRomanceSpa **
"nosotras" "nos" "nos" "nosotras"
"nuestro" "nuestra" "nuestros" "nuestras"
Fem Pl P1 ;
whoPl8fem_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Fem Pl} ;
whoSg8fem_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Fem Sg} ;
whoPl8fem_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Fem Pl} ;
whoSg8fem_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Fem Sg} ;
youSg8fem_Pron = mkPronoun
"tú" "te" "te" "ti"
"tú" "te" "te" "ti"
"tu" "tu" "tus" "tus"
Fem Sg P2 ;
youPl8fem_Pron = mkPronoun

View File

@@ -1,5 +1,5 @@
--# -coding=latin1
abstract IrregSpaAbs = Cat ** {
flags coding=utf8 ;
fun abarse_V : V ;
fun abastecer_V : V ;
fun abeldar_V : V ;
@@ -15,7 +15,7 @@ abstract IrregSpaAbs = Cat ** {
fun absterger_V : V ;
fun absterger2_V : V ;
fun abstraer_V : V ;
fun abuńolar_V : V ;
fun abuñolar_V : V ;
fun acaecer2_V : V ;
fun acaecer_V : V ;
fun acertar_V : V ;
@@ -94,7 +94,7 @@ abstract IrregSpaAbs = Cat ** {
fun arbolecer_V : V ;
fun arborecer_V : V ;
fun arcaizar_V : V ;
fun argüir_V : V ;
fun argüir_V : V ;
fun aridecer_V : V ;
fun arrecir_V : V ;
fun arrendar_V : V ;
@@ -112,8 +112,8 @@ abstract IrregSpaAbs = Cat ** {
fun aspaventar_V : V ;
fun asperger_V : V ;
fun asperger2_V : V ;
fun astreńir_V : V ;
fun astrińir_V : V ;
fun astreñir_V : V ;
fun astriñir_V : V ;
fun astringir_V : V ;
fun atardecer_V : V ;
fun atender_V : V ;
@@ -135,7 +135,7 @@ abstract IrregSpaAbs = Cat ** {
fun bienquerer_V : V ;
fun blandir_V : V ;
fun blanquecer_V : V ;
fun bruńir_V : V ;
fun bruñir_V : V ;
fun bullir_V : V ;
fun caber_V : V ;
fun caer_V : V ;
@@ -144,7 +144,7 @@ abstract IrregSpaAbs = Cat ** {
fun canecerse_V : V ;
fun carecer_V : V ;
fun cegar_V : V ;
fun ceńir_V : V ;
fun ceñir_V : V ;
fun cerner_V : V ;
fun cernir_V : V ;
fun cerrar_V : V ;
@@ -198,7 +198,7 @@ abstract IrregSpaAbs = Cat ** {
fun consolar_V : V ;
fun consonar_V : V ;
fun constituir_V : V ;
fun constreńir_V : V ;
fun constreñir_V : V ;
fun construir_V : V ;
fun contar_V : V ;
fun contender_V : V ;
@@ -274,7 +274,7 @@ abstract IrregSpaAbs = Cat ** {
fun descabullirse_V : V ;
fun descaecer_V : V ;
fun descaer_V : V ;
fun desceńir_V : V ;
fun desceñir_V : V ;
fun descender_V : V ;
fun descerrar_V : V ;
fun descimentar_V : V ;
@@ -334,7 +334,7 @@ abstract IrregSpaAbs = Cat ** {
fun desimponer_V : V ;
fun desinvernar_V : V ;
fun deslendrar_V : V ;
fun desleír_V : V ;
fun desleír_V : V ;
fun deslucir_V : V ;
fun desmajolar_V : V ;
fun desmedirse_V : V ;
@@ -348,7 +348,7 @@ abstract IrregSpaAbs = Cat ** {
fun desolar_V : V ;
fun desoldar_V : V ;
fun desollar_V : V ;
fun desoír_V : V ;
fun desoír_V : V ;
fun desosar_V : V ;
fun desosegar_V : V ;
fun desparecer_V : V ;
@@ -365,7 +365,7 @@ abstract IrregSpaAbs = Cat ** {
fun desproveer_V : V ;
fun desquerer_V : V ;
fun desraizar_V : V ;
fun desteńir_V : V ;
fun desteñir_V : V ;
fun destentar_V : V ;
fun desterrar_V : V ;
fun destituir_V : V ;
@@ -484,7 +484,7 @@ abstract IrregSpaAbs = Cat ** {
fun engorar_V : V ;
fun engrandecer_V : V ;
fun engravecer_V : V ;
fun engreír_V : V ;
fun engreír_V : V ;
fun engrosar_V : V ;
fun engrumecerse_V : V ;
fun engullir_V : V ;
@@ -523,7 +523,7 @@ abstract IrregSpaAbs = Cat ** {
fun ensarmentar_V : V ;
fun ensarnecer_V : V ;
fun ensilvecerse_V : V ;
fun ensońar_V : V ;
fun ensoñar_V : V ;
fun ensoberbecer_V : V ;
fun ensolver_V : V ;
fun ensombrecer_V : V ;
@@ -545,7 +545,7 @@ abstract IrregSpaAbs = Cat ** {
fun entrecoger2_V : V ;
fun entredecir_V : V ;
fun entrelucir_V : V ;
fun entreoír_V : V ;
fun entreoír_V : V ;
fun entreparecerse_V : V ;
fun entrepernar_V : V ;
fun entretener_V : V ;
@@ -583,7 +583,7 @@ abstract IrregSpaAbs = Cat ** {
fun estar_V : V ;
fun estatuir_V : V ;
fun estregar_V : V ;
fun estreńir_V : V ;
fun estreñir_V : V ;
fun estremecer_V : V ;
fun europeizar_V : V ;
fun evanecer_V : V ;
@@ -612,21 +612,21 @@ abstract IrregSpaAbs = Cat ** {
fun fotocomponer_V : V ;
fun frangir_V : V ;
fun fregar_V : V ;
fun freír_V : V ;
fun freír_V : V ;
fun fruir_V : V ;
fun fruncir_V : V ;
fun frutecer_V : V ;
fun fulgir_V : V ;
fun fungir_V : V ;
fun gańir_V : V ;
fun gañir_V : V ;
fun garantir_V : V ;
fun gemir_V : V ;
fun gernir_V : V ;
fun gobernar_V : V ;
fun grandisonar_V : V ;
fun gruńir_V : V ;
fun gruñir_V : V ;
fun gruir_V : V ;
fun guańir_V : V ;
fun guañir_V : V ;
fun guarecer_V : V ;
fun guarnecer_V : V ;
fun haber_V : V ;
@@ -634,7 +634,7 @@ abstract IrregSpaAbs = Cat ** {
fun hacer_V : V ;
fun hebraizar_V : V ;
fun heder_V : V ;
fun heńir_V : V ;
fun heñir_V : V ;
fun helar_V : V ;
fun henchir_V : V ;
fun hender_V : V ;
@@ -687,7 +687,7 @@ abstract IrregSpaAbs = Cat ** {
fun jimenzar_V : V ;
fun judaizar_V : V ;
fun jugar_V : V ;
fun juńir_V : V ;
fun juñir_V : V ;
fun languidecer_V : V ;
fun leer_V : V ;
fun licuefacer_V : V ;
@@ -721,7 +721,7 @@ abstract IrregSpaAbs = Cat ** {
fun mostrar_V : V ;
fun mover_V : V ;
fun mugir_V : V ;
fun muńir_V : V ;
fun muñir_V : V ;
fun mullir_V : V ;
fun nacer_V : V ;
fun negar_V : V ;
@@ -735,7 +735,7 @@ abstract IrregSpaAbs = Cat ** {
fun ofrecer_V : V ;
fun oler_V : V ;
fun oponer_V : V ;
fun oír_V : V ;
fun oír_V : V ;
fun oscurecer_V : V ;
fun pacer_V : V ;
fun padecer_V : V ;
@@ -755,7 +755,7 @@ abstract IrregSpaAbs = Cat ** {
fun pervertir_V : V ;
fun pimpollecer_V : V ;
fun placer_V : V ;
fun plańir_V : V ;
fun plañir_V : V ;
fun plastecer_V : V ;
fun plegar_V : V ;
fun poblar_V : V ;
@@ -806,13 +806,13 @@ abstract IrregSpaAbs = Cat ** {
fun reabrir_V : V ;
fun reaparecer_V : V ;
fun reapretar_V : V ;
fun reargüir_V : V ;
fun reargüir_V : V ;
fun reaventar_V : V ;
fun reblandecer_V : V ;
fun rebullir_V : V ;
fun recaer_V : V ;
fun recalentar_V : V ;
fun receńir_V : V ;
fun receñir_V : V ;
fun recentar_V : V ;
fun recluir_V : V ;
fun recocer_V : V ;
@@ -835,7 +835,7 @@ abstract IrregSpaAbs = Cat ** {
fun recostar_V : V ;
fun recrecer_V : V ;
fun recrudecer_V : V ;
fun redargüir_V : V ;
fun redargüir_V : V ;
fun redecir_V : V ;
fun redescontar_V : V ;
fun redistribuir_V : V ;
@@ -848,15 +848,15 @@ abstract IrregSpaAbs = Cat ** {
fun refluir_V : V ;
fun reforzar_V : V ;
fun refregar_V : V ;
fun refreír_V : V ;
fun refreír_V : V ;
fun refringir_V : V ;
fun refulgir_V : V ;
fun regańir_V : V ;
fun regañir_V : V ;
fun regar_V : V ;
fun regimentar_V : V ;
fun regir_V : V ;
fun regoldar_V : V ;
fun regruńir_V : V ;
fun regruñir_V : V ;
fun reguarnecer_V : V ;
fun rehacer_V : V ;
fun rehenchir_V : V ;
@@ -867,7 +867,7 @@ abstract IrregSpaAbs = Cat ** {
fun rehuir_V : V ;
fun rehumedecer_V : V ;
fun reinscribir_V : V ;
fun reńir_V : V ;
fun reñir_V : V ;
fun rejuvenecer_V : V ;
fun releer_V : V ;
fun relentecer_V : V ;
@@ -898,7 +898,7 @@ abstract IrregSpaAbs = Cat ** {
fun requebrar_V : V ;
fun requerir_V : V ;
fun rernorder_V : V ;
fun reír_V : V ;
fun reír_V : V ;
fun resaber_V : V ;
fun resalir_V : V ;
fun resarcir_V : V ;
@@ -915,16 +915,16 @@ abstract IrregSpaAbs = Cat ** {
fun restablecer_V : V ;
fun restituir_V : V ;
fun restregar_V : V ;
fun restrińir_V : V ;
fun restriñir_V : V ;
fun restringir_V : V ;
fun resurgir_V : V ;
fun retallecer_V : V ;
fun reteńir_V : V ;
fun reteñir_V : V ;
fun retemblar_V : V ;
fun retener_V : V ;
fun retentar_V : V ;
fun retińir_V : V ;
fun retońecer_V : V ;
fun retiñir_V : V ;
fun retoñecer_V : V ;
fun retorcer_V : V ;
fun retostar_V : V ;
fun retraducir_V : V ;
@@ -969,7 +969,7 @@ abstract IrregSpaAbs = Cat ** {
fun serrar_V : V ;
fun servir_V : V ;
fun ser_V : V ;
fun sońar_V : V ;
fun soñar_V : V ;
fun sobrecalentar_V : V ;
fun sobrecoger_V : V ;
fun sobrecoger2_V : V ;
@@ -988,13 +988,13 @@ abstract IrregSpaAbs = Cat ** {
fun sobrevestir_V : V ;
fun sobrevolar_V : V ;
fun socolar_V : V ;
fun sofreír_V : V ;
fun sofreír_V : V ;
fun solar_V : V ;
fun soldar_V : V ;
fun soler_V : V ;
fun soltar_V : V ;
fun sonar_V : V ;
fun sonreír_V : V ;
fun sonreír_V : V ;
fun sorregar_V : V ;
fun sosegar_V : V ;
fun sostener_V : V ;
@@ -1022,10 +1022,10 @@ abstract IrregSpaAbs = Cat ** {
fun suscribir_V : V ;
fun sustituir_V : V ;
fun sustraer_V : V ;
fun tańer_V : V ;
fun tañer_V : V ;
fun tallecer_V : V ;
fun tardecer_V : V ;
fun teńir_V : V ;
fun teñir_V : V ;
fun telecomponer_V : V ;
fun teledirigir_V : V ;
fun temblar_V : V ;
@@ -1052,8 +1052,8 @@ abstract IrregSpaAbs = Cat ** {
fun trasfregar_V : V ;
fun trasgredir_V : V ;
fun traslucir_V : V ;
fun trasońar_V : V ;
fun trasoír_V : V ;
fun trasoñar_V : V ;
fun trasoír_V : V ;
fun trasparecer_V : V ;
fun trasponer_V : V ;
fun trastrocar_V : V ;
@@ -1090,4 +1090,4 @@ abstract IrregSpaAbs = Cat ** {
fun zurcir_V : V ;
}
}

View File

@@ -1,20 +1,20 @@
--# -path=.:../romance:../common:../abstract:../../prelude
--# -coding=latin1
concrete LexiconSpa of Lexicon = CatSpa ** open
(M=MorphoSpa), ParadigmsSpa, BeschSpa in {
flags
coding=utf8 ;
optimize=values ;
lin
airplane_N = regN "aeroplano" ; -- avión is masculine
airplane_N = regN "aeroplano" ; -- avión is masculine
answer_V2S = mkV2S (regV "responder") dative ;
apartment_N = regN "apartamento" ;
apple_N = regN "manzana" ;
art_N = regN "arte" ;
ask_V2Q = mkV2Q (regV "preguntar") dative ;
baby_N = regN "bebé" ; -- can be used for both fem. & masc.
baby_N = regN "bebé" ; -- can be used for both fem. & masc.
bad_A = prefA (mkADeg (regA "malo") (regA "peor")) ;
bank_N = regN "banco" ;
beautiful_A = prefA (regADeg "bello") ; -- bella
@@ -23,22 +23,22 @@ lin
beg_V2V = mkV2V (mkV "rogar" "ruego") accusative dative ; -- pedir
big_A = prefA (regADeg "grande") ;
bike_N = regN "bicicleta" ;
bird_N = regN "pájaro" ;
bird_N = regN "pájaro" ;
black_A = regADeg "negro" ; -- negra
blue_A = regADeg "azul" ;
boat_N = regN "bote" ;
book_N = regN "libro" ;
boot_N = regN "bota" ;
boss_N = regN "jefe" ;
boy_N = regN "niño" ;
boy_N = regN "niño" ;
bread_N = regN "pan" ;
break_V2 = dirV2 (special_ppV (regV "romper") "roto") ;
broad_A = regADeg "ancho" ;
brother_N2 = deN2 (regN "hermano") ;
brown_A = regADeg "marrón" ; --- *
brown_A = regADeg "marrón" ; --- *
butter_N = regN "manteca" ;
buy_V2 = dirV2 (regV "comprar") ;
camera_N = regN "cámara" ; -- ["máquina fotográfica"]
camera_N = regN "cámara" ; -- ["máquina fotográfica"]
cap_N = regN "gorra" ;
car_N = regN "auto" ;
carpet_N = regN "alfombra" ;
@@ -46,31 +46,31 @@ lin
ceiling_N = regN "techo" ;
chair_N = regN "silla" ;
cheese_N = regN "queso" ;
child_N = regN "niño" ; -- niña
child_N = regN "niño" ; -- niña
church_N = regN "iglesia" ;
city_N = femN (regN "ciudad") ; -- fem
clean_A = regADeg "limpio" ;
clever_A = regADeg "inteligente" ;
close_V2 = dirV2 (mkV "cerrar" "cierro") ;
coat_N = regN "abrigo" ;
cold_A = regADeg "frío" ; -- fría
cold_A = regADeg "frío" ; -- fría
come_V = verboV (venir_82 "venir") ;
computer_N = regN "ordenador" ; -- also computador, ordenador in Spain
country_N = regN "país" ; -- masc
country_N = regN "país" ; -- masc
cousin_N = regN "primo" ;
cow_N = regN "vaca" ;
die_V = verboV (morir_35b "morir") ;
dirty_A = regADeg "sucio" ;
distance_N3 = mkN3 (regN "distancia") genitive dative ;
doctor_N = regN "médico" ; -- médica
doctor_N = regN "médico" ; -- médica
dog_N = regN "perro" ; -- perra
door_N = regN "puerta" ;
drink_V2 = dirV2 (regV "tomar") ; -- beber
easy_A2V = mkA2V (regA "fácil") dative genitive ;
easy_A2V = mkA2V (regA "fácil") dative genitive ;
eat_V2 = dirV2 (regV "comer") ;
empty_A = regADeg "vacío" ;
empty_A = regADeg "vacío" ;
enemy_N = regN "enemigo" ; -- enemiga
factory_N = regN "fábrica" ;
factory_N = regN "fábrica" ;
father_N2 = deN2 (regN "padre") ;
fear_VS = mkVS (regV "temer") ;
find_V2 = dirV2 (verboV (encontrar_38 "encontrar")) ;
@@ -81,8 +81,8 @@ lin
friend_N = regN "amigo" ; -- amiga
fruit_N = regN "fruta" ;
fun_AV = mkAV (regA "divertido") genitive ; -- entretenido
garden_N = regN "jardín" ;
girl_N = regN "niña" ;
garden_N = regN "jardín" ;
girl_N = regN "niña" ;
glove_N = regN "guante" ;
gold_N = regN "oro" ;
good_A = prefA (mkADeg (regA "bueno") (regA "mejor")) ; ---- adv?
@@ -91,7 +91,7 @@ lin
harbour_N = regN "puerto" ;
hate_V2 = dirV2 (mkV "odiar" "odio") ;
hat_N = regN "sombrero" ;
hear_V2 = dirV2 (mkV (oir_51 "oír")) ;
hear_V2 = dirV2 (mkV (oir_51 "oír")) ;
hill_N = regN "colina" ;
hope_VS = mkVS (regV "esperar") ;
horse_N = regN "caballo" ;
@@ -105,7 +105,7 @@ lin
know_VQ = mkVQ (verboV (saber_71 "saber")) ;
know_VS = mkVS (verboV (saber_71 "saber")) ;
lake_N = regN "lago" ;
lamp_N = regN "lámpara" ;
lamp_N = regN "lámpara" ;
learn_V2 = dirV2 (regV "aprender") ;
leather_N = regN "cuero" ;
leave_V2 = dirV2 (regV "partir") ; -- irse, dejar
@@ -122,23 +122,23 @@ lin
milk_N = femN (regN "leche") ;
moon_N = regN "luna" ;
mother_N2 = deN2 (mkN "madre" feminine) ;
mountain_N = mkN "montaña" ;
music_N = mkN "música" ;
mountain_N = mkN "montaña" ;
music_N = mkN "música" ;
narrow_A = regADeg "estrecho" ;
new_A = prefA (regADeg "nuevo") ;
newspaper_N = mkN "periódico" ; -- diario
newspaper_N = mkN "periódico" ; -- diario
oil_N = mkN "aceite" ;
old_A = prefA (regADeg "viejo") ;
open_V2 = dirV2 (special_ppV (regV "abrir") "abierto") ;
paint_V2A = mkV2A (regV "pintar") accusative (mkPrep "en") ;
paper_N = mkN "papel" ;
paris_PN = mkPN "París" masculine ;
paris_PN = mkPN "París" masculine ;
peace_N = mkN "paz" feminine ;
pen_N = mkN "lapicera" ;
planet_N = mkN "planeta" masculine ;
plastic_N = mkN "plástico" ;
plastic_N = mkN "plástico" ;
play_V2 = dirV2 (verboV (jugar_47 "jugar")) ;
policeman_N = mkN "policía" masculine ; -- fem refers to the institution
policeman_N = mkN "policía" masculine ; -- fem refers to the institution
priest_N = mkN "cura" masculine ; -- masc
probable_AS = mkAS (regA "probable") ;
queen_N = mkN "reina" ;
@@ -146,11 +146,11 @@ lin
radio_N = mkN "radio" feminine ;
rain_V0 = mkV0 (verboV (llover_89 "llover")) ;
read_V2 = dirV2 (verboV (creer_26 "leer")) ;
reason_N = mkN "razón" feminine ;
reason_N = mkN "razón" feminine ;
red_A = regADeg "rojo" ;
religion_N = mkN "religión" "religiones" feminine ;
restaurant_N = mkN "restaurante" ; -- restorán, restaurán, masc
river_N = mkN "río" ;
religion_N = mkN "religión" "religiones" feminine ;
restaurant_N = mkN "restaurante" ; -- restorán, restaurán, masc
river_N = mkN "río" ;
rock_N = mkN "roca" ;
roof_N = mkN "techo" ;
rubber_N = regN "goma" ;
@@ -172,7 +172,7 @@ lin
silver_N = regN "plata" ;
sister_N = regN "hermana" ;
sleep_V = verboV (dormir_35 "dormir") ;
small_A = prefA (regADeg "pequeño") ;
small_A = prefA (regADeg "pequeño") ;
snake_N = femN (regN "serpiente") ; -- fem
sock_N = regN "media" ;
speak_V2 = dirV2 (regV "hablar") ;
@@ -181,21 +181,21 @@ lin
stone_N = regN "piedra" ;
stove_N = regN "horno" ; -- estufa
student_N = regN "estudiante" ; -- used both for fem & masc
stupid_A = regADeg "estúpido" ;
stupid_A = regADeg "estúpido" ;
sun_N = regN "sol" ;
switch8off_V2 = dirV2 (regV "apagar") ;
switch8on_V2 = dirV2 (regV "prender") ;
table_N = regN "mesa" ;
talk_V3 = mkV3 (regV "hablar") dative genitive ;
teacher_N = regN "maestro" ; -- maestra
teach_V2 = dirV2 (regV "enseñar") ;
television_N = mkN "televisión" feminine ; -- televisor masc
teach_V2 = dirV2 (regV "enseñar") ;
television_N = mkN "televisión" feminine ; -- televisor masc
thick_A = regADeg "grueso" ;
thin_A = regADeg "fino" ; -- delgado
train_N = regN "tren" ;
travel_V = regV "viajar" ;
tree_N = regN "árbol" ;
--- trousers_N = regN "pantalón" ; -- masc
tree_N = regN "árbol" ;
--- trousers_N = regN "pantalón" ; -- masc
ugly_A = regADeg "feo" ;
understand_V2 = dirV2 (mkV "entender" "entiendo") ;
university_N = femN (regN "universidad") ;
@@ -215,14 +215,14 @@ lin
wood_N = regN "madera" ;
write_V2 = dirV2 (special_ppV (regV "escribir") "escrito") ;
yellow_A = regADeg "amarillo" ;
young_A = prefA (mkA "joven" "joven" "jóvenes" "jóvenes" "jovenamente") ;
young_A = prefA (mkA "joven" "joven" "jóvenes" "jóvenes" "jovenamente") ;
do_V2 = dirV2 (verboV (hacer_44 "hacer")) ;
now_Adv = mkAdv "ahora" ;
already_Adv = mkAdv "ya" ;
song_N = mkN "canción" "canciones" feminine ;
song_N = mkN "canción" "canciones" feminine ;
add_V3 = dirV3 (regV "sumar") dative ;
number_N = regN "número" ;
number_N = regN "número" ;
put_V2 = dirV2 (verboV (poner_60 "poner")) ;
stop_V = regV "parar" ;
jump_V = regV "saltar" ;
@@ -252,7 +252,7 @@ lin
bone_N = regN "hueso" ;
breast_N = regN "seno" ; -- pecho
cloud_N = femN (regN "nube") ;
day_N = mascN (regN "día") ;
day_N = mascN (regN "día") ;
dust_N = regN "polvo" ;
ear_N = regN "oreja" ;
earth_N = regN "tierra" ;
@@ -260,25 +260,25 @@ lin
eye_N = regN "ojo" ;
fat_N = regN "grasa" ;
feather_N = regN "pluma" ;
fingernail_N = regN "uña" ;
fingernail_N = regN "uña" ;
fire_N = regN "fuego" ;
flower_N = femN (regN "flor") ;
fog_N = regN "niebla" ;
foot_N = regN "pie" ;
forest_N = regN "bosque" ;
grass_N = regN "pasto" ; -- hierba, césped (masc)
grass_N = regN "pasto" ; -- hierba, césped (masc)
guts_N = regN "tripa" ; -- gut=intestino ---- pl.t. tripas
hair_N = regN "cabello" ; -- pelo
hand_N = femN (regN "mano") ;
head_N = regN "cabeza" ;
heart_N = mkN "corazón" "corazones" masculine ;
heart_N = mkN "corazón" "corazones" masculine ;
horn_N = regN "cuerno" ;
husband_N = regN "marido" ; -- esposo
ice_N = regN "hielo" ;
knee_N = regN "rodilla" ;
leaf_N = regN "hoja" ;
leg_N = regN "pierna" ;
liver_N = regN "hígado" ;
liver_N = regN "hígado" ;
louse_N = regN "piojo" ;
mouth_N = regN "boca" ;
name_N = regN "nombre" ;
@@ -288,7 +288,7 @@ lin
person_N = regN "persona" ;
rain_N = regN "lluvia" ;
road_N = femN (regN "calle") ; -- camino
root_N = femN (regN "raíz") ;
root_N = femN (regN "raíz") ;
rope_N = regN "cuerda" ;
salt_N = femN (regN "sal") ;
sand_N = regN "arena" ;
@@ -297,7 +297,7 @@ lin
sky_N = regN "cielo" ;
smoke_N = regN "humo" ;
snow_N = femN (regN "nieve") ; -- fem
stick_N = mkN "bastón" "bastones" masculine ; -- palo
stick_N = mkN "bastón" "bastones" masculine ; -- palo
tail_N = regN "cola" ;
tongue_N = regN "lengua" ;
tooth_N = regN "diente" ;
@@ -305,7 +305,7 @@ lin
wind_N = regN "viento" ;
wing_N = regN "ala" ;
worm_N = regN "gusano" ; -- lombriz (fem)
year_N = regN "año" ;
year_N = regN "año" ;
bite_V2 = dirV2 (verboV (morder_50b "morder")) ;
blow_V = regV "soplar" ;
burn_V = regV "quemar" ;
@@ -324,7 +324,7 @@ lin
hold_V2 = dirV2 (verboV (tener_4 "tener")) ;
hunt_V2 = dirV2 (regV "cazar") ;
kill_V2 = dirV2 (regV "matar") ;
laugh_V = regV "reir" ; ----V reír_67
laugh_V = regV "reir" ; ----V reír_67
lie_V = reflV (regV "acostar") ; -- "acostarse"
play_V = regV "jugar" ;
pull_V2 = dirV2 (regV "tirar") ;
@@ -338,7 +338,7 @@ lin
spit_V = regV "escupir" ;
split_V2 = dirV2 (regV "separar") ; -- dividir,) ;
squeeze_V2 = dirV2 (regV "exprimir") ;
stab_V2 = dirV2 (regV "apuñalar") ;
stab_V2 = dirV2 (regV "apuñalar") ;
stand_V = verboV (estar_2 "estar") ; ---- "estar de pie" ;
suck_V2 = dirV2 (regV "chupar") ;
swell_V = regV "tragar" ;
@@ -355,7 +355,7 @@ lin
john_PN = mkPN "Juan" masculine ;
today_Adv = mkAdv "hoy" ;
grammar_N = regN "gramática" ;
grammar_N = regN "gramática" ;
language_N = regN "lengua" ;
rule_N = regN "regla" ;

View File

@@ -1,5 +1,4 @@
--# -path=.:../romance:../common:../../prelude
--# -coding=latin1
--1 A Simple Spanish Resource Morphology
--
@@ -14,6 +13,7 @@ resource MorphoSpa = CommonRomance, ResSpa **
CatSpa in {
flags optimize=all ;
coding=utf8 ;
--2 Nouns
@@ -46,16 +46,16 @@ oper
mkNomReg : Str -> Noun = \mec ->
case mec of {
_ + ("o" | "e" | "é" | "á") => mkNoun (nomVino mec) Masc ; --bebé, papá; how about other accented vocal endings? champú champúes
_ + ("o" | "e" | "é" | "á") => mkNoun (nomVino mec) Masc ; --bebé, papá; how about other accented vocal endings? champú champúes
_ + "a" => mkNoun (nomVino mec) Fem ;
_ + "z" => mkNounIrreg mec (init mec + "ces") Fem ;
_ + "ión" => mkNounIrreg mec (tk 2 mec + "ones") Fem ;
_ + "ión" => mkNounIrreg mec (tk 2 mec + "ones") Fem ;
_ + "tud" => mkNounIrreg mec (mec + "es") Fem ;
_ + "án" => mkNounIrreg mec (tk 2 mec + "anes") Masc ;
_ + "én" => mkNounIrreg mec (tk 2 mec + "enes") Masc ;
_ + "ín" => mkNounIrreg mec (tk 2 mec + "ines") Masc ;
_ + "ón" => mkNounIrreg mec (tk 2 mec + "ones") Masc ;
_ + "ún" => mkNounIrreg mec (tk 2 mec + "unes") Masc ;
_ + "án" => mkNounIrreg mec (tk 2 mec + "anes") Masc ;
_ + "én" => mkNounIrreg mec (tk 2 mec + "enes") Masc ;
_ + "ín" => mkNounIrreg mec (tk 2 mec + "ines") Masc ;
_ + "ón" => mkNounIrreg mec (tk 2 mec + "ones") Masc ;
_ + "ún" => mkNounIrreg mec (tk 2 mec + "unes") Masc ;
_ => mkNoun (nomPilar mec) Masc
} ;
@@ -87,31 +87,31 @@ oper
mkAdj util util utiles utiles (util + "mente") ;
-- adjectives that end in consonant but have different masc and fem forms
-- español, hablador ...
-- español, hablador ...
adjEspanol : Str -> Str -> Adj = \espanol,espanola ->
mkAdj espanol espanola (espanol + "es") (espanol + "as") (espanola + "mente") ;
adjBlu : Str -> Adj = \blu ->
mkAdj blu blu blu blu blu ; ---
-- francés francesa franceses francesas
-- francés francesa franceses francesas
adjEs : Str -> Adj = \francEs ->
let franc : Str = Predef.tk 2 francEs ;
frances : Str = franc + "es" ;
in mkAdj francEs (frances + "a") (frances + "es") (frances + "as") (frances + "amente") ;
-- alemán alemana alemanes alemanas
-- alemán alemana alemanes alemanas
adjVn : Str -> Adj = \alemAn ->
let alemA : Str = init alemAn ;
alem : Str = init alemA ;
A : Str = last alemA ;
V : Str = case A of {
"á" => "a" ;
"é" => "e" ;
"í" => "i" ;
"ó" => "o" ;
"ú" => "u"
"á" => "a" ;
"é" => "e" ;
"í" => "i" ;
"ó" => "o" ;
"ú" => "u"
} ;
alemVn : Str = alem + V + "n" ;
in mkAdj alemAn (alemVn + "a") (alemVn + "es")
@@ -121,8 +121,8 @@ oper
case solo of {
_ + "o" => adjSolo solo ;
_ + ("e" | "a") => adjUtil solo (solo + "s") ;
_ + "és" => adjEs solo ;
_ + ("á" | "é" | "í" | "ó" | "ú") + "n" => adjVn solo ;
_ + "és" => adjEs solo ;
_ + ("á" | "é" | "í" | "ó" | "ú") + "n" => adjVn solo ;
_ => adjUtil solo (solo + "es")
} ;
@@ -174,7 +174,7 @@ oper
sa : Str = Predef.drop 1 esa ;
sos : Str = Predef.drop 1 esos ;
sas : Str = Predef.drop 1 esas ;
E : Str = "é" ;
E : Str = "é" ;
attrforms : Number => Gender => Case => Str = table {
Sg => \\g,c => prepCase c ++ genForms ese esa ! g ;
Pl => \\g,c => prepCase c ++ genForms esos esas ! g ----

View File

@@ -1,6 +1,6 @@
--# -coding=latin1
concrete NumeralSpa of Numeral = CatSpa [Numeral,Digits] **
open CommonRomance, ResRomance, MorphoSpa, Prelude in {
flags coding=utf8 ;
lincat
Digit = {s : DForm => CardOrd => Str} ;
@@ -13,32 +13,32 @@ lin num x = x ;
lin n2 =
mkTal "dos" "doce" "veinte" "doscientos"
"segundo" "duodécimo" "vigésimo" "ducentésimo" ;
"segundo" "duodécimo" "vigésimo" "ducentésimo" ;
lin n3 =
mkTal "tres" "trece" "treinta" "trescientos"
"tercero" "decimotercero" "trigésimo" "tricentesimo" ;
"tercero" "decimotercero" "trigésimo" "tricentesimo" ;
lin n4 =
mkTal "cuatro" "catorce" "cuarenta" "cuatrocientos"
"cuarto" "decimocuarto" "cuadragésimo" "cuadringentesimo" ;
"cuarto" "decimocuarto" "cuadragésimo" "cuadringentesimo" ;
lin n5 =
mkTal "cinco" "quince" "cinquenta" "quinientos"
"quinto" "decimoquinto" "quincuagésimo" "guingentésimo" ;
"quinto" "decimoquinto" "quincuagésimo" "guingentésimo" ;
lin n6 =
mkTal "seis" "dieciséis" "sesenta" "seiscientos"
"sexto" "decimosexto" "sexagésimo" "sexcentesimo" ;
mkTal "seis" "dieciséis" "sesenta" "seiscientos"
"sexto" "decimosexto" "sexagésimo" "sexcentesimo" ;
lin n7 =
mkTal "siete" "diecisiéte" "setenta" "setecientos"
"séptimo" "decimoséptimo" "septuagésimo" "septingentesimo" ;
mkTal "siete" "diecisiéte" "setenta" "setecientos"
"séptimo" "decimoséptimo" "septuagésimo" "septingentesimo" ;
lin n8 =
mkTal "ocho" "dieciocho" "ochenta" "ochocientos"
"octavo" "decimoctavo" "octogésimo" "octingentésimo" ;
"octavo" "decimoctavo" "octogésimo" "octingentésimo" ;
lin n9 =
mkTal "nueve" "diecinueve" "noventa" "novecientos"
"noveno" "decimonoveno" "nonagésimo" "noningentésimo" ;
"noveno" "decimonoveno" "nonagésimo" "noningentésimo" ;
lin pot01 =
let uno = (mkTal "uno" "once" "diez" "ciento" "primero" "undécimo"
"décimo" "centésimo").s in
let uno = (mkTal "uno" "once" "diez" "ciento" "primero" "undécimo"
"décimo" "centésimo").s in
{s =\\f,g => case <f,g> of {
<ental pred,_> => [] ;
<ental _, NCard Fem> => "una" ;
@@ -51,7 +51,7 @@ lin pot01 =
lin pot0 d = {s = d.s ; n = Pl} ;
lin pot110 = spl ((mkTal "diez" [] [] [] "decimo" [] [] []).s ! ental indip) ;
lin pot111 = spl ((mkTal "once" [] [] [] "undécimo" [] [] []).s ! ental indip) ;
lin pot111 = spl ((mkTal "once" [] [] [] "undécimo" [] [] []).s ! ental indip) ;
lin pot1to19 d = spl (d.s ! ton) ;
lin pot0as1 n = {s = n.s ! ental indip ; n = n.n} ;
lin pot1 d = spl (d.s ! tiotal) ;
@@ -90,7 +90,7 @@ oper
} ;
mil : CardOrd -> Str = \g ->
(mkTal "mil" [] [] [] "milésimo" [] [] []).s ! ental indip ! g ;
(mkTal "mil" [] [] [] "milésimo" [] [] []).s ! ental indip ! g ;
y_CardOrd : CardOrd -> Str = \co -> case co of {
NCard _ => "y" ;

View File

@@ -1,5 +1,4 @@
--# -path=.:../romance:../common:../abstract:../../prelude
--# -coding=latin1
--1 Spanish Lexical Paradigms
--
@@ -33,6 +32,7 @@ resource ParadigmsSpa =
CatSpa in {
flags optimize=all ;
coding=utf8 ;
--2 Parameters
--
@@ -90,11 +90,11 @@ oper
--3 Compound nouns
--
-- Some nouns are ones where the first part is inflected as a noun but
-- the second part is not inflected. e.g. "número de teléfono".
-- the second part is not inflected. e.g. "número de teléfono".
-- They could be formed in syntax, but we give a shortcut here since
-- they are frequent in lexica.
compN : N -> Str -> N ; -- compound, e.g. "número" + "de teléfono"
compN : N -> Str -> N ; -- compound, e.g. "número" + "de teléfono"
--3 Relational nouns
@@ -355,7 +355,7 @@ oper
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ;
isPre = a.isPre ; lock_A = <>} ;
compADeg a =
{s = table {Posit => a.s ! Posit ; _ => \\f => "más" ++ a.s ! Posit ! f} ;
{s = table {Posit => a.s ! Posit ; _ => \\f => "más" ++ a.s ! Posit ! f} ;
isPre = a.isPre ;
lock_A = <>} ;
regADeg a = compADeg (regA a) ;
@@ -412,7 +412,7 @@ oper
mmkV3 : V -> Prep -> Prep -> V3 ; -- parler, à, de
mmkV3 : V -> Prep -> Prep -> V3 ; -- parler, à, de
mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
dirV3 v p = mmkV3 v accusative p ;
dirdirV3 v = dirV3 v dative ;
@@ -423,7 +423,7 @@ oper
mkV3 = overload {
mkV3 : V -> V3 = dirdirV3 ; -- donner,_,_
mkV3 : V -> Prep -> V3 = dirV3 ; -- placer,_,sur
mkV3 : V -> Prep -> Prep -> V3 = mmkV3 -- parler, à, de
mkV3 : V -> Prep -> Prep -> V3 = mmkV3 -- parler, à, de
} ;
mkV2S = overload {

View File

@@ -1,4 +1,5 @@
resource PhonoSpa = open Prelude in {
flags coding=utf8 ;
--3 Elision
--

View File

@@ -1,9 +1,9 @@
--# -coding=latin1
concrete StructuralSpa of Structural = CatSpa **
open PhonoSpa, MorphoSpa, ParadigmsSpa, BeschSpa,
MakeStructuralSpa, (X = ConstructX), Prelude in {
flags optimize=all ;
coding=utf8 ;
lin
-- have_V3
@@ -21,10 +21,10 @@ lin
although_Subj = ss "aunque" ** {m = Conjunct} ;
and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ;
at_least_AdN = ss "al menos" ;
at_most_AdN = ss "a lo más" ;
at_most_AdN = ss "a lo más" ;
because_Subj = ss "porque" ** {m = Indic} ;
before_Prep = {s = "antes" ; c = MorphoSpa.genitive ; isDir = False} ;
behind_Prep = {s = "detrás" ; c = MorphoSpa.genitive ; isDir = False} ;
behind_Prep = {s = "detrás" ; c = MorphoSpa.genitive ; isDir = False} ;
between_Prep = mkPrep "entre" ;
both7and_DConj = {s1,s2 = etConj.s ; n = Pl} ;
but_PConj = ss "pero" ;
@@ -45,32 +45,32 @@ lin
from_Prep = complGen ; ---
he_Pron =
mkPronoun
"él" "lo" "le" "él"
"él" "lo" "le" "él"
"su" "su" "sus" "sus"
Masc Sg P3 ;
here_Adv = mkAdv "aquí" ;
here7to_Adv = mkAdv ["para aquí"] ;
here7from_Adv = mkAdv ["de aquí"] ;
here_Adv = mkAdv "aquí" ;
here7to_Adv = mkAdv ["para aquí"] ;
here7from_Adv = mkAdv ["de aquí"] ;
how_IAdv = ss "como" ;
how8many_IDet = mkIDet "cuántos" "cuántas" Pl ;
how8much_IAdv = ss "cuánto" ;
how8many_IDet = mkIDet "cuántos" "cuántas" Pl ;
how8much_IAdv = ss "cuánto" ;
if_Subj = ss "si" ** {m = Indic} ;
if_then_Conj = {s1 = "si" ; s2 = "entonces" ; n = Sg ; lock_Conj = <>} ;
in8front_Prep = {s = "delante" ; c = MorphoSpa.genitive ; isDir = False} ;
i_Pron =
mkPronoun
"yo" "me" "me" "mí"
"yo" "me" "me" "mí"
"mi" "mi" "mis" "mis"
Masc Sg P1 ;
in_Prep = mkPrep "en" ;
it_Pron =
mkPronoun
"él" "lo" "le" "él"
"él" "lo" "le" "él"
"su" "su" "sus" "sus"
Masc Sg P3 ;
less_CAdv = X.mkCAdv "menos" conjThan ; ----
many_Det = mkDeterminer "muchos" "muchas" Pl False ;
more_CAdv = X.mkCAdv "más" conjThan ;
more_CAdv = X.mkCAdv "más" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la mayor parte"] ; c = CPrep P_de ;
a = PNoAg} ;
much_Det = mkDeterminer "mucho" "mucha" Sg False ;
@@ -78,7 +78,7 @@ lin
no_Quant =
let
ningun : ParadigmsSpa.Number => ParadigmsSpa.Gender => Case => Str = table {
Sg => \\g,c => prepCase c ++ genForms "ningún" "ninguna" ! g ;
Sg => \\g,c => prepCase c ++ genForms "ningún" "ninguna" ! g ;
Pl => \\g,c => prepCase c ++ genForms "ningunos" "ningunas" ! g
}
in {
@@ -109,13 +109,13 @@ lin
so_AdA = ss "tanto" ;
somebody_NP = pn2np (mkPN "alguien" Masc) ;
somePl_Det = mkDeterminer "algunos" "algunas" Pl False ;
someSg_Det = mkDeterminer "algún" "alguna" Sg False ;
someSg_Det = mkDeterminer "algún" "alguna" Sg False ;
something_NP = pn2np (mkPN ["algo"] Masc) ;
somewhere_Adv = ss ["en alguna parte"] ;
that_Quant = mkQuantifier "ese" "esa" "esos" "esas" ;
there_Adv = mkAdv "allí" ; -- allá
there7to_Adv = mkAdv ["para allí"] ;
there7from_Adv = mkAdv ["de allí"] ;
there_Adv = mkAdv "allí" ; -- allá
there7to_Adv = mkAdv ["para allí"] ;
there7from_Adv = mkAdv ["de allí"] ;
therefore_PConj = ss ["por eso"] ;
they_Pron = mkPronoun
"ellos" "los" "les" "ellos"
@@ -133,24 +133,24 @@ lin
"nosotros" "nos" "nos" "nosotros"
"nuestro" "nuestra" "nuestros" "nuestras"
Masc Pl P1 ;
whatSg_IP = {s = \\c => prepCase c ++ ["qué"] ; a = aagr Masc Sg} ;
whatPl_IP = {s = \\c => prepCase c ++ ["qué"] ; a = aagr Masc Pl} ; ---
when_IAdv = ss "cuándo" ;
whatSg_IP = {s = \\c => prepCase c ++ ["qué"] ; a = aagr Masc Sg} ;
whatPl_IP = {s = \\c => prepCase c ++ ["qué"] ; a = aagr Masc Pl} ; ---
when_IAdv = ss "cuándo" ;
when_Subj = ss "cuando" ** {m = Indic} ;
where_IAdv = ss "dónde" ;
where_IAdv = ss "dónde" ;
which_IQuant = {s = table {
Sg => \\g,c => prepCase c ++ "qué" ; --- cual
Pl => \\g,c => prepCase c ++ "qué"
Sg => \\g,c => prepCase c ++ "qué" ; --- cual
Pl => \\g,c => prepCase c ++ "qué"
}
} ;
whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ;
whoSg_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Sg} ;
why_IAdv = ss ["por qué"] ;
whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ;
whoSg_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Sg} ;
why_IAdv = ss ["por qué"] ;
without_Prep = mkPrep "sin" ;
with_Prep = mkPrep "con" ;
yes_Utt = ss "sí" ;
yes_Utt = ss "sí" ;
youSg_Pron = mkPronoun
"tú" "te" "te" "ti"
"tú" "te" "te" "ti"
"tu" "tu" "tus" "tus"
Masc Sg P2 ;
youPl_Pron =
@@ -176,6 +176,6 @@ lin
that_Subj = {s = "que" ; m = Conjunct} ;
lin language_title_Utt = ss "español" ;
lin language_title_Utt = ss "español" ;
}

View File

@@ -10,6 +10,7 @@ concrete TerminologySpa of Terminology = CatSpa ** open
Prelude
in {
flags coding=utf8 ;
lincat

View File

@@ -1,12 +1,12 @@
--# -coding=latin1
concrete TextSpa of Text = CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** {
flags coding=utf8 ;
-- This works for the special punctuation marks of Spanish.
lin
TEmpty = {s = []} ;
TFullStop x xs = {s = x.s ++ "." ++ xs.s} ;
TQuestMark x xs = {s = "¿" ++ x.s ++ "?" ++ xs.s} ;
TExclMark x xs = {s = "¡" ++ x.s ++ "!" ++ xs.s} ;
TQuestMark x xs = {s = "¿" ++ x.s ++ "?" ++ xs.s} ;
TExclMark x xs = {s = "¡" ++ x.s ++ "!" ++ xs.s} ;
}