123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- /**********************************************************
- * This script provides syntax highlighting support for
- * the N-Triples format.
- * N-Triples format specification:
- * https://www.w3.org/TR/n-triples/
- ***********************************************************/
- /*
- The following expression defines the defined ASF grammar transitions.
- pre_subject ->
- {
- ( writing_subject_uri | writing_bnode_uri )
- -> pre_predicate
- -> writing_predicate_uri
- -> pre_object
- -> writing_object_uri | writing_object_bnode |
- (
- writing_object_literal
- -> writing_literal_lang | writing_literal_type
- )
- -> post_object
- -> BEGIN
- } otherwise {
- -> ERROR
- }
- */
- ;(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'
- CodeMirror.defineMode('ntriples', function () {
- var Location = {
- PRE_SUBJECT: 0,
- WRITING_SUB_URI: 1,
- WRITING_BNODE_URI: 2,
- PRE_PRED: 3,
- WRITING_PRED_URI: 4,
- PRE_OBJ: 5,
- WRITING_OBJ_URI: 6,
- WRITING_OBJ_BNODE: 7,
- WRITING_OBJ_LITERAL: 8,
- WRITING_LIT_LANG: 9,
- WRITING_LIT_TYPE: 10,
- POST_OBJ: 11,
- ERROR: 12,
- }
- function transitState(currState, c) {
- var currLocation = currState.location
- var ret
- // Opening.
- if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI
- else if (currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI
- else if (currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI
- else if (currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI
- else if (currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE
- else if (currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL
- // Closing.
- else if (currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED
- else if (currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED
- else if (currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ
- else if (currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ
- else if (currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ
- else if (currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ
- else if (currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ
- else if (currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ
- // Closing typed and language literal.
- else if (currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG
- else if (currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE
- // Spaces.
- else if (c == ' ' && (currLocation == Location.PRE_SUBJECT || currLocation == Location.PRE_PRED || currLocation == Location.PRE_OBJ || currLocation == Location.POST_OBJ))
- ret = currLocation
- // Reset.
- else if (currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT
- // Error
- else ret = Location.ERROR
- currState.location = ret
- }
- return {
- startState: function () {
- return {
- location: Location.PRE_SUBJECT,
- uris: [],
- anchors: [],
- bnodes: [],
- langs: [],
- types: [],
- }
- },
- token: function (stream, state) {
- var ch = stream.next()
- if (ch == '<') {
- transitState(state, ch)
- var parsedURI = ''
- stream.eatWhile(function (c) {
- if (c != '#' && c != '>') {
- parsedURI += c
- return true
- }
- return false
- })
- state.uris.push(parsedURI)
- if (stream.match('#', false)) return 'variable'
- stream.next()
- transitState(state, '>')
- return 'variable'
- }
- if (ch == '#') {
- var parsedAnchor = ''
- stream.eatWhile(function (c) {
- if (c != '>' && c != ' ') {
- parsedAnchor += c
- return true
- }
- return false
- })
- state.anchors.push(parsedAnchor)
- return 'variable-2'
- }
- if (ch == '>') {
- transitState(state, '>')
- return 'variable'
- }
- if (ch == '_') {
- transitState(state, ch)
- var parsedBNode = ''
- stream.eatWhile(function (c) {
- if (c != ' ') {
- parsedBNode += c
- return true
- }
- return false
- })
- state.bnodes.push(parsedBNode)
- stream.next()
- transitState(state, ' ')
- return 'builtin'
- }
- if (ch == '"') {
- transitState(state, ch)
- stream.eatWhile(function (c) {
- return c != '"'
- })
- stream.next()
- if (stream.peek() != '@' && stream.peek() != '^') {
- transitState(state, '"')
- }
- return 'string'
- }
- if (ch == '@') {
- transitState(state, '@')
- var parsedLang = ''
- stream.eatWhile(function (c) {
- if (c != ' ') {
- parsedLang += c
- return true
- }
- return false
- })
- state.langs.push(parsedLang)
- stream.next()
- transitState(state, ' ')
- return 'string-2'
- }
- if (ch == '^') {
- stream.next()
- transitState(state, '^')
- var parsedType = ''
- stream.eatWhile(function (c) {
- if (c != '>') {
- parsedType += c
- return true
- }
- return false
- })
- state.types.push(parsedType)
- stream.next()
- transitState(state, '>')
- return 'variable'
- }
- if (ch == ' ') {
- transitState(state, ch)
- }
- if (ch == '.') {
- transitState(state, ch)
- }
- },
- }
- })
- // define the registered Media Type for n-triples:
- // https://www.w3.org/TR/n-triples/#n-triples-mediatype
- CodeMirror.defineMIME('application/n-triples', 'ntriples')
- // N-Quads is based on the N-Triples format (so same highlighting works)
- // https://www.w3.org/TR/n-quads/
- CodeMirror.defineMIME('application/n-quads', 'ntriples')
- // previously used, though technically incorrect media type for n-triples
- CodeMirror.defineMIME('text/n-triples', 'ntriples')
- })
|