ultraviolet/broken_syntax/c++.syntax
2009-06-12 18:06:56 -07:00

109 lines
3.9 KiB
YAML

---
name: C++
fileTypes:
- cc
- cpp
- cp
- cxx
- c++
- C
- h
- hh
- hpp
- h++
firstLineMatch: -\*- C\+\+ -\*-
scopeName: source.c++
uuid: 26251B18-6B1D-11D9-AFDB-000D93589AF6
foldingStartMarker: "(?x)\n\
\t\t /\\*\\*(?!\\*)\n\
\t\t|^(?![^{]*?//|[^{]*?/\\*(?!.*?\\*/.*?\\{)).*?\\{\\s*($|//|/\\*(?!.*?\\*/.*\\S))\n\
\t"
patterns:
- include: source.c
- name: storage.modifier.c++
match: \b(friend|explicit|private|protected|public|virtual)\b
- name: keyword.control.c++
match: \b(catch|namespace|operator|try|throw|using)\b
- name: keyword.control.c++
match: \bdelete\b(\s*\[\])?|\bnew\b(?!])
- name: variable.other.readwrite.member.c++
match: \b(f|m)[A-Z]\w*\b
comment: common C++ instance var naming idiom -- fMemberName
- name: variable.language.c++
match: \b(this)\b
- name: storage.type.template.c++
match: \btemplate\b\s*
- name: keyword.operator.cast.c++
match: \b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\b\s*
- name: keyword.operator.c++
match: \b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq)\b
- name: storage.type.c++
match: \b(class|wchar_t)\b
- name: storage.modifier.c++
match: \b(export|mutable|typename)\b
- name: meta.function.destructor.c++
endCaptures:
"0":
name: punctuation.definition.parameters.c
begin: "(?x)\n\
\t\t\t\t(?: ^ # begin-of-line\n\
\t\t\t\t | (?: (?<!else|new|=) ) # or word + space before name\n\
\t\t\t\t)\n\
\t\t\t\t((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\n\
\t\t\t\t \\s*(\\() (?=[^)]*\\) # match \"(\" and use look-ahead for \")\"\n\
\t\t\t\t (\\s*=\\s*0)?\\s* # optional pure modifier\n\
\t\t\t\t (\\{|\\n)) # start bracket or end-of-line\n\
\t\t\t"
beginCaptures:
"1":
name: entity.name.function.c
"2":
name: punctuation.definition.parameters.c
end: \)
patterns:
- include: $base
- name: meta.function.destructor.prototype.c++
endCaptures:
"0":
name: punctuation.definition.parameters.c
begin: "(?x)\n\
\t\t\t\t(?: ^ # begin-of-line\n\
\t\t\t\t | (?: (?<!else|new|=) ) # or word + space before name\n\
\t\t\t\t)\n\
\t\t\t\t((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\n\
\t\t\t\t \\s*(\\() (?=[^)]*\\) # match \"(\" and use look-ahead for \")\"\n\
\t\t\t\t (\\s*=\\s*0)?\\s* # optional pure modifier\n\
\t\t\t\t ;) # terminating semi-colon\n\
\t\t\t"
beginCaptures:
"1":
name: entity.name.function.c
"2":
name: punctuation.definition.parameters.c
end: \)
patterns:
- include: $base
- name: meta.function.constructor.c++
endCaptures:
"0":
name: punctuation.definition.parameters.c
begin: "(?x)\n\
\t\t\t\t(?: ^\\s*) # begin-of-line\n\
\t\t\t\t((?!while|for|do|if|else|switch|catch|enumerate|r?iterate)[A-Za-z_][A-Za-z0-9_:]*) # actual name\n\
\t\t\t\t \\s*(\\() (?= # match \"(\"\n\
\t\t\t\t (?<arg> [^()]++ | \\( \\g<arg>*+ \\) )*+ # function arguments\n\
\t\t\t\t \\) # match \")\"\n\
\t\t\t\t (\\s* : (?<base> \\s* [A-Za-z_][A-Za-z0-9_]* \\( \\g<arg>*+ \\) ) (, \\g<base>)* (, (?=\\s*\\n))? )? \\s* # optional base constructors\n\
\t\t\t\t (\\{|\\n)) # start bracket or end-of-line\n\
\t\t\t"
beginCaptures:
"1":
name: entity.name.function.c
"2":
name: punctuation.definition.parameters.c
end: \)
patterns:
- include: $base
foldingStopMarker: (?<!\*)\*\*/|^\s*\}
keyEquivalent: ^~C
comment: I don't think anyone uses .hp. .cp tends to be paired with .h. (I could be wrong. :) -- chris