Syntax.lib.xmlEntity = { pattern: /&\w+;/g, klass: "entity"} ; Syntax.lib.xmlPercentEscape = { pattern: /(%[0-9a-f]{2})/gi, klass: "percent-escape", only: ["string"] } ; Syntax.register("xml-tag", function (a){ a.push({ pattern: /<\/?((?:[^:\s>]+:)?)([^\s>]+)(\s[^>]*)?\/?>/g, matches: Syntax.extractMatches({ klass: "namespace"} , { klass: "tag-name"} )} ); a.push({ pattern: /([^=\s]+)=(".*?"|'.*?'|[^\s>]+)/g, matches: Syntax.extractMatches({ klass: "attribute", only: ["tag"] } , { klass: "string", only: ["tag"] } )} ); a.push(Syntax.lib.xmlEntity); a.push(Syntax.lib.xmlPercentEscape); a.push(Syntax.lib.singleQuotedString); a.push(Syntax.lib.doubleQuotedString); } ); Syntax.register("xml", function (a){ a.push({ pattern: /()/gm, matches: Syntax.extractMatches({ klass: "cdata", allow: ["cdata-content", "cdata-tag"] } , { klass: "cdata-tag"} , { klass: "cdata-content"} , { klass: "cdata-tag"} )} ); a.push(Syntax.lib.xmlComment); a.push({ pattern: /<[^>\-\s]([^>'"!\/;\?@\[\]^`\{\}\|]|"[^"]*"|'[^']')*[\/?]?>/g, brush: "xml-tag"} ); a.push(Syntax.lib.xmlEntity); a.push(Syntax.lib.xmlPercentEscape); a.push(Syntax.lib.webLink); } );