Skip to content

Instantly share code, notes, and snippets.

@evgenyneu
Last active November 26, 2018 23:23
Show Gist options
  • Select an option

  • Save evgenyneu/57bb61317b9b2d24311a05a6ec13e262 to your computer and use it in GitHub Desktop.

Select an option

Save evgenyneu/57bb61317b9b2d24311a05a6ec13e262 to your computer and use it in GitHub Desktop.

Revisions

  1. evgenyneu revised this gist Nov 26, 2018. No changes.
  2. evgenyneu renamed this gist Nov 26, 2018. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. evgenyneu created this gist Nov 26, 2018.
    432 changes: 432 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,432 @@
    %YAML 1.2
    ---
    # http://www.sublimetext.com/docs/3/syntax.html
    name: C/C++(11)
    file_extensions:
    - i
    first_line_match: |-
    (?x)
    -[*]-( Mode:)? C -[*]-
    |
    -\*- C\+\+ -\*-
    scope: source.i
    contexts:
    main:
    - include: comments
    - include: preprocessor-rule-enabled
    - include: preprocessor-rule-disabled
    - include: preprocessor-rule-other
    - include: pragma-mark
    - include: disabled
    - match: (R|Ru|RU|uR|UR)(\"\+\*\()\.*
    captures:
    1: prefix
    2: begin
    push:
    - meta_scope: raw.string.ccpp
    - match: (\)\+\*\")
    captures:
    0: end
    pop: true
    - include: comments
    - match: (R|Ru|RU|uR|UR)(\"\()\.*
    captures:
    1: prefix
    2: begin
    push:
    - meta_scope: raw.string.ccpp
    - match: (\)\")
    captures:
    0: end
    pop: true
    - include: comments
    - match: '(\:)\s*(\w+\(\w+\))+(?:\s*(?:/\*|//|\{))'
    captures:
    1: begin
    2: variable
    push:
    - meta_scope: member.initializer
    - match: '\{'
    captures:
    0: open.curly.bracket.block
    pop: true
    - include: comments
    - match: \b(break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while)\b
    scope: keyword.control.c
    - match: \b(catch|operator|try|throw|using|namespace)\b
    scope: keyword.control.c++
    - match: '\bdelete\b(\s*\[\])?|\bnew\b(?!])'
    scope: keyword.control.c++
    - match: \b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq)\b
    scope: keyword.operator.c++
    - match: \b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\b\s*
    scope: keyword.operator.cast.c++
    - match: \b(asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|string|int|long|short|signed|struct|typedef|union|unsigned|void)\b
    scope: storage.type.c
    - match: \b(class|wchar_t|nullptr_t)\b
    scope: storage.type.c++
    - match: \b(size_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|char16_t|char32_t)\b
    scope: storage.type.c++11
    - match: \btemplate\b\s*
    scope: storage.type.template.c++
    - match: \b(const|extern|register|restrict|static|volatile|inline)\b
    scope: storage.modifier.c
    - match: \b(export|mutable|typename)\b
    scope: storage.modifier.c++
    - match: \b(friend|explicit|virtual)\b
    scope: storage.modifier.c++
    - match: \b(private:|protected:|public:)
    scope: storage.modifier.c++
    - match: \b(export|mutable|typename)\b
    scope: storage.modifier.c++
    - match: \b(constexpr|auto)\b
    scope: storage.modifier.c++
    - match: \b(override|final|noexcept)\b
    scope: storage.modifier.c++
    - match: '\bk[A-Z]\w*\b'
    comment: common C constant naming idiom -- kConstantVariable
    scope: constant.other.variable.mac-classic.c
    - match: '\bg[A-Z]\w*\b'
    scope: variable.other.readwrite.global.mac-classic.c
    - match: '\bs[A-Z]\w*\b'
    scope: variable.other.readwrite.static.mac-classic.c
    - match: '\b(f|m)[A-Z]\w*\b'
    comment: common C++ instance var naming idiom -- fMemberName
    scope: variable.other.readwrite.member.c++
    - match: \bthis\b
    scope: variable.language.c++
    - match: \b(NULL|true|false|TRUE|FALSE)\b
    scope: constant.language.c
    - match: \bnullptr\b
    scope: constant.language.c++
    - match: '\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b'
    scope: constant.numeric.c
    - match: \b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\b
    scope: support.type.sys-types.c
    - match: \b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\b
    scope: support.type.pthread.c
    - match: \b(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)\b
    scope: support.type.stdint.c
    - match: \b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\b
    scope: support.constant.mac-classic.c
    - match: \b(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\b
    scope: support.type.mac-classic.c
    - match: \~\w+
    scope: deconstructor.ccpp
    - match: \w+\:\:\w+(\*)
    scope: pointer.ccpp
    captures:
    1: keyword.operator.pointer.ccp
    - match: (\*)\(\w+\)
    scope: pointer.ccpp
    captures:
    1: keyword.operator.pointer.ccp
    - match: \(\w+\)(\*)
    scope: pointer.ccpp
    captures:
    1: keyword.operator.pointer.ccp
    - match: \w+(\*)
    scope: pointer.ccpp
    captures:
    1: keyword.operator.pointer.ccp
    - match: (\*)\w+
    scope: pointer.ccpp
    captures:
    1: keyword.operator.pointer.ccp
    - match: (\&)\w+
    scope: address.ccpp
    captures:
    1: keyword.operator.address.ccp
    - match: '\w+(?=\[)'
    scope: array.ccpp
    - match: (?<=class|wchar_t|nullptr_t)\s\w+
    scope: meta.class-struct.c++ entity.name.type.c++
    - match: \w+\s*(?=\()
    scope: meta.function.c entity.name.function.c
    - match: '(?<=\.)\w+(?=[^\w|\.])'
    scope: meta.function.c meta.block.c meta.function-call.c support.function.any-method.c
    - match: (?<=\:\:)\w+
    scope: meta.function.c entity.name.function.c
    - match: '\w+\:\:'
    scope: meta.function.c entity.name.function.c
    - match: \:\:\w+
    scope: meta.function.c entity.name.function.c
    - match: \+\=|\-\=|\*\=|\/\=|\%\=|\&\=|\|\=|\^\=|\<\<\=|\>\>\=
    scope: keyword.operator.compound.ccpp
    - match: '\?|\:'
    scope: keyword.operator.conditional.ccpp
    - match: \!\s*(?=\w|\()
    scope: keyword.operator.logical.ccpp
    - match: \&\&|\|\|
    scope: keyword.operator.logical.ccpp
    - match: ~(?=\w)
    scope: keyword.operator.bitwise.ccpp
    - match: \&|\||\^|\<\<|\>\>
    scope: keyword.operator.bitwise.ccpp
    - match: \>\=
    scope: keyword.operator.comparison.ccpp
    - match: \<\=
    scope: keyword.operator.comparison.ccpp
    - match: \=\=|\!\=|\<|\>
    scope: keyword.operator.comparison.ccpp
    - match: \=|\+|\-|\*|\/|\%
    scope: keyword.operator.arithmetic.ccpp
    - match: '(?<=\s)\}(?=break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while)'
    scope: open.curly.bracket.block.ccpp
    - match: '\}(?=[^\;\s\r\n])'
    scope: close.curly.bracket.ccpp
    - match: '(?<=[^\s\r\n])\s*\}'
    scope: close.curly.bracket.ccpp
    - match: '\{(?=(\s*|\t*)\/\/\s*.*(\r|\n))'
    scope: open.curly.bracket.block.ccpp
    - match: '\{(?=(\s*|\t*)(\r|\n))'
    scope: open.curly.bracket.block.ccpp
    - match: '(?<=\s)\}(?=\;?)'
    scope: close.curly.bracket.block.ccpp
    - match: '^\}'
    scope: close.curly.bracket.block.ccpp
    - match: '\{'
    scope: open.curly.bracket.ccpp
    - match: '\}'
    scope: close.curly.bracket.ccpp
    - match: \(
    scope: open.round.bracket.ccpp
    - match: \)
    scope: close.round.bracket.ccpp
    - match: '\['
    scope: open.angle.bracket.ccpp
    - match: '\]'
    scope: close.angle.bracket.ccpp
    - match: \.
    scope: period.ccpp
    - match: \,
    scope: coma.ccpp
    - match: \;(?=(\s*|\t*)\/\/\s*.*)
    scope: semi_colon.eol.ccpp
    - match: \;(?=(\s*)(\r|\n))
    scope: semi_colon.eol.ccpp
    - match: \s*?\;\s*?$
    scope: semi_colon.eol.ccpp
    - match: \;
    scope: semi_colon.ccpp
    - match: '"'
    captures:
    0: punctuation.definition.string.begin.c
    push:
    - meta_scope: string.quoted.double.c
    - match: '"'
    captures:
    0: punctuation.definition.string.end.c
    pop: true
    - include: string_escaped_char
    - include: string_placeholder
    - match: "'"
    captures:
    0: punctuation.definition.string.begin.c
    push:
    - meta_scope: string.quoted.single.c
    - match: "'"
    captures:
    0: punctuation.definition.string.end.c
    pop: true
    - include: string_escaped_char
    - match: |-
    (?x)
    ^\s*\#\s*(define)\s+ # define
    ((?:[a-zA-Z_][a-zA-Z0-9_]*)) # macro name
    (?: # and optionally:
    (\() # an open parenthesis
    (
    \s* [a-zA-Z_][a-zA-Z0-9_]* \s* # first argument
    (?:(,) \s* [a-zA-Z_][a-zA-Z0-9_]* \s*)* # additional arguments
    (?:\.\.\.)? # varargs ellipsis?
    )
    (\)) # a close parenthesis
    )?
    captures:
    1: keyword.control.import.define.c
    2: entity.name.function.preprocessor.c
    4: variable.parameter.preprocessor.c
    5: punctuation.definition.parameters.c
    6: punctuation.separator.parameters.c
    8: punctuation.definition.parameters.c
    push:
    - meta_scope: meta.preprocessor.macro.c
    - match: (?=(?://|/\*))|$
    pop: true
    - match: (?>\\\s*\n)
    scope: punctuation.separator.continuation.c
    - include: $top_level_main
    - match: (\w+)
    scope: ""
    - match: ^\s*#\s*(error|warning)\b
    captures:
    1: keyword.control.import.error.c
    push:
    - meta_scope: meta.preprocessor.diagnostic.c
    - match: $
    pop: true
    - match: (?>\\\s*\n)
    scope: punctuation.separator.continuation.c
    - match: ^\s*#\s*(include|import)\b\s+
    captures:
    1: keyword.control.import.include.c
    push:
    - meta_scope: meta.preprocessor.c.include
    - match: (?=(?://|/\*))|$
    pop: true
    - match: (?>\\\s*\n)
    scope: punctuation.separator.continuation.c
    - match: '"'
    captures:
    0: punctuation.definition.string.begin.c
    push:
    - meta_scope: string.quoted.double.include.c
    - match: '"'
    captures:
    0: punctuation.definition.string.end.c
    pop: true
    - match: <
    captures:
    0: punctuation.definition.string.begin.c
    push:
    - meta_scope: string.quoted.other.lt-gt.include.c
    - match: ">"
    captures:
    0: punctuation.definition.string.end.c
    pop: true
    - match: ^\s*#\s*(define|defined|elif|else|if|ifdef|ifndef|line|pragma|undef)\b
    captures:
    1: keyword.control.import.c
    push:
    - meta_scope: meta.preprocessor.c
    - match: (?=(?://|/\*))|$
    pop: true
    - match: (?>\\\s*\n)
    scope: punctuation.separator.continuation.c
    comments:
    - match: ^/\* =(\s*.*?)\s*= \*/$\n?
    scope: comment.block.c
    captures:
    1: meta.toc-list.banner.block.c
    - match: /\*
    captures:
    0: punctuation.definition.comment.c
    push:
    - meta_scope: comment.block.c
    - match: \*/
    pop: true
    - match: \*/.*\n
    scope: invalid.illegal.stray-comment-end.c
    - match: ^// =(\s*.*?)\s*=\s*$\n?
    scope: comment.line.banner.c++
    captures:
    1: meta.toc-list.banner.line.c
    - match: //
    captures:
    0: punctuation.definition.comment.c
    push:
    - meta_scope: comment.line.double-slash.c++
    - match: $\n?
    pop: true
    - match: (?>\\\s*\n)
    scope: punctuation.separator.continuation.c++
    disabled:
    - match: ^\s*#\s*if(n?def)?\b.*$
    comment: eat nested preprocessor if(def)s
    push:
    - match: ^\s*#\s*endif\b
    pop: true
    - include: disabled
    - include: pragma-mark
    pragma-mark:
    - match: ^\s*(#\s*(pragma\s+mark)\s+(.*))
    scope: meta.section
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.pragma.c
    3: meta.toc-list.pragma-mark.c
    preprocessor-rule-disabled:
    - match: ^\s*(#(if)\s+(0)\b).*
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.if.c
    3: constant.numeric.preprocessor.c
    push:
    - match: ^\s*(#\s*(endif)\b)
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.endif.c
    pop: true
    - match: ^\s*(#\s*(else)\b)
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.else.c
    push:
    - match: (?=^\s*#\s*endif\b)
    pop: true
    - include: $top_level_main
    - match: ""
    push:
    - meta_scope: comment.block.preprocessor.if-branch
    - match: (?=^\s*#\s*(else|endif)\b)
    pop: true
    - include: disabled
    - include: pragma-mark
    preprocessor-rule-enabled:
    - match: ^\s*(#(if)\s+(0*1)\b)
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.if.c
    3: constant.numeric.preprocessor.c
    push:
    - match: ^\s*(#\s*(endif)\b)
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.endif.c
    pop: true
    - match: ^\s*(#\s*(else)\b).*
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.else.c
    push:
    - meta_content_scope: comment.block.preprocessor.else-branch
    - match: (?=^\s*#\s*endif\b)
    pop: true
    - include: disabled
    - include: pragma-mark
    - match: ""
    push:
    - match: (?=^\s*#\s*(else|endif)\b)
    pop: true
    - include: $top_level_main
    preprocessor-rule-other:
    - match: ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.c
    push:
    - match: ^\s*(#\s*(endif)\b)
    captures:
    1: meta.preprocessor.c
    2: keyword.control.import.endif.c
    pop: true
    - include: $top_level_main
    string_escaped_char:
    - match: '\\(\\|[abefnprtv''"?]|[0-3]\d{,2}|[4-7]\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8})'
    scope: constant.character.escape.c
    - match: \\.
    scope: invalid.illegal.unknown-escape.c
    string_placeholder:
    - match: |-
    (?x)%
    (\d+\$)? # field (argument #)
    [#0\- +']* # flags
    [,;:_]? # separator character (AltiVec)
    ((-?\d+)|\*(-?\d+\$)?)? # minimum field width
    (\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
    (hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier
    [diouxXDOUeEfFgGaACcSspn%] # conversion type
    scope: constant.other.placeholder.c
    - match: "%"
    scope: invalid.illegal.placeholder.c