XQuery SyntaxHighlighter support

by Patrick Wied

The snippet at the and of the page enables xquery syntax highlighting support at SyntaxHighlighter.
You are able to customize the highlighting colors in shThemeXQuery.css.
If you have any questions or suggestions please feel free to send me a message.

share it
Input field
Output field
Process input

Download the sources ( shBrushXQuery.js | shThemeXQuery.css )

/**
 * xquery syntax highlighting support for SyntaxHighlighter
 *
 * @author
 * Patrick Wied
 * http://www.patrick-wied.at
 */
;(function()
{
    // CommonJS
    typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;

    function Brush()
    {
		// core functions, keywords and types from edit_area
		// excluded admin functions because they blew up the code
		// http://github.com/robwhitby/DQ/blob/master/edit_area/reg_syntax/xquery.js
		var functions = 'xp:dereference xinc:node-expand xinc:link-references xinc:link-expand xhtml:restructure '+
							'xhtml:clean xhtml:add-lists xdmp:zip-manifest xdmp:zip-get xdmp:zip-create xdmp:xquery-version '+
							'xdmp:word-convert xdmp:with-namespaces xdmp:version xdmp:value xdmp:user-roles xdmp:user-last-login '+
							'xdmp:user xdmp:url-encode xdmp:url-decode xdmp:uri-is-file xdmp:uri-format xdmp:uri-content-type xdmp:unquote '+
							'xdmp:unpath xdmp:triggers-database xdmp:trace xdmp:to-json xdmp:tidy xdmp:subbinary xdmp:strftime xdmp:spawn-in '+
							'xdmp:spawn xdmp:sleep xdmp:shutdown xdmp:set-session-field xdmp:set-response-encoding xdmp:set-response-content-type '+
							'xdmp:set-response-code xdmp:set-request-time-limit xdmp:set xdmp:servers xdmp:server-status xdmp:server-name xdmp:server '+
							'xdmp:security-database xdmp:security-assert xdmp:schema-database xdmp:save xdmp:role-roles xdmp:role xdmp:rethrow xdmp:restart '+
							'xdmp:request-timestamp xdmp:request-status xdmp:request-cancel xdmp:request xdmp:redirect-response xdmp:random xdmp:quote '+
							'xdmp:query-trace xdmp:query-meters xdmp:product-edition xdmp:privilege-roles xdmp:privilege xdmp:pretty-print xdmp:powerpoint-convert '+
							'xdmp:platform xdmp:permission xdmp:pdf-convert xdmp:path xdmp:octal-to-integer xdmp:node-uri xdmp:node-replace xdmp:node-kind '+
							'xdmp:node-insert-child xdmp:node-insert-before xdmp:node-insert-after xdmp:node-delete xdmp:node-database xdmp:mul64 xdmp:modules-root '+
							'xdmp:modules-database xdmp:merging xdmp:merge-cancel xdmp:merge xdmp:md5 xdmp:logout xdmp:login xdmp:log-level xdmp:log xdmp:lock-release '+
							'xdmp:lock-acquire xdmp:load xdmp:invoke-in xdmp:invoke xdmp:integer-to-octal xdmp:integer-to-hex xdmp:http-put xdmp:http-post xdmp:http-options '+
							'xdmp:http-head xdmp:http-get xdmp:http-delete xdmp:hosts xdmp:host-status xdmp:host-name xdmp:host xdmp:hex-to-integer xdmp:hash64 xdmp:hash32 '+
							'xdmp:has-privilege xdmp:groups xdmp:group-serves xdmp:group-servers xdmp:group-name xdmp:group-hosts xdmp:group xdmp:get-session-field-names '+
							'xdmp:get-session-field xdmp:get-response-encoding xdmp:get-response-code xdmp:get-request-username xdmp:get-request-user xdmp:get-request-url '+
							'xdmp:get-request-protocol xdmp:get-request-path xdmp:get-request-method xdmp:get-request-header-names xdmp:get-request-header xdmp:get-request-field-names '+
							'xdmp:get-request-field-filename xdmp:get-request-field-content-type xdmp:get-request-field xdmp:get-request-client-certificate xdmp:get-request-client-address '+
							'xdmp:get-request-body xdmp:get-current-user xdmp:get-current-roles xdmp:get xdmp:function-name xdmp:function-module xdmp:function xdmp:from-json xdmp:forests '+
							'xdmp:forest-status xdmp:forest-restore xdmp:forest-restart xdmp:forest-name xdmp:forest-delete xdmp:forest-databases xdmp:forest-counts xdmp:forest-clear xdmp:forest-backup '+
							'xdmp:forest xdmp:filesystem-file xdmp:filesystem-directory xdmp:exists xdmp:excel-convert xdmp:eval-in xdmp:eval xdmp:estimate xdmp:email xdmp:element-content-type '+
							'xdmp:elapsed-time xdmp:document-set-quality xdmp:document-set-property xdmp:document-set-properties xdmp:document-set-permissions xdmp:document-set-collections '+
							'xdmp:document-remove-properties xdmp:document-remove-permissions xdmp:document-remove-collections xdmp:document-properties xdmp:document-locks xdmp:document-load '+
							'xdmp:document-insert xdmp:document-get-quality xdmp:document-get-properties xdmp:document-get-permissions xdmp:document-get-collections xdmp:document-get '+
							'xdmp:document-forest xdmp:document-delete xdmp:document-add-properties xdmp:document-add-permissions xdmp:document-add-collections xdmp:directory-properties xdmp:directory-locks '+
							'xdmp:directory-delete xdmp:directory-create xdmp:directory xdmp:diacritic-less xdmp:describe xdmp:default-permissions xdmp:default-collections xdmp:databases xdmp:database-restore-validate '+
							'xdmp:database-restore-status xdmp:database-restore-cancel xdmp:database-restore xdmp:database-name xdmp:database-forests xdmp:database-backup-validate xdmp:database-backup-status '+
							'xdmp:database-backup-purge xdmp:database-backup-cancel xdmp:database-backup xdmp:database xdmp:collection-properties xdmp:collection-locks xdmp:collection-delete xdmp:collation-canonical-uri '+
							'xdmp:castable-as xdmp:can-grant-roles xdmp:base64-encode xdmp:base64-decode xdmp:architecture xdmp:apply xdmp:amp-roles xdmp:amp xdmp:add64 xdmp:add-response-header xdmp:access '+
							'trgr:trigger-set-recursive trgr:trigger-set-permissions trgr:trigger-set-name trgr:trigger-set-module trgr:trigger-set-event trgr:trigger-set-description trgr:trigger-remove-permissions '+
							'trgr:trigger-module trgr:trigger-get-permissions trgr:trigger-enable trgr:trigger-disable trgr:trigger-database-online-event trgr:trigger-data-event trgr:trigger-add-permissions '+
							'trgr:remove-trigger trgr:property-content trgr:pre-commit trgr:post-commit trgr:get-trigger-by-id trgr:get-trigger trgr:document-scope trgr:document-content trgr:directory-scope '+
							'trgr:create-trigger trgr:collection-scope trgr:any-property-content thsr:set-entry thsr:remove-term thsr:remove-synonym thsr:remove-entry thsr:query-lookup thsr:lookup thsr:load '+
							'thsr:insert thsr:expand thsr:add-synonym spell:suggest-detailed spell:suggest spell:remove-word spell:make-dictionary spell:load spell:levenshtein-distance spell:is-correct '+
							'spell:insert spell:double-metaphone spell:add-word sec:users-collection sec:user-set-roles sec:user-set-password sec:user-set-name sec:user-set-description sec:user-set-default-permissions '+
							'sec:user-set-default-collections sec:user-remove-roles sec:user-privileges sec:user-get-roles sec:user-get-description sec:user-get-default-permissions sec:user-get-default-collections sec:user-doc-permissions '+
							'sec:user-doc-collections sec:user-add-roles sec:unprotect-collection sec:uid-for-name sec:set-realm sec:security-version sec:security-namespace sec:security-installed sec:security-collection '+
							'sec:roles-collection sec:role-set-roles sec:role-set-name sec:role-set-description sec:role-set-default-permissions sec:role-set-default-collections sec:role-remove-roles sec:role-privileges sec:role-get-roles '+
							'sec:role-get-description sec:role-get-default-permissions sec:role-get-default-collections sec:role-doc-permissions sec:role-doc-collections sec:role-add-roles sec:remove-user sec:remove-role-from-users '+
							'sec:remove-role-from-role sec:remove-role-from-privileges sec:remove-role-from-amps sec:remove-role sec:remove-privilege sec:remove-amp sec:protect-collection sec:privileges-collection sec:privilege-set-roles '+
							'sec:privilege-set-name sec:privilege-remove-roles sec:privilege-get-roles sec:privilege-add-roles sec:priv-doc-permissions sec:priv-doc-collections sec:get-user-names sec:get-unique-elem-id sec:get-role-names '+
							'sec:get-role-ids sec:get-privilege sec:get-distinct-permissions sec:get-collection sec:get-amp sec:create-user-with-role sec:create-user sec:create-role sec:create-privilege sec:create-amp '+
							'sec:collections-collection sec:collection-set-permissions sec:collection-remove-permissions sec:collection-get-permissions sec:collection-add-permissions sec:check-admin sec:amps-collection '+
							'sec:amp-set-roles sec:amp-remove-roles sec:amp-get-roles sec:amp-doc-permissions sec:amp-doc-collections sec:amp-add-roles search:unparse search:suggest search:snippet search:search search:resolve-nodes '+
							'search:resolve search:remove-constraint search:parse search:get-default-options search:estimate search:check-options prof:value prof:reset prof:report prof:invoke prof:eval prof:enable prof:disable prof:allowed '+
							'ppt:clean pki:template-set-request pki:template-set-name pki:template-set-key-type pki:template-set-key-options pki:template-set-description pki:template-in-use pki:template-get-version pki:template-get-request '+
							'pki:template-get-name pki:template-get-key-type pki:template-get-key-options pki:template-get-id pki:template-get-description pki:need-certificate pki:is-temporary '+
							'pki:insert-trusted-certificates pki:insert-template pki:insert-signed-certificates pki:insert-certificate-revocation-list pki:get-trusted-certificate-ids pki:get-template-ids '+
							'pki:get-template-certificate-authority pki:get-template-by-name pki:get-template pki:get-pending-certificate-requests-xml pki:get-pending-certificate-requests-pem pki:get-pending-certificate-request '+
							'pki:get-certificates-for-template-xml pki:get-certificates-for-template pki:get-certificates pki:get-certificate-xml pki:get-certificate-pem pki:get-certificate '+
							'pki:generate-temporary-certificate-if-necessary pki:generate-temporary-certificate pki:generate-template-certificate-authority pki:generate-certificate-request pki:delete-template pki:delete-certificate '+
							'pki:create-template pdf:make-toc pdf:insert-toc-headers pdf:get-toc pdf:clean p:status-transition p:state-transition p:remove p:pipelines p:insert p:get-by-id p:get p:execute p:create p:condition p:collection '+
							'p:action ooxml:runs-merge ooxml:package-uris ooxml:package-parts-insert ooxml:package-parts msword:clean mcgm:polygon mcgm:point mcgm:geospatial-query-from-elements mcgm:geospatial-query mcgm:circle math:tanh '+
							'math:tan math:sqrt math:sinh math:sin math:pow math:modf math:log10 math:log math:ldexp math:frexp math:fmod math:floor math:fabs math:exp math:cosh math:cos math:ceil math:atan2 math:atan math:asin math:acos map:put '+
							'map:map map:keys map:get map:delete map:count map:clear lnk:to lnk:remove lnk:insert lnk:get lnk:from lnk:create kml:polygon kml:point kml:interior-polygon '+
							'kml:geospatial-query-from-elements kml:geospatial-query kml:circle kml:box gml:polygon gml:point gml:interior-polygon gml:geospatial-query-from-elements gml:geospatial-query gml:circle gml:box georss:point '+
							'georss:geospatial-query georss:circle geo:polygon geo:point geo:interior-polygon geo:geospatial-query-from-elements geo:geospatial-query geo:circle geo:box fn:zero-or-one fn:years-from-duration '+
							'fn:year-from-dateTime fn:year-from-date fn:upper-case fn:unordered fn:true fn:translate fn:trace fn:tokenize fn:timezone-from-time fn:timezone-from-dateTime fn:timezone-from-date fn:sum '+
							'fn:subtract-dateTimes-yielding-yearMonthDuration fn:subtract-dateTimes-yielding-dayTimeDuration fn:substring-before fn:substring-after fn:substring fn:subsequence fn:string-to-codepoints fn:string-pad '+
							'fn:string-length fn:string-join fn:string fn:static-base-uri fn:starts-with fn:seconds-from-time fn:seconds-from-duration fn:seconds-from-dateTime fn:round-half-to-even fn:round fn:root fn:reverse fn:resolve-uri '+
							'fn:resolve-QName fn:replace fn:remove fn:QName fn:prefix-from-QName fn:position fn:one-or-more fn:number fn:not fn:normalize-unicode fn:normalize-space fn:node-name fn:node-kind '+
							'fn:nilled fn:namespace-uri-from-QName fn:namespace-uri-for-prefix fn:namespace-uri fn:name fn:months-from-duration fn:month-from-dateTime fn:month-from-date fn:minutes-from-time '+
							'fn:minutes-from-duration fn:minutes-from-dateTime fn:min fn:max fn:matches fn:lower-case fn:local-name-from-QName fn:local-name fn:last fn:lang fn:iri-to-uri fn:insert-before fn:index-of '+
							'fn:in-scope-prefixes fn:implicit-timezone fn:idref fn:id fn:hours-from-time fn:hours-from-duration fn:hours-from-dateTime fn:floor fn:false fn:expanded-QName fn:exists fn:exactly-one fn:escape-uri '+
							'fn:escape-html-uri fn:error fn:ends-with fn:encode-for-uri fn:empty fn:document-uri fn:doc-available fn:doc fn:distinct-values fn:distinct-nodes fn:default-collation fn:deep-equal fn:days-from-duration '+
							'fn:day-from-dateTime fn:day-from-date fn:data fn:current-time fn:current-dateTime fn:current-date fn:count fn:contains fn:concat fn:compare fn:collection fn:codepoints-to-string fn:codepoint-equal fn:ceiling '+
							'fn:boolean fn:base-uri fn:avg fn:adjust-time-to-timezone fn:adjust-dateTime-to-timezone fn:adjust-date-to-timezone fn:abs feed:unsubscribe feed:subscription feed:subscribe feed:request feed:item feed:description '+
							'excel:clean entity:enrich dom:set-pipelines dom:set-permissions dom:set-name dom:set-evaluation-context dom:set-domain-scope dom:set-description dom:remove-pipeline dom:remove-permissions dom:remove dom:get '+
							'dom:evaluation-context dom:domains dom:domain-scope dom:create dom:configuration-set-restart-user dom:configuration-set-permissions dom:configuration-set-evaluation-context dom:configuration-set-default-domain '+
							'dom:configuration-get dom:configuration-create dom:collection dom:add-pipeline dom:add-permissions dls:retention-rules dls:retention-rule-remove dls:retention-rule-insert dls:retention-rule dls:purge dls:node-expand '+
							'dls:link-references dls:link-expand dls:documents-query dls:document-versions-query dls:document-version-uri dls:document-version-query dls:document-version-delete '+
							'dls:document-version-as-of dls:document-version dls:document-update dls:document-unmanage dls:document-set-quality dls:document-set-property dls:document-set-properties dls:document-set-permissions '+
							'dls:document-set-collections dls:document-retention-rules dls:document-remove-properties dls:document-remove-permissions dls:document-remove-collections dls:document-purge dls:document-manage '+
							'dls:document-is-managed dls:document-insert-and-manage dls:document-include-query dls:document-history dls:document-get-permissions dls:document-extract-part dls:document-delete '+
							'dls:document-checkout-status dls:document-checkout dls:document-checkin dls:document-add-properties dls:document-add-permissions dls:document-add-collections dls:break-checkout dls:author-query '+
							'dls:as-of-query dbk:convert dbg:wait dbg:value dbg:stopped dbg:stop dbg:step dbg:status dbg:stack dbg:out dbg:next dbg:line dbg:invoke dbg:function dbg:finish dbg:expr dbg:eval dbg:disconnect '+
							'dbg:detach dbg:continue dbg:connect dbg:clear dbg:breakpoints dbg:break dbg:attached dbg:attach cvt:save-converted-documents cvt:part-uri cvt:destination-uri cvt:basepath cvt:basename cts:words '+
							'cts:word-query-weight cts:word-query-text cts:word-query-options cts:word-query cts:word-match cts:walk cts:uris cts:uri-match cts:train cts:tokenize cts:thresholds cts:stem cts:similar-query-weight '+
							'cts:similar-query-nodes cts:similar-query cts:shortest-distance cts:search cts:score cts:reverse-query-weight cts:reverse-query-nodes cts:reverse-query cts:remainder cts:registered-query-weight '+
							'cts:registered-query-options cts:registered-query-ids cts:registered-query cts:register cts:query cts:quality cts:properties-query-query cts:properties-query cts:polygon-vertices cts:polygon '+
							'cts:point-longitude cts:point-latitude cts:point cts:or-query-queries cts:or-query cts:not-query-weight cts:not-query-query cts:not-query cts:near-query-weight cts:near-query-queries cts:near-query-options '+
							'cts:near-query-distance cts:near-query cts:highlight cts:geospatial-co-occurrences cts:frequency cts:fitness cts:field-words cts:field-word-query-weight cts:field-word-query-text cts:field-word-query-options '+
							'cts:field-word-query-field-name cts:field-word-query cts:field-word-match cts:entity-highlight cts:element-words cts:element-word-query-weight cts:element-word-query-text cts:element-word-query-options '+
							'cts:element-word-query-element-name cts:element-word-query cts:element-word-match cts:element-values cts:element-value-ranges cts:element-value-query-weight '+
							'cts:element-value-query-text cts:element-value-query-options cts:element-value-query-element-name cts:element-value-query cts:element-value-match cts:element-value-geospatial-co-occurrences '+
							'cts:element-value-co-occurrences cts:element-range-query-weight cts:element-range-query-value cts:element-range-query-options cts:element-range-query-operator cts:element-range-query-element-name '+
							'cts:element-range-query cts:element-query-query cts:element-query-element-name cts:element-query cts:element-pair-geospatial-values cts:element-pair-geospatial-value-match '+
							'cts:element-pair-geospatial-query-weight cts:element-pair-geospatial-query-region cts:element-pair-geospatial-query-options cts:element-pair-geospatial-query-longitude-name '+
							'cts:element-pair-geospatial-query-latitude-name cts:element-pair-geospatial-query-element-name cts:element-pair-geospatial-query cts:element-pair-geospatial-boxes cts:element-geospatial-values '+
							'cts:element-geospatial-value-match cts:element-geospatial-query-weight cts:element-geospatial-query-region cts:element-geospatial-query-options cts:element-geospatial-query-element-name '+
							'cts:element-geospatial-query cts:element-geospatial-boxes cts:element-child-geospatial-values cts:element-child-geospatial-value-match cts:element-child-geospatial-query-weight '+
							'cts:element-child-geospatial-query-region cts:element-child-geospatial-query-options cts:element-child-geospatial-query-element-name cts:element-child-geospatial-query-child-name '+
							'cts:element-child-geospatial-query cts:element-child-geospatial-boxes cts:element-attribute-words cts:element-attribute-word-query-weight cts:element-attribute-word-query-text '+
							'cts:element-attribute-word-query-options cts:element-attribute-word-query-element-name cts:element-attribute-word-query-attribute-name cts:element-attribute-word-query cts:element-attribute-word-match '+
							'cts:element-attribute-values cts:element-attribute-value-ranges cts:element-attribute-value-query-weight cts:element-attribute-value-query-text cts:element-attribute-value-query-options '+
							'cts:element-attribute-value-query-element-name cts:element-attribute-value-query-attribute-name cts:element-attribute-value-query cts:element-attribute-value-match '+
							'cts:element-attribute-value-geospatial-co-occurrences cts:element-attribute-value-co-occurrences cts:element-attribute-range-query-weight cts:element-attribute-range-query-value '+
							'cts:element-attribute-range-query-options cts:element-attribute-range-query-operator cts:element-attribute-range-query-element-name cts:element-attribute-range-query-attribute-name '+
							'cts:element-attribute-range-query cts:element-attribute-pair-geospatial-values cts:element-attribute-pair-geospatial-value-match cts:element-attribute-pair-geospatial-query-weight '+
							'cts:element-attribute-pair-geospatial-query-region cts:element-attribute-pair-geospatial-query-options cts:element-attribute-pair-geospatial-query-longitude-name cts:element-attribute-pair-geospatial-query-latitude-name '+
							'cts:element-attribute-pair-geospatial-query-element-name cts:element-attribute-pair-geospatial-query cts:element-attribute-pair-geospatial-boxes cts:document-query-uris cts:document-query cts:distance '+
							'cts:directory-query-uris cts:directory-query-depth cts:directory-query cts:destination cts:deregister cts:contains cts:confidence cts:collections cts:collection-query-uris cts:collection-query '+
							'cts:collection-match cts:classify cts:circle-radius cts:circle-center cts:circle cts:box-west cts:box-south cts:box-north cts:box-east cts:box cts:bearing cts:arc-intersection cts:and-query-queries '+
							'cts:and-query-options cts:and-query cts:and-not-query-positive-query cts:and-not-query-negative-query cts:and-not-query css:get css:convert cpf:success cpf:failure cpf:document-set-state '+
							'cpf:document-set-processing-status cpf:document-set-last-updated cpf:document-set-error cpf:document-get-state cpf:document-get-processing-status cpf:document-get-last-updated cpf:document-get-error '+
							'cpf:check-transition alert:spawn-matching-actions alert:rule-user-id-query alert:rule-set-user-id alert:rule-set-query alert:rule-set-options alert:rule-set-name alert:rule-set-description alert:rule-set-action '+
							'alert:rule-remove alert:rule-name-query alert:rule-insert alert:rule-id-query alert:rule-get-user-id alert:rule-get-query alert:rule-get-options alert:rule-get-name alert:rule-get-id alert:rule-get-description '+
							'alert:rule-get-action alert:rule-action-query alert:remove-triggers alert:make-rule alert:make-log-action alert:make-config alert:make-action alert:invoke-matching-actions alert:get-my-rules alert:get-all-rules '+
							'alert:get-actions alert:find-matching-rules alert:create-triggers alert:config-set-uri alert:config-set-trigger-ids alert:config-set-options alert:config-set-name alert:config-set-description '+
							'alert:config-set-cpf-domain-names alert:config-set-cpf-domain-ids alert:config-insert alert:config-get-uri alert:config-get-trigger-ids alert:config-get-options alert:config-get-name alert:config-get-id '+
							'alert:config-get-description alert:config-get-cpf-domain-names alert:config-get-cpf-domain-ids alert:config-get alert:config-delete alert:action-set-options alert:action-set-name alert:action-set-module-root '+
							'alert:action-set-module-db alert:action-set-module alert:action-set-description alert:action-remove alert:action-insert alert:action-get-options alert:action-get-name alert:action-get-module-root '+
							'alert:action-get-module-db alert:action-get-module alert:action-get-description '+
							'zero-or-one years-from-duration '+
							'year-from-dateTime year-from-date upper-case unordered true translate trace tokenize timezone-from-time timezone-from-dateTime timezone-from-date sum '+
							'subtract-dateTimes-yielding-yearMonthDuration subtract-dateTimes-yielding-dayTimeDuration substring-before substring-after substring subsequence string-to-codepoints string-pad '+
							'string-length string-join string static-base-uri starts-with seconds-from-time seconds-from-duration seconds-from-dateTime round-half-to-even round root reverse resolve-uri '+
							'resolve-QName replace remove QName prefix-from-QName position one-or-more number not normalize-unicode normalize-space node-name node-kind '+
							'nilled namespace-uri-from-QName namespace-uri-for-prefix namespace-uri name months-from-duration month-from-dateTime month-from-date minutes-from-time '+
							'minutes-from-duration minutes-from-dateTime min max matches lower-case local-name-from-QName local-name last lang iri-to-uri insert-before index-of '+
							'in-scope-prefixes implicit-timezone idref id hours-from-time hours-from-duration hours-from-dateTime floor false expanded-QName exists exactly-one escape-uri '+
							'escape-html-uri error ends-with encode-for-uri empty document-uri doc-available doc distinct-values distinct-nodes default-collation deep-equal days-from-duration '+
							'day-from-dateTime day-from-date data current-time current-dateTime current-date count contains concat compare collection codepoints-to-string codepoint-equal ceiling '+
							'boolean base-uri avg adjust-time-to-timezone adjust-dateTime-to-timezone adjust-date-to-timezone abs';
        var keywords =  'xquery where version variable union typeswitch treat to then text stable sortby ' +
							'some self schema satisfies returns return ref processing-instruction preceding-sibling ' + 
							'preceding precedes parent only of node namespace module let item intersect instance in ' +
							'import if function for follows following-sibling following external except every else element '+
							'descending descendant-or-self descendant define default declare comment child cast case before '+
							'attribute assert ascending as ancestor-or-self ancestor after';
		var types = 'xs:yearMonthDuration xs:unsignedLong xs:time xs:string xs:short xs:QName xs:Name xs:long xs:integer xs:int '+
						'xs:gYearMonth xs:gYear xs:gMonthDay xs:gDay xs:float xs:duration xs:double xs:decimal xs:dayTimeDuration '+
						'xs:dateTime xs:date xs:byte xs:boolean xs:anyURI xf:yearMonthDuration';
	

        var r = SyntaxHighlighter.regexLib;
		  
		// function should only be highlighted if there follows an (
		// if there is no functionname() it wont be matched as function
		// additional condition needed because it should not highlight functions in text|xml passages e.g. 'name'
        var functionsRegex = "\\b(" + functions.replace(/\s/g,"|") + ")(?=\\()\\b";
		  
		// keywords should only be highlighted if there follows a whitespace or a (
		// additional condition needed because it should not highlight keywords in text|xml passages
		var keywordsRegex = "\\b(" + keywords.replace(/\s/g,"|") + ")(?=(\\(|\\s|;))\\b";
		  
		  
		var typesRegex = "\\b("+types.replace(/\s/g,"|") + ")\\b";
		
        this.regexList = [
             { regex: r.multiLineDoubleQuotedString,	css: 'string' },		// double quoted strings
             { regex: r.multiLineSingleQuotedString,    css: 'string' },		// single quoted strings
             { regex: /\(:([^\*][\s\S]*)?:\)/gm,		css: 'comments' },		// single and multiline comments
			 { regex: new RegExp(functionsRegex, 'gmi'),css: 'functions' },		// functions
             { regex: new RegExp(keywordsRegex, 'gm'),	css: 'keyword' },		// keywords
			 { regex: new RegExp(typesRegex, 'g'), 		css: 'types' },			// types
			 { regex: /<[^>]+>/g,						css: 'xml' }, 			// xml elements
			 { regex: /\$[A-Za-z0-9_\-]+/g,				css: 'variable' }		// variables 
             ];
       
          this.forHtmlScript(r.scriptScriptTags);
       };

       Brush.prototype   = new SyntaxHighlighter.Highlighter();
       Brush.aliases   = ['xq', 'xquery'];

       SyntaxHighlighter.brushes.XQuery = Brush;

       // CommonJS
       typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
    })();