Dateien einschließen

Top  Previous  Next

Beispiele > Unit_Abhängigkeit > Dateien einschließen

 

Nun ist alles für den entscheidenden Schritt vorbereitet. Wenn der Name einer Unit gefunden wurde und nach der entsprechenden Datei noch nicht gesucht wurde, wird über die Such-Verzeichnisse iteriert, um den Pfad mit der Funktion find_file zu finden:

 

  vstr::cursor cr = m_vIncludeDirs.getCursor();

  while(cr.gotoNext())

  {

    str sPath;

    if(!is_directory(cr.value()))

       throw CTT_Error(cr.value() + " is not a directory");

    if(find_file(cr.value(), change_extension(sInclude, ".pas"), sPath))

    {

...

 

Dabei wird mit change_extension der die für Pascal-Dateien übliche pas-Dateierweiterung an den Namen angehängt. Vorsichtshalber wird zunächst mit is_directory noch geprüft, ob das Such-Verzeichnis auf Ihrem Computer vorhanden ist. Wenn Sie die Verzeichnis-Liste nicht modifiziert haben (s.o.) oder nicht können, weil Sie vermutlich kein Pascal installiert haben, so wird das Programm an dieser Stelle abgebrochen.

 

War die Suche erfolgreich, so enthält die Referenz-Variable sPath den gesuchten Pfad. Mittels load_file wird die Datei nun in den string buf geladen. Der Clou ist nun, dass die unit-Produktion wie eine normale Funktion aufgerufen werden kann, um den neuen Text zu parsen. Sie dient damit als "Unter-Parser":

 

unit(buf, ++xiLevel, sInclude);

 

Während die unit-Produktion im Haupt-Parser nur zwei Parameter hat, bekommt sie für den Aufruf als Unter-Parser noch den zusätzlichen Text-Parameter an erster Stelle. In dem Unter-Parser wird nun genauso nach weiteren eingeschlossenen Units gesucht, wie zuvor im Haupt-Parser.

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English