tm-grammars
Version:
Collecton of TextMate grammars in JSON
229 lines (228 loc) • 5.95 kB
JSON
{
"displayName": "Gettext PO",
"fileTypes": [
"po",
"pot",
"potx"
],
"name": "po",
"patterns": [
{
"begin": "^(?:(?=(msg(?:id(_plural)?|ctxt))\\s*\"[^\"])|\\s*$)",
"end": "\\z",
"patterns": [
{
"include": "#body"
}
]
},
{
"include": "#comments"
},
{
"match": "^msg(id|str)\\s+\"\"\\s*$\\n?",
"name": "comment.line.number-sign.po"
},
{
"captures": {
"1": {
"name": "constant.language.po"
},
"2": {
"name": "punctuation.separator.key-value.po"
},
"3": {
"name": "string.other.po"
}
},
"match": "^\"(?:([^:\\s]+)(:)\\s+)?([^\"]*)\"\\s*$\\n?",
"name": "meta.header.po"
}
],
"repository": {
"body": {
"patterns": [
{
"begin": "^(msgid(_plural)?)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.control.msgid.po"
}
},
"end": "^(?!\")",
"name": "meta.scope.msgid.po",
"patterns": [
{
"begin": "(\\G|^)\"",
"end": "\"",
"name": "string.quoted.double.po",
"patterns": [
{
"match": "\\\\[\"\\\\]",
"name": "constant.character.escape.po"
}
]
}
]
},
{
"begin": "^(msgstr)(?:(\\[)(\\d+)(]))?\\s+",
"beginCaptures": {
"1": {
"name": "keyword.control.msgstr.po"
},
"2": {
"name": "keyword.control.msgstr.po"
},
"3": {
"name": "constant.numeric.po"
},
"4": {
"name": "keyword.control.msgstr.po"
}
},
"end": "^(?!\")",
"name": "meta.scope.msgstr.po",
"patterns": [
{
"begin": "(\\G|^)\"",
"end": "\"",
"name": "string.quoted.double.po",
"patterns": [
{
"match": "\\\\[\"\\\\]",
"name": "constant.character.escape.po"
}
]
}
]
},
{
"begin": "^(msgctxt)(?:(\\[)(\\d+)(]))?\\s+",
"beginCaptures": {
"1": {
"name": "keyword.control.msgctxt.po"
},
"2": {
"name": "keyword.control.msgctxt.po"
},
"3": {
"name": "constant.numeric.po"
},
"4": {
"name": "keyword.control.msgctxt.po"
}
},
"end": "^(?!\")",
"name": "meta.scope.msgctxt.po",
"patterns": [
{
"begin": "(\\G|^)\"",
"end": "\"",
"name": "string.quoted.double.po",
"patterns": [
{
"match": "\\\\[\"\\\\]",
"name": "constant.character.escape.po"
}
]
}
]
},
{
"captures": {
"1": {
"name": "punctuation.definition.comment.po"
}
},
"match": "^(#~).*$\\n?",
"name": "comment.line.number-sign.obsolete.po"
},
{
"include": "#comments"
},
{
"match": "^(?!\\s*$)[^\"#].*$\\n?",
"name": "invalid.illegal.po"
}
]
},
"comments": {
"patterns": [
{
"begin": "^(?=#)",
"end": "(?!\\G)",
"patterns": [
{
"begin": "(#,)\\s+",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.po"
}
},
"end": "\\n",
"name": "comment.line.number-sign.flag.po",
"patterns": [
{
"captures": {
"1": {
"name": "entity.name.type.flag.po"
}
},
"match": "(?:\\G|,\\s*)(fuzzy|(?:no-)?(?:c|objc|sh|lisp|elisp|librep|scheme|smalltalk|java|csharp|awk|object-pascal|ycp|tcl|perl|perl-brace|php|gcc-internal|qt|boost)-format)"
}
]
},
{
"begin": "#\\.",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.po"
}
},
"end": "\\n",
"name": "comment.line.number-sign.extracted.po"
},
{
"begin": "(#:)[\\t ]*",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.po"
}
},
"end": "\\n",
"name": "comment.line.number-sign.reference.po",
"patterns": [
{
"match": "(\\S+:)([;\\d]*)",
"name": "storage.type.class.po"
}
]
},
{
"begin": "#\\|",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.po"
}
},
"end": "\\n",
"name": "comment.line.number-sign.previous.po"
},
{
"begin": "#",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.po"
}
},
"end": "\\n",
"name": "comment.line.number-sign.po"
}
]
}
]
}
},
"scopeName": "source.po"
}