1 | // https://tools.ietf.org/html/rfc3986#appendix-A
|
---|
2 |
|
---|
3 | Prism.languages.uri = {
|
---|
4 | 'scheme': {
|
---|
5 | pattern: /^[a-z][a-z0-9+.-]*:/im,
|
---|
6 | greedy: true,
|
---|
7 | inside: {
|
---|
8 | 'scheme-delimiter': /:$/
|
---|
9 | }
|
---|
10 | },
|
---|
11 | 'fragment': {
|
---|
12 | pattern: /#[\w\-.~!$&'()*+,;=%:@/?]*/,
|
---|
13 | inside: {
|
---|
14 | 'fragment-delimiter': /^#/
|
---|
15 | }
|
---|
16 | },
|
---|
17 | 'query': {
|
---|
18 | pattern: /\?[\w\-.~!$&'()*+,;=%:@/?]*/,
|
---|
19 | inside: {
|
---|
20 | 'query-delimiter': {
|
---|
21 | pattern: /^\?/,
|
---|
22 | greedy: true
|
---|
23 | },
|
---|
24 | 'pair-delimiter': /[&;]/,
|
---|
25 | 'pair': {
|
---|
26 | pattern: /^[^=][\s\S]*/,
|
---|
27 | inside: {
|
---|
28 | 'key': /^[^=]+/,
|
---|
29 | 'value': {
|
---|
30 | pattern: /(^=)[\s\S]+/,
|
---|
31 | lookbehind: true
|
---|
32 | }
|
---|
33 | }
|
---|
34 | }
|
---|
35 | }
|
---|
36 | },
|
---|
37 | 'authority': {
|
---|
38 | pattern: RegExp(
|
---|
39 | /^\/\//.source
|
---|
40 | // [ userinfo "@" ]
|
---|
41 | + /(?:[\w\-.~!$&'()*+,;=%:]*@)?/.source
|
---|
42 | // host
|
---|
43 | + (
|
---|
44 | '(?:'
|
---|
45 | // IP-literal
|
---|
46 | + /\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\.[\w\-.~!$&'()*+,;=]+)\]/.source
|
---|
47 | + '|'
|
---|
48 | // IPv4address or registered name
|
---|
49 | + /[\w\-.~!$&'()*+,;=%]*/.source
|
---|
50 | + ')'
|
---|
51 | )
|
---|
52 | // [ ":" port ]
|
---|
53 | + /(?::\d*)?/.source,
|
---|
54 | 'm'
|
---|
55 | ),
|
---|
56 | inside: {
|
---|
57 | 'authority-delimiter': /^\/\//,
|
---|
58 | 'user-info-segment': {
|
---|
59 | pattern: /^[\w\-.~!$&'()*+,;=%:]*@/,
|
---|
60 | inside: {
|
---|
61 | 'user-info-delimiter': /@$/,
|
---|
62 | 'user-info': /^[\w\-.~!$&'()*+,;=%:]+/
|
---|
63 | }
|
---|
64 | },
|
---|
65 | 'port-segment': {
|
---|
66 | pattern: /:\d*$/,
|
---|
67 | inside: {
|
---|
68 | 'port-delimiter': /^:/,
|
---|
69 | 'port': /^\d+/
|
---|
70 | }
|
---|
71 | },
|
---|
72 | 'host': {
|
---|
73 | pattern: /[\s\S]+/,
|
---|
74 | inside: {
|
---|
75 | 'ip-literal': {
|
---|
76 | pattern: /^\[[\s\S]+\]$/,
|
---|
77 | inside: {
|
---|
78 | 'ip-literal-delimiter': /^\[|\]$/,
|
---|
79 | 'ipv-future': /^v[\s\S]+/,
|
---|
80 | 'ipv6-address': /^[\s\S]+/
|
---|
81 | }
|
---|
82 | },
|
---|
83 | 'ipv4-address': /^(?:(?:[03-9]\d?|[12]\d{0,2})\.){3}(?:[03-9]\d?|[12]\d{0,2})$/
|
---|
84 | }
|
---|
85 | }
|
---|
86 | }
|
---|
87 | },
|
---|
88 | 'path': {
|
---|
89 | pattern: /^[\w\-.~!$&'()*+,;=%:@/]+/m,
|
---|
90 | inside: {
|
---|
91 | 'path-separator': /\//
|
---|
92 | }
|
---|
93 | }
|
---|
94 | };
|
---|
95 |
|
---|
96 | Prism.languages.url = Prism.languages.uri;
|
---|