summaryrefslogtreecommitdiff
path: root/plugins/taglist
diff options
context:
space:
mode:
authorPerberos <[email protected]>2011-11-07 16:46:58 -0300
committerPerberos <[email protected]>2011-11-07 16:46:58 -0300
commit528c1e5ff51e213936e800fc5a9a25da99c0bdf2 (patch)
tree77f8aa456b09367ba81f04d4562fc935f898a951 /plugins/taglist
downloadpluma-528c1e5ff51e213936e800fc5a9a25da99c0bdf2.tar.bz2
pluma-528c1e5ff51e213936e800fc5a9a25da99c0bdf2.tar.xz
initial
Diffstat (limited to 'plugins/taglist')
-rwxr-xr-xplugins/taglist/HTML.tags.xml.in2672
-rwxr-xr-xplugins/taglist/Latex.tags.xml.in344
-rwxr-xr-xplugins/taglist/Makefile.am60
-rwxr-xr-xplugins/taglist/XSLT.tags.xml.in337
-rwxr-xr-xplugins/taglist/XUL.tags.xml.in536
-rwxr-xr-xplugins/taglist/gedit-taglist-plugin-panel.c776
-rwxr-xr-xplugins/taglist/gedit-taglist-plugin-panel.h89
-rwxr-xr-xplugins/taglist/gedit-taglist-plugin-parser.c655
-rwxr-xr-xplugins/taglist/gedit-taglist-plugin-parser.h68
-rwxr-xr-xplugins/taglist/gedit-taglist-plugin.c160
-rwxr-xr-xplugins/taglist/gedit-taglist-plugin.h85
-rwxr-xr-xplugins/taglist/taglist.gedit-plugin.desktop.in8
12 files changed, 5790 insertions, 0 deletions
diff --git a/plugins/taglist/HTML.tags.xml.in b/plugins/taglist/HTML.tags.xml.in
new file mode 100755
index 00000000..116cc247
--- /dev/null
+++ b/plugins/taglist/HTML.tags.xml.in
@@ -0,0 +1,2672 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TagList xmlns="http://gedit.sourceforge.net/some-location">
+<TagGroup _name="XHTML 1.0 - Tags" sort="true">
+
+ <Tag _name="Abbreviated form">
+ <Begin>&lt;abbr title="</Begin>
+ <End>"&gt;&lt;/abbr&gt;</End>
+ </Tag>
+
+ <Tag _name="Abbreviation">
+ <Begin>abbr="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Accessibility key character">
+ <Begin>accesskey="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Acronym">
+ <Begin>&lt;acronym title="</Begin>
+ <End>"&gt;&lt;/acronym&gt;</End>
+ </Tag>
+
+ <Tag _name="Align">
+ <Begin>align="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Alignment character">
+ <Begin>char="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Alternative">
+ <Begin>alt="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Anchor URI">
+ <Begin>&lt;a href="</Begin>
+ <End>"&gt;&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Anchor">
+ <Begin>&lt;a id="</Begin>
+ <End>"&gt;&lt;/a&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Applet class file code (deprecated)">
+ <Begin>code="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Associated information">
+ <Begin>content="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Author info">
+ <Begin>&lt;address&gt;</Begin>
+ <End>&lt;/address&gt;</End>
+ </Tag>
+
+ <Tag _name="Axis related headers">
+ <Begin>axis="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Background color (deprecated)">
+ <Begin>bgcolor="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Background texture tile (deprecated)">
+ <Begin>background="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Base font (deprecated)">
+ <Begin>&lt;basefont&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Base URI">
+ <Begin>codebase="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Bold">
+ <Begin>&lt;b&gt;</Begin>
+ <End>&lt;/b&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Border (deprecated)">
+ <Begin>border="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Cell rowspan">
+ <Begin>rowspan="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Center (deprecated)">
+ <Begin>&lt;center&gt;</Begin>
+ <End>&lt;/center&gt;</End>
+ </Tag>
+
+ <Tag _name="Character encoding of linked resource">
+ <Begin>charset="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Checked state">
+ <Begin>checked="checked"</Begin>
+ </Tag>
+
+ <Tag _name="Citation">
+ <Begin>&lt;cite&gt;</Begin>
+ <End>&lt;/cite&gt;</End>
+ </Tag>
+
+ <Tag _name="Cite reason for change">
+ <Begin>cite="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Class implementation ID">
+ <Begin>classid="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Class list">
+ <Begin>class="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Clear text flow control">
+ <Begin>clear="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Code content type">
+ <Begin>codetype="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Color of selected links (deprecated)">
+ <Begin>alink="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Column span">
+ <Begin>colspan="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Columns">
+ <Begin>cols="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Comment">
+ <Begin>&lt;!-- </Begin>
+ <End> --&gt;</End>
+ </Tag>
+
+ <Tag _name="Computer code fragment">
+ <Begin>&lt;code&gt;</Begin>
+ <End>&lt;/code&gt;</End>
+ </Tag>
+
+ <!-- The "type" attribute is deprecated for the "ol" tag only,
+ since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Content type (deprecated)">
+ <Begin>type="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Coordinates">
+ <Begin>coords="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Date and time of change">
+ <Begin>datetime="YYYYMMDD"</Begin>
+ </Tag>
+
+<!-- NOTE: used in "object" tag -->
+ <Tag _name="Declare flag">
+ <Begin>declare="declare"</Begin>
+ </Tag>
+
+ <!-- Translators: DEFER is an optional attribute of the <script> tag.
+ It indicates that the script is not going to generate any document
+ content. The browser can continue parsing and drawing the page. -->
+ <Tag _name="Defer attribute">
+ <Begin>defer="defer"</Begin>
+ </Tag>
+
+ <Tag _name="Definition description">
+ <Begin>&lt;dd&gt;</Begin>
+ <End>&lt;/dd&gt;</End>
+ </Tag>
+
+ <Tag _name="Definition list">
+ <Begin>&lt;dl&gt;</Begin>
+ <End>&lt;/dl&gt;</End>
+ </Tag>
+
+ <Tag _name="Definition term">
+ <Begin>&lt;dt&gt;</Begin>
+ <End>&lt;/dt&gt;</End>
+ </Tag>
+
+ <Tag _name="Deleted text">
+ <Begin>&lt;del&gt;</Begin>
+ <End>&lt;/del&gt;</End>
+ </Tag>
+
+ <Tag _name="Directionality">
+ <Begin>dir="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Directionality (deprecated)">
+ <Begin>&lt;dir&gt;</Begin>
+ <End>&lt;/dir&gt;</End>
+ </Tag>
+
+ <Tag _name="Disabled">
+ <Begin>disabled="disabled"</Begin>
+ </Tag>
+
+ <Tag _name="DIV container">
+ <Begin>&lt;div&gt;</Begin>
+ <End>&lt;/div&gt;</End>
+ </Tag>
+
+ <Tag _name="DIV Style container">
+ <Begin>&lt;div style=&gt;</Begin>
+ <End>&lt;/div&gt;</End>
+ </Tag>
+
+ <Tag _name="Document base">
+ <Begin>&lt;base href="</Begin>
+ <End>" /&gt;</End>
+ </Tag>
+
+ <Tag _name="Document body">
+ <Begin>&lt;body&gt;</Begin>
+ <End>&lt;/body&gt;</End>
+ </Tag>
+
+ <Tag _name="Document head">
+ <Begin>&lt;head&gt;</Begin>
+ <End>&lt;/head&gt;</End>
+ </Tag>
+
+ <Tag _name="Element ID">
+ <Begin>id="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Document title">
+ <Begin>&lt;title&gt;</Begin>
+ <End>&lt;/title&gt;</End>
+ </Tag>
+
+ <Tag _name="Document type">
+ <Begin>&lt;!DOCTYPE&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Emphasis">
+ <Begin>&lt;em&gt;</Begin>
+ <End>&lt;/em&gt;</End>
+ </Tag>
+
+ <Tag _name="Encode type">
+ <Begin>enctype="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Font face (deprecated)">
+ <Begin>face="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="For label">
+ <Begin>for="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Forced line break">
+ <Begin>&lt;br /&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Form action handler">
+ <Begin>action="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Form control group">
+ <Begin>&lt;fieldset&gt;</Begin>
+ <End>&lt;/fieldset&gt;</End>
+ </Tag>
+
+ <Tag _name="Form field label text">
+ <Begin>&lt;label&gt;</Begin>
+ <End>&lt;/label&gt;</End>
+ </Tag>
+
+ <Tag _name="Form input type">
+ <Begin>&lt;input type="</Begin>
+ <End>" /&gt;</End>
+ </Tag>
+
+ <Tag _name="Form input">
+ <Begin>&lt;input /&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Form method">
+ <Begin>&lt;form method="</Begin>
+ <End>"&gt;&lt;/form&gt;</End>
+ </Tag>
+
+ <Tag _name="Form method">
+ <Begin>method="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Form">
+ <Begin>&lt;form&gt;</Begin>
+ <End>&lt;/form&gt;</End>
+ </Tag>
+
+ <Tag _name="Forward link">
+ <Begin>rel="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Frame render parts">
+ <Begin>frame="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Frame source">
+ <Begin>&lt;frame src="</Begin>
+ <End>"&gt;&lt;/frame&gt;</End>
+ </Tag>
+
+ <Tag _name="Frame target">
+ <Begin>target="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Frame">
+ <Begin>&lt;frame&gt;</Begin>
+ <End>&lt;/frame&gt;</End>
+ </Tag>
+
+ <Tag _name="Frame border">
+ <Begin>frameborder="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Frameset columns">
+ <Begin>&lt;frameset cols="</Begin>
+ <End>"&gt;&lt;/frameset&gt;</End>
+ </Tag>
+
+ <Tag _name="Frameset rows">
+ <Begin>&lt;frameset rows="</Begin>
+ <End>"&gt;&lt;/frameset&gt;</End>
+ </Tag>
+
+ <Tag _name="Frameset">
+ <Begin>&lt;frameset&gt;</Begin>
+ <End>&lt;/frameset&gt;</End>
+ </Tag>
+
+ <Tag _name="Frame spacing">
+ <Begin>framespacing="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Generic embedded object">
+ <Begin>&lt;object&gt;</Begin>
+ <End>&lt;/object&gt;</End>
+ </Tag>
+
+ <Tag _name="Generic metainformation">
+ <Begin>&lt;meta content="</Begin>
+ <End>"&gt;&lt;/meta&gt;</End>
+ </Tag>
+
+ <Tag _name="Generic span">
+ <Begin>&lt;span&gt;</Begin>
+ <End>&lt;/span&gt;</End>
+ </Tag>
+
+ <Tag _name="Header cell IDs">
+ <Begin>headers="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Heading 1">
+ <Begin>&lt;h1&gt;</Begin>
+ <End>&lt;/h1&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 2">
+ <Begin>&lt;h2&gt;</Begin>
+ <End>&lt;/h2&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 3">
+ <Begin>&lt;h3&gt;</Begin>
+ <End>&lt;/h3&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 4">
+ <Begin>&lt;h4&gt;</Begin>
+ <End>&lt;/h4&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 5">
+ <Begin>&lt;h5&gt;</Begin>
+ <End>&lt;/h5&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 6">
+ <Begin>&lt;h6&gt;</Begin>
+ <End>&lt;/h6&gt;</End>
+ </Tag>
+
+ <Tag _name="Height">
+ <Begin>height="</Begin>
+ </Tag>
+
+ <Tag _name="Horizontal rule">
+ <Begin>&lt;hr /&gt;</Begin>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Horizontal space (deprecated)">
+ <Begin>hspace="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="HREF URI">
+ <Begin>href="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="HTML root element">
+ <Begin>&lt;html&gt;</Begin>
+ <End>&lt;/html&gt;</End>
+ </Tag>
+
+ <Tag _name="HTTP header name">
+ <Begin>http-equiv="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="I18N BiDi override">
+ <Begin>&lt;bdo&gt;</Begin>
+ <End>&lt;/bdo&gt;</End>
+ </Tag>
+
+ <Tag _name="Image map area">
+ <Begin>&lt;area alt="</Begin>
+ <End>"&gt;&lt;/area&gt;</End>
+ </Tag>
+
+ <Tag _name="Image map name">
+ <Begin>&lt;map name="</Begin>
+ <End>"&gt;&lt;/map&gt;</End>
+ </Tag>
+
+ <Tag _name="Image map">
+ <Begin>&lt;map id="</Begin>
+ <End>"&gt;&lt;/map&gt;</End>
+ </Tag>
+
+ <Tag _name="Image">
+ <Begin>&lt;img id="</Begin>
+ <End>" src="" alt="" /&gt;</End>
+ </Tag>
+
+ <Tag _name="Inline frame">
+ <Begin>&lt;iframe&gt;</Begin>
+ <End>&lt;/iframe&gt;</End>
+ </Tag>
+
+ <Tag _name="Inserted text">
+ <Begin>&lt;ins&gt;</Begin>
+ <End>&lt;/ins&gt;</End>
+ </Tag>
+
+ <Tag _name="Instance definition">
+ <Begin>&lt;dfn&gt;</Begin>
+ <End>&lt;/dfn&gt;</End>
+ </Tag>
+
+ <Tag _name="Italic text">
+ <Begin>&lt;i&gt;</Begin>
+ <End>&lt;/i&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Java applet (deprecated)">
+ <Begin>&lt;applet height="</Begin>
+ <End>" width=""&gt;&lt;/applet&gt;</End>
+ </Tag>
+
+ <Tag _name="Label">
+ <Begin>label="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Language code">
+ <Begin>hreflang="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Language code">
+ <Begin>lang="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Large text style">
+ <Begin>&lt;big&gt;</Begin>
+ <End>&lt;/big&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Link color (deprecated)">
+ <Begin>link="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="List item">
+ <Begin>&lt;li&gt;</Begin>
+ <End>&lt;/li&gt;</End>
+ </Tag>
+
+ <Tag _name="List of MIME types for file upload">
+ <Begin>accept="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="List of supported character sets">
+ <Begin>accept-charset="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Local change to font">
+ <Begin>&lt;font&gt;</Begin>
+ <End>&lt;/font&gt;</End>
+ </Tag>
+
+ <Tag _name="Long description link">
+ <Begin>longdesc="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Long quotation">
+ <Begin>&lt;blockquote&gt;</Begin>
+ <End>&lt;/blockquote&gt;</End>
+ </Tag>
+
+<!-- Supported in XHTML 1.0 Frameset DTD only. -->
+ <Tag _name="Margin pixel height">
+ <Begin>marginheight="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Supported in XHTML 1.0 Frameset DTD only. -->
+ <Tag _name="Margin pixel width">
+ <Begin>marginwidth="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Maximum length of text field">
+ <Begin>maxlength="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Output media">
+ <Begin>media="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <!-- Here I take some liberties: There's no mandatory attributes,
+ but those are most common, and will likely be used. -->
+ <Tag _name="Media-independent link">
+ <Begin>&lt;link rel="</Begin>
+ <End>" type="" href="" /&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Menu list (deprecated)">
+ <Begin>&lt;menu&gt;</Begin>
+ <End>&lt;/menu&gt;</End>
+ </Tag>
+
+ <Tag _name="Multi-line text field">
+ <Begin>&lt;textarea cols="</Begin>
+ <End>" rows=""&gt;&lt;/textarea&gt;</End>
+ </Tag>
+
+ <Tag _name="Multiple">
+ <Begin>multiple="multiple"</Begin>
+ </Tag>
+
+ <Tag _name="Name">
+ <Begin>name="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Named property value">
+ <Begin>&lt;param name="</Begin>
+ <End>"&gt;&lt;/param&gt;</End>
+ </Tag>
+
+ <Tag _name="No frames">
+ <Begin>&lt;noframes&gt;</Begin>
+ <End>&lt;/noframes&gt;</End>
+ </Tag>
+
+ <Tag _name="No resize">
+ <Begin>noresize="noresize"</Begin>
+ </Tag>
+
+ <Tag _name="No script">
+ <Begin>&lt;noscript&gt;</Begin>
+ <End>&lt;/noscript&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="No shade (deprecated)">
+ <Begin>noshade="noshade"</Begin>
+ </Tag>
+
+ <Tag _name="No URI">
+ <Begin>nohref="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="No word wrap (deprecated)">
+ <Begin>nowrap="nowrap"</Begin>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Object applet file (deprecated)">
+ <Begin>object="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Object data reference">
+ <Begin>data="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Offset for alignment character">
+ <Begin>charoff="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnBlur event">
+ <Begin>onblur="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnChange event">
+ <Begin>onchange="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnClick event">
+ <Begin>onclick="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnDblClick event">
+ <Begin>ondbclick="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnFocus event">
+ <Begin>onfocus="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnKeyDown event">
+ <Begin>onkeydown="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnKeyPress event">
+ <Begin>onkeypress="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnKeyUp event">
+ <Begin>onkeyup="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnLoad event">
+ <Begin>onload="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnMouseDown event">
+ <Begin>onmousedown="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnMouseMove event">
+ <Begin>onmousemove="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnMouseOut event">
+ <Begin>onmouseout="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnMouseOver event">
+ <Begin>onmouseover="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnMouseUp event">
+ <Begin>onmouseup="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnReset event">
+ <Begin>onreset="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnSelect event">
+ <Begin>onselect="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnSubmit event">
+ <Begin>onsubmit="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="OnUnload event">
+ <Begin>onunload="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Option group">
+ <Begin>&lt;optgroup label="</Begin>
+ <End>"&gt;&lt;/optgroup&gt;</End>
+ </Tag>
+
+ <Tag _name="Option selector">
+ <Begin>&lt;select&gt;</Begin>
+ <End>&lt;/select&gt;</End>
+ </Tag>
+
+ <Tag _name="Ordered list">
+ <Begin>&lt;ol&gt;</Begin>
+ <End>&lt;/ol&gt;</End>
+ </Tag>
+
+ <Tag _name="Paragraph class">
+ <Begin>&lt;p class="</Begin>
+ <End>"&gt;&lt;/p&gt;</End>
+ </Tag>
+
+ <Tag _name="Paragraph style">
+ <Begin>&lt;p style="</Begin>
+ <End>"&gt;&lt;/p&gt;</End>
+ </Tag>
+
+ <Tag _name="Paragraph">
+ <Begin>&lt;p&gt;</Begin>
+ <End>&lt;/p&gt;</End>
+ </Tag>
+
+ <Tag _name="Preformatted text">
+ <Begin>&lt;pre&gt;</Begin>
+ <End>&lt;/pre&gt;</End>
+ </Tag>
+
+ <Tag _name="Profile metainfo dictionary">
+ <Begin>profile="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Push button">
+ <Begin>&lt;button&gt;</Begin>
+ <End>&lt;/button&gt;</End>
+ </Tag>
+
+ <Tag _name="ReadOnly text and password">
+ <Begin>readonly="readonly"</Begin>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Reduced spacing (deprecated)">
+ <Begin>compact="compact_rendering"</Begin>
+ </Tag>
+
+ <Tag _name="Reverse link">
+ <Begin>rev="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Rows">
+ <Begin>rows="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Rulings between rows and columns">
+ <Begin>rules="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Sample program output, scripts">
+ <Begin>&lt;samp&gt;</Begin>
+ <End>&lt;/samp&gt;</End>
+ </Tag>
+
+ <Tag _name="Scope covered by header cells">
+ <Begin>scope="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Script language name">
+ <Begin>language="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Script statements">
+ <Begin>&lt;script type="</Begin>
+ <End>"&gt;&lt;/script&gt;</End>
+ </Tag>
+
+ <Tag _name="Scrollbar">
+ <Begin>scrolling="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Selectable option">
+ <Begin>&lt;option&gt;</Begin>
+ <End>&lt;/option&gt;</End>
+ </Tag>
+
+ <Tag _name="Selected">
+ <Begin>selected="selected"</Begin>
+ </Tag>
+
+ <Tag _name="Server-side image map">
+ <Begin>ismap="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Shape">
+ <Begin>shape="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Short inline quotation">
+ <Begin>&lt;q&gt;</Begin>
+ <End>&lt;/q&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Size (deprecated)">
+ <Begin>size="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Small text style">
+ <Begin>&lt;small&gt;</Begin>
+ <End>&lt;/small&gt;</End>
+ </Tag>
+
+ <Tag _name="Source">
+ <Begin>src="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Space-separated archive list">
+ <Begin>archive="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Spacing between cells">
+ <Begin>cellspacing="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Spacing within cells">
+ <Begin>cellpadding="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Span">
+ <Begin>span="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Standby load message">
+ <Begin>standby="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Starting sequence number (deprecated)">
+ <Begin>start="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Strike-through text style (deprecated)">
+ <Begin>&lt;s&gt;</Begin>
+ <End>&lt;/s&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Strike-through text (deprecated)">
+ <Begin>&lt;strike&gt;</Begin>
+ <End>&lt;/strike&gt;</End>
+ </Tag>
+
+ <Tag _name="Strong emphasis">
+ <Begin>&lt;strong&gt;</Begin>
+ <End>&lt;/strong&gt;</End>
+ </Tag>
+
+ <Tag _name="Style info">
+ <Begin>&lt;style type="text/css"&gt;</Begin>
+ <End>&lt;/style&gt;</End>
+ </Tag>
+
+ <Tag _name="Style info">
+ <Begin>style="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Subscript">
+ <Begin>&lt;sub&gt;</Begin>
+ <End>&lt;/sub&gt;</End>
+ </Tag>
+
+ <Tag _name="Superscript">
+ <Begin>&lt;sup&gt;</Begin>
+ <End>&lt;/sup&gt;</End>
+ </Tag>
+
+ <Tag _name="Table body">
+ <Begin>&lt;tbody&gt;</Begin>
+ <End>&lt;/tbody&gt;</End>
+ </Tag>
+
+ <Tag _name="Table caption">
+ <Begin>&lt;caption&gt;</Begin>
+ <End>&lt;/caption&gt;</End>
+ </Tag>
+
+ <Tag _name="Table column group properties">
+ <Begin>&lt;colgroup&gt;</Begin>
+ <End>&lt;/colgroup&gt;</End>
+ </Tag>
+
+ <Tag _name="Table column properties">
+ <Begin>&lt;col&gt;</Begin>
+ <End>&lt;/col&gt;</End>
+ </Tag>
+
+ <Tag _name="Table data cell">
+ <Begin>&lt;td&gt;</Begin>
+ <End>&lt;/td&gt;</End>
+ </Tag>
+
+ <Tag _name="Table footer">
+ <Begin>&lt;tfoot&gt;</Begin>
+ <End>&lt;/tfoot&gt;</End>
+ </Tag>
+
+ <Tag _name="Table header cell">
+ <Begin>&lt;th&gt;</Begin>
+ <End>&lt;/th&gt;</End>
+ </Tag>
+
+ <Tag _name="Table header">
+ <Begin>&lt;thead&gt;</Begin>
+ <End>&lt;/thead&gt;</End>
+ </Tag>
+
+ <Tag _name="Table row">
+ <Begin>&lt;tr&gt;</Begin>
+ <End>&lt;/tr&gt;</End>
+ </Tag>
+
+ <Tag _name="Table summary">
+ <Begin>summary="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Table">
+ <Begin>&lt;table&gt;</Begin>
+ <End>&lt;/table&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Blank">
+ <Begin>&lt;a target="_blank"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Parent">
+ <Begin>&lt;a target="_parent"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Self">
+ <Begin>&lt;a target="_self"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Top">
+ <Begin>&lt;a target="_top"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Teletype or monospace text style">
+ <Begin>&lt;tt&gt;</Begin>
+ <End>&lt;/tt&gt;</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Text color (deprecated)">
+ <Begin>color="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Text color (deprecated)">
+ <Begin>text="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Text entered by user">
+ <Begin>&lt;kbd&gt;</Begin>
+ <End>&lt;/kbd&gt;</End>
+ </Tag>
+
+ <Tag _name="Title">
+ <Begin>title="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Underlined text style">
+ <Begin>&lt;u&gt;</Begin>
+ <End>&lt;/u&gt;</End>
+ </Tag>
+
+ <Tag _name="Unordered list">
+ <Begin>&lt;ul&gt;</Begin>
+ <End>&lt;/ul&gt;</End>
+ </Tag>
+
+ <Tag _name="Use image map">
+ <Begin>usemap="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Value interpretation">
+ <Begin>valuetype="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Value">
+ <Begin>value="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Variable or program argument">
+ <Begin>&lt;var&gt;</Begin>
+ <End>&lt;/var&gt;</End>
+ </Tag>
+
+ <Tag _name="Vertical cell alignment">
+ <Begin>valign="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Vertical space (deprecated)">
+ <Begin>vspace="</Begin>
+ <End>"</End>
+ </Tag>
+
+<!-- Deprecated since HTML 4.01, not supported in XHTML 1.0 Strict DTD. -->
+ <Tag _name="Visited link color (deprecated)">
+ <Begin>vlink="</Begin>
+ <End>"</End>
+ </Tag>
+
+ <Tag _name="Width">
+ <Begin>width="</Begin>
+ <End>"</End>
+ </Tag>
+
+</TagGroup>
+
+<TagGroup _name="HTML - Tags" sort="true">
+
+ <Tag _name="Abbreviated form">
+ <Begin>&lt;abbr&gt;</Begin>
+ <End>&lt;/abbr&gt;</End>
+ </Tag>
+
+ <Tag _name="Abbreviation">
+ <Begin>abbr=</Begin>
+ </Tag>
+
+ <Tag _name="Above">
+ <Begin>&lt;above&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Accessibility key character">
+ <Begin>accesskey=</Begin>
+ </Tag>
+
+ <Tag _name="Acronym">
+ <Begin>&lt;acronym&gt;</Begin>
+ <End>&lt;/acronym&gt;</End>
+ </Tag>
+
+ <Tag _name="Align">
+ <Begin>align=</Begin>
+ </Tag>
+
+ <Tag _name="Alignment character">
+ <Begin>char=</Begin>
+ </Tag>
+
+ <Tag _name="Alternative">
+ <Begin>alt=</Begin>
+ </Tag>
+
+ <Tag _name="Anchor URI">
+ <Begin>&lt;a href=&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Anchor">
+ <Begin>&lt;a&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Applet class file code">
+ <Begin>code=</Begin>
+ </Tag>
+
+ <Tag _name="Array">
+ <Begin>&lt;array&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Associated information">
+ <Begin>content=</Begin>
+ </Tag>
+
+ <Tag _name="Author info">
+ <Begin>&lt;address&gt;</Begin>
+ <End>&lt;/address&gt;</End>
+ </Tag>
+
+ <Tag _name="Axis related headers">
+ <Begin>axis=</Begin>
+ </Tag>
+
+ <Tag _name="Background color">
+ <Begin>bgcolor=</Begin>
+ </Tag>
+
+ <Tag _name="Background texture tile">
+ <Begin>background=</Begin>
+ </Tag>
+
+ <Tag _name="Base font">
+ <Begin>&lt;basefont&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Base URI">
+ <Begin>codebase=</Begin>
+ </Tag>
+
+ <Tag _name="Bold">
+ <Begin>&lt;b&gt;</Begin>
+ <End>&lt;/b&gt;</End>
+ </Tag>
+
+ <Tag _name="Border color">
+ <Begin>bordercolor=</Begin>
+ </Tag>
+
+ <Tag _name="Border">
+ <Begin>border=</Begin>
+ </Tag>
+
+ <Tag _name="Cell rowspan">
+ <Begin>rowspan=</Begin>
+ </Tag>
+
+ <Tag _name="Center">
+ <Begin>&lt;center&gt;</Begin>
+ <End>&lt;/center&gt;</End>
+ </Tag>
+
+ <Tag _name="Character encoding of linked resource">
+ <Begin>charset=</Begin>
+ </Tag>
+
+ <Tag _name="Checked (state)">
+ <Begin>checked</Begin>
+ </Tag>
+
+ <Tag _name="Citation">
+ <Begin>&lt;cite&gt;</Begin>
+ <End>&lt;/cite&gt;</End>
+ </Tag>
+
+ <Tag _name="Cite reason for change">
+ <Begin>cite=</Begin>
+ </Tag>
+
+ <Tag _name="Class implementation ID">
+ <Begin>classid=</Begin>
+ </Tag>
+
+ <Tag _name="Class list">
+ <Begin>class=</Begin>
+ </Tag>
+
+ <Tag _name="Clear text flow control">
+ <Begin>clear=</Begin>
+ </Tag>
+
+ <Tag _name="Code content type">
+ <Begin>codetype=</Begin>
+ </Tag>
+
+ <Tag _name="Color of selected links">
+ <Begin>alink=</Begin>
+ </Tag>
+
+ <Tag _name="Column span">
+ <Begin>colspan=</Begin>
+ </Tag>
+
+ <Tag _name="Columns">
+ <Begin>cols=</Begin>
+ </Tag>
+
+ <Tag _name="Comment">
+ <Begin>&lt;!-- </Begin>
+ <End> --&gt;</End>
+ </Tag>
+
+ <Tag _name="Comment">
+ <Begin>&lt;comment&gt;</Begin>
+ <End>&lt;/comment&gt;</End>
+ </Tag>
+
+ <Tag _name="Computer code fragment">
+ <Begin>&lt;code&gt;</Begin>
+ <End>&lt;/code&gt;</End>
+ </Tag>
+
+ <Tag _name="Content scheme">
+ <Begin>scheme=</Begin>
+ </Tag>
+
+ <Tag _name="Content type">
+ <Begin>type=</Begin>
+ </Tag>
+
+ <Tag _name="Coordinates">
+ <Begin>coords=</Begin>
+ </Tag>
+
+ <Tag _name="Date and time of change">
+ <Begin>datetime=</Begin>
+ </Tag>
+
+ <Tag _name="Declare flag">
+ <Begin>declare</Begin>
+ </Tag>
+
+ <!-- Translators: DEFER is an optional attribute of the <script> tag.
+ It indicates that the script is not going to generate any document
+ content. The browser can continue parsing and drawing the page. -->
+ <Tag _name="Defer attribute">
+ <Begin>defer</Begin>
+ </Tag>
+
+ <Tag _name="Definition description">
+ <Begin>&lt;dd&gt;</Begin>
+ <End>&lt;/dd&gt;</End>
+ </Tag>
+
+ <Tag _name="Definition list">
+ <Begin>&lt;dl&gt;</Begin>
+ <End>&lt;/dl&gt;</End>
+ </Tag>
+
+ <Tag _name="Definition term">
+ <Begin>&lt;dt&gt;</Begin>
+ <End>&lt;/dt&gt;</End>
+ </Tag>
+
+ <Tag _name="Deleted text">
+ <Begin>&lt;del&gt;</Begin>
+ <End>&lt;/del&gt;</End>
+ </Tag>
+
+ <Tag _name="Direction">
+ <Begin>direction=</Begin>
+ </Tag>
+
+ <Tag _name="Directionality">
+ <Begin>dir=</Begin>
+ </Tag>
+
+ <Tag _name="Directory list">
+ <Begin>&lt;dir&gt;</Begin>
+ <End>&lt;/dir&gt;</End>
+ </Tag>
+
+ <Tag _name="Disabled">
+ <Begin>disabled</Begin>
+ </Tag>
+
+ <Tag _name="DIV container">
+ <Begin>&lt;div&gt;</Begin>
+ <End>&lt;/div&gt;</End>
+ </Tag>
+
+ <Tag _name="DIV Style container">
+ <Begin>&lt;div style=&gt;</Begin>
+ <End>&lt;/div&gt;</End>
+ </Tag>
+
+ <Tag _name="Document base">
+ <Begin>&lt;base&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Document body">
+ <Begin>&lt;body&gt;</Begin>
+ <End>&lt;/body&gt;</End>
+ </Tag>
+
+ <Tag _name="Document head">
+ <Begin>&lt;head&gt;</Begin>
+ <End>&lt;/head&gt;</End>
+ </Tag>
+
+ <Tag _name="Element ID">
+ <Begin>id=</Begin>
+ </Tag>
+
+ <Tag _name="Document title">
+ <Begin>&lt;title&gt;</Begin>
+ <End>&lt;/title&gt;</End>
+ </Tag>
+
+ <Tag _name="Document type">
+ <Begin>&lt;!DOCTYPE&gt;</Begin>
+ </Tag>
+
+ <Tag _name="HTML version">
+ <Begin>version=</Begin>
+ </Tag>
+
+ <Tag _name="Embedded object">
+ <Begin>&lt;embed&gt;</Begin>
+ <End>&lt;/embed&gt;</End>
+ </Tag>
+
+ <Tag _name="Emphasis">
+ <Begin>&lt;em&gt;</Begin>
+ <End>&lt;/em&gt;</End>
+ </Tag>
+
+ <Tag _name="Encode type">
+ <Begin>enctype=</Begin>
+ </Tag>
+
+ <Tag _name="Figure">
+ <Begin>&lt;fig&gt;</Begin>
+ <End>&lt;/fig&gt;</End>
+ </Tag>
+
+ <Tag _name="Font face">
+ <Begin>face=</Begin>
+ </Tag>
+
+ <Tag _name="For label">
+ <Begin>for=</Begin>
+ </Tag>
+
+ <Tag _name="Forced line break">
+ <Begin>&lt;br /&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Form action handler">
+ <Begin>action=</Begin>
+ </Tag>
+
+ <Tag _name="Form control group">
+ <Begin>&lt;fieldset&gt;</Begin>
+ <End>&lt;/fieldset&gt;</End>
+ </Tag>
+
+ <Tag _name="Form field label text">
+ <Begin>&lt;label&gt;</Begin>
+ <End>&lt;/label&gt;</End>
+ </Tag>
+
+ <Tag _name="Form input type">
+ <Begin>&lt;input type=&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Form input">
+ <Begin>&lt;input&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Form method">
+ <Begin>&lt;form method=&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Form method">
+ <Begin>method=</Begin>
+ </Tag>
+
+ <Tag _name="Form">
+ <Begin>&lt;form&gt;</Begin>
+ <End>&lt;/form&gt;</End>
+ </Tag>
+
+ <Tag _name="Forward link">
+ <Begin>rel=</Begin>
+ </Tag>
+
+ <Tag _name="Frame render parts">
+ <Begin>frame=</Begin>
+ </Tag>
+
+ <Tag _name="Frame source">
+ <Begin>&lt;frame src=&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Frame target">
+ <Begin>target=</Begin>
+ </Tag>
+
+ <Tag _name="Frame">
+ <Begin>&lt;frame&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Frameborder">
+ <Begin>frameborder=</Begin>
+ </Tag>
+
+ <Tag _name="Frameset columns">
+ <Begin>&lt;frameset cols=&gt;</Begin>
+ <End>&lt;/frameset&gt;</End>
+ </Tag>
+
+ <Tag _name="Frameset rows">
+ <Begin>&lt;frameset rows=&gt;</Begin>
+ <End>&lt;/frameset&gt;</End>
+ </Tag>
+
+ <Tag _name="Frameset">
+ <Begin>&lt;frameset&gt;</Begin>
+ <End>&lt;/frameset&gt;</End>
+ </Tag>
+
+ <Tag _name="Framespacing">
+ <Begin>framespacing=</Begin>
+ </Tag>
+
+ <Tag _name="Generic embedded object">
+ <Begin>&lt;object&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Generic metainformation">
+ <Begin>&lt;meta&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Generic span">
+ <Begin>&lt;span&gt;</Begin>
+ <End>&lt;/span&gt;</End>
+ </Tag>
+
+ <Tag _name="Header cell IDs">
+ <Begin>headers=</Begin>
+ </Tag>
+
+ <Tag _name="Heading 1">
+ <Begin>&lt;h1&gt;</Begin>
+ <End>&lt;/h1&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 2">
+ <Begin>&lt;h2&gt;</Begin>
+ <End>&lt;/h2&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 3">
+ <Begin>&lt;h3&gt;</Begin>
+ <End>&lt;/h3&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 4">
+ <Begin>&lt;h4&gt;</Begin>
+ <End>&lt;/h4&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 5">
+ <Begin>&lt;h5&gt;</Begin>
+ <End>&lt;/h5&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading 6">
+ <Begin>&lt;h6&gt;</Begin>
+ <End>&lt;/h6&gt;</End>
+ </Tag>
+
+ <Tag _name="Heading">
+ <Begin>&lt;h&gt;</Begin>
+ <End>&lt;/h&gt;</End>
+ </Tag>
+
+ <Tag _name="Height">
+ <Begin>height=</Begin>
+ </Tag>
+
+ <Tag _name="Horizontal rule">
+ <Begin>&lt;hr /&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Horizontal space">
+ <Begin>hspace=</Begin>
+ </Tag>
+
+ <Tag _name="HREF URI">
+ <Begin>href=</Begin>
+ </Tag>
+
+ <Tag _name="HTML root element">
+ <Begin>&lt;html&gt;</Begin>
+ <End>&lt;/html&gt;</End>
+ </Tag>
+
+ <Tag _name="HTTP header name">
+ <Begin>http-equiv=</Begin>
+ </Tag>
+
+ <Tag _name="I18N BiDi override">
+ <Begin>&lt;BDO&gt;</Begin>
+ <End>&lt;/BDO&gt;</End>
+ </Tag>
+
+ <Tag _name="Image map area">
+ <Begin>&lt;area&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Image map name">
+ <Begin>&lt;map name=&gt;</Begin>
+ <End>&lt;/map&gt;</End>
+ </Tag>
+
+ <Tag _name="Image map">
+ <Begin>&lt;map&gt;</Begin>
+ <End>&lt;/map&gt;</End>
+ </Tag>
+
+ <Tag _name="Image source">
+ <Begin>&lt;img src=&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Image">
+ <Begin>&lt;img&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Inline frame">
+ <Begin>&lt;iframe&gt;</Begin>
+ <End>&lt;/iframe&gt;</End>
+ </Tag>
+
+ <Tag _name="Inline layer">
+ <Begin>&lt;ilayer&gt;</Begin>
+ <End>&lt;/ilayer&gt;</End>
+ </Tag>
+
+ <Tag _name="Inserted text">
+ <Begin>&lt;ins&gt;</Begin>
+ <End>&lt;/ins&gt;</End>
+ </Tag>
+
+ <Tag _name="Instance definition">
+ <Begin>&lt;dfn&gt;</Begin>
+ <End>&lt;/dfn&gt;</End>
+ </Tag>
+
+ <Tag _name="Italic text">
+ <Begin>&lt;i&gt;</Begin>
+ <End>&lt;/i&gt;</End>
+ </Tag>
+
+ <Tag _name="Java applet">
+ <Begin>&lt;applet&gt;</Begin>
+ <End>&lt;/applet&gt;</End>
+ </Tag>
+
+ <Tag _name="Label">
+ <Begin>label=</Begin>
+ </Tag>
+
+ <Tag _name="Language code">
+ <Begin>hreflang=</Begin>
+ </Tag>
+
+ <Tag _name="Language code">
+ <Begin>lang=</Begin>
+ </Tag>
+
+ <Tag _name="Large text style">
+ <Begin>&lt;big&gt;</Begin>
+ <End>&lt;/big&gt;</End>
+ </Tag>
+
+ <Tag _name="Layer">
+ <Begin>&lt;layer&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Link color">
+ <Begin>link=</Begin>
+ </Tag>
+
+ <Tag _name="List item">
+ <Begin>&lt;li&gt;</Begin>
+ <End>&lt;/li&gt;</End>
+ </Tag>
+
+ <Tag _name="List of MIME types for file upload">
+ <Begin>accept=</Begin>
+ </Tag>
+
+ <Tag _name="List of supported character sets">
+ <Begin>accept-charset=</Begin>
+ </Tag>
+
+ <Tag _name="Listing">
+ <Begin>&lt;listing&gt;</Begin>
+ <End>&lt;/listing&gt;</End>
+ </Tag>
+
+ <Tag _name="Local change to font">
+ <Begin>&lt;font&gt;</Begin>
+ <End>&lt;/font&gt;</End>
+ </Tag>
+
+ <Tag _name="Long description link">
+ <Begin>longdesc=</Begin>
+ </Tag>
+
+ <Tag _name="Long quotation">
+ <Begin>&lt;blockquote&gt;</Begin>
+ <End>&lt;/blockquote&gt;</End>
+ </Tag>
+
+ <Tag _name="Mail link">
+ <Begin>mailto=</Begin>
+ </Tag>
+
+ <Tag _name="Margin pixel height">
+ <Begin>marginheight=</Begin>
+ </Tag>
+
+ <Tag _name="Margin pixel width">
+ <Begin>marginwidth=</Begin>
+ </Tag>
+
+ <Tag _name="Marquee">
+ <Begin>&lt;marquee&gt;</Begin>
+ <End>&lt;/marquee&gt;</End>
+ </Tag>
+
+ <Tag _name="Maximum length of text field">
+ <Begin>maxlength=</Begin>
+ </Tag>
+
+ <Tag _name="Output media">
+ <Begin>media=</Begin>
+ </Tag>
+
+ <Tag _name="Media-independent link">
+ <Begin>&lt;link rel="&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Menu list">
+ <Begin>&lt;menu&gt;</Begin>
+ <End>&lt;/menu&gt;</End>
+ </Tag>
+
+ <Tag _name="Multicolumn">
+ <Begin>&lt;multicol&gt;</Begin>
+ <End>&lt;/multicol&gt;</End>
+ </Tag>
+
+ <Tag _name="Multi-line text field">
+ <Begin>&lt;textarea&gt;</Begin>
+ <End>&lt;/textarea&gt;</End>
+ </Tag>
+
+ <Tag _name="Multiple">
+ <Begin>multiple</Begin>
+ </Tag>
+
+ <Tag _name="Name">
+ <Begin>name=</Begin>
+ </Tag>
+
+ <Tag _name="Named property value">
+ <Begin>&lt;param&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Next ID">
+ <Begin>&lt;nextid&gt;</Begin>
+ </Tag>
+
+ <Tag _name="No embedded objects">
+ <Begin>&lt;noembed&gt;</Begin>
+ </Tag>
+
+ <Tag _name="No frames">
+ <Begin>&lt;noframes&gt;</Begin>
+ <End>&lt;/noframes&gt;</End>
+ </Tag>
+
+ <Tag _name="No layers">
+ <Begin>&lt;nolayer&gt;</Begin>
+ <End>&lt;/nolayer&gt;</End>
+ </Tag>
+
+ <Tag _name="No line break">
+ <Begin>&lt;nobr&gt;</Begin>
+ <End>&lt;/nobr&gt;</End>
+ </Tag>
+
+ <Tag _name="No resize">
+ <Begin>noresize</Begin>
+ </Tag>
+
+ <Tag _name="No script">
+ <Begin>&lt;noscript&gt;</Begin>
+ <End>&lt;/noscript&gt;</End>
+ </Tag>
+
+ <Tag _name="No shade">
+ <Begin>noshade</Begin>
+ </Tag>
+
+ <Tag _name="No URI">
+ <Begin>nohref</Begin>
+ </Tag>
+
+ <Tag _name="No word wrap">
+ <Begin>nowrap</Begin>
+ </Tag>
+
+ <Tag _name="Note">
+ <Begin>&lt;note&gt;</Begin>
+ <End>&lt;/note&gt;</End>
+ </Tag>
+
+ <Tag _name="Object applet file">
+ <Begin>object=</Begin>
+ </Tag>
+
+ <Tag _name="Object data reference">
+ <Begin>data=</Begin>
+ </Tag>
+
+ <Tag _name="Offset for alignment character">
+ <Begin>charoff=</Begin>
+ </Tag>
+
+ <Tag _name="OnBlur event">
+ <Begin>onblur=</Begin>
+ </Tag>
+
+ <Tag _name="OnChange event">
+ <Begin>onchange=</Begin>
+ </Tag>
+
+ <Tag _name="OnClick event">
+ <Begin>onclick=</Begin>
+ </Tag>
+
+ <Tag _name="OnDblClick event">
+ <Begin>ondbclick=</Begin>
+ </Tag>
+
+ <Tag _name="OnFocus event">
+ <Begin>onfocus=</Begin>
+ </Tag>
+
+ <Tag _name="OnKeyDown event">
+ <Begin>onkeydown=</Begin>
+ </Tag>
+
+ <Tag _name="OnKeyPress event">
+ <Begin>onkeypress=</Begin>
+ </Tag>
+
+ <Tag _name="OnKeyUp event">
+ <Begin>onkeyup=</Begin>
+ </Tag>
+
+ <Tag _name="OnLoad event">
+ <Begin>onload=</Begin>
+ </Tag>
+
+ <Tag _name="OnMouseDown event">
+ <Begin>onmousedown=</Begin>
+ </Tag>
+
+ <Tag _name="OnMouseMove event">
+ <Begin>onmousemove=</Begin>
+ </Tag>
+
+ <Tag _name="OnMouseOut event">
+ <Begin>onmouseout=</Begin>
+ </Tag>
+
+ <Tag _name="OnMouseOver event">
+ <Begin>onmouseover=</Begin>
+ </Tag>
+
+ <Tag _name="OnMouseUp event">
+ <Begin>onmouseup=</Begin>
+ </Tag>
+
+ <Tag _name="OnReset event">
+ <Begin>onreset=</Begin>
+ </Tag>
+
+ <Tag _name="OnSelect event">
+ <Begin>onselect=</Begin>
+ </Tag>
+
+ <Tag _name="OnSubmit event">
+ <Begin>onsubmit=</Begin>
+ </Tag>
+
+ <Tag _name="OnUnload event">
+ <Begin>onunload=</Begin>
+ </Tag>
+
+ <Tag _name="Option group">
+ <Begin>&lt;optgroup&gt;</Begin>
+ <End>&lt;/optgroup&gt;</End>
+ </Tag>
+
+ <Tag _name="Option selector">
+ <Begin>&lt;select&gt;</Begin>
+ <End>&lt;/select&gt;</End>
+ </Tag>
+
+ <Tag _name="Ordered list">
+ <Begin>&lt;ol&gt;</Begin>
+ <End>&lt;/ol&gt;</End>
+ </Tag>
+
+ <Tag _name="Paragraph class">
+ <Begin>&lt;p class=&gt;</Begin>
+ <End>&lt;/p&gt;</End>
+ </Tag>
+
+ <Tag _name="Paragraph style">
+ <Begin>&lt;p style=&gt;</Begin>
+ <End>&lt;/p&gt;</End>
+ </Tag>
+
+ <Tag _name="Paragraph">
+ <Begin>&lt;p&gt;</Begin>
+ <End>&lt;/p&gt;</End>
+ </Tag>
+
+ <Tag _name="Preformatted listing">
+ <Begin>&lt;xmp&gt;</Begin>
+ <End>&lt;/xmp&gt;</End>
+ </Tag>
+
+ <Tag _name="Preformatted text">
+ <Begin>&lt;pre&gt;</Begin>
+ <End>&lt;/pre&gt;</End>
+ </Tag>
+
+ <Tag _name="Profile metainfo dictionary">
+ <Begin>profile=</Begin>
+ </Tag>
+
+ <Tag _name="Prompt message">
+ <Begin>prompt=</Begin>
+ </Tag>
+
+ <Tag _name="Push button">
+ <Begin>&lt;button&gt;</Begin>
+ <End>&lt;/button&gt;</End>
+ </Tag>
+
+ <Tag _name="Quote">
+ <Begin>&lt;quote&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Range">
+ <Begin>&lt;range&gt;</Begin>
+ </Tag>
+
+ <Tag _name="ReadOnly text and password">
+ <Begin>readonly</Begin>
+ </Tag>
+
+ <Tag _name="Reduced spacing">
+ <Begin>compact</Begin>
+ </Tag>
+
+ <Tag _name="Reverse link">
+ <Begin>rev=</Begin>
+ </Tag>
+
+ <Tag _name="Root">
+ <Begin>&lt;root&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Rows">
+ <Begin>rows=</Begin>
+ </Tag>
+
+ <Tag _name="Rulings between rows and columns">
+ <Begin>rules=</Begin>
+ </Tag>
+
+ <Tag _name="Sample program output, scripts">
+ <Begin>&lt;samp&gt;</Begin>
+ <End>&lt;/samp&gt;</End>
+ </Tag>
+
+ <Tag _name="Scope covered by header cells">
+ <Begin>scope=</Begin>
+ </Tag>
+
+ <Tag _name="Script language name">
+ <Begin>language=</Begin>
+ </Tag>
+
+ <Tag _name="Script statements">
+ <Begin>&lt;script&gt;</Begin>
+ <End>&lt;/script&gt;</End>
+ </Tag>
+
+ <Tag _name="Scrollbar">
+ <Begin>scrolling=</Begin>
+ </Tag>
+
+ <Tag _name="Selectable option">
+ <Begin>&lt;option&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Selected">
+ <Begin>selected</Begin>
+ </Tag>
+
+ <Tag _name="Server-side image map">
+ <Begin>ismap</Begin>
+ </Tag>
+
+ <Tag _name="Shape">
+ <Begin>shape=</Begin>
+ </Tag>
+
+ <Tag _name="Short inline quotation">
+ <Begin>&lt;q&gt;</Begin>
+ <End>&lt;/q&gt;</End>
+ </Tag>
+
+ <Tag _name="Single line prompt">
+ <Begin>&lt;isindex&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Size">
+ <Begin>size=</Begin>
+ </Tag>
+
+ <Tag _name="Small text style">
+ <Begin>&lt;small&gt;</Begin>
+ <End>&lt;/small&gt;</End>
+ </Tag>
+
+ <Tag _name="Soft line break">
+ <Begin>&lt;wbr&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Sound">
+ <Begin>&lt;sound&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Source">
+ <Begin>src=</Begin>
+ </Tag>
+
+ <Tag _name="Space-separated archive list">
+ <Begin>archive=</Begin>
+ </Tag>
+
+ <Tag _name="Spacer">
+ <Begin>&lt;spacer&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Spacing between cells">
+ <Begin>cellspacing=</Begin>
+ </Tag>
+
+ <Tag _name="Spacing within cells">
+ <Begin>cellpadding=</Begin>
+ </Tag>
+
+ <Tag _name="Span">
+ <Begin>span=</Begin>
+ </Tag>
+
+ <Tag _name="Square root">
+ <Begin>&lt;sqrt&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Standby load message">
+ <Begin>standby=</Begin>
+ </Tag>
+
+ <Tag _name="Starting sequence number">
+ <Begin>start</Begin>
+ </Tag>
+
+ <Tag _name="Strike-through text style">
+ <Begin>&lt;s&gt;</Begin>
+ <End>&lt;/s&gt;</End>
+ </Tag>
+
+ <Tag _name="Strike-through text">
+ <Begin>&lt;strike&gt;</Begin>
+ <End>&lt;/strike&gt;</End>
+ </Tag>
+
+ <Tag _name="Strong emphasis">
+ <Begin>&lt;strong&gt;</Begin>
+ <End>&lt;/strong&gt;</End>
+ </Tag>
+
+ <Tag _name="Style info">
+ <Begin>&lt;style&gt;</Begin>
+ <End>&lt;/style&gt;</End>
+ </Tag>
+
+ <Tag _name="Style info">
+ <Begin>style=</Begin>
+ </Tag>
+
+ <Tag _name="Subscript">
+ <Begin>&lt;sub&gt;</Begin>
+ <End>&lt;/sub&gt;</End>
+ </Tag>
+
+ <Tag _name="Superscript">
+ <Begin>&lt;sup&gt;</Begin>
+ <End>&lt;/sup&gt;</End>
+ </Tag>
+
+ <Tag _name="Tab order position">
+ <Begin>tabindex=</Begin>
+ </Tag>
+
+ <Tag _name="Table body">
+ <Begin>&lt;tbody&gt;</Begin>
+ <End>&lt;/tbody&gt;</End>
+ </Tag>
+
+ <Tag _name="Table caption">
+ <Begin>&lt;caption&gt;</Begin>
+ <End>&lt;/caption&gt;</End>
+ </Tag>
+
+ <Tag _name="Table column group properties">
+ <Begin>&lt;colgroup&gt;</Begin>
+ <End>&lt;/colgroup&gt;</End>
+ </Tag>
+
+ <Tag _name="Table column properties">
+ <Begin>&lt;col&gt;</Begin>
+ <End>&lt;/col&gt;</End>
+ </Tag>
+
+ <Tag _name="Table data cell">
+ <Begin>&lt;td&gt;</Begin>
+ <End>&lt;/td&gt;</End>
+ </Tag>
+
+ <Tag _name="Table footer">
+ <Begin>&lt;tfoot&gt;</Begin>
+ <End>&lt;/tfoot&gt;</End>
+ </Tag>
+
+ <Tag _name="Table header cell">
+ <Begin>&lt;th&gt;</Begin>
+ <End>&lt;/th&gt;</End>
+ </Tag>
+
+ <Tag _name="Table header">
+ <Begin>&lt;thead&gt;</Begin>
+ <End>&lt;/thead&gt;</End>
+ </Tag>
+
+ <Tag _name="Table row">
+ <Begin>&lt;tr&gt;</Begin>
+ <End>&lt;/tr&gt;</End>
+ </Tag>
+
+ <Tag _name="Table summary">
+ <Begin>summary=</Begin>
+ </Tag>
+
+ <Tag _name="Table">
+ <Begin>&lt;table&gt;</Begin>
+ <End>&lt;/table&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Blank">
+ <Begin>&lt;a target="_blank"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Parent">
+ <Begin>&lt;a target="_parent"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Self">
+ <Begin>&lt;a target="_self"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Target - Top">
+ <Begin>&lt;a target="_top"&gt;</Begin>
+ <End>&lt;/a&gt;</End>
+ </Tag>
+
+ <Tag _name="Teletype or monospace text style">
+ <Begin>&lt;tt&gt;</Begin>
+ <End>&lt;/tt&gt;</End>
+ </Tag>
+
+ <Tag _name="Text color">
+ <Begin>color=</Begin>
+ </Tag>
+
+ <Tag _name="Text color">
+ <Begin>text=</Begin>
+ </Tag>
+
+ <Tag _name="Text entered by user">
+ <Begin>&lt;kbd&gt;</Begin>
+ <End>&lt;/kbd&gt;</End>
+ </Tag>
+
+ <Tag _name="Text">
+ <Begin>&lt;text&gt;</Begin>
+ </Tag>
+
+ <Tag _name="Title">
+ <Begin>title=</Begin>
+ </Tag>
+
+ <Tag _name="Top margin in pixels">
+ <Begin>topmargin</Begin>
+ </Tag>
+
+ <Tag _name="Underlined text style">
+ <Begin>&lt;u&gt;</Begin>
+ <End>&lt;/u&gt;</End>
+ </Tag>
+
+ <Tag _name="Unordered list">
+ <Begin>&lt;ul&gt;</Begin>
+ <End>&lt;/ul&gt;</End>
+ </Tag>
+
+ <Tag _name="URL">
+ <Begin>url=</Begin>
+ </Tag>
+
+ <Tag _name="Use image map">
+ <Begin>usemap=</Begin>
+ </Tag>
+
+ <Tag _name="Value interpretation">
+ <Begin>valuetype=</Begin>
+ </Tag>
+
+ <Tag _name="Value">
+ <Begin>value=</Begin>
+ </Tag>
+
+ <Tag _name="Variable or program argument">
+ <Begin>&lt;var&gt;</Begin>
+ <End>&lt;/var&gt;</End>
+ </Tag>
+
+ <Tag _name="Vertical cell alignment">
+ <Begin>valign=</Begin>
+ </Tag>
+
+ <Tag _name="Vertical space">
+ <Begin>vspace=</Begin>
+ </Tag>
+
+ <Tag _name="Visited link color">
+ <Begin>vlink=</Begin>
+ </Tag>
+
+ <Tag _name="Width">
+ <Begin>width=</Begin>
+ </Tag>
+
+</TagGroup>
+
+<TagGroup _name="HTML - Special Characters" sort="false">
+
+ <Tag _name="Non-breaking space">
+ <Begin>&amp;nbsp;</Begin>
+ </Tag>
+
+ <Tag name="Soft hyphen­">
+ <Begin>&amp;shy;</Begin>
+ </Tag>
+
+ <Tag name="&quot;">
+ <Begin>&amp;quot;</Begin>
+ </Tag>
+
+ <Tag name="&amp;">
+ <Begin>&amp;amp;</Begin>
+ </Tag>
+
+ <Tag name="¡">
+ <Begin>&amp;iexcl;</Begin>
+ </Tag>
+
+ <Tag name="¦">
+ <Begin>&amp;brvbar;</Begin>
+ </Tag>
+
+ <Tag name="¨">
+ <Begin>&amp;uml;</Begin>
+ </Tag>
+
+ <Tag name="¯">
+ <Begin>&amp;macr;</Begin>
+ </Tag>
+
+ <Tag name="´">
+ <Begin>&amp;acute;</Begin>
+ </Tag>
+
+ <Tag name="¸">
+ <Begin>&amp;cedil;</Begin>
+ </Tag>
+
+ <Tag name="&lt;">
+ <Begin>&amp;lt;</Begin>
+ </Tag>
+
+ <Tag name="&gt;">
+ <Begin>&amp;gt;</Begin>
+ </Tag>
+
+ <Tag name="±">
+ <Begin>&amp;plusmn;</Begin>
+ </Tag>
+
+ <Tag name="«">
+ <Begin>&amp;laquo;</Begin>
+ </Tag>
+
+ <Tag name="»">
+ <Begin>&amp;raquo;</Begin>
+ </Tag>
+
+ <Tag name="×">
+ <Begin>&amp;times;</Begin>
+ </Tag>
+
+ <Tag name="÷">
+ <Begin>&amp;divide;</Begin>
+ </Tag>
+
+ <Tag name="¢">
+ <Begin>&amp;cent;</Begin>
+ </Tag>
+
+ <Tag name="£">
+ <Begin>&amp;pound;</Begin>
+ </Tag>
+
+ <Tag name="€">
+ <Begin>&amp;euro;</Begin>
+ </Tag>
+
+ <Tag name="¤">
+ <Begin>&amp;curren;</Begin>
+ </Tag>
+
+ <Tag name="¥">
+ <Begin>&amp;yen;</Begin>
+ </Tag>
+
+ <Tag name="§">
+ <Begin>&amp;sect;</Begin>
+ </Tag>
+
+ <Tag name="©">
+ <Begin>&amp;copy;</Begin>
+ </Tag>
+
+ <Tag name="¬">
+ <Begin>&amp;not;</Begin>
+ </Tag>
+
+ <Tag name="®">
+ <Begin>&amp;reg;</Begin>
+ </Tag>
+
+ <Tag name="™">
+ <Begin>&amp;trade;</Begin>
+ </Tag>
+
+ <Tag name="°">
+ <Begin>&amp;deg;</Begin>
+ </Tag>
+
+ <Tag name="µ">
+ <Begin>&amp;micro;</Begin>
+ </Tag>
+
+ <Tag name="¶">
+ <Begin>&amp;para;</Begin>
+ </Tag>
+
+ <Tag name="·">
+ <Begin>&amp;middot;</Begin>
+ </Tag>
+
+ <Tag name="¼">
+ <Begin>&amp;frac14;</Begin>
+ </Tag>
+
+ <Tag name="½">
+ <Begin>&amp;frac12;</Begin>
+ </Tag>
+
+ <Tag name="¾">
+ <Begin>&amp;frac34;</Begin>
+ </Tag>
+
+ <Tag name="¹">
+ <Begin>&amp;sup1;</Begin>
+ </Tag>
+
+ <Tag name="²">
+ <Begin>&amp;sup2;</Begin>
+ </Tag>
+
+ <Tag name="³">
+ <Begin>&amp;sup3;</Begin>
+ </Tag>
+
+ <Tag name="á">
+ <Begin>&amp;aacute;</Begin>
+ </Tag>
+
+ <Tag name="Á">
+ <Begin>&amp;Aacute;</Begin>
+ </Tag>
+
+ <Tag name="â">
+ <Begin>&amp;acirc;</Begin>
+ </Tag>
+
+ <Tag name="Â">
+ <Begin>&amp;Acirc;</Begin>
+ </Tag>
+
+ <Tag name="à">
+ <Begin>&amp;agrave;</Begin>
+ </Tag>
+
+ <Tag name="À">
+ <Begin>&amp;Agrave;</Begin>
+ </Tag>
+
+ <Tag name="å">
+ <Begin>&amp;aring;</Begin>
+ </Tag>
+
+ <Tag name="Å">
+ <Begin>&amp;Aring;</Begin>
+ </Tag>
+
+ <Tag name="ã">
+ <Begin>&amp;atilde;</Begin>
+ </Tag>
+
+ <Tag name="Ã">
+ <Begin>&amp;Atilde;</Begin>
+ </Tag>
+
+ <Tag name="ä">
+ <Begin>&amp;auml;</Begin>
+ </Tag>
+
+ <Tag name="Ä">
+ <Begin>&amp;Auml;</Begin>
+ </Tag>
+
+ <Tag name="ª">
+ <Begin>&amp;ordf;</Begin>
+ </Tag>
+
+ <Tag name="æ">
+ <Begin>&amp;aelig;</Begin>
+ </Tag>
+
+ <Tag name="Æ">
+ <Begin>&amp;AElig;</Begin>
+ </Tag>
+
+ <Tag name="ç">
+ <Begin>&amp;ccedil;</Begin>
+ </Tag>
+
+ <Tag name="Ç">
+ <Begin>&amp;Ccedil;</Begin>
+ </Tag>
+
+ <Tag name="Ð">
+ <Begin>&amp;ETH;</Begin>
+ </Tag>
+
+ <Tag name="ð">
+ <Begin>&amp;eth;</Begin>
+ </Tag>
+
+ <Tag name="é">
+ <Begin>&amp;eacute;</Begin>
+ </Tag>
+
+ <Tag name="É">
+ <Begin>&amp;Eacute;</Begin>
+ </Tag>
+
+ <Tag name="ê">
+ <Begin>&amp;ecirc;</Begin>
+ </Tag>
+
+ <Tag name="Ê">
+ <Begin>&amp;Ecirc;</Begin>
+ </Tag>
+
+ <Tag name="è">
+ <Begin>&amp;egrave;</Begin>
+ </Tag>
+
+ <Tag name="È">
+ <Begin>&amp;Egrave;</Begin>
+ </Tag>
+
+ <Tag name="ë">
+ <Begin>&amp;euml;</Begin>
+ </Tag>
+
+ <Tag name="Ë">
+ <Begin>&amp;Euml;</Begin>
+ </Tag>
+
+ <Tag name="í">
+ <Begin>&amp;iacute;</Begin>
+ </Tag>
+
+ <Tag name="Í">
+ <Begin>&amp;Iacute;</Begin>
+ </Tag>
+
+ <Tag name="î">
+ <Begin>&amp;icirc;</Begin>
+ </Tag>
+
+ <Tag name="Î">
+ <Begin>&amp;Icirc;</Begin>
+ </Tag>
+
+ <Tag name="ì">
+ <Begin>&amp;igrave;</Begin>
+ </Tag>
+
+ <Tag name="Ì">
+ <Begin>&amp;Igrave;</Begin>
+ </Tag>
+
+ <Tag name="ï">
+ <Begin>&amp;iuml;</Begin>
+ </Tag>
+
+ <Tag name="Ï">
+ <Begin>&amp;Iuml;</Begin>
+ </Tag>
+
+ <Tag name="ñ">
+ <Begin>&amp;ntilde;</Begin>
+ </Tag>
+
+ <Tag name="Ñ">
+ <Begin>&amp;Ntilde;</Begin>
+ </Tag>
+
+ <Tag name="ó">
+ <Begin>&amp;oacute;</Begin>
+ </Tag>
+
+ <Tag name="Ó">
+ <Begin>&amp;Oacute;</Begin>
+ </Tag>
+
+ <Tag name="ô">
+ <Begin>&amp;ocirc;</Begin>
+ </Tag>
+
+ <Tag name="Ô">
+ <Begin>&amp;Ocirc;</Begin>
+ </Tag>
+
+ <Tag name="ò">
+ <Begin>&amp;ograve;</Begin>
+ </Tag>
+
+ <Tag name="Ò">
+ <Begin>&amp;Ograve;</Begin>
+ </Tag>
+
+ <Tag name="º">
+ <Begin>&amp;ordm;</Begin>
+ </Tag>
+
+ <Tag name="ø">
+ <Begin>&amp;oslash;</Begin>
+ </Tag>
+
+ <Tag name="Ø">
+ <Begin>&amp;Oslash;</Begin>
+ </Tag>
+
+ <Tag name="õ">
+ <Begin>&amp;otilde;</Begin>
+ </Tag>
+
+ <Tag name="Õ">
+ <Begin>&amp;Otilde;</Begin>
+ </Tag>
+
+ <Tag name="ö">
+ <Begin>&amp;ouml;</Begin>
+ </Tag>
+
+ <Tag name="Ö">
+ <Begin>&amp;Ouml;</Begin>
+ </Tag>
+
+ <Tag name="ß">
+ <Begin>&amp;szlig;</Begin>
+ </Tag>
+
+ <Tag name="þ">
+ <Begin>&amp;thorn;</Begin>
+ </Tag>
+
+ <Tag name="Þ">
+ <Begin>&amp;THORN;</Begin>
+ </Tag>
+
+ <Tag name="ú">
+ <Begin>&amp;uacute;</Begin>
+ </Tag>
+
+ <Tag name="Ú">
+ <Begin>&amp;Uacute;</Begin>
+ </Tag>
+
+ <Tag name="û">
+ <Begin>&amp;ucirc;</Begin>
+ </Tag>
+
+ <Tag name="Û">
+ <Begin>&amp;Ucirc;</Begin>
+ </Tag>
+
+ <Tag name="ù">
+ <Begin>&amp;ugrave;</Begin>
+ </Tag>
+
+ <Tag name="Ù">
+ <Begin>&amp;Ugrave;</Begin>
+ </Tag>
+
+ <Tag name="ü">
+ <Begin>&amp;uuml;</Begin>
+ </Tag>
+
+ <Tag name="Ü">
+ <Begin>&amp;Uuml;</Begin>
+ </Tag>
+
+ <Tag name="ý">
+ <Begin>&amp;yacute;</Begin>
+ </Tag>
+
+ <Tag name="Ý">
+ <Begin>&amp;Yacute;</Begin>
+ </Tag>
+
+ <Tag name="ÿ">
+ <Begin>&amp;yuml;</Begin>
+ </Tag>
+
+</TagGroup>
+</TagList>
diff --git a/plugins/taglist/Latex.tags.xml.in b/plugins/taglist/Latex.tags.xml.in
new file mode 100755
index 00000000..5ac71c0d
--- /dev/null
+++ b/plugins/taglist/Latex.tags.xml.in
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TagList xmlns="http://gedit.sourceforge.net/some-location">
+<TagGroup _name="Latex - Tags" sort="true">
+ <Tag _name="Bibliography (cite)">
+ <Begin>\cite{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Bibliography (item)">
+ <Begin>\bibitem{ </Begin>
+ <End> }{} &#10;</End>
+ </Tag>
+
+ <Tag _name="Bibliography (shortcite)">
+ <Begin>\shortcite{ </Begin>
+ <End> }</End>
+ </Tag>
+
+ <Tag _name="Bibliography (thebibliography)">
+ <Begin>\begin{thebibliography}{99}&#10;</Begin>
+ <End>&#10;\end{thebibliography}</End>
+ </Tag>
+
+ <Tag _name="Brackets ()">
+ <Begin>\left( </Begin>
+ <End> \right) </End>
+ </Tag>
+
+ <Tag _name="Brackets []">
+ <Begin>\left[ </Begin>
+ <End> \right] </End>
+ </Tag>
+
+ <Tag _name="Brackets {}">
+ <Begin>\left\{ </Begin>
+ <End> \right\} </End>
+ </Tag>
+
+ <Tag _name="Brackets &lt;&gt;">
+ <Begin>\left\langle </Begin>
+ <End> \right\rangle </End>
+ </Tag>
+
+ <Tag _name="File input">
+ <Begin>\input{ </Begin>
+ <End> }&#10;</End>
+ </Tag>
+
+ <Tag _name="Function cosine">
+ <Begin>\cos{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Function e^">
+ <Begin>e^{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Function exp">
+ <Begin>\exp{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Function log">
+ <Begin>\log{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Function log10">
+ <Begin>\log_{10}{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Function sine">
+ <Begin>\sin{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Greek alpha">
+ <Begin>\alpha </Begin>
+ </Tag>
+
+ <Tag _name="Greek beta">
+ <Begin>\beta </Begin>
+ </Tag>
+
+ <Tag _name="Greek epsilon">
+ <Begin>\varepsilon </Begin>
+ </Tag>
+
+ <Tag _name="Greek gamma">
+ <Begin>\gamma </Begin>
+ </Tag>
+
+ <Tag _name="Greek lambda">
+ <Begin>\lambda </Begin>
+ </Tag>
+
+ <Tag _name="Greek rho">
+ <Begin>\rho </Begin>
+ </Tag>
+
+ <Tag _name="Greek tau">
+ <Begin>\tau </Begin>
+ </Tag>
+
+ <Tag _name="Header 0 (chapter)">
+ <Begin>\chapter{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 0 (chapter*)">
+ <Begin>\chapter*{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 1 (section)">
+ <Begin>\section{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 1 (section*)">
+ <Begin>\section*{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 2 (subsection)">
+ <Begin>\subsection{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 2 (subsection*)">
+ <Begin>\subsection*{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 3 (subsubsection)">
+ <Begin>\subsubsection{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 3 (subsubsection*)">
+ <Begin>\subsubsection*{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header 4 (paragraph)">
+ <Begin>\paragraph{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Header appendix">
+ <Begin>\appendix&#10; </Begin>
+ </Tag>
+
+ <Tag _name="List description">
+ <Begin>\begin{description}&#10;</Begin>
+ <End>&#10;\end{description}&#10;</End>
+ </Tag>
+
+ <Tag _name="List enumerate">
+ <Begin>\begin{enumerate}&#10;</Begin>
+ <End>&#10;\end{enumerate}&#10;</End>
+ </Tag>
+
+ <Tag _name="List itemize">
+ <Begin>\begin{itemize}&#10;</Begin>
+ <End>&#10;\end{itemize}&#10;</End>
+ </Tag>
+
+ <Tag _name="Item with label">
+ <Begin>\item[ </Begin>
+ <End> ]</End>
+ </Tag>
+
+ <Tag _name="Item">
+ <Begin>\item </Begin>
+ </Tag>
+
+ <Tag _name="Maths (display)">
+ <Begin>&#10;$$&#10;</Begin>
+ <End>&#10;$$&#10;</End>
+ </Tag>
+
+ <Tag _name="Maths (inline)">
+ <Begin>$ </Begin>
+ <End> $ </End>
+ </Tag>
+
+ <Tag _name="Operator fraction">
+ <Begin>\frac{ </Begin>
+ <End> }{} </End>
+ </Tag>
+
+ <Tag _name="Operator integral (display)">
+ <Begin>\int\limits_{ </Begin>
+ <End> }^{} </End>
+ </Tag>
+
+ <Tag _name="Operator integral (inline)">
+ <Begin>\int_{ </Begin>
+ <End> }^{} </End>
+ </Tag>
+
+ <Tag _name="Operator sum (display)">
+ <Begin>\sum\limits_{ </Begin>
+ <End> }^{} </End>
+ </Tag>
+
+ <Tag _name="Operator sum (inline)">
+ <Begin>\sum_{ </Begin>
+ <End> }^{} </End>
+ </Tag>
+
+ <Tag _name="Reference label">
+ <Begin>\label{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Reference ref">
+ <Begin>{\protect\ref{ </Begin>
+ <End> }} </End>
+ </Tag>
+
+ <Tag _name="Symbol &lt;&lt;">
+ <Begin>\ll </Begin>
+ </Tag>
+
+ <Tag _name="Symbol &lt;=">
+ <Begin>\le </Begin>
+ </Tag>
+
+ <Tag _name="Symbol &gt;=">
+ <Begin>\ge </Begin>
+ </Tag>
+
+ <Tag _name="Symbol &gt;&gt;">
+ <Begin>\gg </Begin>
+ </Tag>
+
+ <Tag _name="Symbol and">
+ <Begin>\mathrm{and} </Begin>
+ </Tag>
+
+ <Tag _name="Symbol const">
+ <Begin>\mathrm{const} </Begin>
+ </Tag>
+
+ <Tag _name="Symbol d2-by-dt2-partial">
+ <Begin>\frac{\partial{ </Begin>
+ <End> }^2}{\partial t^2} </End>
+ </Tag>
+
+ <Tag _name="Symbol dagger">
+ <Begin>\dagger </Begin>
+ </Tag>
+
+ <Tag _name="Symbol d-by-dt">
+ <Begin>\frac{{\mathrm{d}} </Begin>
+ <End> }{{\mathrm{d}}t} </End>
+ </Tag>
+
+ <Tag _name="Symbol d-by-dt-partial">
+ <Begin>\frac{\partial </Begin>
+ <End> }{\partial t} </End>
+ </Tag>
+
+ <Tag _name="Symbol equiv">
+ <Begin>\equiv </Begin>
+ </Tag>
+
+ <Tag _name="Symbol en-dash --">
+ <Begin>-- </Begin>
+ </Tag>
+
+ <Tag _name="Symbol em-dash ---">
+ <Begin>--- </Begin>
+ </Tag>
+
+ <Tag _name="Symbol infinity">
+ <Begin>\infty </Begin>
+ </Tag>
+
+ <Tag _name="Symbol mathspace ,">
+ <Begin>\quad\mathrm{,} </Begin>
+ </Tag>
+
+ <Tag _name="Symbol mathspace .">
+ <Begin>\quad\mathrm{.} </Begin>
+ </Tag>
+
+ <Tag _name="Symbol mathspace _">
+ <Begin>\quad </Begin>
+ </Tag>
+
+ <Tag _name="Symbol mathspace __">
+ <Begin>\qquad </Begin>
+ </Tag>
+
+ <Tag _name="Symbol simeq">
+ <Begin>\simeq </Begin>
+ </Tag>
+
+ <Tag _name="Symbol star">
+ <Begin>\star </Begin>
+ </Tag>
+
+ <Tag _name="Typeface bold">
+ <Begin>\textbf{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Typeface type">
+ <Begin>\texttt{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Typeface italic">
+ <Begin>\textit{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Typeface slanted">
+ <Begin>\textsl{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Emphasis">
+ <Begin>\emph{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Unbreakable text">
+ <Begin>\mbox{ </Begin>
+ <End> } </End>
+ </Tag>
+
+ <Tag _name="Footnote">
+ <Begin>\footnote{ </Begin>
+ <End> } </End>
+ </Tag>
+
+</TagGroup>
+</TagList>
diff --git a/plugins/taglist/Makefile.am b/plugins/taglist/Makefile.am
new file mode 100755
index 00000000..b04f4584
--- /dev/null
+++ b/plugins/taglist/Makefile.am
@@ -0,0 +1,60 @@
+# Tag list plugin
+plugindir = $(GEDIT_PLUGINS_LIBS_DIR)
+
+taglistdir = $(GEDIT_PLUGINS_DATA_DIR)/taglist
+
+taglist_in_files = \
+ HTML.tags.xml.in \
+ Latex.tags.xml.in \
+ XSLT.tags.xml.in \
+ XUL.tags.xml.in
+
+taglist_DATA = $(taglist_in_files:.tags.xml.in=.tags.gz)
+
+INCLUDES = \
+ -I$(top_srcdir) \
+ $(GEDIT_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+plugin_LTLIBRARIES = libtaglist.la
+
+libtaglist_la_SOURCES = \
+ gedit-taglist-plugin-parser.c \
+ gedit-taglist-plugin-parser.h \
+ gedit-taglist-plugin-panel.c \
+ gedit-taglist-plugin-panel.h \
+ gedit-taglist-plugin.c \
+ gedit-taglist-plugin.h
+
+libtaglist_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
+libtaglist_la_LIBADD = $(GEDIT_LIBS)
+
+plugin_in_files = taglist.gedit-plugin.desktop.in
+
+%.gedit-plugin: %.gedit-plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po)
+ $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
+
+GZIP_ENV = -9
+
+%.tags.gz: %.tags.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po)
+ LC_ALL=C $(INTLTOOL_MERGE) $(top_srcdir)/po $< $(@:.gz=) -x -u -c $(top_builddir)/po/.intltool-merge-cache
+ GZIP=$(GZIP_ENV) gzip -f $(@:.gz=)
+
+plugin_DATA = $(plugin_in_files:.gedit-plugin.desktop.in=.gedit-plugin)
+
+EXTRA_DIST = \
+ $(taglist_in_files) $(taglist_DATA) \
+ $(plugin_in_files) $(plugin_DATA)
+
+CLEANFILES = \
+ $(taglist_DATA) \
+ $(plugin_DATA)
+DISTCLEANFILES = \
+ $(taglist_DATA) \
+ $(plugin_DATA)
+
+
+
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/taglist/XSLT.tags.xml.in b/plugins/taglist/XSLT.tags.xml.in
new file mode 100755
index 00000000..f9591a25
--- /dev/null
+++ b/plugins/taglist/XSLT.tags.xml.in
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ XSLT Tags for gedit
+ Jens Askengren <[email protected]>
+-->
+<TagList xmlns="http://gedit.sourceforge.net/some-location">
+<TagGroup _name="XSLT - Elements" sort="true">
+ <Tag name="apply-imports">
+ <Begin>&lt;xsl:apply-imports&gt;</Begin>
+ <End>&lt;/xsl:apply-imports&gt;</End>
+ </Tag>
+ <Tag name="apply-templates">
+ <Begin>&lt;xsl:apply-templates select="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="attribute">
+ <Begin>&lt;xsl:attribute name="</Begin>
+ <End>"&gt;&lt;/xsl:attribute&gt;</End>
+ </Tag>
+ <Tag name="attribute-set">
+ <Begin>&lt;xsl:attribute-set name="</Begin>
+ <End>"&gt;&lt;/xsl:attribute-set&gt;</End>
+ </Tag>
+ <Tag name="call-template">
+ <Begin>&lt;xsl:call-template name="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="choose">
+ <Begin>&lt;xsl:choose&gt;&#10;</Begin>
+ <End>&#10;&lt;/xsl:choose&gt;</End>
+ </Tag>
+ <Tag name="comment">
+ <Begin>&lt;xsl:comment&gt;</Begin>
+ <End>&lt;/xsl:comment&gt;</End>
+ </Tag>
+ <Tag name="copy">
+ <Begin>&lt;xsl:copy/&gt;</Begin>
+ </Tag>
+ <Tag name="copy-of">
+ <Begin>&lt;xsl:copy-of select="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="decimal-format">
+ <Begin>&lt;xsl:decimal-format/&gt;</Begin>
+ </Tag>
+ <Tag name="element">
+ <Begin>&lt;xsl:element name="</Begin>
+ <End>"&gt;&lt;/xsl:element&gt;</End>
+ </Tag>
+ <Tag name="fallback">
+ <Begin>&lt;xsl:fallback&gt;</Begin>
+ <End>&lt;/xsl:fallback&gt;</End>
+ </Tag>
+ <Tag name="for-each">
+ <Begin>&lt;xsl:for-each select="</Begin>
+ <End>"&gt;&#10;&lt;/xsl:for-each&gt;</End>
+ </Tag>
+ <Tag name="if">
+ <Begin>&lt;xsl:if test="</Begin>
+ <End>"&gt;&#10;&#10;&lt;/xsl:if&gt;</End>
+ </Tag>
+ <Tag name="import">
+ <Begin>&lt;xsl:import href="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="include">
+ <Begin>&lt;xsl:include href="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="key">
+ <Begin>&lt;xsl:key name="</Begin>
+ <End>" match="" use=""/&gt;</End>
+ </Tag>
+ <Tag name="message">
+ <Begin>&lt;xsl:message&gt;</Begin>
+ <End>&lt;/xsl:message&gt;</End>
+ </Tag>
+ <Tag name="namespace-alias">
+ <Begin>&lt;xsl:namespace-alias stylesheet-prefix="</Begin>
+ <End>" result-prefix=""/&gt;</End>
+ </Tag>
+ <Tag name="number">
+ <Begin>&lt;xsl:number/&gt;</Begin>
+ </Tag>
+ <Tag name="otherwise">
+ <Begin>&lt;xsl:otherwise&gt;</Begin>
+ <End>&lt;/xsl:otherwise&gt;</End>
+ </Tag>
+ <Tag name="output">
+ <Begin>&lt;xsl:output encoding="utf-8" method="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="param">
+ <Begin>&lt;xsl:param name="</Begin>
+ <End>"&gt;&lt;/xsl:param&gt;</End>
+ </Tag>
+ <Tag name="preserve-space">
+ <Begin>&lt;xsl:preserve-space elements="</Begin>
+ <End>"&gt;&lt;/xsl:preserve-space&gt;</End>
+ </Tag>
+ <Tag name="processing-instruction">
+ <Begin>&lt;xsl:processing-instruction name="</Begin>
+ <End>"&gt;&lt;/xsl:processing-instruction&gt;</End>
+ </Tag>
+ <Tag name="sort">
+ <Begin>&lt;xsl:sort/&gt;</Begin>
+ </Tag>
+ <Tag name="strip-space">
+ <Begin>&lt;xsl:strip-space elements="</Begin>
+ <End>"&gt;&lt;/xsl:strip-space&gt;</End>
+ </Tag>
+ <Tag name="stylesheet">
+ <Begin>&lt;xsl:stylesheet version="</Begin>
+ <End>"/&gt;&#10;&#10;&lt;/xsl:stylesheet&gt;</End>
+ </Tag>
+ <Tag name="template">
+ <Begin>&lt;xsl:template match="</Begin>
+ <End>"&gt;&#10;&#10;&lt;/xsl:template&gt;</End>
+ </Tag>
+ <Tag name="text">
+ <Begin>&lt;xsl:text/&gt;</Begin>
+ </Tag>
+ <Tag name="value-of">
+ <Begin>&lt;xsl:value-of select="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="variable">
+ <Begin>&lt;xsl:variable select="</Begin>
+ <End>"/&gt;</End>
+ </Tag>
+ <Tag name="when">
+ <Begin>&lt;xsl:when test="</Begin>
+ <End>&gt;&#10;&#10;&lt;/xsl:when&gt;</End>
+ </Tag>
+ <Tag name="with-param">
+ <Begin>&lt;xsl:with-param name="</Begin>
+ <End>"&gt;&lt;/xsl:with-param&gt;</End>
+ </Tag>
+</TagGroup>
+
+<TagGroup _name="XSLT - Functions" sort="true">
+ <Tag name="boolean">
+ <Begin>boolean(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="ceiling">
+ <Begin>ceiling(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="comment">
+ <Begin>comment()</Begin>
+ </Tag>
+ <Tag name="concat">
+ <Begin>concat(</Begin>
+ <End>,,)</End>
+ </Tag>
+ <Tag name="contains">
+ <Begin>contains(</Begin>
+ <End>,)</End>
+ </Tag>
+ <Tag name="count">
+ <Begin>count(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="current">
+ <Begin>current()</Begin>
+ </Tag>
+ <Tag name="document">
+ <Begin>document(</Begin>
+ <End>,)</End>
+ </Tag>
+ <Tag name="element-available">
+ <Begin>element-available(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="false">
+ <Begin>false()</Begin>
+ </Tag>
+ <Tag name="floor">
+ <Begin>floor(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="format-number">
+ <Begin>format-number(</Begin>
+ <End>,,)</End>
+ </Tag>
+ <Tag name="function-available">
+ <Begin>function-available(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="generate-id">
+ <Begin>generate-id(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="id">
+ <Begin>id(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="key">
+ <Begin>key(</Begin>
+ <End>,)</End>
+ </Tag>
+ <Tag name="lang">
+ <Begin>lang(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="last">
+ <Begin>last()</Begin>
+ </Tag>
+ <Tag name="local-name">
+ <Begin>local-name(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="name">
+ <Begin>name(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="namespace-uri">
+ <Begin>namespace-uri(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="node">
+ <Begin>node()</Begin>
+ </Tag>
+ <Tag name="normalize-space">
+ <Begin>normalize-space(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="not">
+ <Begin>not(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="number">
+ <Begin>number(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="position">
+ <Begin>position()</Begin>
+ </Tag>
+ <Tag name="processing-instruction">
+ <Begin>processing-instruction(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="round">
+ <Begin>round(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="starts-with">
+ <Begin>starts-with(</Begin>
+ <End>,)</End>
+ </Tag>
+ <Tag name="string">
+ <Begin>string(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="string-length">
+ <Begin>string-length(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="substring">
+ <Begin>substring(</Begin>
+ <End>,,)</End>
+ </Tag>
+ <Tag name="substring-after">
+ <Begin>substring-after(</Begin>
+ <End>,)</End>
+ </Tag>
+ <Tag name="substring-before">
+ <Begin>substring-before(</Begin>
+ <End>,)</End>
+ </Tag>
+ <Tag name="sum">
+ <Begin>sum(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="system-property">
+ <Begin>system-property(</Begin>
+ <End>)</End>
+ </Tag>
+ <Tag name="text">
+ <Begin>text()</Begin>
+ </Tag>
+ <Tag name="translate">
+ <Begin>translate(</Begin>
+ <End>,,)</End>
+ </Tag>
+ <Tag name="true">
+ <Begin>true()</Begin>
+ </Tag>
+ <Tag name="unparsed-entity-uri">
+ <Begin>unparsed-entity-uri(</Begin>
+ <End>)</End>
+ </Tag>
+</TagGroup>
+
+<TagGroup _name="XSLT - Axes" sort="true">
+ <Tag _name="ancestor">
+ <Begin>ancestor::</Begin>
+ </Tag>
+ <Tag _name="ancestor-or-self">
+ <Begin>ancestor-or-self::</Begin>
+ </Tag>
+ <Tag _name="attribute">
+ <Begin>@</Begin>
+ </Tag>
+ <Tag _name="child">
+ <Begin>child::</Begin>
+ </Tag>
+ <Tag _name="descendant">
+ <Begin>descendant::</Begin>
+ </Tag>
+ <Tag _name="descendant-or-self">
+ <Begin>//</Begin>
+ </Tag>
+ <Tag _name="following">
+ <Begin>following::</Begin>
+ </Tag>
+ <Tag _name="following-sibling">
+ <Begin>following-sibling::</Begin>
+ </Tag>
+ <Tag _name="namespace">
+ <Begin>namespace::</Begin>
+ </Tag>
+ <Tag _name="parent">
+ <Begin>..</Begin>
+ </Tag>
+ <Tag _name="preceding">
+ <Begin>preceding::</Begin>
+ </Tag>
+ <Tag _name="preceding-sibling">
+ <Begin>preceding-sibling::</Begin>
+ </Tag>
+ <Tag _name="self">
+ <Begin>.</Begin>
+ </Tag>
+</TagGroup>
+</TagList>
diff --git a/plugins/taglist/XUL.tags.xml.in b/plugins/taglist/XUL.tags.xml.in
new file mode 100755
index 00000000..fc4c26a7
--- /dev/null
+++ b/plugins/taglist/XUL.tags.xml.in
@@ -0,0 +1,536 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TagList xmlns="http://gedit.sourceforge.net/some-location">
+<TagGroup _name="XUL - Tags" sort="true">
+
+ <Tag name="action">
+ <Begin>&lt;action&gt;</Begin>
+ <End>&lt;/action&gt;</End>
+ </Tag>
+
+ <Tag name="arrowscrollbox">
+ <Begin>&lt;arrowscrollbox orient="vertical" flex="1"&gt;</Begin>
+ <End>&lt;/arrowscrollbox&gt;</End>
+ </Tag>
+
+ <Tag name="bbox">
+ <Begin>&lt;bbox&gt;</Begin>
+ <End>&lt;/bbox&gt;</End>
+ </Tag>
+
+ <Tag name="binding">
+ <Begin>&lt;binding id=""&gt;</Begin>
+ <End>&lt;/binding&gt;</End>
+ </Tag>
+
+ <Tag name="bindings">
+ <Begin>&lt;bindings xmlns="http://www.mozilla.org/xbl"&gt;</Begin>
+ <End>&lt;/bindings&gt;</End>
+ </Tag>
+
+ <Tag name="box">
+ <Begin>&lt;box orient=""&gt;</Begin>
+ <End>&lt;/box&gt;</End>
+ </Tag>
+
+ <Tag name="broadcaster">
+ <Begin>&lt;broadcaster id="" label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="broadcasterset">
+ <Begin>&lt;broadcasterset&gt;</Begin>
+ <End>&lt;/broadcasterset&gt;</End>
+ </Tag>
+
+ <Tag name="button">
+ <Begin>&lt;button id="" label="" oncommand=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="browser">
+ <Begin>&lt;browser src="" type="content" flex="1"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="checkbox">
+ <Begin>&lt;checkbox id="" checked="false" label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="caption">
+ <Begin>&lt;caption label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="colorpicker">
+ <Begin>&lt;colorpicker&gt;</Begin>
+ <End>&lt;/colorpicker&gt;</End>
+ </Tag>
+
+ <Tag name="column">
+ <Begin>&lt;column flex="1"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="columns">
+ <Begin>&lt;columns&gt;</Begin>
+ <End>&lt;/columns&gt;</End>
+ </Tag>
+
+ <Tag name="commandset">
+ <Begin>&lt;commandset id="" commandupdater="true" events="focus" oncommandupdate=""/&gt;</Begin>
+ <End>&lt;/commandset&gt;</End>
+ </Tag>
+
+ <Tag name="command">
+ <Begin>&lt;command id="" oncommand=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="conditions">
+ <Begin>&lt;conditions&gt;</Begin>
+ <End>&lt;/conditions&gt;</End>
+ </Tag>
+
+ <Tag name="content">
+ <Begin>&lt;content uri=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="deck">
+ <Begin>&lt;deck selectedIndex="1"&gt;</Begin>
+ <End>&lt;/deck&gt;</End>
+ </Tag>
+
+ <Tag name="description">
+ <Begin>&lt;description&gt;</Begin>
+ <End>&lt;/description&gt;</End>
+ </Tag>
+
+ <Tag name="dialog">
+ <Begin>&lt;dialog id="" title=""
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ buttons="accept,cancel"
+ ondialogaccept=""
+ ondialogcancel=""&gt;</Begin>
+ <End>&lt;/dialog&gt;</End>
+ </Tag>
+
+ <Tag name="dialogheader">
+ <Begin>&lt;dialogheader title="" description=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="editor">
+ <Begin>&lt;editor src=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="grid">
+ <Begin>&lt;grid&gt;</Begin>
+ <End>&lt;/grid&gt;</End>
+ </Tag>
+
+ <Tag name="grippy">
+ <Begin>&lt;grippy&gt;</Begin>
+ <End>&lt;/grippy&gt;</End>
+ </Tag>
+
+ <Tag name="groupbox">
+ <Begin>&lt;groupbox flex="1"&gt;&lt;caption label=""&gt;</Begin>
+ <End>&lt;/groupbox&gt;</End>
+ </Tag>
+
+ <Tag name="hbox">
+ <Begin>&lt;hbox flex="1"&gt;</Begin>
+ <End>&lt;/hbox&gt;</End>
+ </Tag>
+
+ <Tag name="iframe">
+ <Begin>&lt;iframe id="" src="" flex="1"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="image">
+ <Begin>&lt;image id="" src=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="key">
+ <Begin>&lt;key id="" modifiers="control alt" key="" onkeypress=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="keyset">
+ <Begin>&lt;keyset&gt;</Begin>
+ <End>&lt;/keyset&gt;</End>
+ </Tag>
+
+ <Tag name="label">
+ <Begin>&lt;label value="" control=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="listbox">
+ <Begin>&lt;listbox rows=""&gt;</Begin>
+ <End>&lt;/listbox&gt;</End>
+ </Tag>
+
+ <Tag name="listcell">
+ <Begin>&lt;listcell label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="listcol">
+ <Begin>&lt;listcol&gt;</Begin>
+ <End>&lt;/listcol&gt;</End>
+ </Tag>
+
+ <Tag name="listcols">
+ <Begin>&lt;listcols&gt;</Begin>
+ <End>&lt;/listcols&gt;</End>
+ </Tag>
+
+ <Tag name="listhead">
+ <Begin>&lt;listhead&gt;</Begin>
+ <End>&lt;/listhead&gt;</End>
+ </Tag>
+
+ <Tag name="listheader">
+ <Begin>&lt;listheader label="" flex="1"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="listitem">
+ <Begin>&lt;listitem id="" value="" label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="member">
+ <Begin>&lt;member container="" child=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="menu">
+ <Begin>&lt;menu accesskey=""&gt;</Begin>
+ <End>&lt;/menu&gt;</End>
+ </Tag>
+
+ <Tag name="menubar">
+ <Begin>&lt;menubar&gt;</Begin>
+ <End>&lt;/menubar&gt;</End>
+ </Tag>
+
+ <Tag name="menuitem">
+ <Begin>&lt;menuitem value="" label="" accesskey="" acceltext="" oncommand=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="menulist">
+ <Begin>&lt;menulist label=""&gt;</Begin>
+ <End>&lt;/menulist&gt;</End>
+ </Tag>
+
+ <Tag name="menupopup">
+ <Begin>&lt;menupopup id=""&gt;</Begin>
+ <End>&lt;/menupopup&gt;</End>
+ </Tag>
+
+ <Tag name="menuseparator">
+ <Begin>&lt;menuseparator/&gt;</Begin>
+ </Tag>
+
+ <Tag name="observes">
+ <Begin>&lt;observes element="" attribute="" onbroadcast=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="overlay">
+ <Begin>&lt;overlay id=""
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&gt;</Begin>
+ <End>&lt;/overlay&gt;</End>
+ </Tag>
+
+ <Tag name="page">
+ <Begin>&lt;page&gt;</Begin>
+ <End>&lt;/page&gt;</End>
+ </Tag>
+
+ <Tag name="popup">
+ <Begin>&lt;popup id="" position="after_start"&gt;</Begin>
+ <End>&lt;/popup&gt;</End>
+ </Tag>
+
+ <Tag name="popupset">
+ <Begin>&lt;popupset&gt;</Begin>
+ <End>&lt;/popupset&gt;</End>
+ </Tag>
+
+ <Tag name="preference">
+ <Begin>&lt;preference&gt;</Begin>
+ <End>&lt;/preference&gt;</End>
+ </Tag>
+
+ <Tag name="preferences">
+ <Begin>&lt;preferences&gt;</Begin>
+ <End>&lt;/preferences&gt;</End>
+ </Tag>
+
+ <Tag name="prefpane">
+ <Begin>&lt;prefpane&gt;</Begin>
+ <End>&lt;/prefpane&gt;</End>
+ </Tag>
+
+ <Tag name="prefwindow">
+ <Begin>&lt;prefwindow&gt;</Begin>
+ <End>&lt;/prefwindow&gt;</End>
+ </Tag>
+
+ <Tag name="progressmeter">
+ <Begin>&lt;progressmeter id="" mode="determined" value="50%"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="radio">
+ <Begin>&lt;radio id="" value="" name="" label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="radiogroup">
+ <Begin>&lt;radiogroup&gt;</Begin>
+ <End>&lt;/radiogroup&gt;</End>
+ </Tag>
+
+ <Tag name="resizer">
+ <Begin>&lt;resizer&gt;</Begin>
+ <End>&lt;/resizer&gt;</End>
+ </Tag>
+
+ <Tag name="richlistbox">
+ <Begin>&lt;richlistbox&gt;</Begin>
+ <End>&lt;/richlistbox&gt;</End>
+ </Tag>
+
+ <Tag name="richlistitem">
+ <Begin>&lt;richlistitem&gt;</Begin>
+ <End>&lt;/richlistitem&gt;</End>
+ </Tag>
+
+ <Tag name="row">
+ <Begin>&lt;row flex="1"&gt;</Begin>
+ <End>&lt;/row&gt;</End>
+ </Tag>
+
+ <Tag name="rows">
+ <Begin>&lt;rows&gt;</Begin>
+ <End>&lt;/rows&gt;</End>
+ </Tag>
+
+ <Tag name="rule">
+ <Begin>&lt;rule&gt;</Begin>
+ <End>&lt;/rule&gt;</End>
+ </Tag>
+
+ <Tag name="script">
+ <Begin>&lt;script src="" language="Javascript"&gt;</Begin>
+ <End>&lt;/script&gt;</End>
+ </Tag>
+
+ <Tag name="scrollbar">
+ <Begin>&lt;scrollbar id="" orient="vertical" curpos="20" maxpos="100" increment="1" pageincrement="10"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="scrollbox">
+ <Begin>&lt;scrollbox&gt;</Begin>
+ <End>&lt;/scrollbox&gt;</End>
+ </Tag>
+
+ <Tag name="scrollcorner">
+ <Begin>&lt;scrollcorner&gt;</Begin>
+ <End>&lt;/scrollcorner&gt;</End>
+ </Tag>
+
+ <Tag name="separator">
+ <Begin>&lt;separator&gt;</Begin>
+ <End>&lt;/separator&gt;</End>
+ </Tag>
+
+ <Tag name="spacer">
+ <Begin>&lt;spacer flex="1"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="splitter">
+ <Begin>&lt;splitter state="open" collapse="before" resizebefore="closest" resizeafter="grow"&gt;&lt;grippy/&gt;</Begin>
+ <End>&lt;/splitter&gt;</End>
+ </Tag>
+
+ <Tag name="stack">
+ <Begin>&lt;stack&gt;</Begin>
+ <End>&lt;/stack&gt;</End>
+ </Tag>
+
+ <Tag name="statusbar">
+ <Begin>&lt;statusbar&gt;</Begin>
+ <End>&lt;/statusbar&gt;</End>
+ </Tag>
+
+ <Tag name="statusbarpanel">
+ <Begin>&lt;statusbarpanel id="" label=""&gt;</Begin>
+ <End>&lt;/statusbarpanel&gt;</End>
+ </Tag>
+
+ <Tag name="stringbundle">
+ <Begin>&lt;stringbundle id="" src=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="stringbundleset">
+ <Begin>&lt;stringbundleset&gt;</Begin>
+ <End>&lt;/stringbundleset&gt;</End>
+ </Tag>
+
+ <Tag name="tab">
+ <Begin>&lt;tab id="" label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="tabbrowser">
+ <Begin>&lt;tabbrowser&gt;</Begin>
+ <End>&lt;/tabbrowser&gt;</End>
+ </Tag>
+
+ <Tag name="tabbox">
+ <Begin>&lt;tabbox id=""&gt;</Begin>
+ <End>&lt;/tabbox&gt;</End>
+ </Tag>
+
+ <Tag name="tabpanel">
+ <Begin>&lt;tabpanel id=""&gt;</Begin>
+ <End>&lt;/tabpanel&gt;</End>
+ </Tag>
+
+ <Tag name="tabpanels">
+ <Begin>&lt;tabpanels&gt;</Begin>
+ <End>&lt;/tabpanels&gt;</End>
+ </Tag>
+
+ <Tag name="tabs">
+ <Begin>&lt;tabs&gt;</Begin>
+ <End>&lt;/tabs&gt;</End>
+ </Tag>
+
+ <Tag name="template">
+ <Begin>&lt;template&gt;</Begin>
+ <End>&lt;/template&gt;</End>
+ </Tag>
+
+ <Tag name="textnode">
+ <Begin>&lt;textnode&gt;</Begin>
+ <End>&lt;/textnode&gt;</End>
+ </Tag>
+
+ <Tag name="textbox">
+ <Begin>&lt;textbox id="" value="" multiline="false"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="titlebar">
+ <Begin>&lt;titlebar&gt;</Begin>
+ <End>&lt;/titlebar&gt;</End>
+ </Tag>
+
+ <Tag name="toolbar">
+ <Begin>&lt;toolbar id=""&gt;</Begin>
+ <End>&lt;/toolbar&gt;</End>
+ </Tag>
+
+ <Tag name="toolbarbutton">
+ <Begin>&lt;toolbarbutton id="" label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="toolbargrippy">
+ <Begin>&lt;toolbargrippy&gt;</Begin>
+ <End>&lt;/toolbargrippy&gt;</End>
+ </Tag>
+
+ <Tag name="toolbaritem">
+ <Begin>&lt;toolbaritem&gt;</Begin>
+ <End>&lt;/toolbaritem&gt;</End>
+ </Tag>
+
+ <Tag name="toolbarpalette">
+ <Begin>&lt;toolbarpalette&gt;</Begin>
+ <End>&lt;/toolbarpalette&gt;</End>
+ </Tag>
+
+ <Tag name="toolbarseparator">
+ <Begin>&lt;toolbarseparator&gt;</Begin>
+ <End>&lt;/toolbarseparator&gt;</End>
+ </Tag>
+
+ <Tag name="toolbarset">
+ <Begin>&lt;toolbarset&gt;</Begin>
+ <End>&lt;/toolbarset&gt;</End>
+ </Tag>
+
+ <Tag name="toolbarspacer">
+ <Begin>&lt;toolbarspacer&gt;</Begin>
+ <End>&lt;/toolbarspacer&gt;</End>
+ </Tag>
+
+ <Tag name="toolbarspring">
+ <Begin>&lt;toolbarspring&gt;</Begin>
+ <End>&lt;/toolbarspring&gt;</End>
+ </Tag>
+
+ <Tag name="toolbox">
+ <Begin>&lt;toolbox&gt;</Begin>
+ <End>&lt;/toolbox&gt;</End>
+ </Tag>
+
+ <Tag name="tooltip">
+ <Begin>&lt;tooltip id="" orient="vertical"&gt;</Begin>
+ <End>&lt;/tooltip&gt;</End>
+ </Tag>
+
+ <Tag name="tree">
+ <Begin>&lt;tree id="" flex="1"&gt;</Begin>
+ <End>&lt;/tree&gt;</End>
+ </Tag>
+
+ <Tag name="treecell">
+ <Begin>&lt;treecell label=""/&gt;</Begin>
+ </Tag>
+
+ <Tag name="treechildren">
+ <Begin>&lt;treechildren&gt;</Begin>
+ <End>&lt;/treechildren&gt;</End>
+ </Tag>
+
+ <Tag name="treecol">
+ <Begin>&lt;treecol label="" flex="1" primary="true"/&gt;</Begin>
+ </Tag>
+
+ <Tag name="treecols">
+ <Begin>&lt;treecols&gt;</Begin>
+ <End>&lt;/treecols&gt;</End>
+ </Tag>
+
+ <Tag name="treeitem">
+ <Begin>&lt;treeitem container="true" open="true"&gt;</Begin>
+ <End>&lt;/treeitem&gt;</End>
+ </Tag>
+
+ <Tag name="treerow">
+ <Begin>&lt;treerow&gt;</Begin>
+ <End>&lt;/treerow&gt;</End>
+ </Tag>
+
+ <Tag name="treeseparator">
+ <Begin>&lt;treeseparator&gt;</Begin>
+ <End>&lt;/treeseparator&gt;</End>
+ </Tag>
+
+ <Tag name="triple">
+ <Begin>&lt;triple&gt;</Begin>
+ <End>&lt;/triple&gt;</End>
+ </Tag>
+
+ <Tag name="vbox">
+ <Begin>&lt;vbox flex="1"&gt;</Begin>
+ <End>&lt;/vbox&gt;</End>
+ </Tag>
+
+ <Tag name="window">
+ <Begin>&lt;window id="" title="" orient="horizontal" pageid="" next=""
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&gt;</Begin>
+ <End>&lt;/window&gt;</End>
+ </Tag>
+
+ <Tag name="wizard">
+ <Begin>&lt;wizard id="" title="" wizardnext="" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&gt;</Begin>
+ <End>&lt;/wizard&gt;</End>
+ </Tag>
+
+ <Tag name="wizardpage">
+ <Begin>&lt;wizardpage description="" onwizardfinish="" pageadvanced=""&gt;</Begin>
+ <End>&lt;/wizardpage&gt;</End>
+ </Tag>
+
+</TagGroup>
+</TagList>
diff --git a/plugins/taglist/gedit-taglist-plugin-panel.c b/plugins/taglist/gedit-taglist-plugin-panel.c
new file mode 100755
index 00000000..d66acc08
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-panel.c
@@ -0,0 +1,776 @@
+/*
+ * gedit-taglist-plugin-panel.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * 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., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the gedit Team, 2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+
+#include "gedit-taglist-plugin-panel.h"
+#include "gedit-taglist-plugin-parser.h"
+
+#include <gedit/gedit-utils.h>
+#include <gedit/gedit-debug.h>
+#include <gedit/gedit-plugin.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+
+#define GEDIT_TAGLIST_PLUGIN_PANEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
+ GEDIT_TYPE_TAGLIST_PLUGIN_PANEL, \
+ GeditTaglistPluginPanelPrivate))
+
+enum
+{
+ COLUMN_TAG_NAME,
+ COLUMN_TAG_INDEX_IN_GROUP,
+ NUM_COLUMNS
+};
+
+struct _GeditTaglistPluginPanelPrivate
+{
+ GeditWindow *window;
+
+ GtkWidget *tag_groups_combo;
+ GtkWidget *tags_list;
+ GtkWidget *preview;
+
+ TagGroup *selected_tag_group;
+
+ gchar *data_dir;
+};
+
+GEDIT_PLUGIN_DEFINE_TYPE (GeditTaglistPluginPanel, gedit_taglist_plugin_panel, GTK_TYPE_VBOX)
+
+enum
+{
+ PROP_0,
+ PROP_WINDOW,
+};
+
+static void
+set_window (GeditTaglistPluginPanel *panel,
+ GeditWindow *window)
+{
+ g_return_if_fail (panel->priv->window == NULL);
+ g_return_if_fail (GEDIT_IS_WINDOW (window));
+
+ panel->priv->window = window;
+
+ /* TODO */
+}
+
+static void
+gedit_taglist_plugin_panel_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GeditTaglistPluginPanel *panel = GEDIT_TAGLIST_PLUGIN_PANEL (object);
+
+ switch (prop_id)
+ {
+ case PROP_WINDOW:
+ set_window (panel, g_value_get_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gedit_taglist_plugin_panel_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GeditTaglistPluginPanel *panel = GEDIT_TAGLIST_PLUGIN_PANEL (object);
+
+ switch (prop_id)
+ {
+ case PROP_WINDOW:
+ g_value_set_object (value,
+ GEDIT_TAGLIST_PLUGIN_PANEL_GET_PRIVATE (panel)->window);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gedit_taglist_plugin_panel_finalize (GObject *object)
+{
+ GeditTaglistPluginPanel *panel = GEDIT_TAGLIST_PLUGIN_PANEL (object);
+
+ g_free (panel->priv->data_dir);
+
+ G_OBJECT_CLASS (gedit_taglist_plugin_panel_parent_class)->finalize (object);
+}
+
+static void
+gedit_taglist_plugin_panel_class_init (GeditTaglistPluginPanelClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = gedit_taglist_plugin_panel_finalize;
+ object_class->get_property = gedit_taglist_plugin_panel_get_property;
+ object_class->set_property = gedit_taglist_plugin_panel_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_WINDOW,
+ g_param_spec_object ("window",
+ "Window",
+ "The GeditWindow this GeditTaglistPluginPanel is associated with",
+ GEDIT_TYPE_WINDOW,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ g_type_class_add_private (object_class, sizeof(GeditTaglistPluginPanelPrivate));
+}
+
+static void
+insert_tag (GeditTaglistPluginPanel *panel,
+ Tag *tag,
+ gboolean grab_focus)
+{
+ GeditView *view;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ GtkTextIter cursor;
+ gboolean sel = FALSE;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ view = gedit_window_get_active_view (panel->priv->window);
+ g_return_if_fail (view != NULL);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ gtk_text_buffer_begin_user_action (buffer);
+
+ /* always insert the begin tag at the beginning of the selection
+ * and the end tag at the end, if there is no selection they will
+ * be automatically inserted at the cursor position.
+ */
+
+ if (tag->begin != NULL)
+ {
+ sel = gtk_text_buffer_get_selection_bounds (buffer,
+ &start,
+ &end);
+
+ gtk_text_buffer_insert (buffer,
+ &start,
+ (gchar *)tag->begin,
+ -1);
+
+ /* get iterators again since they have been invalidated and move
+ * the cursor after the selection */
+ gtk_text_buffer_get_selection_bounds (buffer,
+ &start,
+ &cursor);
+ }
+
+ if (tag->end != NULL)
+ {
+ sel = gtk_text_buffer_get_selection_bounds (buffer,
+ &start,
+ &end);
+
+ gtk_text_buffer_insert (buffer,
+ &end,
+ (gchar *)tag->end,
+ -1);
+
+ /* if there is no selection and we have a paired tag, move the
+ * cursor between the pair, otherwise move it at the end */
+ if (!sel)
+ {
+ gint offset;
+
+ offset = gtk_text_iter_get_offset (&end) -
+ g_utf8_strlen ((gchar *)tag->end, -1);
+
+ gtk_text_buffer_get_iter_at_offset (buffer,
+ &end,
+ offset);
+ }
+
+ cursor = end;
+ }
+
+ gtk_text_buffer_place_cursor (buffer, &cursor);
+
+ gtk_text_buffer_end_user_action (buffer);
+
+ if (grab_focus)
+ gtk_widget_grab_focus (GTK_WIDGET (view));
+}
+
+static void
+tag_list_row_activated_cb (GtkTreeView *tag_list,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ GeditTaglistPluginPanel *panel)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gint index;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ model = gtk_tree_view_get_model (tag_list);
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ g_return_if_fail (&iter != NULL);
+
+ gtk_tree_model_get (model, &iter, COLUMN_TAG_INDEX_IN_GROUP, &index, -1);
+
+ gedit_debug_message (DEBUG_PLUGINS, "Index: %d", index);
+
+ insert_tag (panel,
+ (Tag*)g_list_nth_data (panel->priv->selected_tag_group->tags, index),
+ TRUE);
+}
+
+static gboolean
+tag_list_key_press_event_cb (GtkTreeView *tag_list,
+ GdkEventKey *event,
+ GeditTaglistPluginPanel *panel)
+{
+ gboolean grab_focus;
+
+ grab_focus = (event->state & GDK_CONTROL_MASK) != 0;
+
+ if (event->keyval == GDK_Return)
+ {
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ gint index;
+
+ gedit_debug_message (DEBUG_PLUGINS, "RETURN Pressed");
+
+ model = gtk_tree_view_get_model (tag_list);
+
+ selection = gtk_tree_view_get_selection (tag_list);
+
+ if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+ {
+ gtk_tree_model_get (model, &iter, COLUMN_TAG_INDEX_IN_GROUP, &index, -1);
+
+ gedit_debug_message (DEBUG_PLUGINS, "Index: %d", index);
+
+ insert_tag (panel,
+ (Tag*)g_list_nth_data (panel->priv->selected_tag_group->tags, index),
+ grab_focus);
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static GtkTreeModel*
+create_model (GeditTaglistPluginPanel *panel)
+{
+ gint i = 0;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GList *list;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ /* create list store */
+ store = gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_INT);
+
+ /* add data to the list store */
+ list = panel->priv->selected_tag_group->tags;
+
+ while (list != NULL)
+ {
+ const gchar* tag_name;
+
+ tag_name = (gchar *)((Tag*)list->data)->name;
+
+ gedit_debug_message (DEBUG_PLUGINS, "%d : %s", i, tag_name);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_TAG_NAME, tag_name,
+ COLUMN_TAG_INDEX_IN_GROUP, i,
+ -1);
+ ++i;
+
+ list = g_list_next (list);
+ }
+
+ gedit_debug_message (DEBUG_PLUGINS, "Rows: %d ",
+ gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL));
+
+ return GTK_TREE_MODEL (store);
+}
+
+static void
+populate_tags_list (GeditTaglistPluginPanel *panel)
+{
+ GtkTreeModel* model;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ g_return_if_fail (taglist != NULL);
+
+ model = create_model (panel);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (panel->priv->tags_list),
+ model);
+ g_object_unref (model);
+}
+
+static TagGroup *
+find_tag_group (const gchar *name)
+{
+ GList *l;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ g_return_val_if_fail (taglist != NULL, NULL);
+
+ for (l = taglist->tag_groups; l != NULL; l = g_list_next (l))
+ {
+ if (strcmp (name, (gchar *)((TagGroup*)l->data)->name) == 0)
+ return (TagGroup*)l->data;
+ }
+
+ return NULL;
+}
+
+static void
+populate_tag_groups_combo (GeditTaglistPluginPanel *panel)
+{
+ GList *l;
+ GtkComboBox *combo;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ combo = GTK_COMBO_BOX (panel->priv->tag_groups_combo);
+
+ if (taglist == NULL)
+ return;
+
+ for (l = taglist->tag_groups; l != NULL; l = g_list_next (l))
+ {
+ gtk_combo_box_append_text (combo,
+ (gchar *)((TagGroup*)l->data)->name);
+ }
+
+ gtk_combo_box_set_active (combo, 0);
+
+ return;
+}
+
+static void
+selected_group_changed (GtkComboBox *combo,
+ GeditTaglistPluginPanel *panel)
+{
+ gchar* group_name;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ group_name = gtk_combo_box_get_active_text (combo);
+
+ if ((group_name == NULL) || (strlen (group_name) <= 0))
+ {
+ g_free (group_name);
+ return;
+ }
+
+ if ((panel->priv->selected_tag_group == NULL) ||
+ (strcmp (group_name, (gchar *)panel->priv->selected_tag_group->name) != 0))
+ {
+ panel->priv->selected_tag_group = find_tag_group (group_name);
+ g_return_if_fail (panel->priv->selected_tag_group != NULL);
+
+ gedit_debug_message (DEBUG_PLUGINS,
+ "New selected group: %s",
+ panel->priv->selected_tag_group->name);
+
+ populate_tags_list (panel);
+ }
+
+ /* Clean up preview */
+ gtk_label_set_text (GTK_LABEL (panel->priv->preview),
+ "");
+
+ g_free (group_name);
+}
+
+static gchar *
+create_preview_string (Tag *tag)
+{
+ GString *str;
+
+ str = g_string_new ("<tt><small>");
+
+ if (tag->begin != NULL)
+ {
+ gchar *markup;
+
+ markup = g_markup_escape_text ((gchar *)tag->begin, -1);
+ g_string_append (str, markup);
+ g_free (markup);
+ }
+
+ if (tag->end != NULL)
+ {
+ gchar *markup;
+
+ markup = g_markup_escape_text ((gchar *)tag->end, -1);
+ g_string_append (str, markup);
+ g_free (markup);
+ }
+
+ g_string_append (str, "</small></tt>");
+
+ return g_string_free (str, FALSE);
+}
+
+static void
+update_preview (GeditTaglistPluginPanel *panel,
+ Tag *tag)
+{
+ gchar *str;
+
+ str = create_preview_string (tag);
+
+ gtk_label_set_markup (GTK_LABEL (panel->priv->preview),
+ str);
+
+ g_free (str);
+}
+
+static void
+tag_list_cursor_changed_cb (GtkTreeView *tag_list,
+ gpointer data)
+{
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ gint index;
+
+ GeditTaglistPluginPanel *panel = (GeditTaglistPluginPanel *)data;
+
+ model = gtk_tree_view_get_model (tag_list);
+
+ selection = gtk_tree_view_get_selection (tag_list);
+
+ if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+ {
+ gtk_tree_model_get (model, &iter, COLUMN_TAG_INDEX_IN_GROUP, &index, -1);
+
+ gedit_debug_message (DEBUG_PLUGINS, "Index: %d", index);
+
+ update_preview (panel,
+ (Tag*)g_list_nth_data (panel->priv->selected_tag_group->tags, index));
+ }
+}
+
+static gboolean
+tags_list_query_tooltip_cb (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_tip,
+ GtkTooltip *tooltip,
+ GeditTaglistPluginPanel *panel)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreePath *path = NULL;
+ gint index;
+ Tag *tag;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+
+ if (keyboard_tip)
+ {
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (widget),
+ &path,
+ NULL);
+
+ if (path == NULL)
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ gint bin_x, bin_y;
+
+ gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW (widget),
+ x, y,
+ &bin_x, &bin_y);
+
+ if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
+ bin_x, bin_y,
+ &path,
+ NULL, NULL, NULL))
+ {
+ return FALSE;
+ }
+ }
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter,
+ COLUMN_TAG_INDEX_IN_GROUP, &index,
+ -1);
+
+ tag = g_list_nth_data (panel->priv->selected_tag_group->tags, index);
+ if (tag != NULL)
+ {
+ gchar *tip;
+
+ tip = create_preview_string (tag);
+ gtk_tooltip_set_markup (tooltip, tip);
+ g_free (tip);
+ gtk_tree_path_free (path);
+
+ return TRUE;
+ }
+
+ gtk_tree_path_free (path);
+
+ return FALSE;
+}
+
+static gboolean
+expose_event_cb (GtkWidget *panel,
+ GdkEventExpose *event,
+ gpointer user_data)
+{
+ GeditTaglistPluginPanel *ppanel = GEDIT_TAGLIST_PLUGIN_PANEL (panel);
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ /* If needed load taglists from files at the first expose */
+ if (taglist == NULL)
+ create_taglist (ppanel->priv->data_dir);
+
+ /* And populate combo box */
+ populate_tag_groups_combo (GEDIT_TAGLIST_PLUGIN_PANEL (panel));
+
+ /* We need to manage only the first expose event -> disconnect */
+ g_signal_handlers_disconnect_by_func (panel, expose_event_cb, NULL);
+
+ return FALSE;
+}
+
+static void
+set_combo_tooltip (GtkWidget *widget,
+ gpointer data)
+{
+ if (GTK_IS_BUTTON (widget))
+ {
+ gtk_widget_set_tooltip_text (widget,
+ _("Select the group of tags you want to use"));
+ }
+}
+
+static void
+realize_tag_groups_combo (GtkWidget *combo,
+ gpointer data)
+{
+ gtk_container_forall (GTK_CONTAINER (combo),
+ set_combo_tooltip,
+ NULL);
+}
+
+static void
+add_preview_widget (GeditTaglistPluginPanel *panel)
+{
+ GtkWidget *expander;
+ GtkWidget *frame;
+
+ expander = gtk_expander_new_with_mnemonic (_("_Preview"));
+
+ panel->priv->preview = gtk_label_new (NULL);
+ gtk_widget_set_size_request (panel->priv->preview, -1, 80);
+
+ gtk_label_set_line_wrap (GTK_LABEL (panel->priv->preview), TRUE);
+ gtk_label_set_use_markup (GTK_LABEL (panel->priv->preview), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (panel->priv->preview), 0, 0);
+ gtk_misc_set_padding (GTK_MISC (panel->priv->preview), 6, 6);
+ gtk_label_set_selectable (GTK_LABEL (panel->priv->preview), TRUE);
+ gtk_label_set_selectable (GTK_LABEL (panel->priv->preview), TRUE);
+ gtk_label_set_ellipsize (GTK_LABEL (panel->priv->preview),
+ PANGO_ELLIPSIZE_END);
+
+ frame = gtk_frame_new (0);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+
+ gtk_container_add (GTK_CONTAINER (frame),
+ panel->priv->preview);
+
+ gtk_container_add (GTK_CONTAINER (expander),
+ frame);
+
+ gtk_box_pack_start (GTK_BOX (panel), expander, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (expander);
+}
+
+static void
+gedit_taglist_plugin_panel_init (GeditTaglistPluginPanel *panel)
+{
+ GtkWidget *sw;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *cell;
+ GList *focus_chain = NULL;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ panel->priv = GEDIT_TAGLIST_PLUGIN_PANEL_GET_PRIVATE (panel);
+ panel->priv->data_dir = NULL;
+
+ /* Build the window content */
+ panel->priv->tag_groups_combo = gtk_combo_box_new_text ();
+ gtk_box_pack_start (GTK_BOX (panel),
+ panel->priv->tag_groups_combo,
+ FALSE,
+ TRUE,
+ 0);
+
+ g_signal_connect (panel->priv->tag_groups_combo,
+ "realize",
+ G_CALLBACK (realize_tag_groups_combo),
+ panel);
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+ GTK_SHADOW_IN);
+ gtk_box_pack_start (GTK_BOX (panel), sw, TRUE, TRUE, 0);
+
+ /* Create tree view */
+ panel->priv->tags_list = gtk_tree_view_new ();
+
+ gedit_utils_set_atk_name_description (panel->priv->tag_groups_combo,
+ _("Available Tag Lists"),
+ NULL);
+ gedit_utils_set_atk_name_description (panel->priv->tags_list,
+ _("Tags"),
+ NULL);
+ gedit_utils_set_atk_relation (panel->priv->tag_groups_combo,
+ panel->priv->tags_list,
+ ATK_RELATION_CONTROLLER_FOR);
+ gedit_utils_set_atk_relation (panel->priv->tags_list,
+ panel->priv->tag_groups_combo,
+ ATK_RELATION_CONTROLLED_BY);
+
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (panel->priv->tags_list), FALSE);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (panel->priv->tags_list), FALSE);
+
+ g_object_set (panel->priv->tags_list, "has-tooltip", TRUE, NULL);
+
+ /* Add the tags column */
+ cell = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Tags"),
+ cell,
+ "text",
+ COLUMN_TAG_NAME,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (panel->priv->tags_list),
+ column);
+
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (panel->priv->tags_list),
+ COLUMN_TAG_NAME);
+
+ gtk_container_add (GTK_CONTAINER (sw), panel->priv->tags_list);
+
+ focus_chain = g_list_prepend (focus_chain, panel->priv->tags_list);
+ focus_chain = g_list_prepend (focus_chain, panel->priv->tag_groups_combo);
+
+ gtk_container_set_focus_chain (GTK_CONTAINER (panel),
+ focus_chain);
+ g_list_free (focus_chain);
+
+ add_preview_widget (panel);
+
+ gtk_widget_show_all (GTK_WIDGET (sw));
+ gtk_widget_show (GTK_WIDGET (panel->priv->tag_groups_combo));
+
+ g_signal_connect_after (panel->priv->tags_list,
+ "row_activated",
+ G_CALLBACK (tag_list_row_activated_cb),
+ panel);
+ g_signal_connect (panel->priv->tags_list,
+ "key_press_event",
+ G_CALLBACK (tag_list_key_press_event_cb),
+ panel);
+ g_signal_connect (panel->priv->tags_list,
+ "query-tooltip",
+ G_CALLBACK (tags_list_query_tooltip_cb),
+ panel);
+ g_signal_connect (panel->priv->tags_list,
+ "cursor_changed",
+ G_CALLBACK (tag_list_cursor_changed_cb),
+ panel);
+ g_signal_connect (panel->priv->tag_groups_combo,
+ "changed",
+ G_CALLBACK (selected_group_changed),
+ panel);
+ g_signal_connect (panel,
+ "expose-event",
+ G_CALLBACK (expose_event_cb),
+ NULL);
+}
+
+GtkWidget *
+gedit_taglist_plugin_panel_new (GeditWindow *window,
+ const gchar *data_dir)
+{
+ GeditTaglistPluginPanel *panel;
+
+ g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
+
+ panel = g_object_new (GEDIT_TYPE_TAGLIST_PLUGIN_PANEL,
+ "window", window,
+ NULL);
+
+ panel->priv->data_dir = g_strdup (data_dir);
+
+ return GTK_WIDGET (panel);
+}
diff --git a/plugins/taglist/gedit-taglist-plugin-panel.h b/plugins/taglist/gedit-taglist-plugin-panel.h
new file mode 100755
index 00000000..3f8e82d0
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-panel.h
@@ -0,0 +1,89 @@
+/*
+ * gedit-taglist-plugin-panel.h
+ * This file is part of gedit
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * 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., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the gedit Team, 2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+#ifndef __GEDIT_TAGLIST_PLUGIN_PANEL_H__
+#define __GEDIT_TAGLIST_PLUGIN_PANEL_H__
+
+#include <gtk/gtk.h>
+
+#include <gedit/gedit-window.h>
+
+G_BEGIN_DECLS
+
+/*
+ * Type checking and casting macros
+ */
+#define GEDIT_TYPE_TAGLIST_PLUGIN_PANEL (gedit_taglist_plugin_panel_get_type())
+#define GEDIT_TAGLIST_PLUGIN_PANEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_TAGLIST_PLUGIN_PANEL, GeditTaglistPluginPanel))
+#define GEDIT_TAGLIST_PLUGIN_PANEL_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_TAGLIST_PLUGIN_PANEL, GeditTaglistPluginPanel const))
+#define GEDIT_TAGLIST_PLUGIN_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_TAGLIST_PLUGIN_PANEL, GeditTaglistPluginPanelClass))
+#define GEDIT_IS_TAGLIST_PLUGIN_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_TAGLIST_PLUGIN_PANEL))
+#define GEDIT_IS_TAGLIST_PLUGIN_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_TAGLIST_PLUGIN_PANEL))
+#define GEDIT_TAGLIST_PLUGIN_PANEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_TAGLIST_PLUGIN_PANEL, GeditTaglistPluginPanelClass))
+
+/* Private structure type */
+typedef struct _GeditTaglistPluginPanelPrivate GeditTaglistPluginPanelPrivate;
+
+/*
+ * Main object structure
+ */
+typedef struct _GeditTaglistPluginPanel GeditTaglistPluginPanel;
+
+struct _GeditTaglistPluginPanel
+{
+ GtkVBox vbox;
+
+ /*< private > */
+ GeditTaglistPluginPanelPrivate *priv;
+};
+
+/*
+ * Class definition
+ */
+typedef struct _GeditTaglistPluginPanelClass GeditTaglistPluginPanelClass;
+
+struct _GeditTaglistPluginPanelClass
+{
+ GtkVBoxClass parent_class;
+};
+
+/*
+ * Public methods
+ */
+GType gedit_taglist_plugin_panel_register_type (GTypeModule *module);
+
+GType gedit_taglist_plugin_panel_get_type (void) G_GNUC_CONST;
+
+GtkWidget *gedit_taglist_plugin_panel_new (GeditWindow *window,
+ const gchar *data_dir);
+
+G_END_DECLS
+
+#endif /* __GEDIT_TAGLIST_PLUGIN_PANEL_H__ */
diff --git a/plugins/taglist/gedit-taglist-plugin-parser.c b/plugins/taglist/gedit-taglist-plugin-parser.c
new file mode 100755
index 00000000..e09c0e25
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-parser.c
@@ -0,0 +1,655 @@
+/*
+ * gedit-taglist-plugin-parser.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2002-2005 - Paolo Maggi
+ *
+ * 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., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+/* FIXME: we should rewrite the parser to avoid using DOM */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <libxml/parser.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <gedit/gedit-debug.h>
+
+#include "gedit-taglist-plugin-parser.h"
+
+/* we screwed up so we still look here for compatibility */
+#define USER_GEDIT_TAGLIST_PLUGIN_LOCATION_LEGACY ".gedit-2/plugins/taglist/"
+#define USER_GEDIT_TAGLIST_PLUGIN_LOCATION "gedit/taglist/"
+
+TagList *taglist = NULL;
+static gint taglist_ref_count = 0;
+
+static gboolean parse_tag (Tag *tag, xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur);
+static gboolean parse_tag_group (TagGroup *tg, const gchar *fn,
+ xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur,
+ gboolean sort);
+static TagGroup* get_tag_group (const gchar* filename, xmlDocPtr doc,
+ xmlNsPtr ns, xmlNodePtr cur);
+static TagList* lookup_best_lang (TagList *taglist, const gchar *filename,
+ xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur);
+static TagList *parse_taglist_file (const gchar* filename);
+static TagList *parse_taglist_dir (const gchar *dir);
+
+static void free_tag (Tag *tag);
+static void free_tag_group (TagGroup *tag_group);
+
+static gboolean
+parse_tag (Tag *tag, xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur)
+{
+ /*
+ gedit_debug_message (DEBUG_PLUGINS, " Tag name: %s", tag->name);
+ */
+ /* We don't care what the top level element name is */
+ cur = cur->xmlChildrenNode;
+
+ while (cur != NULL)
+ {
+ if ((!xmlStrcmp (cur->name, (const xmlChar *)"Begin")) &&
+ (cur->ns == ns))
+ {
+ tag->begin = xmlNodeListGetString (doc, cur->xmlChildrenNode, 1);
+ /*
+ gedit_debug_message (DEBUG_PLUGINS, " - Begin: %s", tag->begin);
+ */
+ }
+
+ if ((!xmlStrcmp (cur->name, (const xmlChar *)"End")) &&
+ (cur->ns == ns))
+ {
+ tag->end = xmlNodeListGetString (doc, cur->xmlChildrenNode, 1);
+ /*
+ gedit_debug_message (DEBUG_PLUGINS, " - End: %s", tag->end);
+ */
+ }
+
+ cur = cur->next;
+ }
+
+ if ((tag->begin == NULL) && (tag->end == NULL))
+ return FALSE;
+
+ return TRUE;
+}
+
+static gint
+tags_cmp (gconstpointer a, gconstpointer b)
+{
+ gchar *tag_a = (gchar*)((Tag *)a)->name;
+ gchar *tag_b = (gchar*)((Tag *)b)->name;
+
+ return g_utf8_collate (tag_a, tag_b);
+}
+
+static gboolean
+parse_tag_group (TagGroup *tg, const gchar* fn, xmlDocPtr doc,
+ xmlNsPtr ns, xmlNodePtr cur, gboolean sort)
+{
+ gedit_debug_message (DEBUG_PLUGINS, "Parse TagGroup: %s", tg->name);
+
+ /* We don't care what the top level element name is */
+ cur = cur->xmlChildrenNode;
+
+ while (cur != NULL)
+ {
+ if ((xmlStrcmp (cur->name, (const xmlChar *) "Tag")) || (cur->ns != ns))
+ {
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "was '%s', 'Tag' expected.", fn, cur->name);
+
+ return FALSE;
+ }
+ else
+ {
+ Tag *tag;
+
+ tag = g_new0 (Tag, 1);
+
+ /* Get Tag name */
+ tag->name = xmlGetProp (cur, (const xmlChar *) "name");
+
+ if (tag->name == NULL)
+ {
+ /* Error: No name */
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "Tag without name.", fn);
+
+ g_free (tag);
+
+ return FALSE;
+ }
+ else
+ {
+ /* Parse Tag */
+ if (parse_tag (tag, doc, ns, cur))
+ {
+ /* Prepend Tag to TagGroup */
+ tg->tags = g_list_prepend (tg->tags, tag);
+ }
+ else
+ {
+ /* Error parsing Tag */
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "error parsing Tag '%s' in TagGroup '%s'.",
+ fn, tag->name, tg->name);
+
+ free_tag (tag);
+
+ return FALSE;
+ }
+ }
+ }
+
+ cur = cur->next;
+ }
+
+ if (sort)
+ tg->tags = g_list_sort (tg->tags, tags_cmp);
+ else
+ tg->tags = g_list_reverse (tg->tags);
+
+ return TRUE;
+}
+
+static TagGroup*
+get_tag_group (const gchar* filename, xmlDocPtr doc,
+ xmlNsPtr ns, xmlNodePtr cur)
+{
+ TagGroup *tag_group;
+ xmlChar *sort_str;
+ gboolean sort = FALSE;
+
+ tag_group = g_new0 (TagGroup, 1);
+
+ /* Get TagGroup name */
+ tag_group->name = xmlGetProp (cur, (const xmlChar *) "name");
+
+ sort_str = xmlGetProp (cur, (const xmlChar *) "sort");
+
+ if ((sort_str != NULL) &&
+ ((xmlStrcasecmp (sort_str, (const xmlChar *) "yes") == 0) ||
+ (xmlStrcasecmp (sort_str, (const xmlChar *) "true") == 0) ||
+ (xmlStrcasecmp (sort_str, (const xmlChar *) "1") == 0)))
+ {
+ sort = TRUE;
+ }
+
+ xmlFree(sort_str);
+
+ if (tag_group->name == NULL)
+ {
+ /* Error: No name */
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "TagGroup without name.", filename);
+
+ g_free (tag_group);
+ }
+ else
+ {
+ /* Name found */
+ gboolean exists = FALSE;
+ GList *t = taglist->tag_groups;
+
+ /* Check if the tag group already exists */
+ while (t && !exists)
+ {
+ gchar *tgn = (gchar*)((TagGroup*)(t->data))->name;
+
+ if (strcmp (tgn, (gchar*)tag_group->name) == 0)
+ {
+ gedit_debug_message (DEBUG_PLUGINS,
+ "Tag group '%s' already exists.", tgn);
+
+ exists = TRUE;
+
+ free_tag_group (tag_group);
+ }
+
+ t = g_list_next (t);
+ }
+
+ if (!exists)
+ {
+ /* Parse tag group */
+ if (parse_tag_group (tag_group, filename, doc, ns, cur, sort))
+ {
+ return tag_group;
+ }
+ else
+ {
+ /* Error parsing TagGroup */
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "error parsing TagGroup '%s'.",
+ filename, tag_group->name);
+
+ free_tag_group (tag_group);
+ }
+ }
+ }
+ return NULL;
+}
+
+static gint
+groups_cmp (gconstpointer a, gconstpointer b)
+{
+ gchar *g_a = (gchar *)((TagGroup *)a)->name;
+ gchar *g_b = (gchar *)((TagGroup *)b)->name;
+
+ return g_utf8_collate (g_a, g_b);
+}
+
+/*
+ * tags file is localized by intltool-merge below.
+ *
+ * <gedit:TagGroup name="XSLT - Elements">
+ * </gedit:TagGroup>
+ * <gedit:TagGroup xml:lang="am" name="LOCALIZED TEXT">
+ * </gedit:TagGroup>
+ * <gedit:TagGroup xml:lang="ar" name="LOCALIZED TEXT">
+ * </gedit:TagGroup>
+ * .....
+ * <gedit:TagGroup name="XSLT - Functions">
+ * </gedit:TagGroup>
+ * .....
+ * Therefore need to pick up the best lang on the current locale.
+ */
+static TagList*
+lookup_best_lang (TagList *taglist, const gchar *filename,
+ xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur)
+{
+
+ TagGroup *best_tag_group = NULL;
+ TagGroup *tag_group;
+ gint best_lanking = -1;
+
+ /*
+ * Walk the tree.
+ *
+ * First level we expect a list TagGroup
+ */
+ cur = cur->xmlChildrenNode;
+
+ while (cur != NULL)
+ {
+ if ((xmlStrcmp (cur->name, (const xmlChar *) "TagGroup")) || (cur->ns != ns))
+ {
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "was '%s', 'TagGroup' expected.", filename, cur->name);
+ xmlFreeDoc (doc);
+
+ return taglist;
+ }
+ else
+ {
+ const char * const *langs_pointer;
+ gchar *lang;
+ gint cur_lanking;
+ gint i;
+
+ langs_pointer = g_get_language_names ();
+
+ lang = (gchar*) xmlGetProp (cur, (const xmlChar*) "lang");
+ cur_lanking = 1;
+
+ /*
+ * When found a new TagGroup, prepend the best
+ * tag_group to taglist. In the current intltool-merge,
+ * the first section is the default lang NULL.
+ */
+ if (lang == NULL) {
+ if (best_tag_group != NULL) {
+ taglist->tag_groups =
+ g_list_prepend (taglist->tag_groups, best_tag_group);
+ }
+
+ best_tag_group = NULL;
+ best_lanking = -1;
+ }
+
+ /*
+ * If already find the best TagGroup on the current
+ * locale, ignore the logic.
+ */
+ if (best_lanking != -1 && best_lanking <= cur_lanking) {
+ cur = cur->next;
+ continue;
+ }
+
+ /* try to find the best lang */
+ for (i = 0; langs_pointer[i] != NULL; i++)
+ {
+ const gchar *best_lang = langs_pointer[i];
+
+ /*
+ * if launch on C, POSIX locale or does
+ * not find the best lang on the current locale,
+ * this is called.
+ * g_get_language_names returns lang
+ * lists with C locale.
+ */
+ if (lang == NULL &&
+ (!g_ascii_strcasecmp (best_lang, "C") ||
+ !g_ascii_strcasecmp (best_lang, "POSIX")))
+ {
+ tag_group = get_tag_group (filename, doc, ns, cur);
+ if (tag_group != NULL)
+ {
+ if (best_tag_group !=NULL)
+ free_tag_group (best_tag_group);
+ best_lanking = cur_lanking;
+ best_tag_group = tag_group;
+ }
+ }
+
+ /* if it is possible the best lang is not C */
+ else if (lang == NULL)
+ {
+ cur_lanking++;
+ continue;
+ }
+
+ /* if the best lang is found */
+ else if (!g_ascii_strcasecmp (best_lang, lang))
+ {
+ tag_group = get_tag_group (filename, doc, ns, cur);
+ if (tag_group != NULL)
+ {
+ if (best_tag_group !=NULL)
+ free_tag_group (best_tag_group);
+ best_lanking = cur_lanking;
+ best_tag_group = tag_group;
+ }
+ }
+
+ cur_lanking++;
+ }
+
+ if (lang) g_free (lang);
+ } /* End of else */
+
+ cur = cur->next;
+ } /* End of while (cur != NULL) */
+
+ /* Prepend TagGroup to TagList */
+ if (best_tag_group != NULL) {
+ taglist->tag_groups =
+ g_list_prepend (taglist->tag_groups, best_tag_group);
+ }
+
+ taglist->tag_groups = g_list_sort (taglist->tag_groups, groups_cmp);
+
+ return taglist;
+}
+
+static TagList *
+parse_taglist_file (const gchar* filename)
+{
+ xmlDocPtr doc;
+
+ xmlNsPtr ns;
+ xmlNodePtr cur;
+
+ gedit_debug_message (DEBUG_PLUGINS, "Parse file: %s", filename);
+
+ xmlKeepBlanksDefault (0);
+
+ /*
+ * build an XML tree from a the file;
+ */
+ doc = xmlParseFile (filename);
+ if (doc == NULL)
+ {
+ g_warning ("The tag list file '%s' is empty.", filename);
+
+ return taglist;
+ }
+
+ /*
+ * Check the document is of the right kind
+ */
+
+ cur = xmlDocGetRootElement (doc);
+
+ if (cur == NULL)
+ {
+ g_warning ("The tag list file '%s' is empty.", filename);
+ xmlFreeDoc(doc);
+ return taglist;
+ }
+
+ ns = xmlSearchNsByHref (doc, cur,
+ (const xmlChar *) "http://gedit.sourceforge.net/some-location");
+
+ if (ns == NULL)
+ {
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "gedit namespace not found.", filename);
+ xmlFreeDoc (doc);
+
+ return taglist;
+ }
+
+ if (xmlStrcmp(cur->name, (const xmlChar *) "TagList"))
+ {
+ g_warning ("The tag list file '%s' is of the wrong type, "
+ "root node != TagList.", filename);
+ xmlFreeDoc (doc);
+
+ return taglist;
+ }
+
+ /*
+ * If needed, allocate taglist
+ */
+
+ if (taglist == NULL)
+ taglist = g_new0 (TagList, 1);
+
+ taglist = lookup_best_lang (taglist, filename, doc, ns, cur);
+
+ xmlFreeDoc (doc);
+
+ gedit_debug_message (DEBUG_PLUGINS, "END");
+
+ return taglist;
+}
+
+static void
+free_tag (Tag *tag)
+{
+ /*
+ gedit_debug_message (DEBUG_PLUGINS, "Tag: %s", tag->name);
+ */
+ g_return_if_fail (tag != NULL);
+
+ free (tag->name);
+
+ if (tag->begin != NULL)
+ free (tag->begin);
+
+ if (tag->end != NULL)
+ free (tag->end);
+
+ g_free (tag);
+}
+
+static void
+free_tag_group (TagGroup *tag_group)
+{
+ GList *l;
+
+ gedit_debug_message (DEBUG_PLUGINS, "Tag group: %s", tag_group->name);
+
+ g_return_if_fail (tag_group != NULL);
+
+ free (tag_group->name);
+
+ for (l = tag_group->tags; l != NULL; l = g_list_next (l))
+ {
+ free_tag ((Tag *) l->data);
+ }
+
+ g_list_free (tag_group->tags);
+ g_free (tag_group);
+
+ gedit_debug_message (DEBUG_PLUGINS, "END");
+}
+
+void
+free_taglist (void)
+{
+ GList *l;
+
+ gedit_debug_message (DEBUG_PLUGINS, "ref_count: %d", taglist_ref_count);
+
+ if (taglist == NULL)
+ return;
+
+ g_return_if_fail (taglist_ref_count > 0);
+
+ --taglist_ref_count;
+ if (taglist_ref_count > 0)
+ return;
+
+ for (l = taglist->tag_groups; l != NULL; l = g_list_next (l))
+ {
+ free_tag_group ((TagGroup *) l->data);
+ }
+
+ g_list_free (taglist->tag_groups);
+ g_free (taglist);
+ taglist = NULL;
+
+ gedit_debug_message (DEBUG_PLUGINS, "Really freed");
+}
+
+static TagList *
+parse_taglist_dir (const gchar *dir)
+{
+ GError *error = NULL;
+ GDir *d;
+ const gchar *dirent;
+
+ gedit_debug_message (DEBUG_PLUGINS, "DIR: %s", dir);
+
+ d = g_dir_open (dir, 0, &error);
+ if (!d)
+ {
+ gedit_debug_message (DEBUG_PLUGINS, "%s", error->message);
+ g_error_free (error);
+ return taglist;
+ }
+
+ while ((dirent = g_dir_read_name (d)))
+ {
+ if (g_str_has_suffix (dirent, ".tags") ||
+ g_str_has_suffix (dirent, ".tags.gz"))
+ {
+ gchar *tags_file = g_build_filename (dir, dirent, NULL);
+ parse_taglist_file (tags_file);
+ g_free (tags_file);
+ }
+ }
+
+ g_dir_close (d);
+
+ return taglist;
+}
+
+TagList* create_taglist (const gchar *data_dir)
+{
+ gchar *pdir;
+
+ gedit_debug_message (DEBUG_PLUGINS, "ref_count: %d", taglist_ref_count);
+
+ if (taglist_ref_count > 0)
+ {
+ ++taglist_ref_count;
+
+ return taglist;
+ }
+
+#ifndef G_OS_WIN32
+ const gchar *home;
+ const gchar *envvar;
+
+ /* load user's taglists */
+
+ /* legacy dir */
+ home = g_get_home_dir ();
+ if (home != NULL)
+ {
+ pdir = g_build_filename (home,
+ USER_GEDIT_TAGLIST_PLUGIN_LOCATION_LEGACY,
+ NULL);
+ parse_taglist_dir (pdir);
+ g_free (pdir);
+ }
+
+ /* Support old libmate env var */
+ envvar = g_getenv ("MATE22_USER_DIR");
+ if (envvar != NULL)
+ {
+ pdir = g_build_filename (envvar,
+ USER_GEDIT_TAGLIST_PLUGIN_LOCATION,
+ NULL);
+ parse_taglist_dir (pdir);
+ g_free (pdir);
+ }
+ else if (home != NULL)
+ {
+ pdir = g_build_filename (home,
+ ".mate2",
+ USER_GEDIT_TAGLIST_PLUGIN_LOCATION,
+ NULL);
+ parse_taglist_dir (pdir);
+ g_free (pdir);
+ }
+
+#else
+ pdir = g_build_filename (g_get_user_config_dir (),
+ "gedit",
+ "taglist",
+ NULL);
+ parse_taglist_dir (pdir);
+ g_free (pdir);
+#endif
+
+ /* load system's taglists */
+ parse_taglist_dir (data_dir);
+
+ ++taglist_ref_count;
+ g_return_val_if_fail (taglist_ref_count == 1, taglist);
+
+ return taglist;
+}
diff --git a/plugins/taglist/gedit-taglist-plugin-parser.h b/plugins/taglist/gedit-taglist-plugin-parser.h
new file mode 100755
index 00000000..d008836e
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-parser.h
@@ -0,0 +1,68 @@
+/*
+ * gedit-taglist-plugin-parser.h
+ * This file is part of gedit
+ *
+ * Copyright (C) 2002-2005 - Paolo Maggi
+ *
+ * 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., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+#ifndef __GEDIT_TAGLIST_PLUGIN_PARSER_H__
+#define __GEDIT_TAGLIST_PLUGIN_PARSER_H__
+
+#include <libxml/tree.h>
+#include <glib.h>
+
+typedef struct _TagList TagList;
+typedef struct _TagGroup TagGroup;
+typedef struct _Tag Tag;
+
+struct _TagList
+{
+ GList *tag_groups;
+};
+
+struct _TagGroup
+{
+ xmlChar *name;
+
+ GList *tags;
+};
+
+struct _Tag
+{
+ xmlChar *name;
+ xmlChar *begin;
+ xmlChar *end;
+};
+
+/* Note that the taglist is ref counted */
+extern TagList *taglist;
+
+TagList* create_taglist (const gchar *data_dir);
+
+void free_taglist (void);
+
+#endif /* __GEDIT_TAGLIST_PLUGIN_PARSER_H__ */
+
diff --git a/plugins/taglist/gedit-taglist-plugin.c b/plugins/taglist/gedit-taglist-plugin.c
new file mode 100755
index 00000000..081fefcb
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin.c
@@ -0,0 +1,160 @@
+/*
+ * gedit-taglist-plugin.h
+ *
+ * Copyright (C) 2002-2005 - Paolo Maggi
+ *
+ * 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+/*
+ * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gedit-taglist-plugin.h"
+#include "gedit-taglist-plugin-panel.h"
+#include "gedit-taglist-plugin-parser.h"
+
+#include <glib/gi18n-lib.h>
+#include <gmodule.h>
+
+#include <gedit/gedit-plugin.h>
+#include <gedit/gedit-debug.h>
+
+#define WINDOW_DATA_KEY "GeditTaglistPluginWindowData"
+
+#define GEDIT_TAGLIST_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_TAGLIST_PLUGIN, GeditTaglistPluginPrivate))
+
+struct _GeditTaglistPluginPrivate
+{
+ gpointer dummy;
+};
+
+GEDIT_PLUGIN_REGISTER_TYPE_WITH_CODE (GeditTaglistPlugin, gedit_taglist_plugin,
+ gedit_taglist_plugin_panel_register_type (module);
+)
+
+static void
+gedit_taglist_plugin_init (GeditTaglistPlugin *plugin)
+{
+ plugin->priv = GEDIT_TAGLIST_PLUGIN_GET_PRIVATE (plugin);
+
+ gedit_debug_message (DEBUG_PLUGINS, "GeditTaglistPlugin initializing");
+}
+
+static void
+gedit_taglist_plugin_finalize (GObject *object)
+{
+/*
+ GeditTaglistPlugin *plugin = GEDIT_TAGLIST_PLUGIN (object);
+*/
+ gedit_debug_message (DEBUG_PLUGINS, "GeditTaglistPlugin finalizing");
+
+ free_taglist ();
+
+ G_OBJECT_CLASS (gedit_taglist_plugin_parent_class)->finalize (object);
+}
+
+static void
+impl_activate (GeditPlugin *plugin,
+ GeditWindow *window)
+{
+ GeditPanel *side_panel;
+ GtkWidget *taglist_panel;
+ gchar *data_dir;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ g_return_if_fail (g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY) == NULL);
+
+ side_panel = gedit_window_get_side_panel (window);
+
+ data_dir = gedit_plugin_get_data_dir (plugin);
+ taglist_panel = gedit_taglist_plugin_panel_new (window, data_dir);
+ g_free (data_dir);
+
+ gedit_panel_add_item_with_stock_icon (side_panel,
+ taglist_panel,
+ _("Tags"),
+ GTK_STOCK_ADD);
+
+ g_object_set_data (G_OBJECT (window),
+ WINDOW_DATA_KEY,
+ taglist_panel);
+}
+
+static void
+impl_deactivate (GeditPlugin *plugin,
+ GeditWindow *window)
+{
+ GeditPanel *side_panel;
+ gpointer data;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
+ g_return_if_fail (data != NULL);
+
+ side_panel = gedit_window_get_side_panel (window);
+
+ gedit_panel_remove_item (side_panel,
+ GTK_WIDGET (data));
+
+ g_object_set_data (G_OBJECT (window),
+ WINDOW_DATA_KEY,
+ NULL);
+}
+
+static void
+impl_update_ui (GeditPlugin *plugin,
+ GeditWindow *window)
+{
+ gpointer data;
+ GeditView *view;
+
+ gedit_debug (DEBUG_PLUGINS);
+
+ data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
+ g_return_if_fail (data != NULL);
+
+ view = gedit_window_get_active_view (window);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (data),
+ (view != NULL) &&
+ gtk_text_view_get_editable (GTK_TEXT_VIEW (view)));
+}
+
+static void
+gedit_taglist_plugin_class_init (GeditTaglistPluginClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GeditPluginClass *plugin_class = GEDIT_PLUGIN_CLASS (klass);
+
+ object_class->finalize = gedit_taglist_plugin_finalize;
+
+ plugin_class->activate = impl_activate;
+ plugin_class->deactivate = impl_deactivate;
+ plugin_class->update_ui = impl_update_ui;
+
+ g_type_class_add_private (object_class, sizeof (GeditTaglistPluginPrivate));
+}
diff --git a/plugins/taglist/gedit-taglist-plugin.h b/plugins/taglist/gedit-taglist-plugin.h
new file mode 100755
index 00000000..d0444e76
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin.h
@@ -0,0 +1,85 @@
+/*
+ * gedit-taglist-plugin.h
+ *
+ * Copyright (C) 2002-2005 - Paolo Maggi
+ *
+ * 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+/*
+ * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+#ifndef __GEDIT_TAGLIST_PLUGIN_H__
+#define __GEDIT_TAGLIST_PLUGIN_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gedit/gedit-plugin.h>
+
+G_BEGIN_DECLS
+
+/*
+ * Type checking and casting macros
+ */
+#define GEDIT_TYPE_TAGLIST_PLUGIN (gedit_taglist_plugin_get_type ())
+#define GEDIT_TAGLIST_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GEDIT_TYPE_TAGLIST_PLUGIN, GeditTaglistPlugin))
+#define GEDIT_TAGLIST_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GEDIT_TYPE_TAGLIST_PLUGIN, GeditTaglistPluginClass))
+#define GEDIT_IS_TAGLIST_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GEDIT_TYPE_TAGLIST_PLUGIN))
+#define GEDIT_IS_TAGLIST_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GEDIT_TYPE_TAGLIST_PLUGIN))
+#define GEDIT_TAGLIST_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GEDIT_TYPE_TAGLIST_PLUGIN, GeditTaglistPluginClass))
+
+/* Private structure type */
+typedef struct _GeditTaglistPluginPrivate GeditTaglistPluginPrivate;
+
+/*
+ * Main object structure
+ */
+typedef struct _GeditTaglistPlugin GeditTaglistPlugin;
+
+struct _GeditTaglistPlugin
+{
+ GeditPlugin parent_instance;
+
+ /*< private >*/
+ GeditTaglistPluginPrivate *priv;
+};
+
+/*
+ * Class definition
+ */
+typedef struct _GeditTaglistPluginClass GeditTaglistPluginClass;
+
+struct _GeditTaglistPluginClass
+{
+ GeditPluginClass parent_class;
+};
+
+/*
+ * Public methods
+ */
+GType gedit_taglist_plugin_get_type (void) G_GNUC_CONST;
+
+/* All the plugins must implement this function */
+G_MODULE_EXPORT GType register_gedit_plugin (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __GEDIT_TAGLIST_PLUGIN_H__ */
diff --git a/plugins/taglist/taglist.gedit-plugin.desktop.in b/plugins/taglist/taglist.gedit-plugin.desktop.in
new file mode 100755
index 00000000..09d0f2d0
--- /dev/null
+++ b/plugins/taglist/taglist.gedit-plugin.desktop.in
@@ -0,0 +1,8 @@
+[Gedit Plugin]
+Module=taglist
+IAge=2
+_Name=Tag list
+_Description=Provides a method to easily insert commonly used tags/strings into a document without having to type them.
+Authors=Paolo Maggi <[email protected]>
+Copyright=Copyright © 2002-2005 Paolo Maggi
+Website=http://www.gedit.org