--# -path=.:../abstract:../common:../prelude
concrete SymbolRon of Symbol = 
  CatRon ** open Prelude, ResRon in {
flags coding=utf8;
lin
  SymbPN i = mkSymb i.s ;
  IntPN i  = mkSymb i.s ;
  FloatPN i = mkSymb i.s ;
  NumPN i  = mkSymb (i.sp ! Masc) ;

  CNIntNP cn i = let gg = agrGender cn.g Sg in
  heavyNP {
    s = \\c => cn.s ! Sg ! Def ! (convCase c) ++ i.s ;
    a = agrP3 gg Sg ;
    hasClit = HasRef False ;
    ss = cn.s ! Sg ! Def ! ANomAcc ++ i.s 
    } ;
   
  CNSymbNP det cn xs = let gg = agrGender cn.g det.n;
                           st = if_then_else Species det.isDef Def Indef;
                           rs = if_then_else Species det.hasRef Def Indef;
                           ag = agrP3 gg det.n ;
                           hr = andB (getClit cn.a) det.hasRef;
                           nf = if_then_else NForm hr HasClit (HasRef False)
                        in                               
    {s = \\c => case c of 
                 {Vo =>
                   {comp = det.s ! gg ! No ++ det.size ++ cn.s ! det.n ! st ! ANomAcc ++ det.post ! gg ! No  ;
                    clit = \\cs => if_then_Str hr ((genCliticsCase ag c).s ! cs) [] };
                  _ => {comp = det.s ! gg ! c ++ det.size ++ cn.s ! det.n ! st ! (convCase c) ++ det.post ! gg ! c  ;
                    clit = \\cs => if_then_Str hr ((genCliticsCase ag c).s ! cs) [] }  
                    };
     a = ag ;
     nForm = nf ;
     isPol = False ;
     isPronoun = False ;
     indForm = det.s ! gg ! No ++ det.size ++cn.s ! det.n ! rs ! ANomAcc 
   } ;   
    
  CNNumNP cn i = let gg = agrGender cn.g Sg in 
    heavyNP {
    s = \\c => cn.s ! Sg ! Def ! (convCase c) ++ i.sp ! gg;
    a = agrP3 gg Sg ;
    hasClit = HasRef False ;
    ss = cn.s ! Sg ! Def ! ANomAcc ++ i.sp ! gg
    } ;
  SymbS sy = {s = \\_ => sy.s} ;

  SymbNum nn = {s,sp = \\_ => nn.s ; n = Pl; size = less20} ; -- need to know the size of the symbol to properly set it to less20 or plural
  SymbOrd nn = {s = \\n,g,nc => case nc of
                      {Da | Ge => artDem g n AGenDat ++ "de-" ++ artPos g n ANomAcc ++ nn.s ++ "-lea";
                       _       => artPos g n ANomAcc ++ nn.s ++ "-lea"  
                      };
               isPre = True       
                      } ;

lincat 

  Symb, [Symb] = SS ;

lin

  MkSymb s = s ;

  BaseSymb = infixSS "și" ; 
  ConsSymb = infixSS "," ;

oper mkSymb : Str -> PN = \ss ->
{ s = \\c => case c of 
      {Da | Ge => "lui" ++ ss;
       _       => ss 
       };
 g = Masc; n = Sg; a = Animate ;
 lock_PN = <>
};
  
}
