http://git-wip-us.apache.org/repos/asf/lucenenet/blob/198e5868/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.rnc ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.rnc b/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.rnc new file mode 100644 index 0000000..b767640 --- /dev/null +++ b/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.rnc @@ -0,0 +1,49 @@ +# This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +# +# TagSoup is licensed under the Apache License, +# Version 2.0. You may obtain a copy of this license at +# http://www.apache.org/licenses/LICENSE-2.0 . You may also have +# additional legal rights not granted by this license. +# +# TagSoup is distributed in the hope that it will be useful, but +# unless required by applicable law or agreed to in writing, TagSoup +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +# OF ANY KIND, either express or implied; not even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# State Table Markup Language +default namespace = "http://www.ccil.org/~cowan/XML/tagsoup/stml" +start = statetable + +## Root element +statetable = element statetable { + attribute version {"1.0"}, + attribute id {xsd:ID}?, + symbol*, + action+, + state+ + } + +## A symbol specifies a non-character input to the state machine +symbol = element symbol { + attribute id {xsd:ID} + } + +## An action is the name for what the state machine does +action = element action { + attribute id {xsd:ID} + } + +## A state specifies an internal state of the machine +state = element state { + attribute id {xsd:ID}, + tr* + } + +## A tr specifies a state transition +tr = element tr { + (attribute symbol {xsd:IDREF} | + attribute char {xsd:string {length = "1"}}), + attribute action {xsd:IDREF}, + attribute newstate {xsd:IDREF} + }
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/198e5868/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.xslt ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.xslt b/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.xslt new file mode 100644 index 0000000..524f998 --- /dev/null +++ b/src/Lucene.Net.Benchmark/Support/TagSoup/stml/stml.xslt @@ -0,0 +1,150 @@ +<!-- +// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +// +// TagSoup is licensed under the Apache License, +// Version 2.0. You may obtain a copy of this license at +// http://www.apache.org/licenses/LICENSE-2.0 . You may also have +// additional legal rights not granted by this license. +// +// TagSoup is distributed in the hope that it will be useful, but +// unless required by applicable law or agreed to in writing, TagSoup +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +// OF ANY KIND, either express or implied; not even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +--> + +<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:stml="http://www.ccil.org/~cowan/XML/tagsoup/stml" + version="1.0"> + + <xsl:output method="text"/> + + <xsl:strip-space elements="*"/> + + <!-- The main template. Generates declarations for states and + actions, then the statetable itself, and then a comment (used for + manual checking) listing all the actions compactly. --> + <xsl:template match="stml:statetable"> + <xsl:apply-templates select="stml:state"> + <xsl:sort select="@id"/> + </xsl:apply-templates> + + <xsl:apply-templates select="stml:action"> + <xsl:sort select="@id"/> + </xsl:apply-templates> + + <xsl:text>	private static int[] statetable = {
</xsl:text> + <xsl:apply-templates select="stml:state/stml:tr"> + <xsl:sort select="../@id"/> + <xsl:sort select="@symbol"/> + <xsl:sort select="@char"/> + </xsl:apply-templates> + <xsl:text>
	};
</xsl:text> + + <xsl:text>	private static readonly string[] debug_actionnames = { ""</xsl:text> + <xsl:apply-templates select="stml:action" mode="debug"> + <xsl:sort select="@id"/> + </xsl:apply-templates> + <xsl:text>};
</xsl:text> + + <xsl:text>	private static readonly string[] debug_statenames = { ""</xsl:text> + <xsl:apply-templates select="stml:state" mode="debug"> + <xsl:sort select="@id"/> + </xsl:apply-templates> + <xsl:text>};
</xsl:text> + + <xsl:text>
</xsl:text> + </xsl:template> + + <!-- Generate a single state declaration. --> + <xsl:template match="stml:state"> + <xsl:text>	private const int </xsl:text> + <xsl:value-of select="@id"/> + <xsl:text> = </xsl:text> + <xsl:value-of select="position()"/> + <xsl:text>;
</xsl:text> + </xsl:template> + + <!-- Generate a single action declaration. --> + <xsl:template match="stml:action"> + <xsl:text>	private const int </xsl:text> + <xsl:value-of select="@id"/> + <xsl:text> = </xsl:text> + <xsl:value-of select="position()"/> + <xsl:text>;
</xsl:text> + </xsl:template> + + <!-- Generate a single row of the statetable. --> + <xsl:template match="stml:tr"> + <xsl:choose> + <xsl:when test="@symbol = 'EOF'"> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""-1""/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@symbol = 'LF'"> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""'\n'""/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@symbol = 'default'"> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""0""/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@char = "'""> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""'\''""/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@symbol = 'S'"> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""' '""/> + </xsl:call-template> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""'\n'""/> + </xsl:call-template> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" select=""'\t'""/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="dump-tr"> + <xsl:with-param name="char" + select="concat("'", @char, "'")"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- This is a subroutine used to do the actual printing. --> + <xsl:template name="dump-tr"> + <xsl:param name="char"/> + <xsl:text>		</xsl:text> + <xsl:value-of select="../@id"/> + <xsl:text>, </xsl:text> + <xsl:value-of select="$char"/> + <xsl:text>, </xsl:text> + <xsl:value-of select="@action"/> + <xsl:text>, </xsl:text> + <xsl:value-of select="@newstate"/> + <xsl:text>,
</xsl:text> + </xsl:template> + + <!-- Generate a single action name in the "Actions:" comment. + The mode is used to keep XSLT from confusing this with the + regular actions template that does the action declarations. --> + <xsl:template match="stml:action" mode="debug"> + <xsl:text>, "</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text>"</xsl:text> + </xsl:template> + + <!-- Generate a single stat debug name. --> + <xsl:template match="stml:state" mode="debug"> + <xsl:text>, "</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text>"</xsl:text> + </xsl:template> + +</xsl:transform> http://git-wip-us.apache.org/repos/asf/lucenenet/blob/198e5868/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-models.xslt ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-models.xslt b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-models.xslt new file mode 100644 index 0000000..7e49680 --- /dev/null +++ b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-models.xslt @@ -0,0 +1,47 @@ +<!-- Generate Java code to be inserted into HTMLModels.java. --> + +<!-- +// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +// +// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +// +// TagSoup is licensed under the Apache License, +// Version 2.0. You may obtain a copy of this license at +// http://www.apache.org/licenses/LICENSE-2.0 . You may also have +// additional legal rights not granted by this license. +// +// TagSoup is distributed in the hope that it will be useful, but +// unless required by applicable law or agreed to in writing, TagSoup +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +// OF ANY KIND, either express or implied; not even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +--> + +<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tssl="http://www.ccil.org/~cowan/XML/tagsoup/tssl" + version="1.0"> + + <xsl:output method="text"/> + + <xsl:strip-space elements="*"/> + + <!-- The main template. We are going to generate Java constant + definitions for the groups in the file. --> + <xsl:template match="tssl:schema"> + <xsl:apply-templates select="tssl:group"> + <xsl:sort select="@id"/> + </xsl:apply-templates> + </xsl:template> + + <!-- Generate a declaration for a single group. --> + <xsl:template match="tssl:group" name="tssl:group"> + <xsl:param name="id" select="@id"/> + <xsl:param name="number" select="position()"/> + <xsl:text>	public const int </xsl:text> + <xsl:value-of select="$id"/> + <xsl:text> = 1 << </xsl:text> + <xsl:value-of select="$number"/> + <xsl:text>;
</xsl:text> + </xsl:template> + +</xsl:transform> http://git-wip-us.apache.org/repos/asf/lucenenet/blob/198e5868/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-validate.xslt ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-validate.xslt b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-validate.xslt new file mode 100644 index 0000000..81faab5 --- /dev/null +++ b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl-validate.xslt @@ -0,0 +1,40 @@ +<!-- Generate complaints if the schema is invalid in some way. --> + +<!-- +// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +// +// TagSoup is licensed under the Apache License, +// Version 2.0. You may obtain a copy of this license at +// http://www.apache.org/licenses/LICENSE-2.0 . You may also have +// additional legal rights not granted by this license. +// +// TagSoup is distributed in the hope that it will be useful, but +// unless required by applicable law or agreed to in writing, TagSoup +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +// OF ANY KIND, either express or implied; not even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +--> + +<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tssl="http://www.ccil.org/~cowan/XML/tagsoup/tssl" + version="1.0"> + + <xsl:output method="text"/> + + <xsl:strip-space elements="*"/> + + <!-- Generates a report if an element does not belong to at least + one of the groups that its parent element contains. --> + <xsl:template match="tssl:element/tssl:element"> + <xsl:if test="not(tssl:memberOfAny) and not(tssl:memberOf/@group = ../tssl:contains/@group)"> + <xsl:value-of select="@name"/> + <xsl:text> is not in the content model of </xsl:text> + <xsl:value-of select="../@name"/> + <xsl:text>
</xsl:text> + </xsl:if> + <xsl:apply-templates/> + </xsl:template> + + + +</xsl:transform> http://git-wip-us.apache.org/repos/asf/lucenenet/blob/198e5868/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.rnc ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.rnc b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.rnc new file mode 100644 index 0000000..4443073 --- /dev/null +++ b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.rnc @@ -0,0 +1,75 @@ +# This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +# +# TagSoup is licensed under the Apache License, +# Version 2.0. You may obtain a copy of this license at +# http://www.apache.org/licenses/LICENSE-2.0 . You may also have +# additional legal rights not granted by this license. +# +# TagSoup is distributed in the hope that it will be useful, but +# unless required by applicable law or agreed to in writing, TagSoup +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +# OF ANY KIND, either express or implied; not even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +default namespace = "http://www.ccil.org/~cowan/XML/tagsoup/tssl" + +start = schema + +## A TSSL schema has a namespace, which is applied to the elements by default, +## and a name, which is used solely for documentation. It contains entity +## definitions, a root element, and attributes to be applied to all elements. +schema = element schema { + attribute ns {xsd:anyURI}, + attribute prefix {xsd:NCName}, + attribute name {xsd:NCName}, + attribute version {"1.0"}, + entity*, + group+, + \element, + \attribute* + } + +## An entity has a name and a Unicode codepoint in hex. +entity = element entity { + attribute name {xsd:NCName}, + attribute codepoint {xsd:string} + } + +## A group is a named group of elements. Every element belongs to one +## or more groups and has a content model consisting of one or more groups. +group = element group { + attribute id {xsd:ID} + } + +## An element has a name and a namespace (currently ignored). +## It can have any of several types of content and can be restartable +## or not. The element is also a member of one or more model groups +## (with arbitrary names), and can contain as children zero or more +## model groups. Elements also have attributes and "natural" children. +\element = element element { + attribute ns {xsd:anyURI}?, + attribute name {xsd:NCName}, + attribute type {type}, + attribute closeMode { "unclosable" | "restartable" }?, + attribute text-parent { "true" | "false" }?, + (element memberOf { attribute group {xsd:IDREF}}+ | + element isRoot { empty} | + element memberOfAny { empty }), + element contains { attribute group {xsd:IDREF}}*, + \attribute*, + \element* + } + +## Here are the attribute types: + +type = "element" | "any" | "empty" | "mixed" | "string" | "cdata" + +## An attribute has a name and a namespace (currently not supported). +## It also has an optional type and an optional default value. +\attribute = element attribute { + attribute ns {xsd:anyURI}?, + attribute name {xsd:NCName}, + attribute type {"ID" | "IDREF" | "IDREFS" | "NMTOKEN" | "BOOLEAN"}?, + attribute default {xsd:string}? + } + http://git-wip-us.apache.org/repos/asf/lucenenet/blob/198e5868/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.xslt ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.xslt b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.xslt new file mode 100644 index 0000000..22233d8 --- /dev/null +++ b/src/Lucene.Net.Benchmark/Support/TagSoup/tssl/tssl.xslt @@ -0,0 +1,220 @@ +<!-- Generate Java code to be inserted into HTMLSchema.java. --> + +<!-- +// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. +// +// TagSoup is licensed under the Apache License, +// Version 2.0. You may obtain a copy of this license at +// http://www.apache.org/licenses/LICENSE-2.0 . You may also have +// additional legal rights not granted by this license. +// +// TagSoup is distributed in the hope that it will be useful, but +// unless required by applicable law or agreed to in writing, TagSoup +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +// OF ANY KIND, either express or implied; not even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +--> + +<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tssl="http://www.ccil.org/~cowan/XML/tagsoup/tssl" + version="1.0"> + + <xsl:output method="text"/> + + <xsl:strip-space elements="*"/> + + <!-- The main template. This generates calls on the Schema routines + setURI(), setPrefix(), elementType(), parent(), attribute(), + and entity() in that order. Several special cases are + handled by template calls. --> + <xsl:template match="tssl:schema"> + <!-- setURI() --> + <xsl:text>		Uri = "</xsl:text> + <xsl:value-of select="@ns"/> + <xsl:text>";
</xsl:text> + <!-- setPrefix() --> + <xsl:text>		Prefix = "</xsl:text> + <xsl:value-of select="@prefix"/> + <xsl:text>";
</xsl:text> + <!-- elementType() special cases --> + <xsl:text>		ElementType("<pcdata>", M_EMPTY, M_PCDATA, 0);
</xsl:text> + <xsl:text>		ElementType("<root>", </xsl:text> + <xsl:apply-templates select="tssl:element/tssl:isRoot"/> + <xsl:text>, M_EMPTY, 0);
</xsl:text> + <!-- elementType() main loop --> + <xsl:apply-templates select="//tssl:element"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + <!-- parent() special cases --> + <xsl:call-template name="parent"> + <xsl:with-param name="elem" select="'<pcdata>'"/> + <xsl:with-param name="parent" select="//tssl:element[@text-parent='true']/@name"/> + </xsl:call-template> + <xsl:call-template name="parent"> + <xsl:with-param name="elem" select="tssl:element/@name"/> + <xsl:with-param name="parent" select="'<root>'"/> + </xsl:call-template> + <!-- parent() main loop --> + <xsl:apply-templates select="//tssl:element/tssl:element" mode="parent"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + <xsl:apply-templates select="//tssl:element/tssl:attribute"> + <xsl:sort select="../@name"/> + <xsl:sort select="@name"/> + </xsl:apply-templates> + <!-- attribute() main loop --> + <xsl:apply-templates select="tssl:attribute"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + <!-- entity() main loop --> + <xsl:apply-templates select="tssl:entity"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </xsl:template> + + <!-- Generates a single call to elementType(). --> + <xsl:template match="tssl:element"> + <xsl:text>		ElementType("</xsl:text> + <xsl:value-of select="@name"/> + <xsl:text>", </xsl:text> + <xsl:choose> + <xsl:when test="@type = 'element'"> + <xsl:apply-templates select="tssl:contains"/> + </xsl:when> + <xsl:when test="@type = 'string'"> + <xsl:text>M_PCDATA</xsl:text> + </xsl:when> + <xsl:when test="@type = 'mixed'"> + <xsl:text>M_PCDATA|</xsl:text> + <xsl:apply-templates select="tssl:contains"/> + </xsl:when> + <xsl:when test="@type = 'empty'"> + <xsl:text>M_EMPTY</xsl:text> + </xsl:when> + <xsl:when test="@type = 'any'"> + <xsl:text>M_ANY</xsl:text> + </xsl:when> + <xsl:when test="@type = 'cdata'"> + <xsl:text>M_PCDATA</xsl:text> + </xsl:when> + </xsl:choose> + <xsl:text>, </xsl:text> + <xsl:apply-templates select="tssl:memberOf"/> + <xsl:apply-templates select="tssl:memberOfAny"/> + <xsl:apply-templates select="tssl:isRoot"/> + <xsl:text>, </xsl:text> + <xsl:choose> + <xsl:when test="@type = 'cdata'"> + <xsl:text>F_CDATA</xsl:text> + </xsl:when> + <xsl:when test="@closeMode = 'restartable'"> + <xsl:text>F_RESTART</xsl:text> + </xsl:when> + <xsl:when test="@closeMode = 'unclosable'"> + <xsl:text>F_NOFORCE</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>0</xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:text>);
</xsl:text> + </xsl:template> + + <!-- Applied from tssl:element to generate the contains argument. --> + <xsl:template match="tssl:contains"> + <xsl:value-of select="@group"/> + <xsl:if test="position() != last()"> + <xsl:text>|</xsl:text> + </xsl:if> + </xsl:template> + + <!-- Applied from tssl:element to generate the memberOf argument. --> + <xsl:template match="tssl:memberOf"> + <xsl:value-of select="@group"/> + <xsl:if test="position() != last()"> + <xsl:text>|</xsl:text> + </xsl:if> + </xsl:template> + + <!-- Applied from tssl:element to handle memberOfAny. --> + <xsl:template match="tssl:memberOfAny"> + <xsl:text>(int)(M_ANY & ~M_ROOT)</xsl:text> + </xsl:template> + + <!-- Applied from tssl:element to handle isRoot. --> + <xsl:template match="tssl:isRoot"> + <xsl:text>M_ROOT</xsl:text> + </xsl:template> + + <!-- Generates a single call to parent(). The mode is used to prevent XSLT + from getting confused and generating elementType calls instead. --> + <xsl:template match="tssl:element/tssl:element" name="parent" mode="parent"> + <xsl:param name="elem" select="@name"/> + <xsl:param name="parent" select="../@name"/> + <xsl:text>		Parent("</xsl:text> + <xsl:value-of select="$elem"/> + <xsl:text>", "</xsl:text> + <xsl:value-of select="$parent"/> + <xsl:text>");
</xsl:text> + </xsl:template> + + <!-- Generates a single call to attribute(). --> + <xsl:template match="tssl:element/tssl:attribute" name="tssl:attribute"> + <xsl:param name="elem" select="../@name"/> + <xsl:param name="attr" select="@name"/> + <xsl:param name="type" select="@type"/> + <xsl:param name="default" select="@default"/> + <xsl:text>		Attribute("</xsl:text> + <xsl:value-of select="$elem"/> + <xsl:text>", "</xsl:text> + <xsl:value-of select="$attr"/> + <xsl:text>", "</xsl:text> + <xsl:choose> + <xsl:when test="$type"> + <xsl:value-of select="$type"/> + </xsl:when> + <xsl:when test="not($type)"> + <xsl:text>CDATA</xsl:text> + </xsl:when> + </xsl:choose> + <xsl:text>", </xsl:text> + <xsl:choose> + <xsl:when test="$default"> + <xsl:text>"</xsl:text> + <xsl:value-of select="$default"/> + <xsl:text>"</xsl:text> + </xsl:when> + <xsl:when test="not($default)"> + <xsl:text>null</xsl:text> + </xsl:when> + </xsl:choose> + <xsl:text>);
</xsl:text> + </xsl:template> + + <!-- Generates calls to attribute() (using the above template) + based on the global attribute definitions. --> + <xsl:template match="tssl:schema/tssl:attribute"> + <xsl:variable name="attr" select="@name"/> + <xsl:variable name="type" select="@type"/> + <xsl:variable name="default" select="@default"/> + <xsl:for-each select="//tssl:element"> + <xsl:sort select="@name"/> + <xsl:call-template name="tssl:attribute"> + <xsl:with-param name="elem" select="@name"/> + <xsl:with-param name="attr" select="$attr"/> + <xsl:with-param name="type" select="$type"/> + <xsl:with-param name="default" select="$default"/> + </xsl:call-template> + </xsl:for-each> + </xsl:template> + + <!-- Generates a single call to entity(). --> + <xsl:template match="tssl:entity"> + <xsl:text>		Entity("</xsl:text> + <xsl:value-of select="@name"/> + <xsl:text>", 0x</xsl:text> + <xsl:value-of select="@codepoint"/> + <xsl:text>);
</xsl:text> + </xsl:template> + +</xsl:transform>