UNPKG

reprism

Version:

Modular Syntax highlighting for the web

61 lines (58 loc) 1.72 kB
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) } } }, }