-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathturtle.js
More file actions
114 lines (101 loc) · 3.55 KB
/
turtle.js
File metadata and controls
114 lines (101 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
Language: Turtle
Author: Mark Ellis <mark.ellis@stardog.com>, Vladimir Alexiev <vladimir.alexiev@ontotext.com>
Category: common
Description: Terse RDF Triple Language for the semantic web
Website: https://www.w3.org/TR/turtle/
*/
function turtle(hljs) {
var KEYWORDS = {
keyword: 'base|10 prefix|10 @base|10 @prefix|10',
literal: 'true|0 false|0',
built_in: 'a|0'
};
var IRI_LITERAL = {// https://www.w3.org/TR/turtle/#grammar-production-IRIREF
className: 'literal',
relevance: 1, // XML tags look also like relative IRIs
begin: /</,
end: />/,
illegal: /[^\x00-\x20<>"{}|^`]/, // TODO: https://www.w3.org/TR/turtle/#grammar-production-UCHAR
};
// https://www.w3.org/TR/turtle/#terminals
var PN_CHARS_BASE = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u10000-\uEFFFF';
var PN_CHARS_U = PN_CHARS_BASE+'_';
var PN_CHARS = '-'+PN_CHARS_U+'0-9\u00B7\u0300-\u036F\u203F-\u2040';
var BLANK_NODE_LABEL = '_:['+PN_CHARS_U+'0-9](['+PN_CHARS+'.]*['+PN_CHARS+'])?';
var PN_PREFIX = '['+PN_CHARS_BASE+'](['+PN_CHARS+'.]*['+PN_CHARS+'])?';
var PERCENT = '%[0-9A-Fa-f][0-9A-Fa-f]';
var PN_LOCAL_ESC = '\\\\[_~.!$&\'()*+,;=/?#@%-]';
var PLX = PERCENT+'|'+PN_LOCAL_ESC;
var PNAME_NS = '('+PN_PREFIX+')?:';
var PN_LOCAL = '(['+PN_CHARS_U+':0-9]|'+PLX+')(['+PN_CHARS+'.:]|'+PLX+')*(['+PN_CHARS+':]|'+PLX+')?';
var PNAME_LN = PNAME_NS+PN_LOCAL;
var PNAME_NS_or_LN = PNAME_NS+'('+PN_LOCAL+')?';
var PNAME = {
begin: PNAME_NS_or_LN,
relevance: 0,
className: 'symbol',
};
var BLANK_NODE = {
begin: BLANK_NODE_LABEL,
relevance: 10,
className: 'template-variable',
};
var LANGTAG = {
begin: /@[a-zA-Z]+([a-zA-Z0-9-]+)*/,
className: 'type',
relevance: 5, // also catches objectivec keywords like: @protocol, @optional
};
var DATATYPE = {
begin: '\\^\\^'+PNAME_LN,
className: 'type',
relevance: 10,
};
var TRIPLE_APOS_STRING = {
begin: /'''/,
end: /'''/,
className: 'string',
relevance: 0,
};
var TRIPLE_QUOTE_STRING = {
begin: /"""/,
end: /"""/,
className: 'string',
relevance: 0,
};
var APOS_STRING_LITERAL = JSON.parse(JSON.stringify(hljs.APOS_STRING_MODE));
APOS_STRING_LITERAL.relevance = 0;
var QUOTE_STRING_LITERAL = JSON.parse(JSON.stringify(hljs.QUOTE_STRING_MODE));
QUOTE_STRING_LITERAL.relevance = 0;
var NUMBER = JSON.parse(JSON.stringify(hljs.C_NUMBER_MODE));
NUMBER.relevance = 0;
return {
case_insensitive: true,
keywords: KEYWORDS,
aliases: ['turtle', 'ttl', 'n3', 'ntriples'],
contains: [
LANGTAG,
DATATYPE,
IRI_LITERAL,
BLANK_NODE,
PNAME,
TRIPLE_APOS_STRING, TRIPLE_QUOTE_STRING, // order matters
APOS_STRING_LITERAL, QUOTE_STRING_LITERAL,
NUMBER,
hljs.HASH_COMMENT_MODE,
],
exports: {
LANGTAG: LANGTAG,
DATATYPE: DATATYPE,
IRI_LITERAL: IRI_LITERAL,
BLANK_NODE: BLANK_NODE,
PNAME: PNAME,
TRIPLE_APOS_STRING: TRIPLE_APOS_STRING,
TRIPLE_QUOTE_STRING: TRIPLE_QUOTE_STRING,
APOS_STRING_LITERAL: APOS_STRING_LITERAL,
QUOTE_STRING_LITERAL: QUOTE_STRING_LITERAL,
NUMBER: NUMBER,
KEYWORDS: KEYWORDS,
}
};
}