troff.js
84 lines
| 2.3 KiB
| application/javascript
|
JavascriptLexer
r1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others | |||
r4105 | // Distributed under an MIT license: https://codemirror.net/LICENSE | |||
r1 | ||||
(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); | ||||
} | ||||
}; | ||||
}); | ||||
r4105 | CodeMirror.defineMIME('text/troff', 'troff'); | |||
CodeMirror.defineMIME('text/x-troff', 'troff'); | ||||
CodeMirror.defineMIME('application/x-troff', 'troff'); | ||||
r1 | ||||
}); | ||||