.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:
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?
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!
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
-//
Kommentardouble-dash
---
Kommentarnumber-sign
-#
Kommentarpercentage
-%
Kommentarcharacter
- 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.<
,\e
,1
.escape
- Escape-Sequenzen wie\e
wärenconstant.character.escape
.language
- Konstanten (allgemein), die von der Sprache bereitgestellt werden, die "speziell" sind, wietrue
,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 alsentity.*
(dafür verwenden wirmeta.*
). Aber wir verwendenentity.*
für die "Platzhalter" in der größeren Entität, z. Wenn die Entität ein Kapitel ist, verwenden wirentity.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 ausmarkup.underline
abgeleitet ist. Wenn es keine Themenregel gibt, die speziell aufmarkup.underline.link
abzielt, übernimmt sie den Unterstreichungsstil.bold
- Fettschrift (Text, derstrong
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, derem
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ürmarkup.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ärenstorage.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 wiestatic
,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 BeispielNSLog
in Objective-C istsupport.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 dietypedef
(undstruct
) 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 BeispielNSApp
in AppKit.other
- Das obige sollte erschöpfend sein, aber für alles andere verwenden Siesupport.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 wiethis
,super
,self
, etc.other
- andere Variablen wie$some_variables
.
Tags und Links syntax-highlighting syntax sublimetext2 customization