[gedit-plugins] Import the taglist plugin from gedit



commit afa6a4dcbe2f72df50cf48c6eebed1d08bda4843
Author: Paolo Borelli <pborelli gnome org>
Date:   Sat Nov 6 21:32:20 2010 +0100

    Import the taglist plugin from gedit
    
    Move the taglist plugins here for those who like it. These days it
    should be way less popular than it used to, so we decided to remove it
    from the main gedit tarball in 3.0.

 configure.ac                                       |   44 +-
 plugins/taglist/HTML.tags.xml.in                   | 2672 ++++++++++++++++++++
 plugins/taglist/Latex.tags.xml.in                  |  344 +++
 plugins/taglist/Makefile.am                        |   58 +
 plugins/taglist/XSLT.tags.xml.in                   |  337 +++
 plugins/taglist/XUL.tags.xml.in                    |  536 ++++
 plugins/taglist/gedit-taglist-plugin-panel.c       |  787 ++++++
 plugins/taglist/gedit-taglist-plugin-panel.h       |   73 +
 plugins/taglist/gedit-taglist-plugin-parser.c      |  656 +++++
 plugins/taglist/gedit-taglist-plugin-parser.h      |   67 +
 plugins/taglist/gedit-taglist-plugin.c             |  240 ++
 plugins/taglist/gedit-taglist-plugin.h             |   69 +
 plugins/taglist/taglist.gedit-plugin.desktop.in.in |    9 +
 13 files changed, 5871 insertions(+), 21 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 65e9143..ee15356 100644
--- a/configure.ac
+++ b/configure.ac
@@ -88,9 +88,9 @@ GEDIT_HAS_PYTHON=1
 
 AC_MSG_CHECKING([which plugins to build])
 
-ALL_PLUGINS="bookmarks charmap drawspaces wordcompletion"
-USEFUL_PLUGINS="bookmarks charmap drawspaces wordcompletion"
-DEFAULT_PLUGINS="bookmarks charmap drawspaces wordcompletion"
+ALL_PLUGINS="bookmarks charmap drawspaces wordcompletion taglist"
+USEFUL_PLUGINS="bookmarks charmap drawspaces wordcompletion taglist"
+DEFAULT_PLUGINS="bookmarks charmap drawspaces wordcompletion taglist"
 
 PYTHON_ALL_PLUGINS="bracketcompletion codecomment colorpicker commander joinlines multiedit textsize sessionsaver smartspaces terminal synctex"
 PYTHON_USEFUL_PLUGINS="bracketcompletion codecomment colorpicker commander joinlines multiedit textsize sessionsaver smartspaces terminal synctex"
@@ -116,7 +116,7 @@ AC_ARG_WITH([plugins],
 			  build the specified plugins. Available:
 			  bracketcompletion, charmap, codecomment,
 			  colorpicker, drawspaces, joinlines, multiedit,
-			  textsize, sessionsaver, smartspaces,
+			  textsize, sessionsaver, smartspaces, taglist,
 			  terminal, wordcompletion, as well as the aliases
 			  default, all, and really-all],
 			  [plugins=$with_plugins],
@@ -344,44 +344,46 @@ AC_CONFIG_FILES([
 Makefile
 plugins/gpdefs.py
 plugins/Makefile
-plugins/bookmarks/Makefile
 plugins/bookmarks/bookmarks.gedit-plugin.desktop.in
-plugins/bracketcompletion/Makefile
+plugins/bookmarks/Makefile
 plugins/bracketcompletion/bracketcompletion.gedit-plugin.desktop.in
-plugins/charmap/Makefile
+plugins/bracketcompletion/Makefile
 plugins/charmap/charmap.gedit-plugin.desktop.in
-plugins/codecomment/Makefile
+plugins/charmap/Makefile
 plugins/codecomment/codecomment.gedit-plugin.desktop.in
-plugins/colorpicker/Makefile
+plugins/codecomment/Makefile
 plugins/colorpicker/colorpicker.gedit-plugin.desktop.in
-plugins/commander/Makefile
+plugins/colorpicker/Makefile
+plugins/commander/commander/commands/Makefile
 plugins/commander/commander.gedit-plugin.desktop.in
 plugins/commander/commander/Makefile
-plugins/commander/commander/commands/Makefile
-plugins/commander/modules/Makefile
+plugins/commander/Makefile
 plugins/commander/modules/find/Makefile
-plugins/drawspaces/Makefile
+plugins/commander/modules/Makefile
 plugins/drawspaces/drawspaces.gedit-plugin.desktop.in
+plugins/drawspaces/Makefile
 plugins/drawspaces/org.gnome.gedit.plugins.drawspaces.gschema.xml.in
-plugins/joinlines/Makefile
 plugins/joinlines/joinlines.gedit-plugin.desktop.in
+plugins/joinlines/Makefile
 plugins/multiedit/Makefile
-plugins/multiedit/multiedit/Makefile
 plugins/multiedit/multiedit.gedit-plugin.desktop.in
-plugins/textsize/Makefile
-plugins/textsize/textsize/Makefile
-plugins/textsize/textsize.gedit-plugin.desktop.in
+plugins/multiedit/multiedit/Makefile
 plugins/sessionsaver/Makefile
 plugins/sessionsaver/sessionsaver.gedit-plugin.desktop.in
 plugins/smartspaces/Makefile
 plugins/smartspaces/smartspaces.gedit-plugin.desktop.in
+plugins/synctex/Makefile
+plugins/synctex/synctex.gedit-plugin.desktop.in
+plugins/synctex/synctex/Makefile
+plugins/taglist/taglist.gedit-plugin.desktop.in
+plugins/taglist/Makefile
 plugins/terminal/Makefile
 plugins/terminal/terminal.gedit-plugin.desktop.in
+plugins/textsize/Makefile
+plugins/textsize/textsize.gedit-plugin.desktop.in
+plugins/textsize/textsize/Makefile
 plugins/wordcompletion/Makefile
 plugins/wordcompletion/wordcompletion.gedit-plugin.desktop.in
-plugins/synctex/Makefile
-plugins/synctex/synctex/Makefile
-plugins/synctex/synctex.gedit-plugin.desktop.in
 po/Makefile.in])
 
 AC_OUTPUT
diff --git a/plugins/taglist/HTML.tags.xml.in b/plugins/taglist/HTML.tags.xml.in
new file mode 100644
index 0000000..2d0a043
--- /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 100644
index 0000000..7950aab
--- /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 100644
index 0000000..43228c8
--- /dev/null
+++ b/plugins/taglist/Makefile.am
@@ -0,0 +1,58 @@
+# Taglist 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
+
+libdrawspaces_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
+libdrawspaces_la_LIBADD = $(GEDIT_LIBS)
+
+# Plugin Info
+
+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 100644
index 0000000..00ffd13
--- /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 <jensus linux nu>
+-->
+<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 100644
index 0000000..1ccf607
--- /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 100644
index 0000000..4d3bf7d
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-panel.c
@@ -0,0 +1,787 @@
+/*
+ * 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 <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;
+};
+
+G_DEFINE_DYNAMIC_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
+gedit_taglist_plugin_panel_class_finalize (GeditTaglistPluginPanelClass *klass)
+{
+}
+
+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_KEY_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;
+	GtkComboBoxText *combo;
+
+	gedit_debug (DEBUG_PLUGINS);
+
+	combo = GTK_COMBO_BOX_TEXT (panel->priv->tag_groups_combo);
+
+	if (taglist == NULL)
+		return;
+
+	for (l = taglist->tag_groups; l != NULL; l = g_list_next (l))
+	{
+		gtk_combo_box_text_append_text (combo,
+		                                (gchar *)((TagGroup*)l->data)->name);
+	}
+
+	gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+
+	return;
+}
+
+static void
+selected_group_changed (GtkComboBox             *combo,
+			GeditTaglistPluginPanel *panel)
+{
+	gchar* group_name;
+
+	gedit_debug (DEBUG_PLUGINS);
+
+	group_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_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 void
+map_panel_cb (GtkWidget *panel,
+              gpointer   useless)
+{
+	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 (ppanel);
+
+	/* We need to manage only the first expose event -> disconnect */
+	g_signal_handlers_disconnect_by_func (panel, map_panel_cb, NULL);
+}
+
+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_text_new ();
+	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,
+	                  "map",
+	                  G_CALLBACK (map_panel_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);
+}
+
+void
+_gedit_taglist_plugin_panel_register_type (GTypeModule *type_module)
+{
+	gedit_taglist_plugin_panel_register_type (type_module);
+}
+
+/* ex:ts=8:noet: */
diff --git a/plugins/taglist/gedit-taglist-plugin-panel.h b/plugins/taglist/gedit-taglist-plugin-panel.h
new file mode 100644
index 0000000..859d6d2
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-panel.h
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+#ifndef __GEDIT_TAGLIST_PLUGIN_PANEL_H__
+#define __GEDIT_TAGLIST_PLUGIN_PANEL_H__
+
+#include <gtk/gtk.h>
+
+#include <gedit/gedit-window.h>
+
+G_BEGIN_DECLS
+
+#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))
+
+typedef struct _GeditTaglistPluginPanel		GeditTaglistPluginPanel;
+typedef struct _GeditTaglistPluginPanelPrivate	GeditTaglistPluginPanelPrivate;
+typedef struct _GeditTaglistPluginPanelClass	GeditTaglistPluginPanelClass;
+
+struct _GeditTaglistPluginPanel 
+{
+	GtkVBox vbox;
+
+	/*< private > */
+	GeditTaglistPluginPanelPrivate *priv;
+};
+
+struct _GeditTaglistPluginPanelClass 
+{
+	GtkVBoxClass parent_class;
+};
+
+GType 		 gedit_taglist_plugin_panel_get_type		(void) G_GNUC_CONST;
+
+GtkWidget	*gedit_taglist_plugin_panel_new 		(GeditWindow *window,
+								 const gchar *data_dir);
+
+void		_gedit_taglist_plugin_panel_register_type	(GTypeModule *type_module);
+
+G_END_DECLS
+
+#endif  /* __GEDIT_TAGLIST_PLUGIN_PANEL_H__  */
+/* ex:ts=8:noet: */
diff --git a/plugins/taglist/gedit-taglist-plugin-parser.c b/plugins/taglist/gedit-taglist-plugin-parser.c
new file mode 100644
index 0000000..6a50a04
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-parser.c
@@ -0,0 +1,656 @@
+/*
+ * 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 libgnome env var */
+	envvar = g_getenv ("GNOME22_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,
+					 ".gnome2",
+					 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;
+}
+/* ex:ts=8:noet: */
diff --git a/plugins/taglist/gedit-taglist-plugin-parser.h b/plugins/taglist/gedit-taglist-plugin-parser.h
new file mode 100644
index 0000000..581a28f
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin-parser.h
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+#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__ */
+
+/* ex:ts=8:noet: */
diff --git a/plugins/taglist/gedit-taglist-plugin.c b/plugins/taglist/gedit-taglist-plugin.c
new file mode 100644
index 0000000..b82aba9
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin.c
@@ -0,0 +1,240 @@
+/*
+ * 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.h>
+
+#include <gedit/gedit-window.h>
+#include <gedit/gedit-window-activatable.h>
+#include <gedit/gedit-debug.h>
+
+#define GEDIT_TAGLIST_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_TAGLIST_PLUGIN, GeditTaglistPluginPrivate))
+
+static void gedit_window_activatable_iface_init (GeditWindowActivatableInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditTaglistPlugin,
+				gedit_taglist_plugin,
+				PEAS_TYPE_EXTENSION_BASE,
+				0,
+				G_IMPLEMENT_INTERFACE_DYNAMIC (GEDIT_TYPE_WINDOW_ACTIVATABLE,
+							       gedit_window_activatable_iface_init)	\
+													\
+				_gedit_taglist_plugin_panel_register_type (type_module);		\
+)
+
+struct _GeditTaglistPluginPrivate
+{
+	GeditWindow *window;
+
+	GtkWidget *taglist_panel;
+};
+
+enum
+{
+	PROP_0,
+	PROP_WINDOW
+};
+
+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_dispose (GObject *object)
+{
+	GeditTaglistPlugin *plugin = GEDIT_TAGLIST_PLUGIN (object);
+
+	gedit_debug_message (DEBUG_PLUGINS, "GeditTaglistPlugin disposing");
+
+	if (plugin->priv->window != NULL)
+	{
+		g_object_unref (plugin->priv->window);
+		plugin->priv->window = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_taglist_plugin_parent_class)->dispose (object);
+}
+
+static void
+gedit_taglist_plugin_finalize (GObject *object)
+{
+	gedit_debug_message (DEBUG_PLUGINS, "GeditTaglistPlugin finalizing");
+
+	free_taglist ();
+
+	G_OBJECT_CLASS (gedit_taglist_plugin_parent_class)->finalize (object);
+}
+
+static void
+gedit_taglist_plugin_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+	GeditTaglistPlugin *plugin = GEDIT_TAGLIST_PLUGIN (object);
+
+	switch (prop_id)
+	{
+		case PROP_WINDOW:
+			plugin->priv->window = GEDIT_WINDOW (g_value_dup_object (value));
+			break;
+
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+gedit_taglist_plugin_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+	GeditTaglistPlugin *plugin = GEDIT_TAGLIST_PLUGIN (object);
+
+	switch (prop_id)
+	{
+		case PROP_WINDOW:
+			g_value_set_object (value, plugin->priv->window);
+			break;
+
+		default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+gedit_taglist_plugin_activate (GeditWindowActivatable *activatable)
+{
+	GeditTaglistPluginPrivate *priv;
+	GeditPanel *side_panel;
+	gchar *data_dir;
+
+	gedit_debug (DEBUG_PLUGINS);
+
+	priv = GEDIT_TAGLIST_PLUGIN (activatable)->priv;
+
+	side_panel = gedit_window_get_side_panel (priv->window);
+
+	data_dir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (activatable));
+	priv->taglist_panel = gedit_taglist_plugin_panel_new (priv->window, data_dir);
+	g_free (data_dir);
+
+	gedit_panel_add_item_with_stock_icon (side_panel,
+					      priv->taglist_panel,
+					      "GeditTagListPanel",
+					      _("Tags"),
+					      GTK_STOCK_ADD);
+}
+
+static void
+gedit_taglist_plugin_deactivate (GeditWindowActivatable *activatable)
+{
+	GeditTaglistPluginPrivate *priv;
+	GeditPanel *side_panel;
+
+	gedit_debug (DEBUG_PLUGINS);
+
+	priv = GEDIT_TAGLIST_PLUGIN (activatable)->priv;
+
+	side_panel = gedit_window_get_side_panel (priv->window);
+
+	gedit_panel_remove_item (side_panel,
+				 priv->taglist_panel);
+}
+
+static void
+gedit_taglist_plugin_update_state (GeditWindowActivatable *activatable)
+{
+	GeditTaglistPluginPrivate *priv;
+	GeditView *view;
+
+	gedit_debug (DEBUG_PLUGINS);
+
+	priv = GEDIT_TAGLIST_PLUGIN (activatable)->priv;
+
+	view = gedit_window_get_active_view (priv->window);
+
+	gtk_widget_set_sensitive (priv->taglist_panel,
+				  (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);
+
+	object_class->dispose = gedit_taglist_plugin_dispose;
+	object_class->finalize = gedit_taglist_plugin_finalize;
+	object_class->set_property = gedit_taglist_plugin_set_property;
+	object_class->get_property = gedit_taglist_plugin_get_property;
+
+	g_object_class_override_property (object_class, PROP_WINDOW, "window");
+
+	g_type_class_add_private (object_class, sizeof (GeditTaglistPluginPrivate));
+}
+
+static void
+gedit_taglist_plugin_class_finalize (GeditTaglistPluginClass *klass)
+{
+}
+
+static void
+gedit_window_activatable_iface_init (GeditWindowActivatableInterface *iface)
+{
+	iface->activate = gedit_taglist_plugin_activate;
+	iface->deactivate = gedit_taglist_plugin_deactivate;
+	iface->update_state = gedit_taglist_plugin_update_state;
+}
+
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+	gedit_taglist_plugin_register_type (G_TYPE_MODULE (module));
+
+	peas_object_module_register_extension_type (module,
+						    GEDIT_TYPE_WINDOW_ACTIVATABLE,
+						    GEDIT_TYPE_TAGLIST_PLUGIN);
+}
+
+/* ex:ts=8:noet: */
diff --git a/plugins/taglist/gedit-taglist-plugin.h b/plugins/taglist/gedit-taglist-plugin.h
new file mode 100644
index 0000000..dc27e9f
--- /dev/null
+++ b/plugins/taglist/gedit-taglist-plugin.h
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+ 
+#ifndef __GEDIT_TAGLIST_PLUGIN_H__
+#define __GEDIT_TAGLIST_PLUGIN_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <libpeas/peas-extension-base.h>
+#include <libpeas/peas-object-module.h>
+
+G_BEGIN_DECLS
+
+#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))
+
+typedef struct _GeditTaglistPlugin		GeditTaglistPlugin;
+typedef struct _GeditTaglistPluginPrivate	GeditTaglistPluginPrivate;
+typedef struct _GeditTaglistPluginClass		GeditTaglistPluginClass;
+
+struct _GeditTaglistPlugin
+{
+	PeasExtensionBase parent_instance;
+
+	/*< private >*/
+	GeditTaglistPluginPrivate *priv;
+};
+
+struct _GeditTaglistPluginClass
+{
+	PeasExtensionBaseClass parent_class;
+};
+
+GType			gedit_taglist_plugin_get_type	(void) G_GNUC_CONST;
+
+G_MODULE_EXPORT void	peas_register_types		(PeasObjectModule *module);
+
+G_END_DECLS
+
+#endif /* __GEDIT_TAGLIST_PLUGIN_H__ */
+
+/* ex:ts=8:noet: */
diff --git a/plugins/taglist/taglist.gedit-plugin.desktop.in.in b/plugins/taglist/taglist.gedit-plugin.desktop.in.in
new file mode 100644
index 0000000..77ce284
--- /dev/null
+++ b/plugins/taglist/taglist.gedit-plugin.desktop.in.in
@@ -0,0 +1,9 @@
+[Gedit Plugin]
+Module=taglist
+IAge=3
+_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 <paolo maggi polito it>
+Copyright=Copyright © 2002-2005 Paolo Maggi
+Website=http://www.gedit.org
+Version= VERSION@



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]