reprism
Version:
Modular Syntax highlighting for the web
61 lines (58 loc) • 1.72 kB
JavaScript
export default {
language: 'http',
init: Prism => {
Prism.languages.http = {
'request-line': {
pattern: /^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\shttps?:\/\/\S+\sHTTP\/[0-9.]+/m,
inside: {
// HTTP Verb
property: /^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,
// Path or query argument
'attr-name': /:\w+/,
},
},
'response-status': {
pattern: /^HTTP\/1.[01] \d+.*/m,
inside: {
// Status, e.g. 200 OK
property: {
pattern: /(^HTTP\/1.[01] )\d+.*/i,
lookbehind: true,
},
},
},
// HTTP header name
'header-name': {
pattern: /^[\w-]+:(?=.)/m,
alias: 'keyword',
},
}
// Create a mapping of Content-Type headers to language definitions
const httpLanguages = {
'application/json': Prism.languages.javascript,
'application/xml': Prism.languages.markup,
'text/xml': Prism.languages.markup,
'text/html': Prism.languages.markup,
}
// Insert each content type parser that has its associated language
// currently loaded.
for (const contentType in httpLanguages) {
if (httpLanguages[contentType]) {
const options = {}
options[contentType] = {
pattern: new RegExp(
`(content-type:\\s*${
contentType
}[\\w\\W]*?)(?:\\r?\\n|\\r){2}[\\w\\W]*`,
'i'
),
lookbehind: true,
inside: {
rest: httpLanguages[contentType],
},
}
Prism.languages.insertBefore('http', 'header-name', options)
}
}
},
}