// 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') mod(require('../../lib/codemirror')) else if (typeof define == 'function' && define.amd) define(['../../lib/codemirror'], mod) else mod(CodeMirror) })(function (CodeMirror) { 'use strict' CodeMirror.defineMode('troff', function () { var words = {} function tokenBase(stream) { if (stream.eatSpace()) return null var sol = stream.sol() var ch = stream.next() if (ch === '\\') { if (stream.match('fB') || stream.match('fR') || stream.match('fI') || stream.match('u') || stream.match('d') || stream.match('%') || stream.match('&')) { return 'string' } if (stream.match('m[')) { stream.skipTo(']') stream.next() return 'string' } if (stream.match('s+') || stream.match('s-')) { stream.eatWhile(/[\d-]/) return 'string' } if (stream.match('(') || stream.match('*(')) { stream.eatWhile(/[\w-]/) return 'string' } return 'string' } if (sol && (ch === '.' || ch === "'")) { if (stream.eat('\\') && stream.eat('"')) { stream.skipToEnd() return 'comment' } } if (sol && ch === '.') { if (stream.match('B ') || stream.match('I ') || stream.match('R ')) { return 'attribute' } if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) { stream.skipToEnd() return 'quote' } if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) { return 'attribute' } } stream.eatWhile(/[\w-]/) var cur = stream.current() return words.hasOwnProperty(cur) ? words[cur] : null } function tokenize(stream, state) { return (state.tokens[0] || tokenBase)(stream, state) } return { startState: function () { return { tokens: [] } }, token: function (stream, state) { return tokenize(stream, state) }, } }) CodeMirror.defineMIME('text/troff', 'troff') CodeMirror.defineMIME('text/x-troff', 'troff') CodeMirror.defineMIME('application/x-troff', 'troff') })