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

concrete RelativeCgg of Relative = CatCgg ** open Prelude, ResCgg in {

lin
{-
	--IdRP  : RP ;                      -- which

	Apparently IdRP means Identity Relative Pronoun i.e. the most atomic part
	of a relative pronoun. The abstract syntax seems to alude that more 
	Relative pronouns can be formed when such a relative subject or object marker is affixed to 
	a prepositional Phrase.
	In Runynakore and Rukiga, relative pronouns depend on
	Noun Class , Gender  and the case of the noun they 
	refer to.

	Since this involves a table of two tables, we use ResCgg to prepare all possibilities


-}

	IdRP = {s = mkRPs; rObjVariant2 = mkRObjV2};        --: RP ;                      -- which
	--RelCl    : Cl -> RCl ;            -- such that John loves her
	-- The simplest way to form a relative clause is from a clause by
	-- a pronoun similar to "such that".
	RelCl cl = { 
      s = "kugira ngu" ++ cl.s ;
      agr = AgrYes cl.subjAgr;
      rp = mkRPs;
      --rObjVariant2 = mkRObjV2;
      pres =cl.pres;
      perf =cl.perf;
      root = cl.root;
      --morphs = cl.morphs;
      isPresBlank = cl.isPresBlank;
      isPerfBlank = cl.isPerfBlank;
      compl =cl.compl;
      isCompApStem = False;
      whichRel = Such_That;                             
      }; -- such that John loves her. why does it need any case?

	-- The more proper ways are from a verb phrase 
	-- (formed in [``Verb`` Verb.html]) or a sentence 
	-- with a missing noun phrase (formed in [``Sentence`` Sentence.html]).
	--RelVP    : RP -> VP -> RCl ;      -- who loves John
	
	RelVP rp vp =
	{ 
      s = []; 
      agr = AgrNo; 
      rp = rp.s;
      --rObjVariant2 = rp.rObjVariant2;
      pres =vp.pres;
      perf =vp.perf;
      root = vp.s;
      --morphs = vp.morphs;
      isPresBlank = vp.isPresBlank;
      isPerfBlank = vp.isPerfBlank;
      compl =vp.comp;
      isCompApStem = vp.isCompApStem;
      whichRel = RF RSubj;                           
      };
	
  --RelSlash : RP -> ClSlash -> RCl ; -- whom John loves
  RelSlash rp clSlash =
  	let comp = case clSlash.complType of{
  					Ap 			  => clSlash.ap;
  					Adverbial 	  => clSlash.adv;
  					AdverbialVerb => clSlash.adV;
  					_		  => []
  				};
  		isCompApStem = case clSlash.complType of{
    					    Adverbial => True;
    					    _		  => False
  				};
  	in 
    	{ 
      s = clSlash.s; 
      agr = AgrYes clSlash.subjAgr; 
      rp = rp.s;
      --rObjVariant2 = rp.rObjVariant2;
      pres   = clSlash.pres;
      perf   = clSlash.perf;
      root   = clSlash.root;
      --morphs = clSlash.morphs;
      isPresBlank = clSlash.isPresBlank;
      isPerfBlank = clSlash.isPerfBlank;
      compl  = comp;
      isCompApStem = isCompApStem;
      whichRel = RF RObj;                           
    };

	{-
--1 Relative clauses and pronouns

abstract Relative = Cat ** {

  fun

-- The simplest way to form a relative clause is from a clause by
-- a pronoun similar to "such that".

    RelCl    : Cl -> RCl ;            -- such that John loves her

-- The more proper ways are from a verb phrase 
-- (formed in [``Verb`` Verb.html]) or a sentence 
-- with a missing noun phrase (formed in [``Sentence`` Sentence.html]).

    RelVP    : RP -> VP -> RCl ;      -- who loves John
    RelSlash : RP -> ClSlash -> RCl ; -- whom John loves

-- Relative pronouns are formed from an 'identity element' by prefixing
-- or suffixing (depending on language) prepositional phrases or genitives.

    IdRP  : RP ;                      -- which
    FunRP : Prep -> NP -> RP -> RP ;  -- the mother of whom

-}

}
