Sprachunterstützung

Die Sprachunterstützung kann (im Rahmen der Projekteinstellungen) über Projekt|Einstellungen (Registerkarte Sprachunterstützung) ein- und ausgeschaltet werden. Die Sprachunterstützung umfaßt u.a. folgende Aspekte:
  • Festlegung der Keywords.
  • Festlegung der Trennzeichen sowie Kommentar- und String-Begrenzern.
  • Festlegung von Klammerpaaren.
  • Besondere Darstellung von Keywords und Kommentaren und Strings.
Diese sprachabhängigen Aspekte werden ausschließlich in separaten Dateien (mit einem Namen der Form *_key.xml) behandelt. Für jede Sprache (bzw. Sprachfamilie) muß eine solche XML-Datei angelegt werden. Folgende Tags können (müssen aber nicht, falls für die Sprache bzw. Sprachfamilie nicht zutreffend) verwendet werden (vgl. Beispiel am Ende dieses Abschnitts):
  • <language>

  • Das language-Tag ist grundsätzlich das Wurzelelement und enthält die Attribute name und extensions. Der Wert des Attributs name ist der Name der jeweiligen Sprache bzw. Sprachfamilie, der Wert des Attributs extensions ist eine (durch Leerzeichen separierte) Liste von Extensions, die Ed42 darauf hinweisen, dass die im aktuellen File definierten Einstellungen verwendet werden sollen.

    Beispiel:
    <language name="Java" extensions=".java .jav">
    ...
    </language>
     

  • <keywordChars>

  • Das Tag enthält ein Attribut mit Namen value, dessen Wert eine Zeichenkette ist, die alle Zeichen enthält aus der Schlüsselwörter gebildet werden.

    Beispiel:
    <keywordChars value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_#"/>
     

  • <delimiterChars>

  • Das Tag enthält ein Attribut mit Namen value, dessen Wert eine Zeichenkette ist, die alle Zeichen enthält, die als Delimiter fungieren.

    Beispiel:
    <delimiterChars value="()[]{},;:+*-\/&apos;&quot;&lt;&gt;.="/>
     

  • <stringDelimiterChars>

  • Das Tag enthält ein Attribut mit Namen value, dessen Wert eine Zeichenkette ist, die alle Zeichen enthält, die Strings begrenzen.

    Beispiel:
    <stringDelimiterChars value="&apos;&quot;"/>
     

  • <escapeChars>

  • Das Tag enthält ein Attribut mit Namen value, dessen Wert eine Zeichenkette ist, die alle Zeichen enthält, welche die Wirkung eines (in einer anderen Zeichenkette) folgenden Zeichens aufheben. Beispielsweise wird das Zeichen '"' im in der Zeichenkette '\"' nicht als Stringbegrenzer behandelt wenn das Zeichen '\' als Escapezeichen definiert ist.

    Beispiel:
    <escapeChars value="\"/>
     

  • <classDelimiter>

  • Das Tag enthält ein Attribut mit Namen value, dessen Wert den Klassendelimiter (z.B. bei C++ ist das der String '::') enthält.

    Beispiel:
    <classDelimiter value="."/>
     

  • <keywords> und <key>

  • Über das keyword-Tag werden mehrere key-Tags zusammengefaßt. Ein key-Tag enthält ein Attribut mit Namen value, dessen Wert ein Schlüsselwort der aktuellen Sprache bzw. Sprachfamilie ist.

    Beispiel:
    <keywords>
       <key value="if"/>
       <key value="else"/>
       <key value="switch"/>
       ...
    </keywords>
     

  • <comments>

  • Das Tag enthält folgende Attribute:
     
    Attributname Beschreibung
    startLong Start eines (potentiell) zeilenübergreifenden Kommentars.
    endLong Ende eines (potentiell) zeilenübergreifenden Kommentars.
    startShort Start eines Kommentars, der am Zeilenende beendet ist.
    startLongExt Zusätzliches (optionales) Attribut. Enthält weitere Möglichkeit zur Einleitung von (potentiell) zeilenübergreifenden Kommentaren. Beispielsweise werden für die Programmiersprache Java Kommentare, die mit '/**' starten, von solchen unterschieden, die lediglich mit '/*' starten.

    Beispiel:
    <comments startLong="/*" endLong="*/" startShort="//" startLongExt="/**"/>

     
  • <brackets> und <bracket>

  • Über das brackets-Tag werden mehrere bracket-Tags zusammengefaßt. Ein bracket-Tag enthält die Attribute start und end. Der Wert des Attributes start ist eine öffnende Klammer, der Wert des Attrubutes end die zugehörige schließende Klammer.

    Beispiel:
    <brackets>
       <bracket start="(" end=")"/>
       <bracket start="{" end="}"/>
       <bracket start="[" end="]"/>
       <bracket start="/*" end="*/"/>
    </brackets>
     
     

  • <compounds> und <compound>

  • Über das compounds-Tag werden mehrere compound-Tags zusammengefaßt. Ein compound-Tag enthält genau ein Attribut, das entweder den Namen start oder end besitzt. Ein start-Attribut enthält einen Bezeichner oder eine Zeichenkette, der/die einen zusammengesetzten Ausdruck einleitet, entsprechend enthält ein end-Attribut einen Bezeichner oder eine Zeichenkette, der/die einen zusammengesetzten Ausdruck beendet.

    Beispiel:
    <compounds>
       <compound start="{"/>
       <compound end="}"/>
    </compounds>
     
     

  • <commentTypes> und <commentType>

  • Über das commentTypes-Tag werden mehrere commentType-Tags zusammengefaßt. Ein commentType-Tag enthält ein Attribut das Angaben zu Optionen enthält, die bei der Erstellung und Formatierung von Kommentaren berücksichtigt werden sollen. Folgende Werte sind möglich:
     
    Wert Bedeutung
    MODULES Die Generierung von Kommentaren für Module soll unterstützt werden.
    CLASSES Die Generierung von Kommentaren für Klassen soll unterstützt werden.
    FUNCTIONS Die Generierung von Kommentaren für Funktionen soll unterstützt werden.
    PROCEDURES Die Generierung von Kommentaren für Prozeduren soll unterstützt werden.
    STRUCTS Die Generierung von Kommentaren für Strukturen soll unterstützt werden.
    INTERFACES Die Generierung von Kommentaren für Schnittstellen soll unterstützt werden.
    ONLY_METHODS Funktionen und Prozeduren können nur im Rahmen von Klassen definiert werden können.
    WITH_EXCEPTIONS Die aktuelle Sprache/Sprachklasse unterstützt Exceptions.
    WITHOUT_RETURN_TYPE Bei Verwendung des @return-Tags muß der Typdes Returnwertes nicht spezifiziert werdenl (nur relevant bei Verwendung von Java-Style-Kommentaren).
    WITH_SEPERATOR_LINES Bei der Formatierung von Kommentaren in Quelltexten sollen zur besseren Lesbarkeit Leerzeilen eingefügt werden (nur relevant bei Verwendung von Java-Style-Kommentaren).

    Beispiel:
    <commentTypes>
       <commentType value="FUNCTIONS"/>
       <commentType value="CLASSES"/>
       <commentType value="INTERFACES"/>
       <commentType value="ONLY_METHODS"/>
       <commentType value="WITH_EXCEPTIONS"/>
       <commentType value="WITHOUT_RETURN_TYPE"/>
       <commentType value="WITH_SEPARATOR_LINES"/>
    </commentTypes>

    Die Werte 'CLASSES', 'FUNCTIONS', 'PROCEDURES', 'STRUCTS' und 'INTERFACES' werden zusätzlich für Navigationszwecke ausgewertet. Beispielsweise bewirkt die Angabe des Werts 'FUNCTIONS', dass Fuktionen im Rahmen der Navigation besonders unterstützt werden. U.a. wird dann im Navigationsregister eine Seite für Funktionen angezeigt.
     

  • <commands> und <command>

  • Über das commands-Tag werden mehrere command-Tags zusammengefaßt. Ein command-Tag enthält ein Attribut mit Namen value, das ein Kommando zur Sprachunterstützung enthält. Folgende Kommandos werden unterstützt:
     
     
    Kommando Bedeutung
    IGNORE_UPPER_LOWER Die Angabe des Kommandos führt dazu, dass zwischen Groß- und Kleinschreibung bei der Suchen nach Keywords nicht unterschieden wird.

    Achtung: Wird das Kommando angegeben, müssen Schlüsselwörter, Kommentarbegrenzer, Begrenzer von zusammengesetzten Ausdrücken und Informationen zu Klammerpaaren  grundsätzlich in Großschreibweise angegeben werden.

    WITH_NESTED_STRINGS Die Angabe ist sinnvoll, wenn die Sprache geschachtelte Strings zulässt. Beispiel: "Er sagte: 'Das Wort "Tralala" habe ich nicht gesagt'" ist in Javascript ein korrekter geschachtelter String.
    AUTOPARSE Das Kommando ist anzugeben, wenn ED42 für diese Sprache den integrierten Parser zur Bestimmung von Navigationsinformationen verwenden soll. Da Ed42 z.Zt. nur Parser für Delphi, Java und Javascript bereitstellt ist das Kommando für andere Sprachen nicht zugelassen.

     
  • <makroFile>
    Über das makroFile-Tag kann einer Sprache ein Makrofile zugeordnet werden. Wird eine Datei dieser Sprache editiert, können die in der Datei enthaltenen Makros über F2 angezeigt und anschließend ausgeführt werden. Vgl. Sprachabhängige Makros.

    Beispiel:
    <makroFile value="pascal.mak"/>

  •  
Ed42 ist in der Lage, mehrere Sprachdefinitionen gleichzeitig zu verarbeiten, sodaß in einem Projekt z.B. eine C-Datei und eine Pascal-Datei entsprechend den zugehörigen .key-Dateien behandelt werden können. Welche Sprachen von Ed42 (gleichzeitig) unterstützt werden, hängt einzig von den entsprechenden Definitionsdateien im Programmverzeichnis von Ed42 ab, die alle beim Start von Ed42 geladen werden (für welche Sprachen die zugehörigen Sprachdefinitionen geladen wurden, kann über Projekt|Einstellungen, Registerkarte Sprachunterstützung angezeigt werden).

Beispiel: Sprachunterstützung für Pascal/Delphi (pascal_key.xml)

<language name="Pascal" extensions=".pas">
   <keywordChars value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"/>
   <delimiterChars value="()[]{},;:+*-\/&apos;&quot;&lt;&gt;."/>
   <stringDelimiterChars value="&apos;"/>
   <escapeChars value=""/>
   <classDelimiter value="."/>
   <keywords>
      <key value="ABSOLUTE"/>
      <key value="AND"/>
      <key value="ARRAY"/>
      <key value="BEGIN"/>
      <key value="BOOLEAN"/>
      <key value="BREAK"/>
      <key value="BYTE"/>
      <key value="CASE"/>
      <key value="CHAR"/>
      <key value="CLASS"/>
      <key value="CONST"/>
      <key value="CONSTRUCTOR"/>
      <key value="DESTRUCTOR"/>
      <key value="DIV"/>
      <key value="DO"/>
      <key value="DOWNTO"/>
      <key value="ELSE"/>
      <key value="END"/>
      <key value="EXCEPT"/>
      <key value="EXTERNAL"/>
      <key value="FALSE"/>
      <key value="FILE"/>
      <key value="FINALLY"/>
      <key value="FOR"/>
      <key value="FORWARD"/>
      <key value="FUNCTION"/>
      <key value="GOTO"/>
      <key value="IF"/>
      <key value="IMPLEMENTATION"/>
      <key value="IN"/>
      <key value="INLINE"/>
      <key value="INTEGER"/>
      <key value="INTERFACE"/>
      <key value="INTERRUPT"/>
      <key value="LABEL"/>
      <key value="MOD"/>
      <key value="NIL"/>
      <key value="NOT"/>
      <key value="OBJECT"/>
      <key value="OF"/>
      <key value="OR"/>
      <key value="PACKED"/>
      <key value="PRIVATE"/>
      <key value="PROCEDURE"/>
      <key value="PROGRAM"/>
      <key value="PUBLIC"/>
      <key value="RAISE"/>
      <key value="REAL"/>
      <key value="RECORD"/>
      <key value="REPEAT"/>
      <key value="SET"/>
      <key value="SHL"/>
      <key value="SHR"/>
      <key value="STRING"/>
      <key value="THEN"/>
      <key value="TO"/>
      <key value="TRUE"/>
      <key value="TRY"/>
      <key value="TYPE"/>
      <key value="UNIT"/>
      <key value="UNTIL"/>
      <key value="USES"/>
      <key value="VAR"/>
      <key value="VIRTUAL"/>
      <key value="WHILE"/>
      <key value="WITH"/>
      <key value="WORD"/>
      <key value="XOR"/>
   </keywords>
   <comments startLong="(*" endLong="*)" startShort="//"/>
   <brackets>
      <bracket start="(" end=")"/>
      <bracket start="{" end="}"/>
      <bracket start="[" end="]"/>
      <bracket start="BEGIN" end="END"/>
   </brackets>
   <compounds>
      <compound start="BEGIN"/>
      <compound start="CASE"/>
      <compound start="CLASS"/>
      <compound start="INTERFACE"/>
      <compound start="OBJECT"/>
      <compound start="RECORD"/>
      <compound end="END"/>
   </compounds>
   <commentTypes>
      <commentType value="MODULES"/>
      <commentType value="FUNCTIONS"/>
      <commentType value="PROCEDURES"/>
      <commentType value="CLASSES"/>
      <commentType value="STRUCTS"/>
      <commentType value="INTERFACES"/>
   </commentTypes>
   <commands>
      <command value="IGNORE_UPPER_LOWER"/>
      <command value="AUTOPARSE"/>
   </commands>
   <makroFile value="pascal.mak"/>
</language>
 

Last Change: 27.10.2001
© Copyright by Stefan Brüning. All rights reserved