
* Some notes on the syntax of this file, making it possible to use todoo-mode.el:

- Items start with "* "
- Sub-items start with "- "
- It should be noted somewhere in the item, who has reported the item
   Suggestion: Add "[who]" at the beginning of the item title
   (then one can use "assign item" in todoo-mode)
- Each item should have a priority
   Suggestion: Add "URGENT", "IMPORTANT" or "WISH" at the beginning of
   the item title
- Sort the items in priority order
   (todoo-mode can move an item up or down)

----------------------------------------------------------------------


* [peb] URGENT: Error messages for syntax errors

   When a syntax error is reported, it should be noted which file it
   is. Otherwise it is impossible to know where the error is 
   (if one uses the -s flag):

   	> i -s Domain/MP3/Domain_MP_Semantics.gf
   	syntax error at line 33 before ve , Proposition ,

   There's no problem with other kinds of errors:

	> i -s Domain/MP3/Domain_MP_Semantics.gf
	checking module Godis_Semantics
	Happened in linearization of userMove :
	product expected instead of {
	  pl : Str 
	}


* [peb] IMPORTANT: Add the -path of a module to daughter modules

   Then the main module does not have to know where all grandchildren are:

   file A.gf:
   abstract A = B ** {...}

   file B.gf:
   --# -path=./resource
   abstract B = Lang ** {...}

   I.e.: the file A.gf should not need to know that B.gf uses the
   resource library.


* [peb] IMPORTANT: incomplete concrete and interfaces

- The following works in GF:

   incomplete concrete TestDI of TestA = open (C=TestCI) in {
     lincat A = TestCI.A ** {p : Str};
     lin f = TestCI.f ** {p = "f"};
         g = TestCI.g ** {p = "g"};
   }

   > i -src TestDE.gf

- BUT, if we exchange "TestCI" for "C" we get an error:

   incomplete concrete TestDI of TestA = open (C=TestCI) in {
     lincat A = C.A ** {p : Str};
     lin f = C.f ** {p = "f"};
         g = C.g ** {p = "g"};
   }

   > i -src TestDE.gf
   compiling TestDE.gf... failed to find C
   OCCURRED IN
   atomic term C given TestCE TestCI TestCE TestDE
   OCCURRED IN
   renaming definition of f
   OCCURRED IN
   renaming module TestDE

- the other modules:

   abstract TestA = {
     cat A;
     fun f, g : A;
   }

   instance TestBE of TestBI = {
     oper hello = "hello";
          bye  = "bye";
   }

   interface TestBI = {
   oper hello : Str;
        bye : Str;
   }

   concrete TestCE of TestA = TestCI with (TestBI = TestBE);

   incomplete concrete TestCI of TestA = open TestBI in {
   lincat A = {s : Str};
   lin f = {s = hello};
       g = {s = bye};
   }

   concrete TestDE of TestA = TestDI with (TestCI = TestCE);

* [peb] IMPORTANT: Missing things in the help command

   > h -printer
   (the flag -printer=cfgm is missing)
   
   > h -cat
   WARNING: invalid option: cat

   > h -lang
   WARNING: invalid option: lang

   > h -language
   WARNING: invalid option: language

   > h -parser
   WARNING: invalid option: parser

   > h -aslkdjaslkdjss
   WARNING: invalid option: aslkdjaslkdjss
   Command not found.
   (it should note: "option not found")

   > h -optimize
   WARNING: invalid option: optimize

   > h -startcat
   WARNING: invalid option: startcat

   > h h
   h, help: h Command?
   (it should also mention "h -option")


* [peb] IMPORTANT: Set GF_LIb-PATH within GF 

   > sf libpath=~/GF/lib


* [peb] IMPORTANT: Set the starting category with "sf"

   > sf startcat=X


* [peb] IMPORTANT: import-flags 

- There are some inconsistencies when importing grammars:
   
   1. when doing "pg -printer=cfg", one must have used "i -conversion=finite",
   since "pg" doesn't care about the flags that are set in the grammar file

   2. when doing "pm -printer=cfgm", one must have set the flag
   "conversion=finite" within the grammar file, since "pm" doesn't
   care about the flags to the import command

   (I guess it's me (peb) who should fix this, but I don't know where
   the different flags reside...)

- Also, it must be decided in what cases flags can override other flags:

   a) in the grammar file, e.g. "flags conversion=finite;"
   b) on the command line, e.g. "> sf conversion=finite"
   c) as argument to a command, e.g. "> i -conversion=finite file.gf"

- A related issue is to decide the scope of flags:

   Some flags are (or should be) local to the module 
   (e.g. -coding and -path) 
   Other flags override daughter flags for daughter modules
   (e.g. -startcat and -conversion)

* [bringert] IMPORTANT: get right startcat flag when printing CFGM
   GF.CFGM.PrintCFGrammar.prCanonAsCFGM currently only gets the startcat
   flag from the top-level concrete module. This might be easier
   to fix if the multi grammar printers had access to more than just
   the CanonGrammar. 

* [peb] WISH: generalizing incomplete concrete 

   I want to be able to open an incomplete concrete module
   inside another incomplete conrete.
   Then I can instantiate both incompletes at the same time.

* [peb] WISH: _tmpi, _tmpo

   The files _tmpi and _tmpo are never removed when quitting GF.
   Further suggestion: put them in /tmp or similar.

   peb: när man använder "|" till ett systemanrop, t.ex:
   pg | ! sort
   så skapas filerna _tmpi och _tmpo. Men de tas aldrig bort.

   peb: Ännu bättre: ta bort filerna efteråt.

   aarne: Sant: när GF quittas (om detta inte sker onormalt).
   Eller när kommandot har kört färdigt (om det terminerar).

   peb: Bäst(?): skapa filerna i /tmp eller liknande.

   aarne: Ibland får man skrivrättighetsproblem - och det är
   inte kul om man måste ange en tmp-path. Och olika
   användare och gf-processer måste ha unika filnamn.
   Och vet inte hur det funkar på windows...

   aarne: Ett till alternativ skulle vara att använda handles
   utan några tmp-filer alls. Men jag har inte hunnit
   ta reda på hur det går till.

   björn: Lite slumpmässiga tankar:
   + man kan använda System.Directory.getTemporaryDirectory, så slipper man iaf bry sig om olika plattformsproblem.
   + sen kan man använda System.IO.openTempFile för att skapa en temporär fil. Den tas dock inte bort när programmet avslutas, så det får man fixa själv.
   + System.Posix.Temp.mkstemp gör nåt liknande, men dokumentationen är dålig.
   + biblioteket HsShellScript har lite funktioner för sånt här, se
   http://www.volker-wysk.de/hsshellscript/apidoc/HsShellScript.html#16


* [peb] WISH: Hierarchic modules

   Suggestion by peb: 
   The module A.B.C is located in the file A/B/C.gf
   
   Main advantage: you no longer need to state "--# -path=..." in
   modules

- How can this be combined with several modules inside one file?  
