96 lines
1.8 KiB
JavaScript
96 lines
1.8 KiB
JavaScript
// https://tools.ietf.org/html/rfc3986#appendix-A
|
|
|
|
Prism.languages.uri = {
|
|
'scheme': {
|
|
pattern: /^[a-z][a-z0-9+.-]*:/im,
|
|
greedy: true,
|
|
inside: {
|
|
'scheme-delimiter': /:$/
|
|
}
|
|
},
|
|
'fragment': {
|
|
pattern: /#[\w\-.~!$&'()*+,;=%:@/?]*/,
|
|
inside: {
|
|
'fragment-delimiter': /^#/
|
|
}
|
|
},
|
|
'query': {
|
|
pattern: /\?[\w\-.~!$&'()*+,;=%:@/?]*/,
|
|
inside: {
|
|
'query-delimiter': {
|
|
pattern: /^\?/,
|
|
greedy: true
|
|
},
|
|
'pair-delimiter': /[&;]/,
|
|
'pair': {
|
|
pattern: /^[^=][\s\S]*/,
|
|
inside: {
|
|
'key': /^[^=]+/,
|
|
'value': {
|
|
pattern: /(^=)[\s\S]+/,
|
|
lookbehind: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
'authority': {
|
|
pattern: RegExp(
|
|
/^\/\//.source
|
|
// [ userinfo "@" ]
|
|
+ /(?:[\w\-.~!$&'()*+,;=%:]*@)?/.source
|
|
// host
|
|
+ (
|
|
'(?:'
|
|
// IP-literal
|
|
+ /\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\.[\w\-.~!$&'()*+,;=]+)\]/.source
|
|
+ '|'
|
|
// IPv4address or registered name
|
|
+ /[\w\-.~!$&'()*+,;=%]*/.source
|
|
+ ')'
|
|
)
|
|
// [ ":" port ]
|
|
+ /(?::\d*)?/.source,
|
|
'm'
|
|
),
|
|
inside: {
|
|
'authority-delimiter': /^\/\//,
|
|
'user-info-segment': {
|
|
pattern: /^[\w\-.~!$&'()*+,;=%:]*@/,
|
|
inside: {
|
|
'user-info-delimiter': /@$/,
|
|
'user-info': /^[\w\-.~!$&'()*+,;=%:]+/
|
|
}
|
|
},
|
|
'port-segment': {
|
|
pattern: /:\d*$/,
|
|
inside: {
|
|
'port-delimiter': /^:/,
|
|
'port': /^\d+/
|
|
}
|
|
},
|
|
'host': {
|
|
pattern: /[\s\S]+/,
|
|
inside: {
|
|
'ip-literal': {
|
|
pattern: /^\[[\s\S]+\]$/,
|
|
inside: {
|
|
'ip-literal-delimiter': /^\[|\]$/,
|
|
'ipv-future': /^v[\s\S]+/,
|
|
'ipv6-address': /^[\s\S]+/
|
|
}
|
|
},
|
|
'ipv4-address': /^(?:(?:[03-9]\d?|[12]\d{0,2})\.){3}(?:[03-9]\d?|[12]\d{0,2})$/
|
|
}
|
|
}
|
|
}
|
|
},
|
|
'path': {
|
|
pattern: /^[\w\-.~!$&'()*+,;=%:@/]+/m,
|
|
inside: {
|
|
'path-separator': /\//
|
|
}
|
|
}
|
|
};
|
|
|
|
Prism.languages.url = Prism.languages.uri;
|