// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `isc`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { dependencies: ['etc'], extensions: ['.gtkrc'], names: ['gtkrc', 'gtk', 'gtk-1', 'gtk-2'], patterns: [{include: '#main'}], repository: { attachment: { begin: '^\\s*(class|widget_class|widget)(?=$|\\s)', beginCaptures: {1: {name: 'storage.type.subject.gtkrc'}}, end: '$', name: 'meta.attachment.gtkrc', patterns: [ { begin: '\\G\\s+(?="|\')', end: '(?!\\G)', patterns: [{include: '#widgetPath'}] }, { begin: '(?<=\\s|^)(style|binding)(?=$|\\s)', beginCaptures: {1: {name: 'keyword.operator.$1.gtkrc'}}, end: '("[^"]*"|\'[^\']*\')|(?=\\s*(?:$|#))', endCaptures: {1: {patterns: [{include: '#styleName'}]}}, patterns: [ { captures: { 1: {patterns: [{include: 'etc#kolon'}]}, 2: {name: 'storage.modifier.priority.gtkrc'} }, match: '\\G\\s*(:)\\s*(application|gtk|highest|lowest|rc|theme)(?=$|\\s)', name: 'meta.priority.gtkrc' } ] }, {include: 'etc#comment'} ] }, binding: { patterns: [ { begin: '(?<=\\s|^|\\G)(bind)(?=$|\\s)', beginCaptures: {1: {name: 'storage.type.bind.gtkrc'}}, end: '(?<=})', name: 'meta.binding.gtkrc', patterns: [ { begin: '\\G\\s*(?="|\')', end: '(?!\\G)', patterns: [{include: '#bindingKey'}] }, { begin: '{', captures: {0: {patterns: [{include: '#brackets'}]}}, end: '}', name: 'meta.block.gtkrc', patterns: [{include: '#bindingAction'}, {include: 'etc#comment'}] }, {include: 'etc#comment'} ] }, { begin: '(?<=\\s|^|\\G)(unbind)(?=$|\\s)', beginCaptures: {1: {name: 'storage.type.unbind.gtkrc'}}, end: '\\s*("[^"]*"|\'[^\']*\')|(?=\\s*(?:$|#))', endCaptures: {1: {patterns: [{include: '#bindingKey'}]}}, name: 'meta.unbinding.gtkrc' } ] }, bindingAction: { begin: '("|\')(?!\\d)\\w+(?:[-_]\\w+)*(\\1)(?=$|\\s)', beginCaptures: { 0: {name: 'entity.name.signal.gtkrc'}, 1: {name: 'punctuation.definition.signal.begin.gtkrc'}, 2: {name: 'punctuation.definition.signal.end.gtkrc'} }, end: '(?<=\\))|(?=\\s*})', name: 'meta.action.signal.gtkrc', patterns: [ { begin: '(\\()', beginCaptures: { 0: {name: 'punctuation.definition.list.begin.bracket.round.gtkrc'}, 1: {name: 'brackethighlighter.round'} }, end: '(\\))', endCaptures: { 0: {name: 'punctuation.definition.list.end.bracket.round.gtkrc'}, 1: {name: 'brackethighlighter.round'} }, name: 'meta.parameters.gtkrc', patterns: [{include: '#miscValues'}] } ] }, bindingBlock: { begin: '^\\s*(binding)(?=$|\\s)', beginCaptures: {1: {name: 'storage.type.subject.gtkrc'}}, end: '(?<=})', name: 'meta.binding-set.gtkrc', patterns: [ { begin: '\\G\\s*(?="|\')', end: '(?!\\G)', patterns: [{include: '#styleName'}] }, { begin: '{', captures: {0: {patterns: [{include: '#brackets'}]}}, end: '}', name: 'meta.block.gtkrc', patterns: [{include: '#binding'}, {include: 'etc#comment'}] } ] }, bindingKey: { begin: '("|\')', beginCaptures: { 0: {name: 'punctuation.definition.keybinding.begin.gtkrc'} }, end: '\\1', endCaptures: {0: {name: 'punctuation.definition.keybinding.end.gtkrc'}}, name: 'constant.other.keybinding.gtkrc', patterns: [ { captures: { 1: {name: 'punctuation.definition.begin.modifier.gtkrc'}, 3: {name: 'punctuation.definition.end.modifier.gtkrc'} }, match: '(?i)(<)(alt|control|ctl|hyper|meta|mod[1-5]|release|shi?ft|super)(>)', name: 'keyword.operator.modifier.${2:/downcase}.gtkrc' } ] }, brackets: { patterns: [ { captures: {0: {name: 'brackethighlighter.curly'}}, match: '{', name: 'punctuation.section.block.begin.bracket.curly.gtkrc' }, { captures: {0: {name: 'brackethighlighter.curly'}}, match: '}', name: 'punctuation.section.block.end.bracket.curly.gtkrc' } ] }, classProperty: { begin: '(?<=\\s|^|\\G)\\s*((?!\\d)[-\\w]+)\\s*((::))\\s*((?!\\d)[-\\w]+)\\s*(=)[ \\t]*', beginCaptures: { 1: {name: 'entity.name.tag.class.gtkrc'}, 2: {name: 'punctuation.separator.double-colon.gtkrc'}, 3: {name: 'meta.separator.gtkrc'}, 4: {name: 'support.variable.property.gtkrc'}, 5: {patterns: [{include: 'etc#eql'}]} }, end: '$|(?=\\s*#)', name: 'meta.property.gtkrc', patterns: [{include: '#miscValues'}] }, colourDef: { begin: '(?<=\\s|^|\\G)(color)((\\[))\\s*("[^"]*"|\'[^\']*\')\\s*((\\]))\\s*(=)[ \\t]*', beginCaptures: { 1: {name: 'storage.type.colour.gtkrc'}, 2: {name: 'punctuation.definition.colour.begin.gtkrc'}, 3: {name: 'brackethighlighter.square'}, 4: {patterns: [{include: '#styleName'}]}, 5: {name: 'punctuation.definition.colour.end.gtkrc'}, 6: {name: 'brackethighlighter.square'}, 7: {patterns: [{include: 'etc#eql'}]} }, end: '(?=\\s*(?:$|#))', name: 'meta.definition.colour.gtkrc', patterns: [{include: '#colourValue'}] }, colourRef: { captures: {1: {name: 'punctuation.definition.colour-name.gtkrc'}}, match: '(?:\\G|(?<=,)\\s*)(@)\\w+', name: 'variable.colour-name.gtkrc' }, colourValue: { patterns: [ {include: '#colourRef'}, { captures: { 1: {name: 'string.quoted.colour-value.gtkrc'}, 2: {name: 'punctuation.definition.colour-value.begin.gtkrc'}, 3: {name: 'punctuation.definition.constant.gtkrc'}, 4: {name: 'constant.other.colour.rgb-value.hex.gtkrc'}, 5: {name: 'punctuation.definition.colour-value.end.gtkrc'} }, match: '(?i)(?:\\G|(?<=,)\\s*)(("|\')(#)([0-9A-F]{12}|[0-9A-F]{9}|[0-9A-F]{6}|[0-9A-F]{3})(\\2))' }, { begin: '(?:\\G|(?<=,)\\s*)({)', captures: {1: {patterns: [{include: '#brackets'}]}}, end: '(})', name: 'meta.triplet.colour-value.gtkrc', patterns: [{include: 'etc#num'}, {include: 'etc#comma'}] }, { begin: '(?:\\G|(?<=,)\\s*)(mix|shade|lighter|darker)\\s*(?=\\()', beginCaptures: {1: {name: 'keyword.other.function.expression.gtkrc'}}, end: '(?!\\G)', name: 'meta.function.colour.$1.gtkrc', patterns: [ { begin: '\\G(\\()', beginCaptures: { 0: { name: 'punctuation.definition.list.begin.bracket.round.gtkrc' }, 1: {name: 'brackethighlighter.round'} }, end: '(\\))', endCaptures: { 0: { name: 'punctuation.definition.list.end.bracket.round.gtkrc' }, 1: {name: 'brackethighlighter.round'} }, name: 'meta.parameters.gtkrc', patterns: [ {include: 'etc#num'}, {include: 'etc#comma'}, {include: '#colourValue'} ] } ] } ] }, engine: { begin: '(?<=\\s|^|\\G)(engine)\\s*(("|\')((?:(?!\\3).)++)(\\3))', beginCaptures: { 1: {name: 'storage.type.colour.gtkrc'}, 2: {name: 'entity.name.engine.gtkrc'}, 3: {name: 'punctuation.definition.engine.begin.gtkrc'}, 5: {name: 'punctuation.definition.engine.end.gtkrc'} }, end: '(?<=})', name: 'meta.definition.engine.${4:/downcase}.gtkrc', patterns: [ { begin: '{', captures: {0: {patterns: [{include: '#brackets'}]}}, end: '}', name: 'meta.block.engine-config.gtkrc', patterns: [{include: '#engineInnards'}] }, {include: 'etc#comment'} ] }, engineInnards: { patterns: [ {include: '#engineNestedBlock'}, {include: '#style'}, {include: '#styleCustom'}, {include: '#setting'}, {include: 'etc#comment'}, { captures: {1: {name: 'storage.type.block.label.gtkrc'}}, match: '^\\s*(image|boxfill)(?=\\s*(?:$|#))' } ] }, engineKnown: { match: '(?xi)(?))(\\1)', name: 'string.quoted.pixmap.gtkrc' }, { begin: '("|\')', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.gtkrc'} }, end: '\\1', endCaptures: { 0: {name: 'punctuation.definition.string.end.gtkrc'} }, name: 'string.quoted.pixmap.gtkrc' } ] } ] }, {include: '#classProperty'} ] }, styleBlock: { begin: '(?<=\\s|^|\\G)style(?=$|\\s)', beginCaptures: {0: {name: 'storage.type.style.gtkrc'}}, end: '(?<=})', name: 'meta.style.gtkrc', patterns: [ { begin: '\\G\\s*(?=["\'])', end: '(?!\\G)', patterns: [{include: '#styleName'}] }, { begin: '=', beginCaptures: { 0: {name: 'keyword.operator.assignment.parent.gtkrc'} }, end: '\\s*("[^"]*"|\'[^\']*\')|(?=\\s*{)', endCaptures: {1: {patterns: [{include: '#styleName'}]}}, name: 'meta.parent-style.gtkrc' }, { begin: '{', captures: {0: {patterns: [{include: '#brackets'}]}}, end: '}', name: 'meta.block.gtkrc', patterns: [ {include: '#style'}, {include: '#engine'}, {include: 'etc#comment'} ] } ] }, styleCustom: { begin: '(?<=\\s|^|\\G)\\s*((?!\\d)[-\\w]+)(?=\\[\\s*[^\\s\\[\\]]+\\s*\\])', beginCaptures: {1: {name: 'support.type.property-name.gtkrc'}}, end: '$|(?=\\s*#)', name: 'meta.property.custom.gtkrc', patterns: [ { begin: '(?:\\G|(?<=\\]))((\\[))\\s*', beginCaptures: { 1: { name: 'punctuation.definition.accessor.begin.bracket.square.gtkrc' }, 2: {name: 'brackethighlighter.square'} }, end: '\\s*((\\]))', endCaptures: { 1: { name: 'punctuation.definition.accessor.begin.bracket.square.gtkrc' }, 2: {name: 'brackethighlighter.square'} }, name: 'meta.item-access.gtkrc', patterns: [ {include: '#stateDefinedOnly'}, {include: 'etc#num'}, {include: 'etc#bool'}, {match: '\\w+', name: 'constant.other.qualifier.gtkrc'} ] }, { begin: '(?<=\\])\\s*(=)[ \\t]*', beginCaptures: {1: {patterns: [{include: 'etc#eql'}]}}, end: '$|(?=\\s*#)', patterns: [{include: '#miscValues'}] } ] }, styleName: { begin: '("|\')', beginCaptures: {0: {name: 'punctuation.definition.style.begin.gtkrc'}}, end: '\\1', endCaptures: {0: {name: 'punctuation.definition.style.end.gtkrc'}}, name: 'entity.name.style.gtkrc' }, widgetPath: { begin: '("|\')', beginCaptures: {0: {name: 'punctuation.definition.selector.begin.gtkrc'}}, end: '\\1', endCaptures: {0: {name: 'punctuation.definition.selector.end.gtkrc'}}, name: 'constant.other.selector.widget.gtkrc', patterns: [ { captures: {0: {name: 'punctuation.separator.parent.selector.gtkrc'}}, match: '\\.', name: 'meta.separator.gtkrc' }, { captures: { 1: {name: 'punctuation.definition.class.begin.gtkrc'}, 2: {name: 'punctuation.definition.class.end.gtkrc'} }, match: '(<)\\w+(>)', name: 'entity.name.class.gtkrc' }, {include: 'etc#globSimple'} ] } }, scopeName: 'source.gtkrc' } export default grammar