[d24f17c] | 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;
|
---|