Mercurial > emacs
view etc/schema/xslt.rnc @ 110305:b10051866f51
New syntax-propertize functionality.
* lisp/font-lock.el (font-lock-syntactic-keywords): Make obsolete.
(font-lock-fontify-syntactic-keywords-region): Move handling of
font-lock-syntactically-fontified to...
(font-lock-default-fontify-region): ...here.
Let syntax-propertize-function take precedence.
(font-lock-fontify-syntactically-region): Cal syntax-propertize.
* lisp/emacs-lisp/regexp-opt.el (regexp-opt-depth): Skip named groups.
* lisp/emacs-lisp/syntax.el (syntax-propertize-function)
(syntax-propertize-chunk-size, syntax-propertize--done)
(syntax-propertize-extend-region-functions): New vars.
(syntax-propertize-wholelines, syntax-propertize-multiline)
(syntax-propertize--shift-groups, syntax-propertize-via-font-lock)
(syntax-propertize): New functions.
(syntax-propertize-rules): New macro.
(syntax-ppss-flush-cache): Set syntax-propertize--done.
(syntax-ppss): Call syntax-propertize.
* lisp/progmodes/ada-mode.el (ada-set-syntax-table-properties)
(ada-after-change-function, ada-initialize-syntax-table-properties)
(ada-handle-syntax-table-properties): Only define when
syntax-propertize is not available.
(ada-mode): Use syntax-propertize-function.
* lisp/progmodes/autoconf.el (autoconf-mode):
Use syntax-propertize-function.
(autoconf-font-lock-syntactic-keywords): Remove.
* lisp/progmodes/cfengine.el (cfengine-mode):
Use syntax-propertize-function.
(cfengine-font-lock-syntactic-keywords): Remove.
* lisp/progmodes/cperl-mode.el (cperl-mode): Use syntax-propertize-function.
* lisp/progmodes/fortran.el (fortran-mode): Use syntax-propertize-function.
(fortran--font-lock-syntactic-keywords): New var.
(fortran-line-length): Update syntax-propertize-function and
fortran--font-lock-syntactic-keywords.
* lisp/progmodes/gud.el (gdb-script-syntax-propertize-function): New var;
replaces gdb-script-font-lock-syntactic-keywords.
(gdb-script-mode): Use it.
* lisp/progmodes/js.el (js--regexp-literal): Define while compiling.
(js-syntax-propertize-function): New var; replaces
js-font-lock-syntactic-keywords.
(js-mode): Use it.
* lisp/progmodes/make-mode.el (makefile-syntax-propertize-function):
New var; replaces makefile-font-lock-syntactic-keywords.
(makefile-mode): Use it.
(makefile-imake-mode): Adjust.
* lisp/progmodes/mixal-mode.el (mixal-syntax-propertize-function): New var;
replaces mixal-font-lock-syntactic-keywords.
(mixal-mode): Use it.
* lisp/progmodes/octave-mod.el (octave-syntax-propertize-sqs): New function
to replace octave-font-lock-close-quotes.
(octave-syntax-propertize-function): New function to replace
octave-font-lock-syntactic-keywords.
(octave-mode): Use it.
* lisp/progmodes/perl-mode.el (perl-syntax-propertize-function): New fun to
replace perl-font-lock-syntactic-keywords.
(perl-syntax-propertize-special-constructs): New fun to replace
perl-font-lock-special-syntactic-constructs.
(perl-font-lock-syntactic-face-function): New fun.
(perl-mode): Use it.
* lisp/progmodes/python.el (python-syntax-propertize-function): New var to
replace python-font-lock-syntactic-keywords.
(python-mode): Use it.
(python-quote-syntax): Simplify and adjust to new use.
* lisp/progmodes/ruby-mode.el (ruby-here-doc-beg-re):
Define while compiling.
(ruby-here-doc-end-re, ruby-here-doc-beg-match)
(ruby-font-lock-syntactic-keywords, ruby-comment-beg-syntax)
(syntax-ppss, ruby-in-ppss-context-p, ruby-in-here-doc-p)
(ruby-here-doc-find-end, ruby-here-doc-beg-syntax)
(ruby-here-doc-end-syntax): Only define when
syntax-propertize is not available.
(ruby-syntax-propertize-function, ruby-syntax-propertize-heredoc):
New functions.
(ruby-in-ppss-context-p): Update to new syntax of heredocs.
(electric-indent-chars): Silence bytecompiler.
(ruby-mode): Use prog-mode, syntax-propertize-function, and
electric-indent-chars.
* lisp/progmodes/sh-script.el (sh-st-symbol): Remove.
(sh-font-lock-close-heredoc, sh-font-lock-open-heredoc): Add eol arg.
(sh-font-lock-flush-syntax-ppss-cache, sh-font-lock-here-doc): Remove.
(sh-font-lock-quoted-subshell): Assume we've already matched $(.
(sh-font-lock-paren): Set syntax-multiline.
(sh-font-lock-syntactic-keywords): Remove.
(sh-syntax-propertize-function): New function to replace it.
(sh-mode): Use it.
* lisp/progmodes/simula.el (simula-syntax-propertize-function): New var to
replace simula-font-lock-syntactic-keywords.
(simula-mode): Use it.
* lisp/progmodes/tcl.el (tcl-syntax-propertize-function): New var to
replace tcl-font-lock-syntactic-keywords.
(tcl-mode): Use it.
* lisp/progmodes/vhdl-mode.el (vhdl-mode): Use syntax-propertize-function
if available.
(vhdl-fontify-buffer): Adjust.
* lisp/textmodes/bibtex.el (bibtex-mode): Use syntax-propertize-function.
* lisp/textmodes/reftex.el (font-lock-syntactic-keywords): Don't declare
since we don't use it.
* lisp/textmodes/sgml-mode.el (sgml-syntax-propertize-function): New var to
replace sgml-font-lock-syntactic-keywords.
(sgml-mode): Use it.
* lisp/textmodes/tex-mode.el (tex-common-initialization, doctex-mode):
Use syntax-propertize-function.
* lisp/textmodes/texinfo.el (texinfo-syntax-propertize-function): New fun
to replace texinfo-font-lock-syntactic-keywords.
(texinfo-mode): Use it.
* test/indent/octave.m: Remove some `fixindent' not needed any more.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sat, 11 Sep 2010 01:13:42 +0200 |
parents | bb94fc610c9f |
children |
line wrap: on
line source
# Copyright (C) 2001-2008 World Wide Web Consortium, (Massachusetts # Institute of Technology, European Research Consortium for # Informatics and Mathematics, Keio University). All Rights Reserved. # This work is distributed under the W3C(R) Software License in the # hope that it will be useful, but WITHOUT ANY WARRANTY; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. # This was mostly generated from the syntax summary in the XSLT # Recommendation (using XSLT of course). # Issues: this validates extension elements as literal result # elements, which is overly restrictive. namespace local = "" default namespace xsl = "http://www.w3.org/1999/XSL/Transform" start = stylesheet.element | transform.element | literal-result-element-as-stylesheet version = "1.0" top-level-elements.model = (top-level-element.category | top-level-extension)* top-level-extension = element * - (xsl:* | local:*) { grammar { start = any any = (attribute * { text } | text | element * { any })* } } template.model = (instruction.category | literal-result-element | text)* literal-result-element-as-stylesheet = element * - xsl:* { attribute xsl:version { version }, literal-result-element-no-version.atts, template.model } literal-result-element = element * - xsl:* { literal-result-element.atts, template.model } literal-result-element.atts = literal-result-element-no-version.atts, attribute xsl:version { version }? literal-result-element-no-version.atts = (attribute * - xsl:* { avt.datatype } | attribute xsl:extension-element-prefixes { prefixes.datatype } | attribute xsl:exclude-result-prefixes { prefixes.datatype } | attribute xsl:use-attribute-sets { qnames.datatype })* top-level-element.category = include.element | strip-space.element | preserve-space.element | template.element | namespace-alias.element | attribute-set.element | variable.element | param.element | key.element | decimal-format.element | output.element instruction.category = apply-templates.element | apply-imports.element | call-template.element | element.element | attribute.element | text.element | processing-instruction.element | comment.element | copy.element | value-of.element | number.element | for-each.element | if.element | choose.element | variable.element | copy-of.element | message.element | fallback.element extension.atts = attribute * - (xsl:* | local:*) { text }* stylesheet.element = element stylesheet { stylesheet.model } transform.element = element transform { stylesheet.model } stylesheet.model = extension.atts, attribute id { xsd:NCName }?, attribute extension-element-prefixes { prefixes.datatype }?, attribute exclude-result-prefixes { prefixes.datatype }?, attribute version { version }, (import.element*, top-level-elements.model) include.element = element include { extension.atts, attribute href { xsd:anyURI } } import.element = element import { extension.atts, attribute href { xsd:anyURI } } strip-space.element = element strip-space { extension.atts, attribute elements { wildcards.datatype } } preserve-space.element = element preserve-space { extension.atts, attribute elements { wildcards.datatype } } template.element = element template { extension.atts, attribute match { pattern.datatype }?, attribute name { qname.datatype }?, attribute priority { number.datatype }?, attribute mode { qname.datatype }?, (param.element*, template.model) } apply-templates.element = element apply-templates { extension.atts, attribute select { expression.datatype }?, attribute mode { qname.datatype }?, (sort.element | with-param.element)* } apply-imports.element = element apply-imports { extension.atts } call-template.element = element call-template { extension.atts, attribute name { qname.datatype }, with-param.element* } namespace-alias.element = element namespace-alias { extension.atts, attribute stylesheet-prefix { prefix.datatype }, attribute result-prefix { prefix.datatype } } element.element = element element { extension.atts, attribute name { qname.datatype | expr-avt.datatype }, attribute namespace { xsd:anyURI | brace-avt.datatype }?, attribute use-attribute-sets { qnames.datatype }?, template.model } attribute.element = element attribute { extension.atts, attribute name { qname.datatype | expr-avt.datatype }, attribute namespace { xsd:anyURI | brace-avt.datatype }?, template.model } attribute-set.element = element attribute-set { extension.atts, attribute name { qname.datatype }, attribute use-attribute-sets { qnames.datatype }?, attribute.element* } text.element = element text { extension.atts, attribute disable-output-escaping { xsd:string "yes" | xsd:string "no" }?, text } processing-instruction.element = element processing-instruction { extension.atts, attribute name { xsd:NCName | expr-avt.datatype }, template.model } comment.element = element comment { extension.atts, template.model } copy.element = element copy { extension.atts, attribute use-attribute-sets { qnames.datatype }?, template.model } value-of.element = element value-of { extension.atts, attribute select { expression.datatype }, attribute disable-output-escaping { xsd:string "yes" | xsd:string "no" }? } number.element = element number { extension.atts, attribute level { xsd:string "single" | xsd:string "multiple" | xsd:string "any" }?, attribute count { pattern.datatype }?, attribute from { pattern.datatype }?, attribute value { expression.datatype }?, attribute format { avt.datatype }?, attribute lang { xsd:NMTOKEN | expr-avt.datatype }?, attribute letter-value { xsd:string "alphabetic" | xsd:string "traditional" | expr-avt.datatype }?, attribute grouping-separator { char.datatype | expr-avt.datatype }?, attribute grouping-size { number.datatype | expr-avt.datatype }? } for-each.element = element for-each { extension.atts, attribute select { expression.datatype }, (sort.element*, template.model) } if.element = element if { extension.atts, attribute test { expression.datatype }, template.model } choose.element = element choose { extension.atts, (when.element+, otherwise.element?) } when.element = element when { extension.atts, attribute test { expression.datatype }, template.model } otherwise.element = element otherwise { extension.atts, template.model } sort.element = element sort { extension.atts, attribute select { expression.datatype }?, attribute lang { xsd:NMTOKEN | expr-avt.datatype }?, attribute data-type { xsd:string "text" | xsd:string "number" | qname-but-not-ncname.datatype | expr-avt.datatype }?, attribute order { xsd:string "ascending" | xsd:string "descending" | expr-avt.datatype }?, attribute case-order { xsd:string "upper-first" | xsd:string "lower-first" | expr-avt.datatype }? } variable.element = element variable { extension.atts, attribute name { qname.datatype }, (attribute select { expression.datatype } | template.model) } param.element = element param { extension.atts, attribute name { qname.datatype }, (attribute select { expression.datatype } | template.model) } copy-of.element = element copy-of { extension.atts, attribute select { expression.datatype } } with-param.element = element with-param { extension.atts, attribute name { qname.datatype }, (attribute select { expression.datatype } | template.model) } key.element = element key { extension.atts, attribute name { qname.datatype }, attribute match { pattern.datatype }, attribute use { expression.datatype } } decimal-format.element = element decimal-format { extension.atts, attribute name { qname.datatype }?, attribute decimal-separator { char.datatype }?, attribute grouping-separator { char.datatype }?, attribute infinity { text }?, attribute minus-sign { char.datatype }?, attribute NaN { text }?, attribute percent { char.datatype }?, attribute per-mille { char.datatype }?, attribute zero-digit { char.datatype }?, attribute digit { char.datatype }?, attribute pattern-separator { char.datatype }? } message.element = element message { extension.atts, attribute terminate { xsd:string "yes" | xsd:string "no" }?, template.model } fallback.element = element fallback { extension.atts, template.model } output.element = element output { extension.atts, attribute method { xsd:string "xml" | xsd:string "html" | xsd:string "text" | qname-but-not-ncname.datatype }?, attribute version { xsd:NMTOKEN }?, attribute encoding { text }?, attribute omit-xml-declaration { xsd:string "yes" | xsd:string "no" }?, attribute standalone { xsd:string "yes" | xsd:string "no" }?, attribute doctype-public { text }?, attribute doctype-system { text }?, attribute cdata-section-elements { qnames.datatype }?, attribute indent { xsd:string "yes" | xsd:string "no" }?, attribute media-type { text }? } prefixes.datatype = list { (xsd:NCName | "#default")* } prefix.datatype = xsd:NCName | "#default" wildcards.datatype = list { (xsd:QName | xsd:token { pattern = "\*|\i\c*:\*" })* } qname.datatype = xsd:QName qnames.datatype = list { xsd:QName* } char.datatype = xsd:string { length = "1" } number.datatype = xsd:decimal expression.datatype = text pattern.datatype = text qname-but-not-ncname.datatype = xsd:QName { pattern = ".*:.*" } # An AVT containing at least one expression. expr-avt.datatype = xsd:string { pattern = """([^\{\}]|\{\{|\}\})*\{([^"'\{\}]|"[^"]*"|'[^']*')+\}([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" } # An AVT containing at least one brace; ie where instantiated AVT # is not the same as the literal AVT. brace-avt.datatype = xsd:string { pattern = """[^\{\}]*(\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" } avt.datatype = xsd:string { pattern = """([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" }