From 84da08d7b7fcda12c85caeb5a10b4903770a6f69 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeaddons@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kate/xmltools/ChangeLog | 11 + kate/xmltools/Makefile.am | 30 + kate/xmltools/README | 43 + kate/xmltools/html4-loose.dtd.xml | 13498 +++++++++++++++++ kate/xmltools/html4-strict.dtd.xml | 11145 +++++++++++++++ kate/xmltools/katexmltools.desktop | 129 + kate/xmltools/kcfg.dtd.xml | 354 + kate/xmltools/kde-docbook.dtd.xml | 21489 ++++++++++++++++++++++++++++ kate/xmltools/kpartgui.dtd.xml | 673 + kate/xmltools/language.dtd.xml | 960 ++ kate/xmltools/plugin_katexmltools.cpp | 1141 ++ kate/xmltools/plugin_katexmltools.h | 150 + kate/xmltools/pseudo_dtd.cpp | 466 + kate/xmltools/pseudo_dtd.h | 76 + kate/xmltools/simplify_dtd.xsl | 64 + kate/xmltools/testcases.xml | 73 + kate/xmltools/ui.rc | 10 + kate/xmltools/xhtml1-frameset.dtd.xml | 14043 ++++++++++++++++++ kate/xmltools/xhtml1-strict.dtd.xml | 11629 +++++++++++++++ kate/xmltools/xhtml1-transitional.dtd.xml | 13983 ++++++++++++++++++ kate/xmltools/xslt-1.0.dtd.xml | 1690 +++ 21 files changed, 91657 insertions(+) create mode 100644 kate/xmltools/ChangeLog create mode 100644 kate/xmltools/Makefile.am create mode 100644 kate/xmltools/README create mode 100644 kate/xmltools/html4-loose.dtd.xml create mode 100644 kate/xmltools/html4-strict.dtd.xml create mode 100644 kate/xmltools/katexmltools.desktop create mode 100644 kate/xmltools/kcfg.dtd.xml create mode 100644 kate/xmltools/kde-docbook.dtd.xml create mode 100644 kate/xmltools/kpartgui.dtd.xml create mode 100644 kate/xmltools/language.dtd.xml create mode 100644 kate/xmltools/plugin_katexmltools.cpp create mode 100644 kate/xmltools/plugin_katexmltools.h create mode 100644 kate/xmltools/pseudo_dtd.cpp create mode 100644 kate/xmltools/pseudo_dtd.h create mode 100644 kate/xmltools/simplify_dtd.xsl create mode 100644 kate/xmltools/testcases.xml create mode 100644 kate/xmltools/ui.rc create mode 100644 kate/xmltools/xhtml1-frameset.dtd.xml create mode 100644 kate/xmltools/xhtml1-strict.dtd.xml create mode 100644 kate/xmltools/xhtml1-transitional.dtd.xml create mode 100644 kate/xmltools/xslt-1.0.dtd.xml (limited to 'kate/xmltools') diff --git a/kate/xmltools/ChangeLog b/kate/xmltools/ChangeLog new file mode 100644 index 0000000..1389d4a --- /dev/null +++ b/kate/xmltools/ChangeLog @@ -0,0 +1,11 @@ +ChangeLog for the kate XML Tools plugin + +2005-04-15 Anders Lund + * I'm taking over maintenence of this plugin. + +2005-04-14 Anders Lund + * Smarter alegoritm for placing the cursor after inserting an element. + +2005-04-13 Anders Lund + * Dont prevent others from listening to the charactersInterActively inserted + of katedocument. \ No newline at end of file diff --git a/kate/xmltools/Makefile.am b/kate/xmltools/Makefile.am new file mode 100644 index 0000000..64a9b60 --- /dev/null +++ b/kate/xmltools/Makefile.am @@ -0,0 +1,30 @@ +INCLUDES = $(all_includes) +METASOURCES = AUTO + +# Install this plugin in the KDE modules directory +kde_module_LTLIBRARIES = katexmltoolsplugin.la + +# This is all standard. Remove the LIB_KHTML reference if you are not +# using the KHTML Part +katexmltoolsplugin_la_SOURCES = pseudo_dtd.cpp plugin_katexmltools.cpp +katexmltoolsplugin_la_LIBADD = -lkateinterfaces +katexmltoolsplugin_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) + +# Install the .rc file in the Part's directory (in this case, the part +# is KHTMLPart) +pluginsdir = $(kde_datadir)/kate/plugins/katexmltools +plugins_DATA = ui.rc + +xmldir = $(kde_datadir)/katexmltools +xml_DATA = html4-loose.dtd.xml html4-strict.dtd.xml kde-docbook.dtd.xml \ + simplify_dtd.xsl xhtml1-frameset.dtd.xml xhtml1-strict.dtd.xml \ + xhtml1-transitional.dtd.xml xslt-1.0.dtd.xml \ + testcases.xml language.dtd.xml kpartgui.dtd.xml kcfg.dtd.xml + +#deskdir=$(kde_datadir)/kate/plugins +#desk_DATA=katexmltools.desktop + +kde_services_DATA = katexmltools.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/katexmltools.pot diff --git a/kate/xmltools/README b/kate/xmltools/README new file mode 100644 index 0000000..4187023 --- /dev/null +++ b/kate/xmltools/README @@ -0,0 +1,43 @@ +Kate XML plugin 0.9, 2002-07-20, Daniel Naber + +This plugin gives hints about what's allowed at a certain position in +an XML file, according to the file's DTD. It will list possible +elements, attributes, attribute values or named entities, depending +on the cursor position. It's also possible to close the nearest +not-yet-closed element (this function's scope is limited to some +hundred characters). + +-> See the user documentation available in Kate's Help menu + +CHANGES + +0.8.1 -> 0.9: +-re-show the completion popup when it disappeared after a typo but + backspace was pressed +-knows about empty elements +-other small fixes + +0.8 -> 0.8.1: +-Every open document can now have its own meta DTD. More than +one view per document is still not supported correctly. + +0.7 -> 0.8: +-Now uses the completion interface. Trigger completion with <, ", & or Space, +depending on your cursor's position + +0.6.1 -> 0.7: +-Ported to KDE3.0, makes some things faster + +0.6 -> 0.6.1: +-Show if PCDATA is allowed inside an element +-If the element is unknown, say so (vs. the element has no sub-elements etc) + +0.5 -> 0.6: +-Comes with its own Makefile etc, i.e. doesn't need CVS stuff anymore + (thanks to Olaf Hartig) +-Don't display some allowed elements twice +-Network transparent loading of meta DTDs +-New versions of the XHTML meta DTDs (second edition of XHTML 1.0) +-Attribute values CDATA, ID etc. not taken literally anymore +-Selected attribute values replace old values +-Support for single quote as attribute value delimiter diff --git a/kate/xmltools/html4-loose.dtd.xml b/kate/xmltools/html4-loose.dtd.xml new file mode 100644 index 0000000..f7b48d0 --- /dev/null +++ b/kate/xmltools/html4-loose.dtd.xml @@ -0,0 +1,13498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + +IGNORE +IGNORE + + + +-//W3C//DTD HTML 4.01 Transitional//EN +-//W3C//DTD HTML 4.01 Transitional//EN + + + +NAME +NAME + + + +HEAD, BODY +HEAD, BODY + + + +(top|bottom|left|right) +(top|bottom|left|right) + + + +(disc|square|circle) +(disc|square|circle) + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +valign (top|middle|bottom|baseline) #IMPLIED +valign (top|middle|bottom|baseline) #IMPLIED + + + +CDATA +CDATA + + + +(void|above|below|hsides|lhs|rhs|vsides|box|border) +(void|above|below|hsides|lhs|rhs|vsides|box|border) + + + + + + + + + + +UL | OL | DIR | MENU +UL | OL | DIR | MENU + + + +(top|middle|bottom|left|right) +(top|middle|bottom|left|right) + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +id ID #IMPLIED -- document-wide unique id -- + class CDATA #IMPLIED -- space-separated list of classes -- + style CDATA #IMPLIED -- associated style info -- + title CDATA #IMPLIED -- advisory title -- +id ID #IMPLIED -- document-wide unique id -- + class CDATA #IMPLIED -- space-separated list of classes -- + style %StyleSheet; #IMPLIED -- associated style info -- + title %Text; #IMPLIED -- advisory title -- + + + +(rect|circle|poly|default) +(rect|circle|poly|default) + + + + + +(none | groups | rows | cols | all) +(none | groups | rows | cols | all) + + + +onclick CDATA #IMPLIED -- a pointer button was clicked -- + ondblclick CDATA #IMPLIED -- a pointer button was double clicked-- + onmousedown CDATA #IMPLIED -- a pointer button was pressed down -- + onmouseup CDATA #IMPLIED -- a pointer button was released -- + onmouseover CDATA #IMPLIED -- a pointer was moved onto -- + onmousemove CDATA #IMPLIED -- a pointer was moved within -- + onmouseout CDATA #IMPLIED -- a pointer was moved away -- + onkeypress CDATA #IMPLIED -- a key was pressed and released -- + onkeydown CDATA #IMPLIED -- a key was pressed down -- + onkeyup CDATA #IMPLIED -- a key was released -- +onclick %Script; #IMPLIED -- a pointer button was clicked -- + ondblclick %Script; #IMPLIED -- a pointer button was double clicked-- + onmousedown %Script; #IMPLIED -- a pointer button was pressed down -- + onmouseup %Script; #IMPLIED -- a pointer button was released -- + onmouseover %Script; #IMPLIED -- a pointer was moved onto -- + onmousemove %Script; #IMPLIED -- a pointer was moved within -- + onmouseout %Script; #IMPLIED -- a pointer was moved away -- + onkeypress %Script; #IMPLIED -- a key was pressed and released -- + onkeydown %Script; #IMPLIED -- a key was pressed down -- + onkeyup %Script; #IMPLIED -- a key was released -- + + + +PRE +PRE + + + +#PCDATA | TT | I | B | U | S | STRIKE | BIG | SMALL | EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | + MAP | Q | SUB | SUP | SPAN | BDO | IFRAME | INPUT | SELECT | TEXTAREA | LABEL | BUTTON +#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl; + + + +align (left|center|right|justify) #IMPLIED +align (left|center|right|justify) #IMPLIED + + + +version CDATA #FIXED '-//W3C//DTD HTML 4.01 Transitional//EN' +version CDATA #FIXED '%HTML.Version;' + + + +CDATA +CDATA + + + +P | H1|H2|H3|H4|H5|H6 | UL | OL | DIR | MENU | PRE | DL | DIV | CENTER | + NOSCRIPT | NOFRAMES | BLOCKQUOTE | FORM | ISINDEX | HR | + TABLE | FIELDSET | ADDRESS | #PCDATA | TT | I | B | U | S | STRIKE | BIG | SMALL | EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | + MAP | Q | SUB | SUP | SPAN | BDO | IFRAME | INPUT | SELECT | TEXTAREA | LABEL | BUTTON +%block; | %inline; + + + +(P | H1|H2|H3|H4|H5|H6 | UL | OL | DIR | MENU | PRE | DL | DIV | CENTER | + NOSCRIPT | NOFRAMES | BLOCKQUOTE | FORM | ISINDEX | HR | + TABLE | FIELDSET | ADDRESS | #PCDATA | TT | I | B | U | S | STRIKE | BIG | SMALL | EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | + MAP | Q | SUB | SUP | SPAN | BDO | IFRAME | INPUT | SELECT | TEXTAREA | LABEL | BUTTON)* +(%flow;)* + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +P | H1|H2|H3|H4|H5|H6 | UL | OL | DIR | MENU | PRE | DL | DIV | CENTER | + NOSCRIPT | NOFRAMES | BLOCKQUOTE | FORM | ISINDEX | HR | + TABLE | FIELDSET | ADDRESS +P | %heading; | %list; | %preformatted; | DL | DIV | CENTER | + NOSCRIPT | NOFRAMES | BLOCKQUOTE | FORM | ISINDEX | HR | + TABLE | FIELDSET | ADDRESS + + + +SCRIPT|STYLE|META|LINK|OBJECT +SCRIPT|STYLE|META|LINK|OBJECT + + + + + +A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | + MAP | Q | SUB | SUP | SPAN | BDO | IFRAME +A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT | + MAP | Q | SUB | SUP | SPAN | BDO | IFRAME + + + +CDATA +CDATA + + + +(row|col|rowgroup|colgroup) +(row|col|rowgroup|colgroup) + + + +(top|bottom|left|right) +(top|bottom|left|right) + + + +(TEXT | PASSWORD | CHECKBOX | + RADIO | SUBMIT | RESET | + FILE | HIDDEN | IMAGE | BUTTON) +(TEXT | PASSWORD | CHECKBOX | + RADIO | SUBMIT | RESET | + FILE | HIDDEN | IMAGE | BUTTON) + + + +CDATA +CDATA + + + +EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM +EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM + + + +CDATA +CDATA + + + +(left|center|right) +(left|center|right) + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +IGNORE +IGNORE + + + +INPUT | SELECT | TEXTAREA | LABEL | BUTTON +INPUT | SELECT | TEXTAREA | LABEL | BUTTON + + + +id ID #IMPLIED -- document-wide unique id -- + class CDATA #IMPLIED -- space-separated list of classes -- + style CDATA #IMPLIED -- associated style info -- + title CDATA #IMPLIED -- advisory title -- lang NAME #IMPLIED -- language code -- + dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text -- onclick CDATA #IMPLIED -- a pointer button was clicked -- + ondblclick CDATA #IMPLIED -- a pointer button was double clicked-- + onmousedown CDATA #IMPLIED -- a pointer button was pressed down -- + onmouseup CDATA #IMPLIED -- a pointer button was released -- + onmouseover CDATA #IMPLIED -- a pointer was moved onto -- + onmousemove CDATA #IMPLIED -- a pointer was moved within -- + onmouseout CDATA #IMPLIED -- a pointer was moved away -- + onkeypress CDATA #IMPLIED -- a key was pressed and released -- + onkeydown CDATA #IMPLIED -- a key was pressed down -- + onkeyup CDATA #IMPLIED -- a key was released -- +%coreattrs; %i18n; %events; + + + +CDATA +CDATA + + + +align (left|center|right|justify|char) #IMPLIED + char CDATA #IMPLIED -- alignment char, e.g. char=':' -- + charoff CDATA #IMPLIED -- offset for alignment char -- +align (left|center|right|justify|char) #IMPLIED + char %Character; #IMPLIED -- alignment char, e.g. char=':' -- + charoff %Length; #IMPLIED -- offset for alignment char -- + + + +IMG|OBJECT|APPLET|BIG|SMALL|SUB|SUP|FONT|BASEFONT +IMG|OBJECT|APPLET|BIG|SMALL|SUB|SUP|FONT|BASEFONT + + + +CDATA +CDATA + + + +CDATA +CDATA + + + + + bgcolor CDATA #IMPLIED -- document background color -- + text CDATA #IMPLIED -- document text color -- + link CDATA #IMPLIED -- color of links -- + vlink CDATA #IMPLIED -- color of visited links -- + alink CDATA #IMPLIED -- color of selected links -- + + + bgcolor %Color; #IMPLIED -- document background color -- + text %Color; #IMPLIED -- document text color -- + link %Color; #IMPLIED -- color of links -- + vlink %Color; #IMPLIED -- color of visited links -- + alink %Color; #IMPLIED -- color of selected links -- + + + + +TITLE & ISINDEX? & BASE? +TITLE & ISINDEX? & BASE? + + + +TT | I | B | U | S | STRIKE | BIG | SMALL +TT | I | B | U | S | STRIKE | BIG | SMALL + + + +CDATA +CDATA + + + +H1|H2|H3|H4|H5|H6 +H1|H2|H3|H4|H5|H6 + + + +lang NAME #IMPLIED -- language code -- + dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text -- +lang %LanguageCode; #IMPLIED -- language code -- + dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text -- + + + +&#241; +&#241; + + + +&#8242; +&#8242; + + + +&#34; +&#34; + + + +&#8969; +&#8969; + + + +&#8719; +&#8719; + + + +&#203; +&#203; + + + +&#9674; +&#9674; + + + +&#221; +&#221; + + + +&#8221; +&#8221; + + + +&#8800; +&#8800; + + + +&#236; +&#236; + + + +&#968; +&#968; + + + +&#211; +&#211; + + + +&#8249; +&#8249; + + + +&#8715; +&#8715; + + + +&#8260; +&#8260; + + + +&#917; +&#917; + + + +&#8658; +&#8658; + + + +&#201; +&#201; + + + +&#180; +&#180; + + + +&#928; +&#928; + + + +&#8730; +&#8730; + + + +&#217; +&#217; + + + +&#8733; +&#8733; + + + +&#231; +&#231; + + + +&#207; +&#207; + + + +&#192; +&#192; + + + +&#8226; +&#8226; + + + +&#957; +&#957; + + + +&#8805; +&#8805; + + + +&#947; +&#947; + + + +&#922; +&#922; + + + +&#229; +&#229; + + + +&#184; +&#184; + + + +&#171; +&#171; + + + +&#926; +&#926; + + + +&#169; +&#169; + + + +&#8629; +&#8629; + + + +&#963; +&#963; + + + +&#226; +&#226; + + + +&#9827; +&#9827; + + + +&#213; +&#213; + + + +&#208; +&#208; + + + +&#953; +&#953; + + + +&#62; +&#62; + + + +&#732; +&#732; + + + +&#935; +&#935; + + + +&#920; +&#920; + + + +&#978; +&#978; + + + +&#246; +&#246; + + + +&#250; +&#250; + + + +&#168; +&#168; + + + +&#8212; +&#8212; + + + +&#8704; +&#8704; + + + +&#934; +&#934; + + + +&#8364; +&#8364; + + + +&#225; +&#225; + + + +&#8744; +&#8744; + + + +&#234; +&#234; + + + +&#191; +&#191; + + + +&#964; +&#964; + + + +&#8195; +&#8195; + + + +&#8472; +&#8472; + + + +&#209; +&#209; + + + +&#9001; +&#9001; + + + +&#955; +&#955; + + + +&#916; +&#916; + + + +&#220; +&#220; + + + +&#8254; +&#8254; + + + +&#204; +&#204; + + + +&#212; +&#212; + + + +&#338; +&#338; + + + +&#8712; +&#8712; + + + +&#238; +&#238; + + + +&#8746; +&#8746; + + + +&#950; +&#950; + + + +&#960; +&#960; + + + +&#199; +&#199; + + + +&#227; +&#227; + + + +&#8659; +&#8659; + + + +&#376; +&#376; + + + +&#8657; +&#8657; + + + +&#8756; +&#8756; + + + +&#8722; +&#8722; + + + +&#965; +&#965; + + + +&#8206; +&#8206; + + + +&#961; +&#961; + + + +&#8727; +&#8727; + + + +&#958; +&#958; + + + +&#8243; +&#8243; + + + +&#9824; +&#9824; + + + +&#8968; +&#8968; + + + +&#8660; +&#8660; + + + +&#945; +&#945; + + + +&#237; +&#237; + + + +&#8970; +&#8970; + + + +&#8734; +&#8734; + + + +&#8465; +&#8465; + + + +&#185; +&#185; + + + +&#8220; +&#8220; + + + +&#178; +&#178; + + + +&#179; +&#179; + + + +&#914; +&#914; + + + +&#166; +&#166; + + + +&#339; +&#339; + + + +&#242; +&#242; + + + +&#8594; +&#8594; + + + +&#218; +&#218; + + + +&#8250; +&#8250; + + + +&#8834; +&#8834; + + + +&#8205; +&#8205; + + + +&#8869; +&#8869; + + + +&#232; +&#232; + + + +&#254; +&#254; + + + +&#8801; +&#8801; + + + +&#8656; +&#8656; + + + +&#193; +&#193; + + + +&#38; +&#38; + + + +&#228; +&#228; + + + +&#8211; +&#8211; + + + +&#915; +&#915; + + + +&#8855; +&#8855; + + + +&#8721; +&#8721; + + + +&#197; +&#197; + + + +&#163; +&#163; + + + +&#8853; +&#8853; + + + +&#8835; +&#8835; + + + +&#933; +&#933; + + + +&#8707; +&#8707; + + + +&#919; +&#919; + + + +&#8204; +&#8204; + + + +&#194; +&#194; + + + +&#923; +&#923; + + + +&#931; +&#931; + + + +&#8217; +&#8217; + + + +&#198; +&#198; + + + +&#176; +&#176; + + + +&#235; +&#235; + + + +&#251; +&#251; + + + +&#967; +&#967; + + + +&#8743; +&#8743; + + + +&#969; +&#969; + + + +&#8736; +&#8736; + + + +&#222; +&#222; + + + +&#195; +&#195; + + + +&#8230; +&#8230; + + + +&#966; +&#966; + + + +&#223; +&#223; + + + +&#202; +&#202; + + + +&#239; +&#239; + + + +&#8711; +&#8711; + + + +&#353; +&#353; + + + +&#175; +&#175; + + + +&#8224; +&#8224; + + + +&#8839; +&#8839; + + + +&#8194; +&#8194; + + + +&#8745; +&#8745; + + + +&#205; +&#205; + + + +&#230; +&#230; + + + +&#921; +&#921; + + + +&#936; +&#936; + + + +&#8836; +&#8836; + + + +&#206; +&#206; + + + +&#161; +&#161; + + + +&#210; +&#210; + + + +&#165; +&#165; + + + +&#214; +&#214; + + + +&#189; +&#189; + + + +&#248; +&#248; + + + +&#8501; +&#8501; + + + +&#200; +&#200; + + + +&#188; +&#188; + + + +&#181; +&#181; + + + +&#8476; +&#8476; + + + +&#8747; +&#8747; + + + +&#924; +&#924; + + + +&#8222; +&#8222; + + + +&#8595; +&#8595; + + + +&#8240; +&#8240; + + + +&#8593; +&#8593; + + + +&#187; +&#187; + + + +&#954; +&#954; + + + +&#183; +&#183; + + + +&#215; +&#215; + + + +&#8838; +&#8838; + + + +&#982; +&#982; + + + +&#167; +&#167; + + + +&#8804; +&#8804; + + + +&#8218; +&#8218; + + + +&#177; +&#177; + + + +&#164; +&#164; + + + +&#913; +&#913; + + + +&#8596; +&#8596; + + + +&#172; +&#172; + + + +&#252; +&#252; + + + +&#253; +&#253; + + + +&#8773; +&#8773; + + + +&#959; +&#959; + + + +&#8971; +&#8971; + + + +&#243; +&#243; + + + +&#8482; +&#8482; + + + +&#173; +&#173; + + + +&#918; +&#918; + + + +&#952; +&#952; + + + +&#170; +&#170; + + + +&#233; +&#233; + + + +&#977; +&#977; + + + +&#249; +&#249; + + + +&#60; +&#60; + + + +&#402; +&#402; + + + +&#186; +&#186; + + + +&#182; +&#182; + + + +&#8592; +&#8592; + + + +&#255; +&#255; + + + +&#925; +&#925; + + + +&#9830; +&#9830; + + + +&#224; +&#224; + + + +&#247; +&#247; + + + +&#352; +&#352; + + + +&#9002; +&#9002; + + + +&#8225; +&#8225; + + + +&#932; +&#932; + + + +&#160; +&#160; + + + +&#951; +&#951; + + + +&#8764; +&#8764; + + + +&#8216; +&#8216; + + + +&#8207; +&#8207; + + + +&#948; +&#948; + + + +&#219; +&#219; + + + +&#245; +&#245; + + + +&#8706; +&#8706; + + + +&#927; +&#927; + + + +&#240; +&#240; + + + +&#244; +&#244; + + + +&#937; +&#937; + + + +&#946; +&#946; + + + +&#216; +&#216; + + + +&#949; +&#949; + + + +&#8713; +&#8713; + + + +&#8709; +&#8709; + + + +&#174; +&#174; + + + +&#9829; +&#9829; + + + +&#196; +&#196; + + + +&#190; +&#190; + + + +&#956; +&#956; + + + +&#8901; +&#8901; + + + +&#8776; +&#8776; + + + +&#8201; +&#8201; + + + +&#162; +&#162; + + + +&#710; +&#710; + + + +&#962; +&#962; + + + +&#929; +&#929; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir, for use with title -- + type %ContentType; #REQUIRED -- content type of style language -- + media %MediaDesc; #IMPLIED -- designed for use with these media -- + title %Text; #IMPLIED -- advisory title -- + + + + + + + + + + + + + + + + + + + + id ID #IMPLIED -- document-wide unique id -- + name CDATA #REQUIRED -- property name -- + value CDATA #IMPLIED -- property value -- + valuetype (DATA|REF|OBJECT) DATA -- How to interpret value -- + type %ContentType; #IMPLIED -- content type for value + when valuetype=ref -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- URI for source document or msg -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id ID #IMPLIED -- document-wide unique id -- + size CDATA #REQUIRED -- base font size for FONT elements -- + color %Color; #IMPLIED -- text color -- + face CDATA #IMPLIED -- comma-separated list of font names -- + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + span NUMBER 1 -- default number of columns in group -- + width %MultiLength; #IMPLIED -- default width for enclosed COLs -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + align %CAlign; #IMPLIED -- relative to table -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir, for use with content -- + http-equiv NAME #IMPLIED -- HTTP response header name -- + name NAME #IMPLIED -- metainformation name -- + content CDATA #REQUIRED -- associated information -- + scheme CDATA #IMPLIED -- select form of content -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + accesskey %Character; #IMPLIED -- accessibility key character -- + align %LAlign; #IMPLIED -- relative to fieldset -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + clear (left|all|right|none) none -- control of text flow -- + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + type %ULStyle; #IMPLIED -- bullet style -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + charset %Charset; #IMPLIED -- char encoding of linked resource -- + href %URI; #IMPLIED -- URI for linked resource -- + hreflang %LanguageCode; #IMPLIED -- language code -- + type %ContentType; #IMPLIED -- advisory content type -- + rel %LinkTypes; #IMPLIED -- forward link types -- + rev %LinkTypes; #IMPLIED -- reverse link types -- + media %MediaDesc; #IMPLIED -- for rendering on these media -- + target %FrameTarget; #IMPLIED -- render in this frame -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + width NUMBER #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + charset %Charset; #IMPLIED -- char encoding of linked resource -- + type %ContentType; #REQUIRED -- content type of script language -- + language CDATA #IMPLIED -- predefined script language name -- + src %URI; #IMPLIED -- URI for an external script -- + defer (defer) #IMPLIED -- UA may defer execution of script -- + event CDATA #IMPLIED -- reserved for possible future use -- + for %URI; #IMPLIED -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + -- table section -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + codebase %URI; #IMPLIED -- optional base URI for applet -- + archive CDATA #IMPLIED -- comma-separated archive list -- + code CDATA #IMPLIED -- applet class file -- + object CDATA #IMPLIED -- serialized applet file -- + alt %Text; #IMPLIED -- short description -- + name CDATA #IMPLIED -- allows applets to find each other -- + width %Length; #REQUIRED -- initial width -- + height %Length; #REQUIRED -- initial height -- + align %IAlign; #IMPLIED -- vertical or horizontal alignment -- + hspace %Pixels; #IMPLIED -- horizontal gutter -- + vspace %Pixels; #IMPLIED -- vertical gutter -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- table section -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir -- + %version; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- column groups and properties -- + %attrs; -- %coreattrs, %i18n, %events -- + span NUMBER 1 -- COL attributes affect N columns -- + width %MultiLength; #IMPLIED -- column width specification -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir -- + profile %URI; #IMPLIED -- named dictionary of meta info -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #REQUIRED -- for reference by usemap -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + src %URI; #REQUIRED -- URI of image to embed -- + alt %Text; #REQUIRED -- short description -- + longdesc %URI; #IMPLIED -- link to long description + (complements alt) -- + name CDATA #IMPLIED -- name of image for scripting -- + height %Length; #IMPLIED -- override height -- + width %Length; #IMPLIED -- override width -- + usemap %URI; #IMPLIED -- use client-side image map -- + ismap (ismap) #IMPLIED -- use server-side image map -- + align %IAlign; #IMPLIED -- vertical or horizontal alignment -- + border %Pixels; #IMPLIED -- link border width -- + hspace %Pixels; #IMPLIED -- horizontal gutter -- + vspace %Pixels; #IMPLIED -- vertical gutter -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + charset %Charset; #IMPLIED -- char encoding of linked resource -- + type %ContentType; #IMPLIED -- advisory content type -- + name CDATA #IMPLIED -- named link end -- + href %URI; #IMPLIED -- URI for linked resource -- + hreflang %LanguageCode; #IMPLIED -- language code -- + target %FrameTarget; #IMPLIED -- render in this frame -- + rel %LinkTypes; #IMPLIED -- forward link types -- + rev %LinkTypes; #IMPLIED -- reverse link types -- + accesskey %Character; #IMPLIED -- accessibility key character -- + shape %Shape; rect -- for use with client-side image maps -- + coords %Coords; #IMPLIED -- for use with client-side image maps -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + label %Text; #REQUIRED -- for use in hierarchical menus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + for IDREF #IMPLIED -- matches field ID value -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- info on reason for change -- + datetime %Datetime; #IMPLIED -- date and time of change -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #IMPLIED + rows NUMBER #REQUIRED + cols NUMBER #REQUIRED + disabled (disabled) #IMPLIED -- unavailable in this context -- + readonly (readonly) #IMPLIED + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + onselect %Script; #IMPLIED -- some text was selected -- + onchange %Script; #IMPLIED -- the element value was changed -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + type %OLStyle; #IMPLIED -- numbering style -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + start NUMBER #IMPLIED -- starting sequence number -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #IMPLIED -- field name -- + size NUMBER #IMPLIED -- rows visible -- + multiple (multiple) #IMPLIED -- default is single selection -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + onchange %Script; #IMPLIED -- the element value was changed -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- URI for source document or msg -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- table element -- + %attrs; -- %coreattrs, %i18n, %events -- + summary %Text; #IMPLIED -- purpose/structure for speech output-- + width %Length; #IMPLIED -- table width -- + border %Pixels; #IMPLIED -- controls frame width around table -- + frame %TFrame; #IMPLIED -- which parts of frame to render -- + rules %TRules; #IMPLIED -- rulings between rows and cols -- + cellspacing %Length; #IMPLIED -- spacing between cells -- + cellpadding %Length; #IMPLIED -- spacing within cells -- + align %TAlign; #IMPLIED -- table position relative to window -- + bgcolor %Color; #IMPLIED -- background color for cells -- + %reserved; -- reserved for possible future use -- + datapagesize CDATA #IMPLIED -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #IMPLIED + value CDATA #IMPLIED -- sent to server when submitted -- + type (button|submit|reset) submit -- for use as form button -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %align; -- align, text alignment -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + %i18n; -- lang, dir -- + size CDATA #IMPLIED -- [+|-]nn e.g. size="+1", size="4" -- + color %Color; #IMPLIED -- text color -- + face CDATA #IMPLIED -- comma-separated list of font names -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + action %URI; #REQUIRED -- server-side form handler -- + method (GET|POST) GET -- HTTP method used to submit the form-- + enctype %ContentType; "application/x-www-form-urlencoded" + accept %ContentTypes; #IMPLIED -- list of MIME types for file upload -- + name CDATA #IMPLIED -- name of form for scripting -- + onsubmit %Script; #IMPLIED -- the form was submitted -- + onreset %Script; #IMPLIED -- the form was reset -- + target %FrameTarget; #IMPLIED -- render in this frame -- + accept-charset %Charsets; #IMPLIED -- list of supported charsets -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + declare (declare) #IMPLIED -- declare but don't instantiate flag -- + classid %URI; #IMPLIED -- identifies an implementation -- + codebase %URI; #IMPLIED -- base URI for classid, data, archive-- + data %URI; #IMPLIED -- reference to object's data -- + type %ContentType; #IMPLIED -- content type for data -- + codetype %ContentType; #IMPLIED -- content type for code -- + archive CDATA #IMPLIED -- space-separated list of URIs -- + standby %Text; #IMPLIED -- message to show while loading -- + height %Length; #IMPLIED -- override height -- + width %Length; #IMPLIED -- override width -- + usemap %URI; #IMPLIED -- use client-side image map -- + name CDATA #IMPLIED -- submit as part of form -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + align %IAlign; #IMPLIED -- vertical or horizontal alignment -- + border %Pixels; #IMPLIED -- link border width -- + hspace %Pixels; #IMPLIED -- horizontal gutter -- + vspace %Pixels; #IMPLIED -- vertical gutter -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + lang %LanguageCode; #IMPLIED -- language code -- + dir (ltr|rtl) #REQUIRED -- directionality -- + + + + + + + + + + + + + + + + + + + + + + + + -- table section -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + type %LIStyle; #IMPLIED -- list item style -- + value NUMBER #IMPLIED -- reset sequence number -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + align (left|center|right) #IMPLIED + noshade (noshade) #IMPLIED + size %Pixels; #IMPLIED + width %Length; #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + longdesc %URI; #IMPLIED -- link to long description + (complements title) -- + name CDATA #IMPLIED -- name of frame for targetting -- + src %URI; #IMPLIED -- source of frame content -- + frameborder (1|0) 1 -- request frame borders? -- + marginwidth %Pixels; #IMPLIED -- margin widths in pixels -- + marginheight %Pixels; #IMPLIED -- margin height in pixels -- + scrolling (yes|no|auto) auto -- scrollbar or none -- + align %IAlign; #IMPLIED -- vertical or horizontal alignment -- + height %Length; #IMPLIED -- frame height -- + width %Length; #IMPLIED -- frame width -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + shape %Shape; rect -- controls interpretation of coords -- + coords %Coords; #IMPLIED -- comma-separated list of lengths -- + href %URI; #IMPLIED -- URI for linked resource -- + target %FrameTarget; #IMPLIED -- render in this frame -- + nohref (nohref) #IMPLIED -- this region has no action -- + alt %Text; #REQUIRED -- short description -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + selected (selected) #IMPLIED + disabled (disabled) #IMPLIED -- unavailable in this context -- + label %Text; #IMPLIED -- for use in hierarchical menus -- + value CDATA #IMPLIED -- defaults to element content -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- header or data cell -- + %attrs; -- %coreattrs, %i18n, %events -- + abbr %Text; #IMPLIED -- abbreviation for header cell -- + axis CDATA #IMPLIED -- comma-separated list of related headers-- + headers IDREFS #IMPLIED -- list of id's for header cells -- + scope %Scope; #IMPLIED -- scope covered by header cells -- + rowspan NUMBER 1 -- number of rows spanned by cell -- + colspan NUMBER 1 -- number of cols spanned by cell -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + nowrap (nowrap) #IMPLIED -- suppress word wrap -- + bgcolor %Color; #IMPLIED -- cell background color -- + width %Length; #IMPLIED -- width for cell -- + height %Length; #IMPLIED -- height for cell -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- info on reason for change -- + datetime %Datetime; #IMPLIED -- date and time of change -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + %i18n; -- lang, dir -- + prompt %Text; #IMPLIED -- prompt message -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- header or data cell -- + %attrs; -- %coreattrs, %i18n, %events -- + abbr %Text; #IMPLIED -- abbreviation for header cell -- + axis CDATA #IMPLIED -- comma-separated list of related headers-- + headers IDREFS #IMPLIED -- list of id's for header cells -- + scope %Scope; #IMPLIED -- scope covered by header cells -- + rowspan NUMBER 1 -- number of rows spanned by cell -- + colspan NUMBER 1 -- number of cols spanned by cell -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + nowrap (nowrap) #IMPLIED -- suppress word wrap -- + bgcolor %Color; #IMPLIED -- cell background color -- + width %Length; #IMPLIED -- width for cell -- + height %Length; #IMPLIED -- height for cell -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + href %URI; #IMPLIED -- URI that acts as base URI -- + target %FrameTarget; #IMPLIED -- render in this frame -- + + + + + + + + + + + + + + + + + + + + + + -- table row -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + bgcolor %Color; #IMPLIED -- background color for row -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + onload %Script; #IMPLIED -- the document has been loaded -- + onunload %Script; #IMPLIED -- the document has been removed -- + background %URI; #IMPLIED -- texture tile for document + background -- + %bodycolors; -- bgcolor, text, link, vlink, alink -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + type %InputType; TEXT -- what kind of widget is needed -- + name CDATA #IMPLIED -- submit as part of form -- + value CDATA #IMPLIED -- Specify for radio buttons and checkboxes -- + checked (checked) #IMPLIED -- for radio buttons and check boxes -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + readonly (readonly) #IMPLIED -- for text and passwd -- + size CDATA #IMPLIED -- specific to each type of field -- + maxlength NUMBER #IMPLIED -- max chars for text fields -- + src %URI; #IMPLIED -- for fields with images -- + alt CDATA #IMPLIED -- short description -- + usemap %URI; #IMPLIED -- use client-side image map -- + ismap (ismap) #IMPLIED -- use server-side image map -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + onselect %Script; #IMPLIED -- some text was selected -- + onchange %Script; #IMPLIED -- the element value was changed -- + accept %ContentTypes; #IMPLIED -- list of MIME types for file upload -- + align %IAlign; #IMPLIED -- vertical or horizontal alignment -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/xmltools/html4-strict.dtd.xml b/kate/xmltools/html4-strict.dtd.xml new file mode 100644 index 0000000..bbcf853 --- /dev/null +++ b/kate/xmltools/html4-strict.dtd.xml @@ -0,0 +1,11145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + +IGNORE +IGNORE + + + +NAME +NAME + + + +HEAD, BODY +HEAD, BODY + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +valign (top|middle|bottom|baseline) #IMPLIED +valign (top|middle|bottom|baseline) #IMPLIED + + + +CDATA +CDATA + + + +(void|above|below|hsides|lhs|rhs|vsides|box|border) +(void|above|below|hsides|lhs|rhs|vsides|box|border) + + + + + + + + + + +UL | OL +UL | OL + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +id ID #IMPLIED -- document-wide unique id -- + class CDATA #IMPLIED -- space-separated list of classes -- + style CDATA #IMPLIED -- associated style info -- + title CDATA #IMPLIED -- advisory title -- +id ID #IMPLIED -- document-wide unique id -- + class CDATA #IMPLIED -- space-separated list of classes -- + style %StyleSheet; #IMPLIED -- associated style info -- + title %Text; #IMPLIED -- advisory title -- + + + +(rect|circle|poly|default) +(rect|circle|poly|default) + + + + + +(none | groups | rows | cols | all) +(none | groups | rows | cols | all) + + + +onclick CDATA #IMPLIED -- a pointer button was clicked -- + ondblclick CDATA #IMPLIED -- a pointer button was double clicked-- + onmousedown CDATA #IMPLIED -- a pointer button was pressed down -- + onmouseup CDATA #IMPLIED -- a pointer button was released -- + onmouseover CDATA #IMPLIED -- a pointer was moved onto -- + onmousemove CDATA #IMPLIED -- a pointer was moved within -- + onmouseout CDATA #IMPLIED -- a pointer was moved away -- + onkeypress CDATA #IMPLIED -- a key was pressed and released -- + onkeydown CDATA #IMPLIED -- a key was pressed down -- + onkeyup CDATA #IMPLIED -- a key was released -- +onclick %Script; #IMPLIED -- a pointer button was clicked -- + ondblclick %Script; #IMPLIED -- a pointer button was double clicked-- + onmousedown %Script; #IMPLIED -- a pointer button was pressed down -- + onmouseup %Script; #IMPLIED -- a pointer button was released -- + onmouseover %Script; #IMPLIED -- a pointer was moved onto -- + onmousemove %Script; #IMPLIED -- a pointer was moved within -- + onmouseout %Script; #IMPLIED -- a pointer was moved away -- + onkeypress %Script; #IMPLIED -- a key was pressed and released -- + onkeydown %Script; #IMPLIED -- a key was pressed down -- + onkeyup %Script; #IMPLIED -- a key was released -- + + + +PRE +PRE + + + +#PCDATA | TT | I | B | BIG | SMALL | EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO | INPUT | SELECT | TEXTAREA | LABEL | BUTTON +#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl; + + + +P | H1|H2|H3|H4|H5|H6 | UL | OL | PRE | DL | DIV | NOSCRIPT | + BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS | #PCDATA | TT | I | B | BIG | SMALL | EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO | INPUT | SELECT | TEXTAREA | LABEL | BUTTON +%block; | %inline; + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +SCRIPT|STYLE|META|LINK|OBJECT +SCRIPT|STYLE|META|LINK|OBJECT + + + + + +P | H1|H2|H3|H4|H5|H6 | UL | OL | PRE | DL | DIV | NOSCRIPT | + BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS +P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT | + BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS + + + +CDATA +CDATA + + + +A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO +A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO + + + +(row|col|rowgroup|colgroup) +(row|col|rowgroup|colgroup) + + + +(TEXT | PASSWORD | CHECKBOX | + RADIO | SUBMIT | RESET | + FILE | HIDDEN | IMAGE | BUTTON) +(TEXT | PASSWORD | CHECKBOX | + RADIO | SUBMIT | RESET | + FILE | HIDDEN | IMAGE | BUTTON) + + + +CDATA +CDATA + + + +EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM +EM | STRONG | DFN | CODE | + SAMP | KBD | VAR | CITE | ABBR | ACRONYM + + + +CDATA +CDATA + + + +(left|center|right) +(left|center|right) + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +IGNORE +IGNORE + + + +id ID #IMPLIED -- document-wide unique id -- + class CDATA #IMPLIED -- space-separated list of classes -- + style CDATA #IMPLIED -- associated style info -- + title CDATA #IMPLIED -- advisory title -- lang NAME #IMPLIED -- language code -- + dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text -- onclick CDATA #IMPLIED -- a pointer button was clicked -- + ondblclick CDATA #IMPLIED -- a pointer button was double clicked-- + onmousedown CDATA #IMPLIED -- a pointer button was pressed down -- + onmouseup CDATA #IMPLIED -- a pointer button was released -- + onmouseover CDATA #IMPLIED -- a pointer was moved onto -- + onmousemove CDATA #IMPLIED -- a pointer was moved within -- + onmouseout CDATA #IMPLIED -- a pointer was moved away -- + onkeypress CDATA #IMPLIED -- a key was pressed and released -- + onkeydown CDATA #IMPLIED -- a key was pressed down -- + onkeyup CDATA #IMPLIED -- a key was released -- +%coreattrs; %i18n; %events; + + + +INPUT | SELECT | TEXTAREA | LABEL | BUTTON +INPUT | SELECT | TEXTAREA | LABEL | BUTTON + + + +CDATA +CDATA + + + +align (left|center|right|justify|char) #IMPLIED + char CDATA #IMPLIED -- alignment char, e.g. char=':' -- + charoff CDATA #IMPLIED -- offset for alignment char -- +align (left|center|right|justify|char) #IMPLIED + char %Character; #IMPLIED -- alignment char, e.g. char=':' -- + charoff %Length; #IMPLIED -- offset for alignment char -- + + + +IMG|OBJECT|BIG|SMALL|SUB|SUP +IMG|OBJECT|BIG|SMALL|SUB|SUP + + + +CDATA +CDATA + + + +CDATA +CDATA + + + +TITLE & BASE? +TITLE & BASE? + + + +TT | I | B | BIG | SMALL +TT | I | B | BIG | SMALL + + + +H1|H2|H3|H4|H5|H6 +H1|H2|H3|H4|H5|H6 + + + +CDATA +CDATA + + + +lang NAME #IMPLIED -- language code -- + dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text -- +lang %LanguageCode; #IMPLIED -- language code -- + dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text -- + + + +&#241; +&#241; + + + +&#8242; +&#8242; + + + +&#34; +&#34; + + + +&#8969; +&#8969; + + + +&#8719; +&#8719; + + + +&#203; +&#203; + + + +&#9674; +&#9674; + + + +&#221; +&#221; + + + +&#8221; +&#8221; + + + +&#8800; +&#8800; + + + +&#236; +&#236; + + + +&#968; +&#968; + + + +&#211; +&#211; + + + +&#8249; +&#8249; + + + +&#8715; +&#8715; + + + +&#8260; +&#8260; + + + +&#917; +&#917; + + + +&#8658; +&#8658; + + + +&#201; +&#201; + + + +&#180; +&#180; + + + +&#928; +&#928; + + + +&#8730; +&#8730; + + + +&#217; +&#217; + + + +&#8733; +&#8733; + + + +&#231; +&#231; + + + +&#207; +&#207; + + + +&#192; +&#192; + + + +&#8226; +&#8226; + + + +&#957; +&#957; + + + +&#8805; +&#8805; + + + +&#947; +&#947; + + + +&#922; +&#922; + + + +&#229; +&#229; + + + +&#184; +&#184; + + + +&#171; +&#171; + + + +&#926; +&#926; + + + +&#169; +&#169; + + + +&#8629; +&#8629; + + + +&#963; +&#963; + + + +&#226; +&#226; + + + +&#9827; +&#9827; + + + +&#213; +&#213; + + + +&#208; +&#208; + + + +&#953; +&#953; + + + +&#62; +&#62; + + + +&#732; +&#732; + + + +&#935; +&#935; + + + +&#920; +&#920; + + + +&#978; +&#978; + + + +&#246; +&#246; + + + +&#250; +&#250; + + + +&#168; +&#168; + + + +&#8212; +&#8212; + + + +&#8704; +&#8704; + + + +&#934; +&#934; + + + +&#8364; +&#8364; + + + +&#225; +&#225; + + + +&#8744; +&#8744; + + + +&#234; +&#234; + + + +&#191; +&#191; + + + +&#964; +&#964; + + + +&#8195; +&#8195; + + + +&#8472; +&#8472; + + + +&#209; +&#209; + + + +&#9001; +&#9001; + + + +&#955; +&#955; + + + +&#916; +&#916; + + + +&#220; +&#220; + + + +&#8254; +&#8254; + + + +&#204; +&#204; + + + +&#212; +&#212; + + + +&#338; +&#338; + + + +&#8712; +&#8712; + + + +&#238; +&#238; + + + +&#8746; +&#8746; + + + +&#950; +&#950; + + + +&#960; +&#960; + + + +&#199; +&#199; + + + +&#227; +&#227; + + + +&#8659; +&#8659; + + + +&#376; +&#376; + + + +&#8657; +&#8657; + + + +&#8756; +&#8756; + + + +&#8722; +&#8722; + + + +&#965; +&#965; + + + +&#8206; +&#8206; + + + +&#961; +&#961; + + + +&#8727; +&#8727; + + + +&#958; +&#958; + + + +&#8243; +&#8243; + + + +&#9824; +&#9824; + + + +&#8968; +&#8968; + + + +&#8660; +&#8660; + + + +&#945; +&#945; + + + +&#237; +&#237; + + + +&#8970; +&#8970; + + + +&#8734; +&#8734; + + + +&#8465; +&#8465; + + + +&#185; +&#185; + + + +&#8220; +&#8220; + + + +&#178; +&#178; + + + +&#179; +&#179; + + + +&#914; +&#914; + + + +&#166; +&#166; + + + +&#339; +&#339; + + + +&#242; +&#242; + + + +&#8594; +&#8594; + + + +&#218; +&#218; + + + +&#8250; +&#8250; + + + +&#8834; +&#8834; + + + +&#8205; +&#8205; + + + +&#8869; +&#8869; + + + +&#232; +&#232; + + + +&#254; +&#254; + + + +&#8801; +&#8801; + + + +&#8656; +&#8656; + + + +&#193; +&#193; + + + +&#38; +&#38; + + + +&#228; +&#228; + + + +&#8211; +&#8211; + + + +&#915; +&#915; + + + +&#8855; +&#8855; + + + +&#8721; +&#8721; + + + +&#197; +&#197; + + + +&#163; +&#163; + + + +&#8853; +&#8853; + + + +&#8835; +&#8835; + + + +&#933; +&#933; + + + +&#8707; +&#8707; + + + +&#919; +&#919; + + + +&#8204; +&#8204; + + + +&#194; +&#194; + + + +&#923; +&#923; + + + +&#931; +&#931; + + + +&#8217; +&#8217; + + + +&#198; +&#198; + + + +&#176; +&#176; + + + +&#235; +&#235; + + + +&#251; +&#251; + + + +&#967; +&#967; + + + +&#8743; +&#8743; + + + +&#969; +&#969; + + + +&#8736; +&#8736; + + + +&#222; +&#222; + + + +&#195; +&#195; + + + +&#8230; +&#8230; + + + +&#966; +&#966; + + + +&#223; +&#223; + + + +&#202; +&#202; + + + +&#239; +&#239; + + + +&#8711; +&#8711; + + + +&#353; +&#353; + + + +&#175; +&#175; + + + +&#8224; +&#8224; + + + +&#8839; +&#8839; + + + +&#8194; +&#8194; + + + +&#8745; +&#8745; + + + +&#205; +&#205; + + + +&#230; +&#230; + + + +&#921; +&#921; + + + +&#936; +&#936; + + + +&#8836; +&#8836; + + + +&#206; +&#206; + + + +&#161; +&#161; + + + +&#210; +&#210; + + + +&#165; +&#165; + + + +&#214; +&#214; + + + +&#189; +&#189; + + + +&#248; +&#248; + + + +&#8501; +&#8501; + + + +&#200; +&#200; + + + +&#188; +&#188; + + + +&#181; +&#181; + + + +&#8476; +&#8476; + + + +&#8747; +&#8747; + + + +&#924; +&#924; + + + +&#8222; +&#8222; + + + +&#8595; +&#8595; + + + +&#8240; +&#8240; + + + +&#8593; +&#8593; + + + +&#187; +&#187; + + + +&#954; +&#954; + + + +&#183; +&#183; + + + +&#215; +&#215; + + + +&#8838; +&#8838; + + + +&#982; +&#982; + + + +&#167; +&#167; + + + +&#8804; +&#8804; + + + +&#8218; +&#8218; + + + +&#177; +&#177; + + + +&#164; +&#164; + + + +&#913; +&#913; + + + +&#8596; +&#8596; + + + +&#172; +&#172; + + + +&#252; +&#252; + + + +&#253; +&#253; + + + +&#8773; +&#8773; + + + +&#959; +&#959; + + + +&#8971; +&#8971; + + + +&#243; +&#243; + + + +&#8482; +&#8482; + + + +&#173; +&#173; + + + +&#918; +&#918; + + + +&#952; +&#952; + + + +&#170; +&#170; + + + +&#233; +&#233; + + + +&#977; +&#977; + + + +&#249; +&#249; + + + +&#60; +&#60; + + + +&#402; +&#402; + + + +&#186; +&#186; + + + +&#182; +&#182; + + + +&#8592; +&#8592; + + + +&#255; +&#255; + + + +&#925; +&#925; + + + +&#9830; +&#9830; + + + +&#224; +&#224; + + + +&#247; +&#247; + + + +&#352; +&#352; + + + +&#9002; +&#9002; + + + +&#8225; +&#8225; + + + +&#932; +&#932; + + + +&#160; +&#160; + + + +&#951; +&#951; + + + +&#8764; +&#8764; + + + +&#8216; +&#8216; + + + +&#8207; +&#8207; + + + +&#948; +&#948; + + + +&#219; +&#219; + + + +&#245; +&#245; + + + +&#8706; +&#8706; + + + +&#927; +&#927; + + + +&#240; +&#240; + + + +&#244; +&#244; + + + +&#937; +&#937; + + + +&#946; +&#946; + + + +&#216; +&#216; + + + +&#949; +&#949; + + + +&#8713; +&#8713; + + + +&#8709; +&#8709; + + + +&#174; +&#174; + + + +&#9829; +&#9829; + + + +&#196; +&#196; + + + +&#190; +&#190; + + + +&#956; +&#956; + + + +&#8901; +&#8901; + + + +&#8776; +&#8776; + + + +&#8201; +&#8201; + + + +&#162; +&#162; + + + +&#710; +&#710; + + + +&#962; +&#962; + + + +&#929; +&#929; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir, for use with title -- + type %ContentType; #REQUIRED -- content type of style language -- + media %MediaDesc; #IMPLIED -- designed for use with these media -- + title %Text; #IMPLIED -- advisory title -- + + + + + + + + + + + + + + + + + + + + id ID #IMPLIED -- document-wide unique id -- + name CDATA #REQUIRED -- property name -- + value CDATA #IMPLIED -- property value -- + valuetype (DATA|REF|OBJECT) DATA -- How to interpret value -- + type %ContentType; #IMPLIED -- content type for value + when valuetype=ref -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- URI for source document or msg -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + span NUMBER 1 -- default number of columns in group -- + width %MultiLength; #IMPLIED -- default width for enclosed COLs -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir, for use with content -- + http-equiv NAME #IMPLIED -- HTTP response header name -- + name NAME #IMPLIED -- metainformation name -- + content CDATA #REQUIRED -- associated information -- + scheme CDATA #IMPLIED -- select form of content -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + accesskey %Character; #IMPLIED -- accessibility key character -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + charset %Charset; #IMPLIED -- char encoding of linked resource -- + href %URI; #IMPLIED -- URI for linked resource -- + hreflang %LanguageCode; #IMPLIED -- language code -- + type %ContentType; #IMPLIED -- advisory content type -- + rel %LinkTypes; #IMPLIED -- forward link types -- + rev %LinkTypes; #IMPLIED -- reverse link types -- + media %MediaDesc; #IMPLIED -- for rendering on these media -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + charset %Charset; #IMPLIED -- char encoding of linked resource -- + type %ContentType; #REQUIRED -- content type of script language -- + src %URI; #IMPLIED -- URI for an external script -- + defer (defer) #IMPLIED -- UA may defer execution of script -- + event CDATA #IMPLIED -- reserved for possible future use -- + for %URI; #IMPLIED -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + -- table section -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- table section -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- column groups and properties -- + %attrs; -- %coreattrs, %i18n, %events -- + span NUMBER 1 -- COL attributes affect N columns -- + width %MultiLength; #IMPLIED -- column width specification -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n; -- lang, dir -- + profile %URI; #IMPLIED -- named dictionary of meta info -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #REQUIRED -- for reference by usemap -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + src %URI; #REQUIRED -- URI of image to embed -- + alt %Text; #REQUIRED -- short description -- + longdesc %URI; #IMPLIED -- link to long description + (complements alt) -- + name CDATA #IMPLIED -- name of image for scripting -- + height %Length; #IMPLIED -- override height -- + width %Length; #IMPLIED -- override width -- + usemap %URI; #IMPLIED -- use client-side image map -- + ismap (ismap) #IMPLIED -- use server-side image map -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + charset %Charset; #IMPLIED -- char encoding of linked resource -- + type %ContentType; #IMPLIED -- advisory content type -- + name CDATA #IMPLIED -- named link end -- + href %URI; #IMPLIED -- URI for linked resource -- + hreflang %LanguageCode; #IMPLIED -- language code -- + rel %LinkTypes; #IMPLIED -- forward link types -- + rev %LinkTypes; #IMPLIED -- reverse link types -- + accesskey %Character; #IMPLIED -- accessibility key character -- + shape %Shape; rect -- for use with client-side image maps -- + coords %Coords; #IMPLIED -- for use with client-side image maps -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + label %Text; #REQUIRED -- for use in hierarchical menus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + for IDREF #IMPLIED -- matches field ID value -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- info on reason for change -- + datetime %Datetime; #IMPLIED -- date and time of change -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #IMPLIED + rows NUMBER #REQUIRED + cols NUMBER #REQUIRED + disabled (disabled) #IMPLIED -- unavailable in this context -- + readonly (readonly) #IMPLIED + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + onselect %Script; #IMPLIED -- some text was selected -- + onchange %Script; #IMPLIED -- the element value was changed -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #IMPLIED -- field name -- + size NUMBER #IMPLIED -- rows visible -- + multiple (multiple) #IMPLIED -- default is single selection -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + onchange %Script; #IMPLIED -- the element value was changed -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- URI for source document or msg -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- table element -- + %attrs; -- %coreattrs, %i18n, %events -- + summary %Text; #IMPLIED -- purpose/structure for speech output-- + width %Length; #IMPLIED -- table width -- + border %Pixels; #IMPLIED -- controls frame width around table -- + frame %TFrame; #IMPLIED -- which parts of frame to render -- + rules %TRules; #IMPLIED -- rulings between rows and cols -- + cellspacing %Length; #IMPLIED -- spacing between cells -- + cellpadding %Length; #IMPLIED -- spacing within cells -- + %reserved; -- reserved for possible future use -- + datapagesize CDATA #IMPLIED -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + name CDATA #IMPLIED + value CDATA #IMPLIED -- sent to server when submitted -- + type (button|submit|reset) submit -- for use as form button -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + action %URI; #REQUIRED -- server-side form handler -- + method (GET|POST) GET -- HTTP method used to submit the form-- + enctype %ContentType; "application/x-www-form-urlencoded" + accept %ContentTypes; #IMPLIED -- list of MIME types for file upload -- + name CDATA #IMPLIED -- name of form for scripting -- + onsubmit %Script; #IMPLIED -- the form was submitted -- + onreset %Script; #IMPLIED -- the form was reset -- + accept-charset %Charsets; #IMPLIED -- list of supported charsets -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + declare (declare) #IMPLIED -- declare but don't instantiate flag -- + classid %URI; #IMPLIED -- identifies an implementation -- + codebase %URI; #IMPLIED -- base URI for classid, data, archive-- + data %URI; #IMPLIED -- reference to object's data -- + type %ContentType; #IMPLIED -- content type for data -- + codetype %ContentType; #IMPLIED -- content type for code -- + archive CDATA #IMPLIED -- space-separated list of URIs -- + standby %Text; #IMPLIED -- message to show while loading -- + height %Length; #IMPLIED -- override height -- + width %Length; #IMPLIED -- override width -- + usemap %URI; #IMPLIED -- use client-side image map -- + name CDATA #IMPLIED -- submit as part of form -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %coreattrs; -- id, class, style, title -- + lang %LanguageCode; #IMPLIED -- language code -- + dir (ltr|rtl) #REQUIRED -- directionality -- + + + + + + + + + + + + + + + + + + + + + + + + -- table section -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %i18n + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + shape %Shape; rect -- controls interpretation of coords -- + coords %Coords; #IMPLIED -- comma-separated list of lengths -- + href %URI; #IMPLIED -- URI for linked resource -- + nohref (nohref) #IMPLIED -- this region has no action -- + alt %Text; #REQUIRED -- short description -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + selected (selected) #IMPLIED + disabled (disabled) #IMPLIED -- unavailable in this context -- + label %Text; #IMPLIED -- for use in hierarchical menus -- + value CDATA #IMPLIED -- defaults to element content -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- header or data cell -- + %attrs; -- %coreattrs, %i18n, %events -- + abbr %Text; #IMPLIED -- abbreviation for header cell -- + axis CDATA #IMPLIED -- comma-separated list of related headers-- + headers IDREFS #IMPLIED -- list of id's for header cells -- + scope %Scope; #IMPLIED -- scope covered by header cells -- + rowspan NUMBER 1 -- number of rows spanned by cell -- + colspan NUMBER 1 -- number of cols spanned by cell -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + cite %URI; #IMPLIED -- info on reason for change -- + datetime %Datetime; #IMPLIED -- date and time of change -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- header or data cell -- + %attrs; -- %coreattrs, %i18n, %events -- + abbr %Text; #IMPLIED -- abbreviation for header cell -- + axis CDATA #IMPLIED -- comma-separated list of related headers-- + headers IDREFS #IMPLIED -- list of id's for header cells -- + scope %Scope; #IMPLIED -- scope covered by header cells -- + rowspan NUMBER 1 -- number of rows spanned by cell -- + colspan NUMBER 1 -- number of cols spanned by cell -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + href %URI; #REQUIRED -- URI that acts as base URI -- + + + + + + + + + + + + + + + + + + + + + -- table row -- + %attrs; -- %coreattrs, %i18n, %events -- + %cellhalign; -- horizontal alignment in cells -- + %cellvalign; -- vertical alignment in cells -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + onload %Script; #IMPLIED -- the document has been loaded -- + onunload %Script; #IMPLIED -- the document has been removed -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %attrs; -- %coreattrs, %i18n, %events -- + type %InputType; TEXT -- what kind of widget is needed -- + name CDATA #IMPLIED -- submit as part of form -- + value CDATA #IMPLIED -- Specify for radio buttons and checkboxes -- + checked (checked) #IMPLIED -- for radio buttons and check boxes -- + disabled (disabled) #IMPLIED -- unavailable in this context -- + readonly (readonly) #IMPLIED -- for text and passwd -- + size CDATA #IMPLIED -- specific to each type of field -- + maxlength NUMBER #IMPLIED -- max chars for text fields -- + src %URI; #IMPLIED -- for fields with images -- + alt CDATA #IMPLIED -- short description -- + usemap %URI; #IMPLIED -- use client-side image map -- + ismap (ismap) #IMPLIED -- use server-side image map -- + tabindex NUMBER #IMPLIED -- position in tabbing order -- + accesskey %Character; #IMPLIED -- accessibility key character -- + onfocus %Script; #IMPLIED -- the element got the focus -- + onblur %Script; #IMPLIED -- the element lost the focus -- + onselect %Script; #IMPLIED -- some text was selected -- + onchange %Script; #IMPLIED -- the element value was changed -- + accept %ContentTypes; #IMPLIED -- list of MIME types for file upload -- + %reserved; -- reserved for possible future use -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/xmltools/katexmltools.desktop b/kate/xmltools/katexmltools.desktop new file mode 100644 index 0000000..ca3f7e8 --- /dev/null +++ b/kate/xmltools/katexmltools.desktop @@ -0,0 +1,129 @@ +[Desktop Entry] +Type=Service +ServiceTypes=Kate/Plugin +X-KDE-Library=katexmltoolsplugin +X-Kate-Version=2.5 +Name=Kate XML Completion +Name[af]=Kate Xml Voltooiïng +Name[az]=Kate XML Tamamlaması +Name[bs]=Kate XML dovršavanje +Name[ca]=Completat XML per a Kate +Name[cs]=Kate modul pro doplňování XML +Name[cy]=Cwblhad XML Kate +Name[da]=Kate XML-Komplettering +Name[de]=XML-Vervollständigung +Name[el]=Kate XML συμπλήρωση +Name[eo]=XML-kompletigo por Kodredaktilo +Name[es]=Completado XML para Kate +Name[et]=Kate XML soovitaja +Name[eu]=Kateren XML osaketa +Name[fa]=تکمیل Kate XML +Name[fi]=Kate XML täydennys +Name[fo]=Kate XML-ístingur +Name[fr]=Complètement XML pour Kate +Name[fy]=Kate XML-oanfolling +Name[gl]=Completación de XML para Kate +Name[he]=השלמת XML ל־Kate +Name[hi]=के-एटीई एक्सएमएल कम्पलीशन +Name[hr]=Kate XML dopunjavanje +Name[hu]=Kate XML-szerkesztő +Name[is]=Kate XML taga-lokun +Name[it]=Completamento di XML di Kate +Name[ja]=Kate XML 補完 +Name[ka]=XML დასრულება +Name[kk]=Kate XML толтыру +Name[km]=ការ​បំពេញ​របស់ Kate XML +Name[lt]=Kate XML pabaigimas +Name[mk]=XML-довршување за Кате +Name[ms]=Kate XML Siap +Name[nb]=Kate XML-fullføring +Name[nds]=XML-Kompletteren för Kate +Name[ne]=केट एक्सएमएल समाप्ति +Name[nl]=Kate XML-aanvulling +Name[nn]=Kate XML-fullføring +Name[nso]=Phetso ya XML ya Kate +Name[pa]=ਕੇਟ XML ਪੂਰਨਤਾ +Name[pl]=Dopełnienie tekstu w XML +Name[pt]=Completação de XML do Kate +Name[pt_BR]=Complementação XML do Kate +Name[ro]=Completare XML pentru Kate +Name[ru]=Модуль Kate для заполнения XML +Name[sk]=Kate XML dopĺňanie +Name[sl]=Zaključevanje XML v Kate +Name[sr]=Довршавање XML-а за Kate +Name[sr@Latn]=Dovršavanje XML-a za Kate +Name[sv]=Kates XML-komplettering +Name[ta]=கேட் XML முழுமையாக்கம் +Name[tg]=Модули Kate барои пур кардани XML +Name[th]=ปลั๊กอินทำ XML ให้สมบูรณ์ของ Kate +Name[tr]=Kate XML Tamamlama +Name[uk]=Доповнення XML для Kate +Name[uz]=Kate uchun XML toʻldirish +Name[uz@cyrillic]=Kate учун XML тўлдириш +Name[vi]=Gõ xong XML Kate +Name[xh]=Ugqityo lwe Kate XML +Name[zh_CN]=Kate XML 补齐 +Name[zh_TW]=Kate XML 補完 +Comment=Lists XML elements, attributes, attribute values and entities allowed by DTD +Comment[af]=Lyste Xml elemente, eienskappe, kenmerk waardes en entiteite toegelaat deur Dtd +Comment[az]=DTD tərəfindən qəbul edilən XML elementlərini, atributlarını, atribut qiymətlərini sıralayar +Comment[bg]=Помощ при вмъкване на елементи, тагове и атрибути в документ XML +Comment[bs]=Izlistava XML elemente, atribute, vrijednosti atributa i entitete koje dozvoljava DTD +Comment[ca]=Llista els elements, atributs, valors dels atributs i entitats XML permeses per la DTD +Comment[cs]=Vypisuje seznam XML prvků, atributů, hodnot atributů a entit povolených v DTD +Comment[cy]=Rhestru elfennau, priodoleddau, gwerthoedd priodoleddau, ac endidau XML a chaniateir gan y DTD +Comment[da]=Lister af XML-elementer, attributter, attributværdier og entiteter tilladt af DTD +Comment[de]=Listet von der DTD erlaubte XML-Elemente, -Attribute, Attributwerte und Entities auf +Comment[el]=Εμφανίζει στοιχεία (elements), ιδιότητες (attributes), τιμές ιδιοτήτων και οντότητες (entities) που επιτρέπει το DTD +Comment[eo]=Listigas XML-erojn, atributojn, atribut-valorojn kaj unuojn permesitajn de la DTD +Comment[es]=Listas de elementos XML, atributos, valores del atributo y entidades permitidas por DTD +Comment[et]=XML elementide, atribuutide, atribuudiväärtuste ja DTD lubatud olemite nimekiri +Comment[eu]=DTDk onartutako XML elementuak, atributuak, atributuen balioak eta entitateak zerrendatzen ditu +Comment[fa]=عناصر XML، خصیصه‌ها، مقادیر خصیصه و هستارهای اجازه داده‌شده توسط DTD را فهرست می‌کند +Comment[fi]=Listaa XML-elementit, attribuutit, attribuuttiarvot ja DTD:n sallimat entityt +Comment[fo]=Vísir XML-eindir, eginleikir, eginleikisvirði og styttingar loyvdir av skjalaslagnum (DTD'in). +Comment[fr]=Liste les éléments, attributs, valeurs d'attribut et entités XML autorisés par une DTD +Comment[fy]=Opsomming fan XML-eleminten, attributen, attribútwearden en entiteiten tastien troch DTD +Comment[ga]=Liostaigh eilimintí XML, aitreabúidí, luachanna aitreabúide agus aonáin atá ceadaithe ag an DTD +Comment[gl]=Lista os elementos, atributos, valores de atributos e entidades permitidas en XML polo DTD +Comment[he]=הצגת רשימה של מרכיבים, מאפיינים, ערכי מאפיינים וישויות XML שה־DTD מתיר +Comment[hi]=डीटीडी के द्वारा स्वीकार्य एक्सएमएल अवयवों, एट्रिब्यूट्स, एट्रिब्यूट मूल्य तथा एंटिटीस को सूचीबद्ध करता है +Comment[hr]=Ispisuje XML elemente, atribute, vrijednosti atributa i entitete dopuštene od strane DTD-a +Comment[hu]=Kilistázza az XML elemeket, attribútumokat, attribútumértékeket és a DTD alapján az engedélyezett entitásokat +Comment[is]=Sýnir XML stök, eiginleika, gildi og einindi sem leyfð eru af DTD +Comment[it]=Elenca gli elementi XML, gli attributi, i valori degli attributi e le entità permesse dal DTD +Comment[ja]=DTD で許可されている XML のエレメント、アトリビュートおよびその値やエンティティを表示します +Comment[ka]=ჩამოთვლის XML ელემენტებს, ატრიბუტებს, ატრიბუტთა მნიშვნელობებს და DTD-ს მიერ ნებადართულ ელემენტებს +Comment[kk]=DTD анықтаған XML элементтер, атрибуттер, атрибуттің мәндерін, жазуларын тізімдеу +Comment[km]=រាយ​ធាតុ XML គុណលក្ខណៈ តម្លៃ​គុណលក្ខណៈ និង​ធាតុ​​​បាន​អនុញ្ញាត​ដោយ DTD +Comment[lt]=Pateikia XML elementus, atributus, atributų reikšmes ir esybes (entities), leistas DTD +Comment[lv]=Rāda XML elementus, atribūtus, atribūtu vērtības un titlus ko atļauj DTD +Comment[mk]=Листа XML-елементи, атрибути, вредности на атрибути и ентитети дозволени од DTD +Comment[ms]=Senarai unsur, atribut, nilai atribut dan entiti XML yang dibenarkan oleh DTD +Comment[mt]=Jillistja l-elementi, attributi, valuri u entitajiet XML aċċettati mid-DTD +Comment[nb]=Lister opp alle XML-elementer, attributter, attributtverdier og entiteter som DTD tillater +Comment[nds]= List de vun de DTD verlöövten XML-Elementen, -Attributen, Attributweerten un Eenheiten op +Comment[ne]=एक्सएमएल तत्व, विशेषता, विशेषता मान र डीटीडीद्वारा अनुमति प्राप्त वस्तु सूचीकृत गर्छ +Comment[nl]=Opsomming van XML-elementen, attributen, attribuutwaarden en entiteiten toegestaan door DTD +Comment[nn]=Listar opp XML-element, attributt, attributtverdiar og entitetar som DTD-en tillet +Comment[pl]=Wymienia elementy, atrybuty, wartości atrybutów i obiekty XML dozwolone przez DTD +Comment[pt]=Lista os elementos, atributos, valores de atributos e entidades permitidas em XML pelo DTD +Comment[pt_BR]=Lista elementos XML, atributos, valores de atributos e entidades aceitas pelo DTD +Comment[ro]=Listează elementele XML, atributele, valorile atributelor şi entităţile permise de DTD +Comment[ru]=Перечисляет элементы XML, их атрибуты, значения атрибутов и записи, разрешённые DTD +Comment[sk]=Vypisuje zoznam prvok XML, atribútov, hodnôt atribútov a entitít podľa DTD +Comment[sl]=Poda elemente XML, njihove atribute, vrednosti atributov in entitete, ki jih dovoljuje DTD +Comment[sr]=Листа XML елементе, атрибуте, вредности атрибута и ентитете које DTD дозвољава +Comment[sr@Latn]=Lista XML elemente, atribute, vrednosti atributa i entitete koje DTD dozvoljava +Comment[sv]=Listar XML-element, attribut, attributvärden och objekt som tillåts av DTD +Comment[ta]=XML நிகழ்வுகளை பட்டியலிடுதல், பண்புகள், DTDஆல் அனுமதிக்கப்பட்ட மதிப்புகள் மற்றும் உள்ளீடுகளை மதிப்பிடு +Comment[tg]=Номбар кардани ҷузъҳои XML, хусусиятҳои онҳо, вусъати хусусиятҳо ва сабтҳо, ҳалшавандаҳои DTD +Comment[th]=รายการอีลีเมนต์ XML, แอตทริบิวต์, ค่าแอตทริบิวต์ และเอนติตี ซึ่งอนุญาตโดย DTD +Comment[tr]=DTD'nin izin verdiği XML elemanlarını, özelliklerini, özellik değerlerini ve varlıklarını listeler +Comment[uk]=Показує елементи XML, а також атрибути та їх значення і записи, дозволені за DTD +Comment[ven]=Mutevhe wa XML elements, attributes, atributes values na entities zwo tendelwa nga DTD +Comment[vi]=Liệt kê phần tử XML, thuộc tính, giá trị thuộc tính và các hạng mục cho phép bởi DTD +Comment[xh]=Idwelisa iingxenye ze XML, iimpahla, amaxabiso empahla kunye nezinto ezivunyelwe yi DTD +Comment[zh_CN]=列出 DTD 允许的 XML 元素、属性、属性值和实体 +Comment[zh_TW]=列舉 XML 元件,屬性,屬性值和實體 +Comment[zu]=Biza uluhlu lwezingcezu ze XML, izakhi, zakhi izimilo kanye nezinye izinto kuvunyelwe yi DTD diff --git a/kate/xmltools/kcfg.dtd.xml b/kate/xmltools/kcfg.dtd.xml new file mode 100644 index 0000000..84c5e13 --- /dev/null +++ b/kate/xmltools/kcfg.dtd.xml @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #IMPLIED + type (String|StringList|Font|Rect|Size|Color| + Point|Int|UInt|Bool|Double|DateTime| + Int64|UInt64|IntList|Enum|Path|Password) #REQUIRED + key CDATA #IMPLIED + hidden (true|false) #IMPLIED + + + + + + + + + + + + + + + + + + + + + code (true|false) #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #IMPLIED + arg (true|false) #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + code (true|false) #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + code (true|false) #IMPLIED + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/xmltools/kde-docbook.dtd.xml b/kate/xmltools/kde-docbook.dtd.xml new file mode 100644 index 0000000..bf01b59 --- /dev/null +++ b/kate/xmltools/kde-docbook.dtd.xml @@ -0,0 +1,21489 @@ + + + + + +&#x2322; + + +&#x22CD; + + +&#x03BA; + + + +KSpread + + + +&#x22A3; + + +&#x03AF; + + +&#x02DB; + + +&#x00B4; + + +&#x21CE; + + +&#x221A; + + +&#x0449; + + + +URI + + + +&#x227D; + + +&#x00CF; + + + +URL + + + + +Linux-Mandrake + + + +&#x2296; + + +&#x0401; + + + +KSysguard + + + +&#x00B8; + + + +Krayon + + + +&#x22CA; + + +&#x03B5; + + +&#x210F; + + +&#x2293; + + +&#x00A8; + + + + +sendmail + + + + +&#x03B5; + + +&#x039E; + + +&#x2014; + + +&#x03C7; + + +&#x043D; + + + +KBackgammon + + + +&#x041E; + + +&#x00E1; + + +&#x00EA; + + +&#x2135; + + +&#xE2AA; + + +&#x016C; + + + +KHexEdit + + + +&#x0119; + + + +Keystone + + + + +KuickShow + + + +&#x03B6; + + +&#x013E; + + + +KSpaceDuel + + + +&#x03C7; + + + +KSame + + + +&#x25CB; + + +&#x0139; + + +&#x2669; + + +&#x005F; + + + +http://www.kde.org/ + + + +&#x03BE; + + +&#x220A; + + +&#x2033; + + +&#x20DC; + + +&#x013B; + + +&#x2111; + + +&#x00B9; + + +&#x00B2; + + +&#x228A; + + +&#x00B3; + + +&#x03C3; + + + +&#x00A6; + + + +&#x2316; + + +&#x2192; + + +&#x2282; + + +&#x22A5; + + +&#xE2B8; + + +&#x0398; + + +&#x0394; + + +&#x044B; + + +&#x2259; + + +&#38;#38; + + +&#x0417; + + + +KOrn + + + +&#x2211; + + +&#x0149; + + +&#x2287; + + +&#x2283; + + +&#x0155; + + +&#x22E8; + + +&#x2203; + + +&#x2112; + + +&#x2019; + + + +KOTalkd + + + +&#x2271; + + + +DrKonqi + + + +&#x0394; + + +&#x228A; + + +&#x03C7; + + +&#x2227; + + +&#x0157; + + +&#x2221; + + +&#x2291; + + +&#x2220; + + + +kwuftpd + + + +&#x2026; + + +&#x228A; + + + +Kaboodle + + + +&#x00EF; + + +&#x03D2; + + +&#x045C; + + +&#x22D6; + + + +&#x2287; + + +&#x0403; + + +&#x00E6; + + +&#x2271; + + +&#x00A5; + + +&#x2268; + + +&#x2225; + + +&#x00F8; + + + +Kab2 + + + +&#x03BD; + + +&#x25CB; + + +&#x039F; + + +&#x040E; + + +&#x226F; + + +&#x044D; + + + +KNode + + + + +kdvi + + + +&#x2030; + + +&#x0424; + + + +&#x2225; + + +&#x22D7; + + +&#x00A7; + + +&#x2224; + + +&#xE2B3; + + +&#x21BA; + + +&#x2194; + + +&#x2134; + + +&#x2268; + + + +Solaris + + + +&#x224A; + + +&#x222E; + + +&#x03F0; + + +&#x0160; + + +&#x2323; + + +&#x22BB; + + +&#x03C6; + + +&#x2580; + + +&#x03D5; + + +&#x2018; + + +&#x0144; + + +&#x03A9; + + + +Handspring + + + +&#x21B7; + + +&#x231F; + + +&#x0146; + + +&#x039E; + + +&#x0396; + + +&#x043F; + + +&#x228F; + + +&#x0176; + + + +KTalk + + + +&#x013F; + + + +Konquest + + + +&#x2032; + + + +KHelpcenter + + + +&#x220F; + + +&#x25CA; + + +&#x25BF; + + +&#x00DD; + + +&#x2290; + + +&#x2032; + + +&#x0428; + + +&#x2253; + + +&#x221D; + + + +ELF + + + +&#x02DD; + + + +klaptopdaemon + + + +&#x2315; + + +&#x03C5; + + +&#x223C; + + + +KTalkd + + + + +Ark + + + +&#x0435; + + +&#x010F; + + +&#x2194; + + + +Klipper + + + +&#x00D5; + + +&#x003D; + + +&#x03B4; + + + +CD + + + +&#x2270; + + +&#x2555; + + +&#x2273; + + +&#x2117; + + +&#x010A; + + +&#x2552; + + +&#x231D; + + +&#x03B5; + + +&#x045B; + + +&#x22DD; + + +&#x2210; + + +&#xE2B5; + + +&#x00DC; + + +&#x002A; + + + +CSS + + + +&#x0152; + + + +XEmacs + + + +&#x0169; + + +&#x2270; + + +&#x0406; + + +&#x2557; + + + +UNIX + + + +&#x231E; + + +&#x21D3; + + +&#x2204; + + +&#x045E; + + +&#x2553; + + +&#x014A; + + +&#x0459; + + +&#x0021; + + +&#x015C; + + +&#x2240; + + +&#x226E; + + +&#x25BD; + + + +gcc + + + +&#x03D6; + + +&#x045F; + + +&#x00DA; + + +&#x229F; + + + +GIF + + + +&#x2018; + + +&#x00FE; + + + +Moon Phase + + + +&#x21C1; + + +&#x2013; + + +&#x0393; + + + +KWord + + + +&#x03C0; + + +&#x21B0; + + +&#x0433; + + +&#x03CE; + + + +KSirtet + + + +&#x00A8; + + +&#x21C0; + + + +PMX + + + + +KSnake + + + +&#x007D; + + +&#x03C9; + + +&#x2254; + + +&#x22B3; + + + +Windows + + + +&#x2272; + + +&#x231C; + + + +KFind + + + +&#x0177; + + +&#x2020; + + + +KPoker + + + + +KChart + + + +&#x00D2; + + + +IRIX + + + +&#x0397; + + +&#x0447; + + +&#x2565; + + +&#x2201; + + + +Red Hat + + + +&#x22DE; + + +&#x22DB; + + + +LZW + + + +&#x010B; + + +&#x03DC; + + + +KSokoban + + + +&#x2265; + + + +HP-UX + + + +&#x0440; + + +&#x0421; + + +&#x03D6; + + +&#x2568; + + +&#x00A4; + + +&#x00AC; + + +&#x00FC; + + +&#x2245; + + +[tm] + + +&#x00F9; + + +&#x2566; + + + +KLatin + + + +&#x21BD; + + +&#x229E; + + +&#x21A9; + + +&#x22D9; + + +&#x2113; + + +&#x00A0; + + + +tkmidi + + + +&#x03C4; + + +&#x2569; + + + +HP + + + +&#x22DC; + + +&#x22CB; + + + +XHTML + + + +&#x2280; + + + +PPP + + + +&#x226B; + + +&#x21BC; + + +&#x2210; + + +&#x223D; + + +(R) + + +&#x0456; + + +&#x00C4; + + +&#x2041; + + +&#x042A; + + + +KTimemon + + + +&#x015D; + + +&#x03B3; + + + +Motif + + + +&#x03C1; + + + +LinuxPPC + + + +&#x0407; + + + +GMT + + + +&#x003B; + + +&#x22DF; + + +&#x03C2; + + +&#x21AD; + + +&#xFB01; + + +&#x21CC; + + +&#x0426; + + + +artscontrol + + + +&#x03B3; + + +&#x014B; + + + +KAlarm + + + +(c) + + +&#x011C; + + + +&#x2197; + + +&#x00D0; + + +&#x2213; + + +&#x2043; + + +&#x227C; + + + +GNU + + + +&#x0112; + + + +Emacs + + + + +right mouse button + + +&#x2550; + + +&#x03C4; + + +&#x2281; + + +&#x03C1; + + +&#x25BE; + + +&#x03A3; + + + +KTouch + + + + +Java + + + +&#x2726; + + +&#x0438; + + +&#x0419; + + +&#x2551; + + +&#x21C8; + + +&#x22C6; + + +&#x22E1; + + +&#x2288; + + + +Kfloppy + + + +&#x0102; + + + +KEdit + + + +&#x222A; + + +&#x0398; + + +&#x2322; + + +&#x0388; + + +&#x22A7; + + + +KPackage + + + +&#x0458; + + + +Kappfinder + + + +&#x2500; + + +&#x0167; + + + +KScreensaver + + + + +KWin + + + +&#x03C1; + + +&#x015B; + + +&#x03B2; + + +&#x21AB; + + + +&#x2502; + + +no Front-Cover Texts + + +&#x2288; + + +&#x0153; + + +&#x2292; + + +&#x011F; + + +&#x015F; + + +&#x0170; + + + +Kandy + + + +&#x00E4; + + +&#x010C; + + +&#x2297; + + + +ksysv + + + +&#x2222; + + +&#x0129; + + +&#x00C2; + + +&#x039B; + + +&#x0442; + + +&#x0423; + + + +CD-ROM + + + +&#x03B7; + + +&#x22D8; + + +&#x0023; + + +&#x0104; + + +&#x226A; + + +&#x21D4; + + +&#x0404; + + +&#x2207; + + +&#xE2A2; + + +&#x005B; + + +&#x00AF; + + + +KPatience + + + + +Kugar + + + +&#x00CD; + + + +kwmpager + + + +&#x03B1; + + + +Kab + + + +&#x03C8; + + +&#x0455; + + +&#x03AE; + + +&#x005C; + + +&#x2191; + + +&#x00BB; + + +&#x229D; + + +&#x0116; + + +&#x2269; + + + + +KPilot + + + +&#x0164; + + + +KBlackbox + + + +&#x011D; + + + +X-Server + + + +&#x22CE; + + +&#x03B9; + + +&#x266F; + + +&#x0410; + + +&#x00F3; + + +&#x230B; + + +&#x2199; + + +&#x22EA; + + +&#x266E; + + +&#x007C; + + +&#x017B; + + +operating system + + +&#x2294; + + +&#x0113; + + +&#x2269; + + +&#x03B7; + + + +KDesktop + + + +&#x045A; + + + +etc. + + + +&#x227C; + + +&#x017E; + + +&#x2299; + + +&#x00F0; + + + +ATAPI + + + +&#x0179; + + +&#x0425; + + + +&kde; Control Center + + + +kde-installation + + + +help: +man: + + + +&#x002D; + + +&#x02DA; + + +&#x03AD; + + +&#x2009; + + +&#x212B; + + +&#x22A9; + + + +Cervisia + + + +&#x2026; + + +&#x221F; + + +&#x201E; + + +&#x011B; + + +&#x03C4; + + +&#x00EC; + + +&#x03A5; + + +&#x03C8; + + +&#x043A; + + +&#x041B; + + + +KArm + + + +&#x00C9; + + + +Klpq + + + +&#x03A0; + + + +GUI + + + +&#x2035; + + + +kikbd + + + + +KDE + + + + +KFract + + + + +kdf + + + +&#x2022; + + +&#x00AB; + + +&#x2241; + + + +HTTP + + + +&#x21CD; + + +&#x22A8; + + + +kdm + + + +&#x00E2; + + +&#x22E9; + + + +CUPS + + + +&#x22EE; + + +&#x2007; + + +&#x2216; + + +&#x02DC; + + +&#x0142; + + +&#xE291; + + +&#x2323; + + +&#x0105; + + +&#x0454; + + + +&#x03F1; + + +&#x0452; + + +&#x2592; + + + +Qt + + + + +KMail + + + +&#x00BF; + + +&#x2591; + + +&#x2003; + + +&#x224E; + + +&#x0117; + + + +KNewsTicker + + + +&#x0137; + + +&#x3008; + + +&#x22D2; + + +&#x03AB; + + +&#x02C7; + + + +Kate + + + +&#x225C; + + +&#x0432; + + +&#x0391; + + +&#x0436; + + +no Back-Cover Texts + + +&#x00E3; + + +&#x017C; + + +&#x22AF; + + +&#x219E; + + +&#x03BB; + + +&#x22DA; + + +&#x212C; + + + +&#x0028; + + +&#x03C9; + + + +Pixie + + + + +KFM + + + +&#x0124; + + +&#x2269; + + +&#x2255; + + +&#x03A7; + + +&#x00E8; + + +&#x226C; + + +&#x21A2; + + +&#x255B; + + +&#x00C1; + + +&#x22BA; + + +&#x2558; + + +&#x224F; + + + +Linux + + + +&#x00A3; + + +&#x2195; + + +&#x2593; + + +&#x21A6; + + + +KIconEdit + + + +&#x21C6; + + +&#x2116; + + +&#x03BA; + + + +kcharselect + + + +&#x2736; + + +&#x039B; + + + +ksgmltools + + + +&#x0431; + + +&#x013D; + + + +MusiXTeX + + + +&#x044E; + + +&#x256B; + + +&#x0127; + + +&#x22C7; + + +&#x2243; + + +&#x255C; + + +&#x2562; + + +&#x01F5; + + +&#x255A; + + +&#x255F; + + +&#x03B9; + + +&#x22A2; + + + +aRts-builder + + + +&#x21DB; + + + +KGeo + + + +&#x2588; + + + +Shift + + + +&#x003A; + + + +KSmiletris + + + +&#x2717; + + +&#x0060; + + +&#x256C; + + +&#x040C; + + +&#x222B; + + +&#x0159; + + +&#x040B; + + +&#xFB03; + + +&#x2563; + + +&#x0154; + + +&#x2560; + + +&#x25B9; + + +&#x2642; + + +&#x2025; + + + + +Kompare + + + +&#x0156; + + +&#x03BC; + + +&#x260E; + + +&#x21B1; + + +&#x2720; + + +&#x043C; + + + +Kit + + + + +&#x0151; + + +&#x041D; + + +&#x044F; + + +&#x2190; + + +&#x22AE; + + +&#x00E0; + + +&#x22A5; + + +&#x003F; + + +&#x03CB; + + +&#x00DB; + + +&#x2270; + + + +KHangMan + + + +&#x2605; + + +&#x00D8; + + +&#x03BD; + + + +Lskat + + + +&#x2209; + + +&#x03B8; + + + +KCalc + + + + +Quanta Plus + + + +&#x2665; + + +&#x03D1; + + +&#x0172; + + +&#x22AD; + + + +Alt + + + + +KTron + + + + +Konsole + + + +&#x0111; + + +&#x00F1; + + +&#x0107; + + +&#x0125; + + +&#x03AA; + + + +artsshell + + + +&#x21DA; + + +&#x22B5; + + + +kpanel + + + +&#x25B8; + + + +FAQ + + + + +&#x21D2; + + +&#x22D0; + + +&#x03B2; + + +&#x00E7; + + +&#x042B; + + +&#x22A4; + + + +KSirc + + + +&#x219B; + + +&#x228E; + + +&#x22D1; + + +&#x0148; + + + +KTuberling + + + +&#x039E; + + +&#x038F; + + +&#x03D2; + + + + +SuSE + + + + +&#x0143; + + +&#x03C6; + + +&#x2289; + + +&#x03C0; + + +&#x03A9; + + +&#x0145; + + +&#x044A; + + +&#x22E6; + + +&#x0415; + + +&#x2004; + + +&#x2005; + + + +Brahms + + + +&#x0120; + + +&#x2289; + + +&#x00D4; + + + +middle mouse button + + + +Kivio + + + +&#x03BC; + + +&#x039D; + + + +Jini + + + +&#x0434; + + +&#x0178; + + +&#x042D; + + +&#x21B6; + + +&#x0163; + + + +KOffice + + + +&#xFB02; + + +&#x22BC; + + +&#x010E; + + +&#x227E; + + +&#x21D4; + + +&#x03C8; + + +&#x2226; + + + +KWorldClock + + + +&#x21D2; + + +&#x22B4; + + +&#x03C6; + + +&#x25C2; + + + +&#x03D5; + + +&#x21AE; + + + +Mandrake + + + +&#x22AC; + + + +&#x0409; + + +&#x25A1; + + +&#x2295; + + +&#x03A3; + + +&#x2223; + + +&#x00B0; + + +&#x00FB; + + +&#x040F; + + +&#x0168; + + + +KBattleship + + + +&#x03BE; + + + +XML + + + +&#xE301; + + +&#x043E; + + +&#x0173; + + +&#x041F; + + + +kppp + + + + +&#x0024; + + +&#x22D4; + + +&#x03C5; + + +&#x03CA; + + + +aKtion + + + +&#x2284; + + +&#x00CE; + + +&#x2298; + + +&#x25AE; + + +&#x00D6; + + +&#x00B5; + + +&#x21CA; + + +&#x227F; + + + +Kpm + + + +&#x2285; + + +&#x012E; + + +&#xFE68; + + + +KView + + + +&#x03BA; + + +&#x0393; + + +&#x2194; + + +&#x03F0; + + +&#x03B6; + + + +Konqueror + + + + +KAtomic + + + +&#x0121; + + + +KSpell + + + +&#x22C9; + + + +KTeaTime + + + + +KJezzball + + + +&#x220D; + + +&#x0427; + + + +DCOP + + + +&#x0027; + + +&#x03C9; + + + +SMTP + + + +&#x03B4; + + +&#x0437; + + +&#x0395; + + +&#x03B5; + + +&#x00FF; + + +&#x03A6; + + + +&#x200A; + + +&#x2021; + + +&#x22ED; + + + +PostScript + + + + +KDebugDialog + + + +&#x220A; + + +&#x2226; + + +&#x00F4; + + + +Noatun + + + +&#x03B5; + + +&#x2015; + + +&#x007B; + + + +KShisen + + + + +KOnCD + + + +&#x224D; + + +&#x22B2; + + +&#x0451; + + + +Microsoft + + + +&#x016D; + + +&#x00CB; + + + +MRU + + + + +KSnapshot + + + + +KAbalone + + + +&#x201D; + + +&#x00A8; + + +&#x0108; + + + + + + + +&#x00D9; + + +&#x03BF; + + +&#x013A; + + +&#x03A0; + + +&#x0444; + + + +Kolor Lines + + + +&#x0413; + + +&#x03C3; + + +&#x0100; + + + +KRuler + + + +&#x013C; + + +&#x0398; + + + +KMahjongg + + + +&#x03B0; + + +&#x00F6; + + +&#x03A6; + + +&#x2126; + + +&#x03BE; + + + +Ktip + + + +&#x2118; + + +&#x21AA; + + +&#x2034; + + +&#x266D; + + +&#x0386; + + +&#x22EC; + + + +Kontour + + + +&#x0394; + + +&#x22CC; + + + +Visor + + + + +MTU + + + + +KMessedWords + + + +&#x00EE; + + +&#x21BF; + + +&#x21BE; + + +&#x0389; + + +&#x22A1; + + +&#x03B6; + + +&#x2248; + + + +KPager + + + +&#x22C8; + + +&#x012F; + + + +KViewshell + + + +&#x21BB; + + +&#x2212; + + +&#x0420; + + +&#x03B3; + + + +XSL + + + + +Kghostview + + + +&#x22E8; + + +&#x201C; + + +&#x2556; + + +&#x2247; + + +&#x22DB; + + +&#x2584; + + +&#x2554; + + +&#x00C5; + + + +KBiff + + + +&#x2216; + + +&#x0132; + + + +KWorldClock + + + +&#x0453; + + +&#x00EB; + + + +KVT + + + +&#x0025; + + + +CD-ROM drive + + + +&#x2510; + + +&#x2214; + + +&#x0408; + + +&#x250C; + + +&#x0166; + + +&#x0161; + + +&#x0393; + + +&#x042C; + + +&#x015A; + + +&#x03DC; + + +&#x2640; + + + +kwm + + + + +KMidi + + + +&#x2248; + + +&#x03C2; + + +&#x0109; + + +&#x011E; + + +&#x00BD; + + +&#x2218; + + +&#x2153; + + +&#x015E; + + +&#x00BC; + + +&#x2155; + + +&#x2159; + + +&#x215B; + + +&#x229A; + + +&#x2193; + + +&#x230C; + + + +MIME + + + +&#x22E9; + + +&#x0140; + + + + +PalmPilot + + + + +&#x2273; + + +&#x0128; + + +&#x0101; + + +&#x00FD; + + +&#x21AC; + + +&#x0429; + + +&#x0130; + + +&#x2010; + + + +Kfaxview + + + + +KLjettool + + + +&#x2154; + + +&#x0405; + + +&#x228B; + + +&#x2156; + + + +e.g. + + + + +SGI + + + +&#x228B; + + +&#x03A1; + + +&#x03AC; + + +&#x22E7; + + +&#x0418; + + +&#x03B4; + + +&#x00F5; + + +&#x02D9; + + +&#x0131; + + +&#x22D3; + + +&#x03B2; + + + +kmenuedit + + + +&#x0134; + + +&#x0448; + + +&#x2564; + + +&#x2136; + + +&#x228B; + + +&#x00BE; + + +&#x2157; + + +&#x22C5; + + +&#x2271; + + +&#x2267; + + +&#x00A2; + + + +KWrite + + + +&#x215C; + + + +Kdat + + + +&#x230E; + + +&#x228B; + + + +dpi + + + + +Kontour + + + +&#x2713; + + +&#x040A; + + +&#xFB04; + + + +KTop + + + +&#x2567; + + +&#x2309; + + + +DVI + + + +&#x00D3; + + +&#x25B5; + + +&#x227D; + + + +LaserJet + + + + +KPresenter + + + +&#x2256; + + +&#x201A; + + + +KOShell + + + +&#x252C; + + +&#x2016; + + +&#x2158; + + +&#x230D; + + +&#x2265; + + +&#x00E5; + + +&#x2277; + + +&#x0441; + + +&#x0422; + + +&#x2534; + + +&#x03C2; + + +&#x017D; + + +&#x0138; + + +&#x003E; + + + +KLettres + + + +&#x00FA; + + +&#x2200; + + +&#x2250; + + +&#x20AC; + + +&#x224C; + + + +Netscape + + + +&#x215A; + + +&#x215D; + + +&#x22C6; + + + +aRts + + + +&#x011A; + + +&#x229B; + + +&#x00CC; + + + +KJumpingCube + + + +&#x21CB; + + +&#x03A8; + + + +Window Maker + + + +&#x0402; + + +&#x21D1; + + + +i.e. + + + + +KAlarmd + + + +&#x230F; + + + +Esc + + + +&#x2217; + + + +KMines + + + + +HotSync + + + +&#x0390; + + +&#x0399; + + +&#x2308; + + +&#x25B3; + + +&#x201C; + + +&#x0141; + + +&#x0416; + + + +K Four Wins + + + +&#x00F2; + + +&#x0174; + + + +&#x2261; + + + +kmid + + + + +Backspace + + + +&#x21C9; + + + +KFoulEggs + + + +&#x03A9; + + +&#x0136; + + +&#x215E; + + + +artsserver + + + + +KThesaurus + + + +&#x22C4; + + +&#x016A; + + + +KMix + + + +&#x03B7; + + +&#x0135; + + + +KOrganizer + + + + +KNotes + + + +&#x00C3; + + + +FTP + + + +&#x039B; + + + +NeXTSTEP + + + + +KOdometer + + + +&#x2138; + + +&#x2286; + + +&#x2266; + + +&#x0133; + + +this application + + +&#x03C3; + + +&#x038E; + + +&#x03A4; + + +&#x0439; + + +&#x03A8; + + +&#x041A; + + +&#x00A1; + + + +KDict + + + +&#x042E; + + +&#x00C8; + + +&#x20DB; + + +&#x00B7; + + + +Palm OS + + + +&#x219D; + + +&#x03F1; + + +&#x2286; + + + +X Window + System + + + +&#x2264; + + + +KEduca + + + + +KAddressBook + + + + +kfax + + + +&#x2276; + + +&#xE411; + + +&#x00B1; + + +&#x00AD; + + +&#x00AA; + + + +KRegExpEditor + + + +&#x0126; + + +&#38;#60; + + +&#x00BA; + + +&#x00B6; + + +&#x21A3; + + + +kvoctrain + + + +&#x21C7; + + +&#x2251; + + +&#x016E; + + + +kdepasswd + + + +&#x02D8; + + +&#x223C; + + +&#x221D; + + + +KSysctrl + + + +&#x22AA; + + +&#x0443; + + +&#x2202; + + +&#x0122; + + +&#x014C; + + +&#x0412; + + +&#x0457; + + +&#x2210; + + +&#x2205; + + +&#x042F; + + +&#x0158; + + + +Kcron + + + + +KReversi + + + +&#x03BC; + + +&#x0446; + + + +KControl + + + + +Lisa + + + +&#x0022; + + + +artsd + + + +&#x038C; + + +&#x2260; + + +&#x0103; + + +&#x220D; + + +&#x0150; + + +&#x0175; + + + +Mac + + + +&#x24C8; + + +&#x00C0; + + +&#x03BD; + + +&#x21D5; + + +&#x22E0; + + + +KStars + + + +&#x2272; + + + +kstart + + + + + +ResLisa + + + +&#x2663; + + +&#x22CF; + + +&#x25C3; + + +&#x03B9; + + +&#x016B; + + +&#x039A; + + +&#x0430; + + +&#x0411; + + + +artswrapper + + + + +Klprfax + + + +&#x005D; + + +&#x2137; + + + +AIX + + + +&#x03B8; + + +&#x227E; + + +&#x0171; + + +&#x2228; + + +&#x0110; + + +&#x010D; + + +&#x2244; + + + +CDE + + + +&#x2268; + + +&#x00D1; + + + +KDE su + + + +&#x0106; + + +&#x03BB; + + +&#x03A6; + + +&#x03CD; + + +&#x21C4; + + +&#x220A; + + +&#x012A; + + +&#x2262; + + +&#x03C0; + + +&#x00C7; + + + +KPaint + + + +&#x227A; + + +&#x2234; + + +&#x0147; + + + +KFormula + + + +&#x2660; + + +&#x2198; + + +&#x03B1; + + +&#x00ED; + + +&#x230A; + + +&#x221E; + + +&#x22EB; + + +&#x038A; + + +&#x03C5; + + +&#x043B; + + +&#x041C; + + +&#x2008; + + +&#x21D0; + + + +KScore + + + + +artsdsp + + + +&#x22B8; + + +&#x219A; + + +&#x016F; + + +&#x0165; + + +en + + +&#x210B; + + +&#x03A8; + + +&#x00C6; + + +&#x014D; + + + +Kicker + + + +&#x00DE; + + +&#x002B; + + +&#x00DF; + + + +X Window + System + + + +&#x00CA; + + +&#x0162; + + + +3Com + + + +&#x2306; + + +&#x22DA; + + +&#x2002; + + +&#x211E; + + +&#x2235; + + +&#x2229; + + + +kdessh + + + +&#x0118; + + + +KAsteroids + + + +&#x03CC; + + + +AMOR + + + +&#x2264; + + +&#x03B1; + + +&#x017A; + + +&#x002F; + + +&#x2133; + + +&#x0392; + + +&#x227B; + + + +ftp://ftp.kde.org/pub/kde/ + + + +&#x211C; + + +&#x255D; + + +&#x227F; + + +&#x2423; + + +&#x21CF; + + +&#x21C3; + + + +Quanta + + + +&#x2559; + + +&#x25AA; + + +&#x21C2; + + +&#x00D7; + + +&#x002C; + + +&#xFB00; + + + +Ctrl + + + +&#x22A0; + + + +&#x03A3; + + +&#x00E9; + + + +TrueType + + + +&#x0445; + + + +Kuser + + + +&#x21D0; + + +&#x256A; + + +&#x0192; + + +&#x2518; + + +&#x2561; + + + +KJots + + + +&#x00F7; + + +&#x25B4; + + +&#x2666; + + +&#x03B8; + + +&#x2514; + + +&#x3009; + + +&#x03D1; + + +&#x255E; + + +no Invariant Sections + + +&#x2252; + + + +Hewlett-Packard + + + +&#x0040; + + +&#x044C; + + +&#x2249; + + +&#x03A0; + + + +left mouse button + + +&#x2105; + + +&#x2196; + + +&#x012B; + + +&#x21A0; + + +&#x00BD; + + +&#x03BB; + + +&#x039C; + + +&#x002E; + + +&#x253C; + + +&#x0414; + + +&#x2524; + + +&#x0029; + + +&#x25A1; + + +&#x005E; + + + +Kscd + + + +&#x251C; + + +&#x2257; + + +&#x25AD; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/xmltools/kpartgui.dtd.xml b/kate/xmltools/kpartgui.dtd.xml new file mode 100644 index 0000000..a914e6d --- /dev/null +++ b/kate/xmltools/kpartgui.dtd.xml @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + append CDATA #IMPLIED + name CDATA #REQUIRED + group CDATA #IMPLIED + icon CDATA #IMPLIED + noMerge (0|1) "0" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #IMPLIED + group CDATA #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + version CDATA #REQUIRED + library CDATA #IMPLIED + + + + + + + + + + + + + + + + + + name CDATA #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + fullWidth (true|false) "true" + position (top|bottom|left|right) "top" + iconText (icononly|textonly|icontextright|icontextbottom) #IMPLIED + iconSize CDATA #IMPLIED + index CDATA #IMPLIED + offset CDATA #IMPLIED + newline (true|false) "false" + group CDATA #IMPLIED + hidden (true|false) "false" + noEdit (true|false) "false" + + + + + + + + + + + + + + + + + + + + + + + + + + lineSeparator (true|false) "false" + group CDATA #IMPLIED + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + icon CDATA #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + version CDATA #REQUIRED + library CDATA #IMPLIED + + + + + + + + + + + + + + + + + + name CDATA #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + group CDATA #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED + group CDATA #IMPLIED + text CDATA #IMPLIED + whatsThis CDATA #IMPLIED + toolTip CDATA #IMPLIED + shortText CDATA #IMPLIED + shortcut CDATA #IMPLIED + icon CDATA #IMPLIED + + + + + + + + + + + + diff --git a/kate/xmltools/language.dtd.xml b/kate/xmltools/language.dtd.xml new file mode 100644 index 0000000..23cea4a --- /dev/null +++ b/kate/xmltools/language.dtd.xml @@ -0,0 +1,960 @@ + + + +attribute CDATA #REQUIRED -- The name of the ItemData to be used for matching text -- + context NMTOKEN #REQUIRED -- The name of the context to go to when this rule + matches -- + beginRegion CDATA #IMPLIED -- Begin a region of type beginRegion -- + endRegion CDATA #IMPLIED -- End a region of type endRegion -- +attribute CDATA #REQUIRED -- The name of the ItemData to be used for matching text -- + context NMTOKEN #REQUIRED -- The name of the context to go to when this rule + matches -- + beginRegion CDATA #IMPLIED -- Begin a region of type beginRegion -- + endRegion CDATA #IMPLIED -- End a region of type endRegion -- + + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + + + + + + + + + + + + String CDATA #REQUIRED -- The regular expression pattern -- + insensitive (false|true) #IMPLIED -- Wheather to match insensitive or not + Defaults to false -- + minimal (false|true) #IMPLIED -- Wheather to use minimal matching for wild cards + in the pattern Defaults to false -- + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + + + + name CDATA #REQUIRED -- The name of this syntax description. Used in the + Highlightning Mode menu -- + section (Sources|Markup|Other|Scripts) #REQUIRED + -- The logical group to which this syntax description + belongs. Used for sub menus -- + extensions CDATA #REQUIRED -- A file glob or pattern to decide for which documents + to use this syntax description -- + mimetype CDATA #REQUIRED -- A list of mimetypes to decide for which documents + to use this syntax description -- + version CDATA #IMPLIED -- Version number of this syntax description -- + kateverison CDATA #IMPLIED -- Kate version required for using this file -- + casesensitive (0|1) #IMPLIED -- ?? -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + char CDATA #REQUIRED -- The character to look for -- + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String CDATA #REQUIRED -- A string representing the characters to look for -- + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + context NMTOKEN #REQUIRED -- The name or index of the context to include -- + + + + + + + + + + + + + + + + name CDATA #REQUIRED -- The name of this attribute -- + defStyleNum CDATA #REQUIRED -- The index of the default style to use -- + color CDATA #IMPLIED -- Color for this style, either a hex triplet, a name + or some other format recognized by Qt -- + selColor CDATA #IMPLIED -- The color for this style when text is selected -- + italic CDATA #IMPLIED -- Wheather this attribute should be rendered using + an italic typeface -- + bold CDATA #IMPLIED -- Wheather this attribute should be renederd using + a bold typeface -- + + + + + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + casesensitive CDATA #IMPLIED + weakDeliminator CDATA #IMPLIED + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + attribute CDATA #REQUIRED + lineEndContext NMTOKEN #REQUIRED + lineBeginContext NMTOKEN #IMPLIED + name CDATA #IMPLIED + fallthrough (false|true) #IMPLIED + fallthroughContext NMTOKEN #IMPLIED + + + + + + + + + + + + + + + + + + + + + %ruleattrs; + String (types|keywords|attribute-definitions|literals|definitions) #REQUIRED + -- The name of the list to try -- + weakDelimiter CDATA #IMPLIED + + + + + + + + + + + + + + + + + + + + + + + + + name (types|keywords|attribute-definitions|literals|definitions) #REQUIRED + + + + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + + + + + + + + + + + + char CDATA #REQUIRED -- The character starting the range -- + char1 CDATA #REQUIRED -- The character terminating the range -- + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + String CDATA #REQUIRED -- The string to look for -- + insensitive (TRUE|FALSE) #REQUIRED -- Wheather to match case insensitive or not. + Defaults to false -- + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + char CDATA #REQUIRED -- The first character -- + char1 CDATA #REQUIRED -- The second character -- + %ruleattrs; + + + + + + + + + + + + + + + + + + + + + name (singleLine|multiLine) #REQUIRED + start CDATA #REQUIRED + end CDATA #IMPLIED + + + + + + + + + + + + + + + + + + %ruleattrs; + + + + + + + + diff --git a/kate/xmltools/plugin_katexmltools.cpp b/kate/xmltools/plugin_katexmltools.cpp new file mode 100644 index 0000000..05f7802 --- /dev/null +++ b/kate/xmltools/plugin_katexmltools.cpp @@ -0,0 +1,1141 @@ +/*************************************************************************** + pluginKatexmltools.cpp + + List elements, attributes, attribute values and entities allowed by DTD. + Needs a DTD in XML format ( as produced by dtdparse ) for most features. + + copyright : ( C ) 2001-2002 by Daniel Naber + email : daniel.naber@t-online.de + + Copyright (C) 2005 by Anders Lund + ***************************************************************************/ + +/*************************************************************************** + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or ( at your option ) any later version. + + This program is distributed 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + ***************************************************************************/ + +/* +README: +The basic idea is this: certain keyEvents(), namely [<&" ], trigger a completion box. +This is intended as a help for editing. There are some cases where the XML +spec is not followed, e.g. one can add the same attribute twice to an element. +Also see the user documentation. If backspace is pressed after a completion popup +was closed, the popup will re-open. This way typos can be corrected and the popup +will reappear, which is quite comfortable. + +FIXME for jowenn if he has time: +-Ctrl-Z doesn't work if completion is visible +-Typing with popup works, but right/left cursor keys and start/end don't, i.e. + they should be ignored by the completion ( ? ) +-popup not completely visible if it's long and appears at the bottom of the screen + +FIXME: +-( docbook ) : insert space between the quotes, press "de" and return -> only "d" inserted +-Correctly support more than one view: + charactersInteractivelyInserted( ..) is tied to kv->document() + but filterInsertString( .. ) is tied to kv +-The "Insert Element" dialog isn't case insensitive, but it should be +-fix upper/lower case problems ( start typing lowercase if the tag etc. is upper case ) +-See the "fixme"'s in the code + +TODO: +-check for mem leaks +-add "Go to opening/parent tag"? +-check doctype to get top-level element +-can undo behaviour be improved?, e.g. the plugins internal deletions of text + don't have to be an extra step +-don't offer entities if inside tag but outside attribute value + +-Support for more than one namespace at the same time ( e.g. XSLT + XSL-FO )? +=>This could also be handled in the XSLT DTD fragment, as described in the XSLT 1.0 spec, + but then at it will only show you HTML elements! +=>So better "Assign meta DTD" and "Add meta DTD", the latter will expand the current meta DTD +-Option to insert empty element in form +-Show expanded entities with QChar::QChar( int rc ) + unicode font +-Don't ignore entities defined in the document's prologue +-Only offer 'valid' elements, i.e. don't take the elements as a set but check + if the DTD is matched ( order, number of occurences, ... ) + +-Maybe only read the meta DTD file once, then store the resulting QMap on disk ( using QDataStream )? + We'll then have to compare timeOf_cacheFile <-> timeOf_metaDtd. +-Try to use libxml +*/ + +#include "plugin_katexmltools.h" +#include "plugin_katexmltools.moc" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +K_EXPORT_COMPONENT_FACTORY( katexmltoolsplugin, KGenericFactory( "katexmltools" ) ) + +class PluginView : public KXMLGUIClient +{ + friend class PluginKateXMLTools; + + public: + Kate::MainWindow *win; +}; + +PluginKateXMLTools::PluginKateXMLTools( QObject* parent, const char* name, const QStringList& ) + : Kate::Plugin ( (Kate::Application*)parent, name ) +{ + //kdDebug() << "PluginKateXMLTools constructor called" << endl; + + m_dtdString = QString(); + m_urlString = QString(); + m_docToAssignTo = 0L; + + m_mode = none; + m_correctPos = 0; + + m_lastLine = 0; + m_lastCol = 0; + m_lastAllowed = QStringList(); + m_popupOpenCol = -1; + + m_dtds.setAutoDelete( true ); + + m_documentManager = ((Kate::Application*)parent)->documentManager(); + +// connect( m_documentManager, SIGNAL(documentCreated()), +// this, SLOT(slotDocumentCreated()) ); + connect( m_documentManager, SIGNAL(documentDeleted(uint)), + this, SLOT(slotDocumentDeleted(uint)) ); +} + +PluginKateXMLTools::~PluginKateXMLTools() +{ + //kdDebug() << "xml tools descructor 1..." << endl; +} + +void PluginKateXMLTools::addView( Kate::MainWindow *win ) +{ + // TODO: doesn't this have to be deleted? + PluginView *view = new PluginView (); + ( void) new KAction ( i18n("&Insert Element..."), CTRL+Key_Return, this, + SLOT( slotInsertElement()), view->actionCollection(), "xml_tool_insert_element" ); + ( void) new KAction ( i18n("&Close Element"), CTRL+Key_Less, this, + SLOT( slotCloseElement()), view->actionCollection(), "xml_tool_close_element" ); + ( void) new KAction ( i18n("Assign Meta &DTD..." ), 0, this, + SLOT( getDTD()), view->actionCollection(), "xml_tool_assign" ); + + view->setInstance( new KInstance("kate") ); + view->setXMLFile( "plugins/katexmltools/ui.rc" ); + win->guiFactory()->addClient( view ); + + view->win = win; + m_views.append( view ); +} + +void PluginKateXMLTools::removeView( Kate::MainWindow *win ) +{ + for ( uint z=0; z < m_views.count(); z++ ) + { + if ( m_views.at(z)->win == win ) + { + PluginView *view = m_views.at( z ); + m_views.remove ( view ); + win->guiFactory()->removeClient( view ); + delete view; + } + } +} + +void PluginKateXMLTools::slotDocumentDeleted( uint documentNumber ) +{ + // Remove the document from m_DTDs, and also delete the PseudoDTD + // if it becomes unused. + if ( m_docDtds[ documentNumber ] ) + { + kdDebug()<<"XMLTools:slotDocumentDeleted: documents: "< it ( m_docDtds ); + for ( ; it.current(); ++it ) + { + if ( it.current() == dtd ) + return; + } + + QDictIterator it1( m_dtds ); + for ( ; it1.current() ; ++it1 ) + { + if ( it1.current() == dtd ) + { + m_dtds.remove( it1.currentKey() ); + return; + } + } + } +} + +void PluginKateXMLTools::backspacePressed() +{ + kdDebug() << "xml tools backspacePressed" << endl; + + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning: no Kate::View" << endl; + return; + } + uint line, col; + kv->cursorPositionReal( &line, &col ); + + //kdDebug() << "++ redisplay popup? line:" << line << ", col: " << col << endl; + if( m_lastLine == line && col == m_lastCol ) + { + int len = col - m_popupOpenCol; + if( len < 0 ) + { + kdDebug() << "**Warning: len < 0" << endl; + return; + } + //kdDebug() << "++ redisplay popup, " << m_lastAllowed.count() << ", len:" << len <showCompletionBox( stringListToCompletionEntryList(m_lastAllowed), len, false ); + } +} + +void PluginKateXMLTools::emptyKeyEvent() +{ + keyEvent( 0, 0, QString::null ); +} + +void PluginKateXMLTools::keyEvent( int, int, const QString &/*s*/ ) +{ + //kdDebug() << "xml tools keyEvent: '" << s << endl; + + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning: no Kate::View" << endl; + return; + } + + uint docNumber = kv->document()->documentNumber(); + if( ! m_docDtds[ docNumber ] ) + // no meta DTD assigned yet + return; + + // debug to test speed: + //QTime t; t.start(); + + QStringList allowed = QStringList(); + + // get char on the left of the cursor: + uint line, col; + kv->cursorPositionReal( &line, &col ); + QString lineStr = kv->getDoc()->textLine( line ); + QString leftCh = lineStr.mid( col-1, 1 ); + QString secondLeftCh = lineStr.mid( col-2, 1 ); + + if( leftCh == "&" ) + { + kdDebug() << "Getting entities" << endl; + allowed = m_docDtds[docNumber]->entities("" ); + m_mode = entities; + } + else if( leftCh == "<" ) + { + kdDebug() << "*outside tag -> get elements" << endl; + QString parentElement = getParentElement( *kv, true ); + kdDebug() << "parent: " << parentElement << endl; + allowed = m_docDtds[docNumber]->allowedElements(parentElement ); + m_mode = elements; + } + // TODO: optionally close parent tag if not left=="/>" + else if( leftCh == " " || (isQuote(leftCh) && secondLeftCh == "=") ) + { + // TODO: check secondLeftChar, too?! then you don't need to trigger + // with space and we yet save CPU power + QString currentElement = insideTag( *kv ); + QString currentAttribute; + if( ! currentElement.isEmpty() ) + currentAttribute = insideAttribute( *kv ); + + kdDebug() << "Tag: " << currentElement << endl; + kdDebug() << "Attr: " << currentAttribute << endl; + + if( ! currentElement.isEmpty() && ! currentAttribute.isEmpty() ) + { + kdDebug() << "*inside attribute -> get attribute values" << endl; + allowed = m_docDtds[docNumber]->attributeValues(currentElement, currentAttribute ); + if( allowed.count() == 1 && + (allowed[0] == "CDATA" || allowed[0] == "ID" || allowed[0] == "IDREF" || + allowed[0] == "IDREFS" || allowed[0] == "ENTITY" || allowed[0] == "ENTITIES" || + allowed[0] == "NMTOKEN" || allowed[0] == "NMTOKENS" || allowed[0] == "NAME") ) + { + // these must not be taken literally, e.g. don't insert the string "CDATA" + allowed.clear(); + } + else + { + m_mode = attributevalues; + } + } + else if( ! currentElement.isEmpty() ) + { + kdDebug() << "*inside tag -> get attributes" << endl; + allowed = m_docDtds[docNumber]->allowedAttributes(currentElement ); + m_mode = attributes; + } + } + + //kdDebug() << "time elapsed (ms): " << t.elapsed() << endl; + //kdDebug() << "Allowed strings: " << allowed.count() << endl; + + if( allowed.count() >= 1 && allowed[0] != "__EMPTY" ) + { + allowed = sortQStringList( allowed ); + connectSlots( kv ); + kv->showCompletionBox( stringListToCompletionEntryList( allowed ), 0, false ); + m_popupOpenCol = col; + m_lastAllowed = allowed; + } + //else { + // m_lastAllowed.clear(); + //} +} + +QValueList +PluginKateXMLTools::stringListToCompletionEntryList( QStringList list ) +{ + QValueList compList; + KTextEditor::CompletionEntry entry; + for( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + entry.text = ( *it ); + compList << entry; + } + return compList; +} + + +/** + * disconnect all signals of a specified kateview from the local slots + * + */ +void PluginKateXMLTools::disconnectSlots( Kate::View *kv ) +{ + disconnect( kv, SIGNAL(filterInsertString(KTextEditor::CompletionEntry*,QString*)), this, 0 ); + disconnect( kv, SIGNAL(completionDone(KTextEditor::CompletionEntry)), this, 0 ); + disconnect( kv, SIGNAL(completionAborted()), this, 0 ); +} + +/** + * connect all signals of a specified kateview to the local slots + * + */ +void PluginKateXMLTools::connectSlots( Kate::View *kv ) +{ + connect( kv, SIGNAL(filterInsertString(KTextEditor::CompletionEntry*,QString*) ), + this, SLOT(filterInsertString(KTextEditor::CompletionEntry*,QString*)) ); + connect( kv, SIGNAL(completionDone(KTextEditor::CompletionEntry) ), + this, SLOT(completionDone(KTextEditor::CompletionEntry)) ); + connect( kv, SIGNAL(completionAborted()), this, SLOT(completionAborted()) ); +} + +/** + * Load the meta DTD. In case of success set the 'ready' + * flag to true, to show that we're is ready to give hints about the DTD. + */ +void PluginKateXMLTools::getDTD() +{ + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning: no Kate::View" << endl; + return; + } + + // ### replace this with something more sane + // Start where the supplied XML-DTDs are fed by default unless + // user changed directory last time: + + QString defaultDir = KGlobal::dirs()->findResourceDir("data", "katexmltools/" ) + "katexmltools/"; + if( m_urlString.isNull() ) { + m_urlString = defaultDir; + } + KURL url; + + // Guess the meta DTD by looking at the doctype's public identifier. + // XML allows comments etc. before the doctype, so look further than + // just the first line. + // Example syntax: + // + uint checkMaxLines = 200; + QString documentStart = kv->getDoc()->text(0, 0, checkMaxLines+1, 0 ); + QRegExp re( " + */ + filename = "xslt-1.0.dtd.xml"; + doctype = "XSLT 1.0"; + } + else + kdDebug() << "No doctype found" << endl; + + if( filename.isEmpty() ) + { + // no meta dtd found for this file + url = KFileDialog::getOpenURL(m_urlString, "*.xml", + 0, i18n( "Assign Meta DTD in XML Format") ); + } + else + { + url.setFileName( defaultDir + filename ); + KMessageBox::information(0, i18n("The current file has been identified " + "as a document of type \"%1\". The meta DTD for this document type " + "will now be loaded.").arg( doctype ), + i18n( "Loading XML Meta DTD" ), + QString::fromLatin1( "DTDAssigned") ); + } + + if( url.isEmpty() ) + return; + + m_urlString = url.url(); // remember directory for next time + + if ( m_dtds[ m_urlString ] ) + assignDTD( m_dtds[ m_urlString ], kv->document() ); + else + { + m_dtdString = ""; + m_docToAssignTo = kv->document(); + + QApplication::setOverrideCursor( KCursor::waitCursor() ); + KIO::Job *job = KIO::get( url ); + connect( job, SIGNAL(result(KIO::Job *)), this, SLOT(slotFinished(KIO::Job *)) ); + connect( job, SIGNAL(data(KIO::Job *, const QByteArray &)), + this, SLOT(slotData(KIO::Job *, const QByteArray &)) ); + } + kdDebug()<<"XMLTools::getDTD: Documents: "<error() ) + { + //kdDebug() << "XML Plugin error: DTD in XML format (" << filename << " ) could not be loaded" << endl; + job->showErrorDialog( 0 ); + } + else if ( static_cast(job)->isErrorPage() ) + { + // catch failed loading loading via http: + KMessageBox::error(0, i18n("The file '%1' could not be opened. " + "The server returned an error.").arg( m_urlString ), + i18n( "XML Plugin Error") ); + } + else + { + PseudoDTD *dtd = new PseudoDTD(); + dtd->analyzeDTD( m_urlString, m_dtdString ); + + m_dtds.insert( m_urlString, dtd ); + assignDTD( dtd, m_docToAssignTo ); + + // clean up a bit + m_docToAssignTo = 0; + m_dtdString = ""; + } + QApplication::restoreOverrideCursor(); +} + +void PluginKateXMLTools::slotData( KIO::Job *, const QByteArray &data ) +{ + m_dtdString += QString( data ); +} + +void PluginKateXMLTools::assignDTD( PseudoDTD *dtd, KTextEditor::Document *doc ) +{ + m_docDtds.replace( doc->documentNumber(), dtd ); + connect( doc, SIGNAL(charactersInteractivelyInserted(int,int,const QString&) ), + this, SLOT(keyEvent(int,int,const QString&)) ); + + disconnect( doc, SIGNAL(backspacePressed()), this, 0 ); + connect( doc, SIGNAL(backspacePressed() ), + this, SLOT(backspacePressed()) ); +} + +/** + * Offer a line edit with completion for possible elements at cursor position and insert the + * tag one chosen/entered by the user, plus its closing tag. If there's a text selection, + * add the markup around it. + */ +void PluginKateXMLTools::slotInsertElement() +{ + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning: no Kate::View" << endl; + return; + } + + PseudoDTD *dtd = m_docDtds[kv->document()->documentNumber()]; + QString parentElement = getParentElement( *kv, false ); + QStringList allowed; + + if( dtd ) + allowed = dtd->allowedElements(parentElement ); + + InsertElement *dialog = new InsertElement( + ( QWidget *)application()->activeMainWindow()->viewManager()->activeView(), "insertXml" ); + QString text = dialog->showDialog( allowed ); + delete dialog; + + if( !text.isEmpty() ) + { + QStringList list = QStringList::split( ' ', text ); + QString pre; + QString post; + // anders: use if the tag is required to be empty. + // In that case maybe we should not remove the selection? or overwrite it? + int adjust = 0; // how much to move cursor. + // if we know that we have attributes, it goes + // just after the tag name, otherwise between tags. + if ( dtd && dtd->allowedAttributes(list[0]).count() ) + adjust++; // the ">" + + if ( dtd && dtd->allowedElements(list[0]).contains("__EMPTY") ) + { + pre = "<" + text + "/>"; + if ( adjust ) + adjust++; // for the "/" + } + else + { + pre = "<" + text + ">"; + post =""; + } + + QString marked; + if ( ! post.isEmpty() ) + marked = kv->getDoc()->selection(); + + if( marked.length() > 0 ) + kv->getDoc()->removeSelectedText(); + + kv->insertText( pre + marked + post ); + } +} + +/** + * Insert a closing tag for the nearest not-closed parent element. + */ +void PluginKateXMLTools::slotCloseElement() +{ + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning: no Kate::View" << endl; + return; + } + QString parentElement = getParentElement( *kv, false ); + + //kdDebug() << "parentElement: '" << parentElement << "'" << endl; + QString closeTag = ""; + if( ! parentElement.isEmpty() ) + kv->insertText( closeTag ); +} + +// modify the completion string before it gets inserted +void PluginKateXMLTools::filterInsertString( KTextEditor::CompletionEntry *ce, QString *text ) +{ + kdDebug() << "filterInsertString str: " << *text << endl; + kdDebug() << "filterInsertString text: " << ce->text << endl; + + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning (filterInsertString() ): no Kate::View" << endl; + return; + } + + uint line, col; + kv->cursorPositionReal( &line, &col ); + QString lineStr = kv->getDoc()->textLine(line ); + QString leftCh = lineStr.mid( col-1, 1 ); + QString rightCh = lineStr.mid( col, 1 ); + + m_correctPos = 0; // where to move the cursor after completion ( >0 = move right ) + if( m_mode == entities ) + { + // This is a bit ugly, but entities are case-sensitive + // and we want the correct completion even if the user started typing + // e.g. in lower case but the entity is in upper case + kv->getDoc()->removeText( line, col - (ce->text.length() - text->length()), line, col ); + *text = ce->text + ";"; + } + + else if( m_mode == attributes ) + { + *text = *text + "=\"\""; + m_correctPos = -1; + if( !rightCh.isEmpty() && rightCh != ">" && rightCh != "/" && rightCh != " " ) + { // TODO: other whitespaces + // add space in front of the next attribute + *text = *text + " "; + m_correctPos--; + } + } + + else if( m_mode == attributevalues ) + { + // TODO: support more than one line + uint startAttValue = 0; + uint endAttValue = 0; + + // find left quote: + for( startAttValue = col; startAttValue > 0; startAttValue-- ) + { + QString ch = lineStr.mid( startAttValue-1, 1 ); + if( isQuote(ch) ) + break; + } + + // find right quote: + for( endAttValue = col; endAttValue <= lineStr.length(); endAttValue++ ) + { + QString ch = lineStr.mid( endAttValue-1, 1 ); + if( isQuote(ch) ) + break; + } + + // maybe the user has already typed something to trigger completion, + // don't overwrite that: + startAttValue += ce->text.length() - text->length(); + // delete the current contents of the attribute: + if( startAttValue < endAttValue ) + { + kv->getDoc()->removeText( line, startAttValue, line, endAttValue-1 ); + // FIXME: this makes the scrollbar jump + // but without it, inserting sometimes goes crazy :-( + kv->setCursorPositionReal( line, startAttValue ); + } + } + + else if( m_mode == elements ) + { + // anders: if the tag is marked EMPTY, insert in form + QString str; + int docNumber = kv->document()->documentNumber(); + bool isEmptyTag =m_docDtds[docNumber]->allowedElements(ce->text).contains( "__EMPTY" ); + if ( isEmptyTag ) + str = "/>"; + else + str = ">text + ">"; + *text = *text + str; + + // Place the cursor where it is most likely wanted: + // allways inside the tag if the tag is empty AND the DTD indicates that there are attribs) + // outside for open tags, UNLESS there are mandatory attributes + if ( m_docDtds[docNumber]->requiredAttributes(ce->text).count() + || ( isEmptyTag && m_docDtds[docNumber]->allowedAttributes( ce->text).count() ) ) + m_correctPos = - str.length(); + else if ( ! isEmptyTag ) + m_correctPos = -str.length() + 1; + } +} + +static void correctPos( Kate::View *kv, int count ) +{ + if( count > 0 ) + { + for( int i = 0; i < count; i++ ) + kv->cursorRight(); + } + else if( count < 0 ) + { + for( int i = 0; i < -count; i++ ) + kv->cursorLeft(); + } +} + +void PluginKateXMLTools::completionAborted() +{ + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning (completionAborted() ): no Kate::View" << endl; + return; + } + disconnectSlots( kv ); + kv->cursorPositionReal( &m_lastLine, &m_lastCol ); + m_lastCol--; + + correctPos( kv,m_correctPos ); + m_correctPos = 0; + + kdDebug() << "completionAborted() at line:" << m_lastLine << ", col:" << m_lastCol << endl; +} + +void PluginKateXMLTools::completionDone( KTextEditor::CompletionEntry ) +{ + kdDebug() << "completionDone()" << endl; + + if ( !application()->activeMainWindow() ) + return; + + Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView(); + if( ! kv ) + { + kdDebug() << "Warning (completionDone() ): no Kate::View" << endl; + return; + } + disconnectSlots( kv ); + + correctPos( kv,m_correctPos ); + m_correctPos = 0; + + if( m_mode == attributes ) + { + // immediately show attribute values: + QTimer::singleShot( 10, this, SLOT(emptyKeyEvent()) ); + } + +} + +// ======================================================================== +// Pseudo-XML stuff: + +/** + * Check if cursor is inside a tag, that is + * if "<" occurs before ">" occurs ( on the left side of the cursor ). + * Return the tag name, return "" if we cursor is outside a tag. + */ +QString PluginKateXMLTools::insideTag( Kate::View &kv ) +{ + uint line = 0, col = 0; + kv.cursorPositionReal( &line, &col ); + int y = line; // another variable because uint <-> int + + do { + QString lineStr = kv.getDoc()->textLine(y ); + for( uint x = col; x > 0; x-- ) + { + QString ch = lineStr.mid( x-1, 1 ); + if( ch == ">" ) // cursor is outside tag + return ""; + + if( ch == "<" ) + { + QString tag; + // look for white space on the right to get the tag name + for( uint z = x; z <= lineStr.length() ; z++ ) + { + ch = lineStr.mid( z-1, 1 ); + if( ch.at(0).isSpace() || ch == "/" || ch == ">" ) + return tag.right( tag.length()-1 ); + + if( z == lineStr.length() ) + { + tag += ch; + return tag.right( tag.length()-1 ); + } + + tag += ch; + } + } + } + y--; + col = kv.getDoc()->textLine(y).length(); + } while( y >= 0 ); + + return ""; +} + +/** + * Check if cursor is inside an attribute value, that is + * if '="' is on the left, and if it's nearer than "<" or ">". + * + * @Return the attribute name or "" if we're outside an attribute + * value. + * + * Note: only call when insideTag() == true. + * TODO: allow whitespace around "=" + */ +QString PluginKateXMLTools::insideAttribute( Kate::View &kv ) +{ + uint line = 0, col = 0; + kv.cursorPositionReal( &line, &col ); + int y = line; // another variable because uint <-> int + uint x = 0; + QString lineStr = ""; + QString ch = ""; + + do { + lineStr = kv.getDoc()->textLine(y ); + for( x = col; x > 0; x-- ) + { + ch = lineStr.mid( x-1, 1 ); + QString chLeft = lineStr.mid( x-2, 1 ); + // TODO: allow whitespace + if( isQuote(ch) && chLeft == "=" ) + break; + else if( isQuote(ch) && chLeft != "=" ) + return ""; + else if( ch == "<" || ch == ">" ) + return ""; + } + y--; + col = kv.getDoc()->textLine(y).length(); + } while( !isQuote(ch) ); + + // look for next white space on the left to get the tag name + QString attr = ""; + for( int z = x; z >= 0; z-- ) + { + ch = lineStr.mid( z-1, 1 ); + + if( ch.at(0).isSpace() ) + break; + + if( z == 0 ) + { // start of line == whitespace + attr += ch; + break; + } + + attr = ch + attr; + } + + return attr.left( attr.length()-2 ); +} + +/** + * Find the parent element for the current cursor position. That is, + * go left and find the first opening element that's not closed yet, + * ignoring empty elements. + * Examples: If cursor is at "X", the correct parent element is "p": + *

foo test bar X + *

foo bar X + *

foo bar X + *

foo bar X + */ +QString PluginKateXMLTools::getParentElement( Kate::View &kv, bool ignoreSingleChar ) +{ + enum { + parsingText, + parsingElement, + parsingElementBoundary, + parsingNonElement, + parsingAttributeDquote, + parsingAttributeSquote, + parsingIgnore + } parseState; + parseState = ignoreSingleChar ? parsingIgnore : parsingText; + + int nestingLevel = 0; + + uint line, col; + kv.cursorPositionReal( &line, &col ); + QString str = kv.getDoc()->textLine(line ); + + while( true ) + { + // move left a character + if( !col-- ) + { + do + { + if( !line-- ) return QString::null; // reached start of document + str = kv.getDoc()->textLine(line ); + col = str.length(); + } while( !col ); + --col; + } + + ushort ch = str.at( col).unicode(); + + switch( parseState ) + { + case parsingIgnore: + parseState = parsingText; + break; + + case parsingText: + switch( ch ) + { + case '<': + // hmm... we were actually inside an element + return QString::null; + + case '>': + // we just hit an element boundary + parseState = parsingElementBoundary; + break; + } + break; + + case parsingElement: + switch( ch ) + { + case '"': // attribute ( double quoted ) + parseState = parsingAttributeDquote; + break; + + case '\'': // attribute ( single quoted ) + parseState = parsingAttributeSquote; + break; + + case '/': // close tag + parseState = parsingNonElement; + ++nestingLevel; + break; + + case '<': + // we just hit the start of the element... + if( nestingLevel-- ) break; + + QString tag = str.mid( col + 1 ); + for( uint pos = 0, len = tag.length(); pos < len; ++pos ) { + ch = tag.at( pos).unicode(); + if( ch == ' ' || ch == '\t' || ch == '>' ) { + tag.truncate( pos ); + break; + } + } + return tag; + } + break; + + case parsingElementBoundary: + switch( ch ) + { + case '?': // processing instruction + case '-': // comment + case '/': // empty element + parseState = parsingNonElement; + break; + + case '"': + parseState = parsingAttributeDquote; + break; + + case '\'': + parseState = parsingAttributeSquote; + break; + + case '<': // empty tag ( bad XML ) + parseState = parsingText; + break; + + default: + parseState = parsingElement; + } + break; + + case parsingAttributeDquote: + if( ch == '"' ) parseState = parsingElement; + break; + + case parsingAttributeSquote: + if( ch == '\'' ) parseState = parsingElement; + break; + + case parsingNonElement: + if( ch == '<' ) parseState = parsingText; + break; + } + } +} + +/** + * Return true if the tag is neither a closing tag + * nor an empty tag, nor a comment, nor processing instruction. + */ +bool PluginKateXMLTools::isOpeningTag( QString tag ) +{ + return ( !isClosingTag(tag) && !isEmptyTag(tag ) && + !tag.startsWith( "" ); +} + +/** + * Return true if ch is a single or double quote. Expects ch to be of length 1. + */ +bool PluginKateXMLTools::isQuote( QString ch ) +{ + return ( ch == "\"" || ch == "'" ); +} + + +// ======================================================================== +// Tools: + +/** Sort a QStringList case-insensitively. Static. TODO: make it more simple. */ +QStringList PluginKateXMLTools::sortQStringList( QStringList list ) { + // Sort list case-insensitive. This looks complicated but using a QMap + // is even suggested by the Qt documentation. + QMap mapList; + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + QString str = *it; + if( mapList.contains(str.lower()) ) + { + // do not override a previous value, e.g. "Auml" and "auml" are two different + // entities, but they should be sorted next to each other. + // TODO: currently it's undefined if e.g. "A" or "a" comes first, it depends on + // the meta DTD ( really? it seems to work okay?!? ) + mapList[str.lower()+"_"] = str; + } + else + mapList[str.lower()] = str; + } + + list.clear(); + QMap::Iterator it; + + // Qt doc: "the items are alphabetically sorted [by key] when iterating over the map": + for( it = mapList.begin(); it != mapList.end(); ++it ) + list.append( it.data() ); + + return list; +} + +//BEGIN InsertElement dialog +InsertElement::InsertElement( QWidget *parent, const char *name ) + :KDialogBase( parent, name, true, i18n("Insert XML Element" ), + KDialogBase::Ok|KDialogBase::Cancel) +{ +} + +InsertElement::~InsertElement() +{ +} + +void InsertElement::slotHistoryTextChanged( const QString& text ) +{ + enableButtonOK( !text.isEmpty() ); +} + +QString InsertElement::showDialog( QStringList &completions ) +{ + QWidget *page = new QWidget( this ); + setMainWidget( page ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() ); + + KHistoryCombo *combo = new KHistoryCombo( page, "value" ); + combo->setHistoryItems( completions, true ); + connect( combo->lineEdit(), SIGNAL(textChanged ( const QString & )), + this, SLOT(slotHistoryTextChanged(const QString &)) ); + QString text = i18n( "Enter XML tag name and attributes (\"<\", \">\" and closing tag will be supplied):" ); + QLabel *label = new QLabel( text, page, "insert" ); + + topLayout->addWidget( label ); + topLayout->addWidget( combo ); + + combo->setFocus(); + slotHistoryTextChanged( combo->lineEdit()->text() ); + if( exec() ) + return combo->currentText(); + + return QString::null; +} +//END InsertElement dialog +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/xmltools/plugin_katexmltools.h b/kate/xmltools/plugin_katexmltools.h new file mode 100644 index 0000000..9be61c7 --- /dev/null +++ b/kate/xmltools/plugin_katexmltools.h @@ -0,0 +1,150 @@ + /*************************************************************************** + pluginKatexmltools.cpp + copyright : (C) 2001-2002 by Daniel Naber + email : daniel.naber@t-online.de + ***************************************************************************/ + +/*************************************************************************** + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or ( at your option ) any later version. + + This program is distributed 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + ***************************************************************************/ + +#ifndef _PLUGIN_KANT_XMLTOOLS_H +#define _PLUGIN_KANT_XMLTOOLS_H + +#include "pseudo_dtd.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +class PluginKateXMLTools : public Kate::Plugin, Kate::PluginViewInterface +{ + + Q_OBJECT + + public: + + PluginKateXMLTools( QObject* parent = 0, const char* name = 0, const QStringList& = QStringList() ); + virtual ~PluginKateXMLTools(); + void addView ( Kate::MainWindow *win ); + void removeView( Kate::MainWindow *win ); + + + public slots: + + void getDTD(); + + void slotInsertElement(); + void slotCloseElement(); + void filterInsertString( KTextEditor::CompletionEntry *ce, QString *str ); + void completionDone( KTextEditor::CompletionEntry completionEntry ); + void completionAborted(); + + void slotFinished( KIO::Job *job ); + void slotData( KIO::Job *, const QByteArray &data ); + + void backspacePressed(); + void emptyKeyEvent(); + void keyEvent( int, int, const QString & ); + + /// Connected to the document manager, to manage the dtd collection. + void slotDocumentDeleted( uint n ); + + protected: + + static QStringList sortQStringList( QStringList list ); + //bool eventFilter( QObject *object, QEvent *event ); + + QString insideTag( Kate::View &kv ); + QString insideAttribute( Kate::View &kv ); + + bool isOpeningTag( QString tag ); + bool isClosingTag( QString tag ); + bool isEmptyTag( QString tag ); + bool isQuote( QString ch ); + + QString getParentElement( Kate::View &view, bool ignoreSingleBracket ); + + enum Mode {none, entities, attributevalues, attributes, elements}; + enum PopupMode {noPopup, tagname, attributename, attributevalue, entityname}; + + QValueList stringListToCompletionEntryList( QStringList list ); + + /// Assign the PseudoDTD @p dtd to the Kate::Document @p doc + void assignDTD( PseudoDTD *dtd, KTextEditor::Document *doc ); + + /// temporary placeholder for the metaDTD file + QString m_dtdString; + /// temporary placeholder for the document to assign a DTD to while the file is loaded + KTextEditor::Document *m_docToAssignTo; + /// URL of the last loaded meta DTD + QString m_urlString; + + uint m_lastLine, m_lastCol; + QStringList m_lastAllowed; + int m_popupOpenCol; + + Mode m_mode; + int m_correctPos; + + // code completion stuff: + KTextEditor::CodeCompletionInterface* m_codeInterface; + + /// maps KTE::Document::docNumber -> DTD + QIntDict m_docDtds; + + /// maps DTD filename -> DTD + QDict m_dtds; + + QPtrList m_views; + + void connectSlots( Kate::View *kv ); + void disconnectSlots( Kate::View *kv ); + + Kate::DocumentManager *m_documentManager; +}; + +class InsertElement : public KDialogBase +{ + + Q_OBJECT + + public: + InsertElement( QWidget *parent, const char *name ); + ~InsertElement(); + QString showDialog( QStringList &completions ); + private slots: + void slotHistoryTextChanged( const QString& ); + +}; + +#endif // _PLUGIN_KANT_XMLTOOLS_H +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/xmltools/pseudo_dtd.cpp b/kate/xmltools/pseudo_dtd.cpp new file mode 100644 index 0000000..b5c9cd1 --- /dev/null +++ b/kate/xmltools/pseudo_dtd.cpp @@ -0,0 +1,466 @@ +/*************************************************************************** + pseudoDtd.cpp + copyright : (C) 2001-2002 by Daniel Naber + email : daniel.naber@t-online.de + ***************************************************************************/ + +/*************************************************************************** + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or ( at your option ) any later version. + + This program is distributed 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + ***************************************************************************/ + +#include "pseudo_dtd.h" + +#include + +#include +#include + +#include +#include + +PseudoDTD::PseudoDTD() +{ + // "SGML support" only means case-insensivity, because HTML is case-insensitive up to version 4: + m_sgmlSupport = true; // TODO: make this an run-time option ( maybe automatically set ) +} + +PseudoDTD::~PseudoDTD() +{ +} + +void PseudoDTD::analyzeDTD( QString &metaDtdUrl, QString &metaDtd ) +{ + QDomDocument doc( "dtdIn_xml" ); + if ( ! doc.setContent( metaDtd) ) + { + KMessageBox::error(0, i18n("The file '%1' could not be parsed. " + "Please check that the file is well-formed XML.").arg( metaDtdUrl ), + i18n( "XML Plugin Error") ); + return; + } + + if ( doc.doctype().name() != "dtd" ) + { + KMessageBox::error(0, i18n("The file '%1' is not in the expected format. " + "Please check that the file is of this type:\n" + "-//Norman Walsh//DTD DTDParse V2.0//EN\n" + "You can produce such files with dtdparse. " + "See the Kate Plugin documentation for more information.").arg( metaDtdUrl ), + i18n("XML Plugin Error") ); + return; + } + + uint listLength = 0; + listLength += doc.elementsByTagName( "entity" ).count(); + listLength += doc.elementsByTagName( "element" ).count(); + // count this twice, as it will be iterated twice ( TODO: optimize that? ): + listLength += doc.elementsByTagName( "attlist" ).count() * 2; + + QProgressDialog progress( i18n("Analyzing meta DTD..."), i18n("Cancel"), listLength, + 0, "progress", TRUE ); + progress.setMinimumDuration( 400 ); + progress.setProgress(0); + + // Get information from meta DTD and put it in Qt data structures for fast access: + if( ! parseEntities( &doc, &progress ) ) + return; + + if( ! parseElements( &doc, &progress ) ) + return; + + if( ! parseAttributes( &doc, &progress ) ) + return; + + if( ! parseAttributeValues( &doc, &progress ) ) + return; + + progress.setProgress( listLength ); // just to make sure the dialog disappears + +} + +// ======================================================================== +// DOM stuff: + +/** + * Iterate through the XML to get a mapping which sub-elements are allowed for + * all elements. + */ +bool PseudoDTD::parseElements( QDomDocument *doc, QProgressDialog *progress ) +{ + + m_elementsList.clear(); + // We only display a list, i.e. we pretend that the content model is just + // a set, so we use a map. This is necessay e.g. for xhtml 1.0's head element, + // which would otherwise display some elements twice. + QMap subelementList; // the bool is not used + + QDomNodeList list = doc->elementsByTagName( "element" ); + uint listLength = list.count(); // speedup (really! ) + + for( uint i = 0; i < listLength; i++ ) + { + if( progress->wasCancelled() ) + return false; + + progress->setProgress( progress->progress()+1 ); + // FIXME!: + //qApp->processEvents(); + + subelementList.clear(); + QDomNode node = list.item( i ); + QDomElement elem = node.toElement(); + + if( !elem.isNull() ) + { + // Enter the expanded content model, which may also include stuff not allowed. + // We do not care if it's a or whatever. + QDomNodeList contentModelList = elem.elementsByTagName( "content-model-expanded" ); + QDomNode contentModelNode = contentModelList.item(0); + QDomElement contentModelElem = contentModelNode.toElement(); + if( ! contentModelElem.isNull() ) + { + // check for : + QDomNodeList pcdataList = contentModelElem.elementsByTagName( "pcdata" ); + + // check for other sub elements: + QDomNodeList subList = contentModelElem.elementsByTagName( "element-name" ); + uint subListLength = subList.count(); + for( uint l = 0; l < subListLength; l++ ) + { + QDomNode subNode = subList.item(l); + QDomElement subElem = subNode.toElement(); + if( !subElem.isNull() ) + subelementList[subElem.attribute( "name" )] = true; + } + + // anders: check if this is an EMPTY element, and put "__EMPTY" in the + // sub list, so that we can insert tags in empty form if required. + QDomNodeList emptyList = elem.elementsByTagName( "empty" ); + if ( emptyList.count() ) + subelementList["__EMPTY"] = true; + } + + // Now remove the elements not allowed (e.g. is explicitely not allowed in + // in the HTML 4.01 Strict DTD): + QDomNodeList exclusionsList = elem.elementsByTagName( "exclusions" ); + if( exclusionsList.length() > 0 ) + { // sometimes there are no exclusions ( e.g. in XML DTDs there are never exclusions ) + QDomNode exclusionsNode = exclusionsList.item(0); + QDomElement exclusionsElem = exclusionsNode.toElement(); + if( ! exclusionsElem.isNull() ) + { + QDomNodeList subList = exclusionsElem.elementsByTagName( "element-name" ); + uint subListLength = subList.count(); + for( uint l = 0; l < subListLength; l++ ) + { + QDomNode subNode = subList.item(l); + QDomElement subElem = subNode.toElement(); + if( !subElem.isNull() ) + { + QMap::Iterator it = subelementList.find( subElem.attribute( "name" ) ); + if( it != subelementList.end() ) + subelementList.remove(it); + } + } + } + } + + // turn the map into a list: + QStringList subelementListTmp; + QMap::Iterator it; + for( it = subelementList.begin(); it != subelementList.end(); ++it ) + subelementListTmp.append( it.key() ); + + m_elementsList.insert( elem.attribute( "name" ), subelementListTmp ); + + } + + } // end iteration over all nodes + return true; +} + +/** + * Check which elements are allowed inside a parent element. This returns + * a list of allowed elements, but it doesn't care about order or if only a certain + * number of occurences is allowed. + */ +QStringList PseudoDTD::allowedElements( QString parentElement ) +{ + if( m_sgmlSupport ) + { + // find the matching element, ignoring case: + QMap::Iterator it; + for( it = m_elementsList.begin(); it != m_elementsList.end(); ++it ) + { + if( it.key().lower() == parentElement.lower() ) + return it.data(); + } + } + else if( m_elementsList.contains(parentElement) ) + return m_elementsList[parentElement]; + + return QStringList(); +} + +/** + * Iterate through the XML to get a mapping which attributes are allowed inside + * all elements. + */ +bool PseudoDTD::parseAttributes( QDomDocument *doc, QProgressDialog *progress ) +{ + m_attributesList.clear(); +// QStringList allowedAttributes; + QDomNodeList list = doc->elementsByTagName( "attlist" ); + uint listLength = list.count(); + + for( uint i = 0; i < listLength; i++ ) + { + if( progress->wasCancelled() ) + return false; + + progress->setProgress( progress->progress()+1 ); + // FIXME!! + //qApp->processEvents(); + + ElementAttributes attrs; + QDomNode node = list.item(i); + QDomElement elem = node.toElement(); + if( !elem.isNull() ) + { + QDomNodeList attributeList = elem.elementsByTagName( "attribute" ); + uint attributeListLength = attributeList.count(); + for( uint l = 0; l < attributeListLength; l++ ) + { + QDomNode attributeNode = attributeList.item(l); + QDomElement attributeElem = attributeNode.toElement(); + + if( ! attributeElem.isNull() ) + { + if ( attributeElem.attribute("type") == "#REQUIRED" ) + attrs.requiredAttributes.append( attributeElem.attribute("name") ); + else + attrs.optionalAttributes.append( attributeElem.attribute("name") ); + } + } + m_attributesList.insert( elem.attribute("name"), attrs ); + } + } + + return true; +} + +/** Check which attributes are allowed for an element. + */ +QStringList PseudoDTD::allowedAttributes( QString element ) +{ + if( m_sgmlSupport ) + { + // find the matching element, ignoring case: + QMap::Iterator it; + for( it = m_attributesList.begin(); it != m_attributesList.end(); ++it ) { + if( it.key().lower() == element.lower() ) { + return it.data().optionalAttributes + it.data().requiredAttributes; + } + } + } + else if( m_attributesList.contains(element) ) + return m_attributesList[element].optionalAttributes + m_attributesList[element].requiredAttributes; + + return QStringList(); +} + +QStringList PseudoDTD::requiredAttributes( const QString &element ) const +{ + if ( m_sgmlSupport ) + { + QMap::ConstIterator it; + for( it = m_attributesList.begin(); it != m_attributesList.end(); ++it ) + { + if( it.key().lower() == element.lower() ) + return it.data().requiredAttributes; + } + } + else if( m_attributesList.contains(element) ) + return m_attributesList[element].requiredAttributes; + + return QStringList(); +} + +/** + * Iterate through the XML to get a mapping which attribute values are allowed + * for all attributes inside all elements. + */ +bool PseudoDTD::parseAttributeValues( QDomDocument *doc, QProgressDialog *progress ) +{ + m_attributevaluesList.clear(); // 1 element : n possible attributes + QMap attributevaluesTmp; // 1 attribute : n possible values + QDomNodeList list = doc->elementsByTagName( "attlist" ); + uint listLength = list.count(); + + for( uint i = 0; i < listLength; i++ ) + { + if( progress->wasCancelled() ) + return false; + + progress->setProgress( progress->progress()+1 ); + // FIXME! + //qApp->processEvents(); + + attributevaluesTmp.clear(); + QDomNode node = list.item(i); + QDomElement elem = node.toElement(); + if( !elem.isNull() ) + { + // Enter the list of : + QDomNodeList attributeList = elem.elementsByTagName( "attribute" ); + uint attributeListLength = attributeList.count(); + for( uint l = 0; l < attributeListLength; l++ ) + { + QDomNode attributeNode = attributeList.item(l); + QDomElement attributeElem = attributeNode.toElement(); + if( ! attributeElem.isNull() ) + { + QString value = attributeElem.attribute( "value" ); + attributevaluesTmp.insert( attributeElem.attribute("name"), QStringList::split(QRegExp(" "), value) ); + } + } + m_attributevaluesList.insert( elem.attribute("name"), attributevaluesTmp ); + } + } + return true; +} + +/** + * Check which attributes values are allowed for an attribute in an element + * (the element is necessary because e.g. "href" inside could be different + * to an "href" inside ): + */ +QStringList PseudoDTD::attributeValues( QString element, QString attribute ) +{ + // Direct access would be faster than iteration of course but not always correct, + // because we need to be case-insensitive. + if( m_sgmlSupport ) { + // first find the matching element, ignoring case: + QMap< QString,QMap >::Iterator it; + for( it = m_attributevaluesList.begin(); it != m_attributevaluesList.end(); ++it ) + { + if( it.key().lower() == element.lower() ) + { + QMap attrVals = it.data(); + QMap::Iterator itV; + // then find the matching attribute for that element, ignoring case: + for( itV = attrVals.begin(); itV != attrVals.end(); ++itV ) + { + if( itV.key().lower() == attribute.lower() ) + return( itV.data() ); + } + } + } + } + else if( m_attributevaluesList.contains(element) ) + { + QMap attrVals = m_attributevaluesList[element]; + if( attrVals.contains(attribute) ) + return attrVals[attribute]; + } + + // no predefined values available: + return QStringList(); +} + +/** + * Iterate through the XML to get a mapping of all entity names and their expanded + * version, e.g. nbsp =>  . Parameter entities are ignored. + */ +bool PseudoDTD::parseEntities( QDomDocument *doc, QProgressDialog *progress ) +{ + m_entityList.clear(); + QDomNodeList list = doc->elementsByTagName( "entity" ); + uint listLength = list.count(); + + for( uint i = 0; i < listLength; i++ ) + { + if( progress->wasCancelled() ) + return false; + + progress->setProgress( progress->progress()+1 ); + //FIXME!! + //qApp->processEvents(); + QDomNode node = list.item(i); + QDomElement elem = node.toElement(); + if( !elem.isNull() + && elem.attribute( "type" ) != "param" ) + { // TODO: what's cdata <-> gen ? + QDomNodeList expandedList = elem.elementsByTagName( "text-expanded" ); + QDomNode expandedNode = expandedList.item(0); + QDomElement expandedElem = expandedNode.toElement(); + if( ! expandedElem.isNull() ) + { + QString exp = expandedElem.text(); + // TODO: support more than one &#...; in the expanded text + /* TODO include do this when the unicode font problem is solved: + if( exp.contains(QRegExp("^&#x[a-zA-Z0-9]+;$")) ) { + // hexadecimal numbers, e.g. "ȶ" + uint end = exp.find( ";" ); + exp = exp.mid( 3, end-3 ); + exp = QChar(); + } else if( exp.contains(QRegExp("^&#[0-9]+;$")) ) { + // decimal numbers, e.g. "ì" + uint end = exp.find( ";" ); + exp = exp.mid( 2, end-2 ); + exp = QChar( exp.toInt() ); + } + */ + m_entityList.insert( elem.attribute("name"), exp ); + } + else + { + m_entityList.insert( elem.attribute("name"), QString() ); + } + } + } + return true; +} + +/** + * Get a list of all ( non-parameter ) entities that start with a certain string. + */ +QStringList PseudoDTD::entities( QString start ) +{ + QStringList entities; + QMap::Iterator it; + for( it = m_entityList.begin(); it != m_entityList.end(); ++it ) { + if( (*it).startsWith(start) ) + { + QString str = it.key(); + /* TODO: show entities as unicode character + if( !it.data().isEmpty() ) { + //str += " -- " + it.data(); + QRegExp re( "&#(\\d+);" ); + if( re.search(it.data()) != -1 ) { + uint ch = re.cap( 1).toUInt(); + str += " -- " + QChar( ch).decomposition(); + } + //kdDebug() << "#" << it.data() << endl; + } + */ + entities.append( str ); + // TODO: later use a table view + } + } + return entities; +} + +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/xmltools/pseudo_dtd.h b/kate/xmltools/pseudo_dtd.h new file mode 100644 index 0000000..f5cf37e --- /dev/null +++ b/kate/xmltools/pseudo_dtd.h @@ -0,0 +1,76 @@ + /*************************************************************************** + pseudoDtd.cpp + copyright : (C) 2001-2002 by Daniel Naber + email : daniel.naber@t-online.de + ***************************************************************************/ + +/*************************************************************************** + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or ( at your option ) any later version. + + This program is distributed 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + ***************************************************************************/ + +#ifndef _PLUGIN_KANT_XMLTOOLS_DTD_H +#define _PLUGIN_KANT_XMLTOOLS_DTD_H + +#include +#include + +/** + * This class contains the attributes for one element. + * To get ALL attributes, concatenate the two lists. + */ +class ElementAttributes +{ + public: + QStringList optionalAttributes; + QStringList requiredAttributes; +}; + +class PseudoDTD +{ + + public: + PseudoDTD(); + ~PseudoDTD(); + + void analyzeDTD( QString &metaDtdUrl, QString &metaDtd ); + + QStringList allowedElements( QString parentElement ); + QStringList allowedAttributes( QString parentElement ); + QStringList attributeValues( QString element, QString attribute ); + QStringList entities( QString start ); + QStringList requiredAttributes( const QString &parentElement ) const; + + protected: + + bool parseElements( QDomDocument *doc, QProgressDialog *progress ); + bool parseAttributes( QDomDocument *doc, QProgressDialog *progress ); + bool parseAttributeValues( QDomDocument *doc, QProgressDialog *progress ); + bool parseEntities( QDomDocument *doc, QProgressDialog *progress ); + + bool m_sgmlSupport; + + // Entities, e.g. <"nbsp", "160"> + QMap m_entityList; + // Elements, e.g. <"a", ( "b", "i", "em", "strong" )> + QMap m_elementsList; + // Attributes e.g. <"a", ( "href", "lang", "title" )> + QMap m_attributesList; + // Attribute values e.g. <"td", <"align", ( "left", "right", "justify" )>> + QMap< QString,QMap > m_attributevaluesList; + +}; + +#endif // _PLUGIN_KANT_XMLTOOLS_DTD_H +// kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; diff --git a/kate/xmltools/simplify_dtd.xsl b/kate/xmltools/simplify_dtd.xsl new file mode 100644 index 0000000..53d3a13 --- /dev/null +++ b/kate/xmltools/simplify_dtd.xsl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + XSLT Simplifier + (original version) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kate/xmltools/testcases.xml b/kate/xmltools/testcases.xml new file mode 100644 index 0000000..aa1e7dd --- /dev/null +++ b/kate/xmltools/testcases.xml @@ -0,0 +1,73 @@ +This is a pseudo XML file to test the functions of the XML Plugin. +v0.8, 2002-04-21 + +1. Choose "Assign Meta DTD..." and load the file meta-dtd/html4-loose.dtd.xml + +2. Place cursor at the "X" and choose "Close Element" from the +"XML Plugin" menu. "

" resp. "

" should be inserted: +

foo test bar X +

foo bar X +

foo bar X +

foo bar X +

foo bar X +

+ next line, X +

X (again, the "p" should be closed) +

X (again, the "p" should be closed) + +3. Place cursor after (outside) the tag and select "Insert Element...". The listed +sub-elements should be offered as completion once you start typing. Select one +and it should be inserted, including its closing tag. The cursor should be +placed behind the tag name in the opening tag. The same thing should work +if you just type "<" outside the tag: + abbr, acronym, ....(i.e. no "a", as it cannot be nested!) + abbr, acronym, .... +

a, abbr, acronym, ... +