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