123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- ;(function (mod) {
- if (typeof exports == 'object' && typeof module == 'object')
- // CommonJS
- mod(require('../../lib/codemirror'))
- else if (typeof define == 'function' && define.amd)
- // AMD
- define(['../../lib/codemirror'], mod)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- 'use strict'
- function wordRegexp(words) {
- return new RegExp('^((' + words.join(')|(') + '))\\b', 'i')
- }
- var keywordArray = [
- 'package',
- 'message',
- 'import',
- 'syntax',
- 'required',
- 'optional',
- 'repeated',
- 'reserved',
- 'default',
- 'extensions',
- 'packed',
- 'bool',
- 'bytes',
- 'double',
- 'enum',
- 'float',
- 'string',
- 'int32',
- 'int64',
- 'uint32',
- 'uint64',
- 'sint32',
- 'sint64',
- 'fixed32',
- 'fixed64',
- 'sfixed32',
- 'sfixed64',
- 'option',
- 'service',
- 'rpc',
- 'returns',
- ]
- var keywords = wordRegexp(keywordArray)
- CodeMirror.registerHelper('hintWords', 'protobuf', keywordArray)
- var identifiers = new RegExp('^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*')
- function tokenBase(stream) {
- // whitespaces
- if (stream.eatSpace()) return null
- // Handle one line Comments
- if (stream.match('//')) {
- stream.skipToEnd()
- return 'comment'
- }
- // Handle Number Literals
- if (stream.match(/^[0-9\.+-]/, false)) {
- if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return 'number'
- if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return 'number'
- if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return 'number'
- }
- // Handle Strings
- if (stream.match(/^"([^"]|(""))*"/)) {
- return 'string'
- }
- if (stream.match(/^'([^']|(''))*'/)) {
- return 'string'
- }
- // Handle words
- if (stream.match(keywords)) {
- return 'keyword'
- }
- if (stream.match(identifiers)) {
- return 'variable'
- }
- // Handle non-detected items
- stream.next()
- return null
- }
- CodeMirror.defineMode('protobuf', function () {
- return {
- token: tokenBase,
- fold: 'brace',
- }
- })
- CodeMirror.defineMIME('text/x-protobuf', 'protobuf')
- })
|