--# -path=.:../romance:../abstract:../../prelude

concrete StructuralIta of Structural = CombinationsIta ** 
  open SyntaxIta, MorphoIta, Prelude in {

lin
  INP    = pronNounPhrase pronJe ;
  ThouNP = pronNounPhrase pronTu ;
  HeNP   = pronNounPhrase pronIl ;
  SheNP  = pronNounPhrase pronElle ;
  WeNumNP n = pronNounPhrase (pronWithNum pronNous n) ;
  YeNumNP n = pronNounPhrase (pronWithNum pronVous n) ;
  YouNP  = pronNounPhrase pronVous ;
  TheyNP = pronNounPhrase pronIls ; 

-- Here is a point where the API is really inadequate for French,
-- which distinguishes between masculine and feminine "they".
-- The following solution is not attractive.

---  TheyNP = pronNounPhrase (variants {pronIls ; pronElles}) ;

  ThisNP = mkNameNounPhrase ["questo"] Masc ;
  ThatNP = mkNameNounPhrase ["quello"] Masc ;
  TheseNumNP n = mkNameNounPhrase ("questi" ++ n.s ! Masc) Masc ;
  ThoseNumNP n = mkNameNounPhrase ("quelli" ++ n.s ! Masc) Masc ;

  ItNP   = pronNounPhrase pronIl ;

  EveryDet = chaqueDet ; 
  AllMassDet   = mkDeterminer singular "tutto" "tutta" ;
  AllNumDet  = mkDeterminerNum plural ["tutti i"] ["tutte le"] ; --- gli
  WhichDet = quelDet ;
  WhichNumDet = mkDeterminerNum plural "quali" "quali" ;
  MostsDet = plupartDet ;
  MostDet  = mkDeterminer1 singular (["la maggior parte"] ++ elisDe) ; --- de
  SomeDet  = mkDeterminer1 singular "qualche" ;
  SomeNumDet = mkDeterminerNum plural "alcuni" "alcune" ;
  NoDet    = mkDeterminer singular "nessuno" "nessuna" ; --- non
  NoNumDet   = mkDeterminerNum plural "nessuni" "nessune" ; ---- ??
  AnyDet   = mkDeterminer1 singular "qualche" ; ---
  AnyNumDet  = mkDeterminerNum plural "alcuni" "alcune" ; ---
  ManyDet  = mkDeterminer plural "molti" "molte" ;
  MuchDet  = mkDeterminer1 singular "molto" ;
  ThisDet  = mkDeterminer singular "questo" "questa" ;
  ThatDet  = mkDeterminer singular "quello" "quella" ;
  TheseNumDet = mkDeterminerNum plural "questi" "queste" ; --- ci
  ThoseNumDet = mkDeterminerNum plural "quelli" "quelle" ; --- quegli

  HowIAdv = commentAdv ;
  WhenIAdv = quandAdv ;
  WhereIAdv = ouAdv ;
  WhyIAdv = pourquoiAdv ;

  AndConj = etConj ;
  OrConj = ouConj  ;
  BothAnd = etetConj ;
  EitherOr = ououConj  ;
  NeitherNor = niniConj  ; --- requires ne !
  IfSubj = siSubj ;
  WhenSubj = quandSubj ;

  PhrYes = ouiPhr ;  
  PhrNo = nonPhr ; --- and also Si!

  VeryAdv = ss "molto" ;
  TooAdv = ss "troppo" ;
  OtherwiseAdv = ss "altramente" ;
  ThereforeAdv = ss "quindi" ;

  EverybodyNP  = mkNameNounPhrase ["tutti"] Masc ;
  SomebodyNP   = mkNameNounPhrase ["qualcuno"] Masc ;
  NobodyNP     = mkNameNounPhrase ["nessuno"] Masc ;  --- ne
  EverythingNP = mkNameNounPhrase ["tutto"] Masc ;
  SomethingNP  = mkNameNounPhrase ["qualche cosa"] Masc ;
  NothingNP    = mkNameNounPhrase ["niente"] Masc ; --- ne

  CanVV     = mkVerbVerbDir (mkVerbPres 
    "poss" "può" "poss" "potete" "possono" "possa" "puoi" "potere" "potuto") ;
  CanKnowVV = mkVerbVerbDir (mkVerbPres 
    "s" "sa" "sapp" "sapete" "sanno" "sappia" "sai" "sapere" "saputo") ;
  MustVV    = mkVerbVerbDir (mkVerbPres 
    "dev" "deve" "dobb" "dovete" "devono" "debba" "devi" "dovere" "dovuto") ;
  WantVV    = mkVerbVerbDir (mkVerbPres 
    "vogli" "vuole" "vogl" "volete" "vogliono" "voglia" "vuoi" "volere" "voluto") ;

  EverywhereNP = ss "dappertutto" ;
  SomewhereNP = ss ["qualche parte"] ; --- ne - pas
  NowhereNP = ss ["nessun parte"] ;

  AlthoughSubj = ss "benché" ** {m = Con} ;

  AlmostAdv = ss "quasi" ;
  QuiteAdv = ss "assai" ;

  InPrep = justCase (CPrep P_in) ;
  OnPrep = justCase (CPrep P_su) ;
  ToPrep = justCase dative ; ---
  ThroughPrep = justPrep "per" ;
  AbovePrep = justPrep "sopra" ;
  UnderPrep = justPrep "sotto" ;
  InFrontPrep = justPrep "davanti" ;
  BehindPrep = justPrep "dietro" ;
  BetweenPrep = justPrep "tra" ;
  FromPrep = justCase (CPrep P_da) ;
  BeforePrep = justPrep "prima" ;
  DuringPrep = justPrep "durante" ;
  AfterPrep = justPrep "dopo" ;
  WithPrep = justCase (CPrep P_con) ;
  WithoutPrep = justPrep "senza" ;
  ByMeansPrep = justPrep "per" ;
  PossessPrep = justCase genitive ;
  PartPrep = justCase genitive ; ---
  AgentPrep = justCase (CPrep P_da) ;

}
