Gibt es Standards für tmlanguage Keyword-Typen?

7

.tmlanguage -Dateien funktionieren, indem Sie eine Liste von Schlüsselwertpaaren definieren. Reguläre Ausdrücke sind die Schlüssel und der Typ der Syntax ist der Wert. Dies geschieht auf die folgende XML-Weise:

%Vor%

Meine Hauptfrage ist: Gibt es eine Liste von Werten, die anstelle von constant.numeric verwendet werden könnten, wenn die Datei von einem Texteditor wie Sublime verwendet werden soll?

    
FracturedRetina 05.05.2014, 02:11
quelle

2 Antworten

15

Eine grundlegende Einführung finden Sie im Abschnitt Sprachgrammatiken des TextMate-Handbuchs. Im Abschnitt Benennungskonventionen werden einige Basisbereiche beschrieben, z. B. comment , keyword , meta , storage , usw. Diese Klassen können dann unterklassiert werden, um so viele Details wie möglich zu erhalten, z. B. constant.numeric.integer.long.hexadecimal.python . Es ist jedoch sehr wichtig zu beachten, dass dies keine festen Regeln sind - nur Vorschläge. Dies wird offensichtlich, wenn Sie verschiedene Sprachdefinitionen scannen und beispielsweise alle verschiedenen Möglichkeiten sehen, auf die Funktionen angewendet werden - meta.function-call , support.function.name , meta.function-call punctuation.definition.parameters usw.

Der beste Weg, um über Bereiche zu lernen, besteht darin, vorhandene .tmLanguage -Dateien zu untersuchen und die Quelle verschiedener Sprachen zu betrachten und zu sehen, welche Bereiche wo zugewiesen sind. Das XML-Format ist sehr schwer zu durchsuchen, daher verwende ich das ausgezeichnete PackageDev -Plugin, um das XML in YAML zu übersetzen. Es ist dann viel einfacher zu scannen und zu sehen, welche Bereiche durch welche Regexes beschrieben werden:

Eine andere Möglichkeit zu lernen ist zu sehen, wie unterschiedliche Sprachkonstrukte im Bereich liegen, und dafür empfehle ich sehr, ScopeAlways . Nach der Installation und Aktivierung platzieren Sie einfach den Cursor und die Bereiche, die für diese Position gelten, werden in der Statusleiste angezeigt. Dies ist besonders nützlich beim Entwerfen von Farbschemata, da Sie leicht erkennen können, welche Selektoren ein interessantes Sprachmittel hervorheben.

Wenn Sie interessiert sind, ist das hier verwendete Farbschema Neon , das ich entworfen habe so viele Sprachen wie möglich sehen so gut wie möglich aus und decken so viele Bereiche wie möglich ab. Fühlen Sie sich frei, durchzusehen, wie die verschiedenen Sprachelemente hervorgehoben werden. Dies könnte Ihnen auch dabei helfen, Ihr .tmLanguage so zu gestalten, dass es mit anderen Sprachen konsistent ist.

Ich hoffe, das alles hilft, viel Glück!

    
MattDMo 08.05.2014, 16:27
quelle
12

Ja. Das .tmlanguage -Format wurde ursprünglich von TextMate verwendet. Das TextMate-Handbuch enthält eine vollständige Dokumentation für das Format, einschließlich der möglichen Arten von Sprachkonstrukten.

Von der entsprechenden Dokumentseite im hierarchischen Format kopiert:

  
  • comment - für Kommentare.   
    • line - Zeilenkommentare, wir spezialisieren uns weiter, so dass der Typ der Kommentar-Startzeichen aus dem Bereich extrahiert werden kann   
      • double-slash - // Kommentar
      •   
      • double-dash - -- Kommentar
      •   
      • number-sign - # Kommentar
      •   
      • percentage - % Kommentar
      •   
      • character - andere Arten von Zeilenkommentaren.
      •   
    •   
    • block - mehrzeilige Kommentare wie /* … */ und <!-- … --> .   
      • documentation - eingebettete Dokumentation.
      •   
    •   
  •   
  • constant - verschiedene Formen von Konstanten.   
    • numeric - diejenigen, die Zahlen darstellen, z. 42 , 1.3f , 0x4AB1U .
    •   
    • character - diejenigen, die Zeichen darstellen, z. &lt; , \e , 1 .
    •   
    • escape - Escape-Sequenzen wie \e wären constant.character.escape .
    •   
    • language - Konstanten (allgemein), die von der Sprache bereitgestellt werden, die "speziell" sind, wie true , false , nil , YES , NO , usw.
    •   
    • other - andere Konstanten, z.B. Farben in CSS.
    •   
  •   
  • entity - Eine Entität verweist auf einen größeren Teil des Dokuments, z. B. ein Kapitel, eine Klasse, eine Funktion oder ein Tag. Wir definieren nicht die gesamte Entität als entity.* (dafür verwenden wir meta.* ). Aber wir verwenden entity.* für die "Platzhalter" in der größeren Entität, z. Wenn die Entität ein Kapitel ist, verwenden wir entity.name.section für den Kapiteltitel.   
    • name - Wir benennen die größere Entität.   
      • function - Der Name einer Funktion.
      •   
      • type - Der Name einer Typdeklaration oder Klasse.
      •   
      • tag - ein Tag-Name.
      •   
      • section - Der Name ist der Name eines Abschnitts / einer Überschrift.
      •   
    •   
    • other - andere Entitäten.   
      • inherited-class - Name der Superklasse / Basisklasse.
      •   
      • attribute-name - Der Name eines Attributs (hauptsächlich in Tags).   Wir benennen die größere Entität.
      •   
    •   
  •   
  • invalid - Zeug, das "ungültig" ist.   
    • illegal - unzulässig, z.B. ein kaufmännisches Und-Zeichen oder ein Kleiner-als-Zeichen in HTML (das nicht Teil einer Entität / eines Tags ist).
    •   
    • deprecated - für veraltete Inhalte, z. Verwenden einer API-Funktion, die veraltet ist oder Styling mit striktem HTML verwendet.
    •   
  •   
  • keyword - Schlüsselwörter (wenn diese nicht in die anderen Gruppen fallen).   
    • control - bezieht sich hauptsächlich auf die Ablaufsteuerung wie "continue", "while", "return", usw.
    •   
    • operator - -Operatoren können entweder textuell (z. B. oder) oder Zeichen sein.
    •   
    • other - andere Schlüsselwörter.
    •   
  •   
  • markup - Dies ist für Markup-Sprachen und gilt im Allgemeinen für größere Teilmengen des Textes.   
    • underline - unterstrichener Text.   
      • link - Dies ist für Links gedacht, da dies aus markup.underline abgeleitet ist. Wenn es keine Themenregel gibt, die speziell auf markup.underline.link abzielt, übernimmt sie den Unterstreichungsstil.
      •   
    •   
    • bold - Fettschrift (Text, der strong und ähnlich ist, sollte vorzugsweise von diesem Namen abgeleitet sein).
    •   
    • heading - eine Abschnittsüberschrift. Geben Sie optional die Überschriftenebene als nächstes Element an, z. B. markup.heading.2.html für <h2>…</h2> in HTML.
    •   
    • italic - kursiver Text (Text, der em phasized und ähnlich ist, sollte vorzugsweise von diesem Namen abgeleitet werden).
    •   
    • list - Listenelemente.   
      • numbered - nummerierte Listenelemente.
      •   
      • unnumbered - nicht nummerierte Listenelemente.
      •   
    •   
    • quote - zitierter (manchmal blockierter) Text.
    •   
    • raw - Text, der wörtlich ist, z.B. Codelisten. Normalerweise ist die Rechtschreibprüfung für markup.raw deaktiviert.
    •   
    • other - andere Markup-Konstrukte.
    •   
  •   
  • meta - Der Metabereich wird im Allgemeinen verwendet, um größere Teile des Dokuments zu markieren. Zum Beispiel wäre die gesamte Zeile, die eine Funktion deklariert, meta.function und die Teilmengen wären storage.type , entity.name.function , variable.parameter usw.und nur Letzteres würde gestylt werden. Manchmal wird der Metateil des Geltungsbereichs nur dazu verwendet, das allgemeinere Element, das gestylt wird, zu beschränken, die meisten Zeitabschnitte werden jedoch in Bereichsauswahlelementen für die Aktivierung von Bundle-Elementen verwendet. Zum Beispiel gibt es in Objective-C einen Meta-Bereich für die Interface-Deklaration einer Klasse und der Implementierung, wodurch die gleichen Tab-Trigger je nach Kontext unterschiedlich expandiert werden können.
  •   
  • storage - Dinge im Zusammenhang mit "Speicher".   
    • type - Der Typ von etwas, class , function , int , var , usw.
    •   
    • modifier - ein Speichermodifikator wie static , final , abstract , usw.
    •   
  •   
  • string - Zeichenfolgen   
    • quoted - zitierte Strings.   
      • single - einzelne Strings in Anführungszeichen: 'foo' .
      •   
      • double - doppelt zitierte Strings: "foo" .
      •   
      • triple - dreifache Strings in Anführungszeichen: """Python""" .
      •   
      • other - andere Arten der Angebotserstellung: $'shell' , %s{...} .
      •   
    •   
    • unquoted - für Dinge wie here-docs und here-strings.
    •   
    • interpolated - Zeichenfolgen, die "ausgewertet" werden: 'date' , $(pwd) .
    •   
    • regexp - reguläre Ausdrücke: /(\w+)/ .
    •   
    • other - andere Stringtypen (sollten selten verwendet werden).
    •   
  •   
  • support - Dinge, die von einem Framework oder einer Bibliothek bereitgestellt werden, sollten unterhalb der Unterstützung sein.   
    • function - Funktionen, die vom Framework / der Bibliothek bereitgestellt werden. Zum Beispiel NSLog in Objective-C ist support.function .
    •   
    • class - , wenn das Framework / die Bibliothek Klassen bereitstellt.
    •   
    • type - Typen, die vom Framework / der Bibliothek bereitgestellt werden, wird wahrscheinlich nur für Sprachen verwendet, die von C abgeleitet sind und die typedef (und struct ) haben. Die meisten anderen Sprachen würden neue Typen als Klassen einführen.
    •   
    • constant - Konstanten (magische Werte), die vom Framework / der Bibliothek bereitgestellt werden.
    •   
    • variable - Variablen, die vom Framework / der Bibliothek bereitgestellt werden. Zum Beispiel NSApp in AppKit.
    •   
    • other - Das obige sollte erschöpfend sein, aber für alles andere verwenden Sie support.other .
    •   
  •   
  • variable - Variablen. Nicht alle Sprachen erlauben eine einfache Identifizierung (und damit Markup) dieser.   
    • parameter - wenn die Variable als Parameter deklariert ist.
    •   
    • language - reservierte Sprachvariablen wie this , super , self , etc.
    •   
    • other - andere Variablen wie $some_variables .
    •   
  •   
    
Chris Devereux 08.05.2014 15:40
quelle