[interchange-cvs] [SCM] Interchange branch, master, updated. 3a7431f45088092ae2ae3624b4d13f9125768bc3

Jon Jensen interchange-cvs at icdevgroup.org
Thu Sep 10 19:12:03 UTC 2009


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Interchange".

The branch, master has been updated
       via  3a7431f45088092ae2ae3624b4d13f9125768bc3 (commit)
       via  0454081fbf669ae101568191eb760be334821516 (commit)
       via  53a0a220dcecbde5c48a12bb0a96b2c2bcff2ba4 (commit)
       via  10a1877e8e2b645251be9426035f8809e3e56ce1 (commit)
       via  edccfa8e2782b8c36a930229945c643a4183877c (commit)
      from  a66b6d3c3466883c9ec99d5cbd7f5324da4dad96 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3a7431f45088092ae2ae3624b4d13f9125768bc3
Author: Jon Jensen <jon at endpoint.com>
Date:   Thu Sep 10 13:11:32 2009 -0600

    Sync manifest

commit 0454081fbf669ae101568191eb760be334821516
Author: Jon Jensen <jon at endpoint.com>
Date:   Thu Sep 10 13:11:10 2009 -0600

    Add dump-memory, a low-level memory dump tool for debugging

commit 53a0a220dcecbde5c48a12bb0a96b2c2bcff2ba4
Author: Jon Jensen <jon at endpoint.com>
Date:   Thu Sep 10 12:17:19 2009 -0600

    Remove extraneous whitespace

commit 10a1877e8e2b645251be9426035f8809e3e56ce1
Author: Jon Jensen <jon at endpoint.com>
Date:   Thu Sep 10 12:16:47 2009 -0600

    Note latest commits

commit edccfa8e2782b8c36a930229945c643a4183877c
Author: Jon Jensen <jon at endpoint.com>
Date:   Thu Sep 10 12:07:45 2009 -0600

    Add jEdit mode files for Interchange
    
    Thanks to Justin Otten.

-----------------------------------------------------------------------

Summary of changes and diff:
 MANIFEST                 |    5 +
 WHATSNEW-5.7             |  121 ++++++-----
 eg/dump_memory.cfg       |   46 +++++
 eg/jedit/README          |   35 ++++
 eg/jedit/catalog         |  491 ++++++++++++++++++++++++++++++++++++++++++++++
 eg/jedit/html.xml        |  186 +++++++++++++++++
 eg/jedit/interchange.xml |  466 +++++++++++++++++++++++++++++++++++++++++++
 7 files changed, 1295 insertions(+), 55 deletions(-)
 create mode 100644 eg/dump_memory.cfg
 create mode 100644 eg/jedit/README
 create mode 100644 eg/jedit/catalog
 create mode 100644 eg/jedit/html.xml
 create mode 100644 eg/jedit/interchange.xml

diff --git a/MANIFEST b/MANIFEST
index 8027d54..0f0fa4c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1039,10 +1039,15 @@ dist/subdomains.cfg
 eg/check_perl_itl
 eg/compact
 eg/cvv2.svg
+eg/dump_memory.cfg
 eg/filter/calculated.filter
 eg/gpg_display
 eg/iclint
 eg/ifdef
+eg/jedit/catalog
+eg/jedit/html.xml
+eg/jedit/interchange.xml
+eg/jedit/README
 eg/merge-tab-files
 eg/news_feature/dbconf/default_db/news.dbm
 eg/news_feature/dbconf/mysql/news.mysql
diff --git a/WHATSNEW-5.7 b/WHATSNEW-5.7
index 2ad64d1..f05e011 100644
--- a/WHATSNEW-5.7
+++ b/WHATSNEW-5.7
@@ -78,122 +78,122 @@ Core
   Thanks to David Christensen <david at endpoint.com> for the fix.
 
 * Correct .access functionality directly in pages/
-    
+
   .access worked in subdirectories like pages/abc/, but didn't work directly
   under pages/.
 
 * BounceReferrals changes:
-    
+
   * Fix bug that kept query strings from being passed through due to use of
   nonexistent %$CGI::Values instead of %CGI::Values.
-  
+
   * Remove mv_pc and mv_source to prevent redirection loops.
-  
+
   * Don't generate a "process" URL for root URL; use DirectoryIndex instead,
     if available.
 
 * Make [email] process cc and bcc options for plain text emails (#250).
 
 * Allow catalogs to be set to have Perl always global by default.
-    
+
       AllowGlobal        catname
       PerlAlwaysGlobal   catname
-  
+
     This is a global directive (i.e. interchange.cfg).
-  
+
     [perl global=0] will still be honored, i.e. that will be interpreted
     by Safe.
-  
+
   * Allow catalogs to turn off "strict" in global mode by default:
-  
+
       PerlNoStrict       catname
-  
+
     This is a global directive (i.e. interchange.cfg).
-  
+
   This is intended as an easy way to allow catalogs to work all right
   with Vend::Charset. Sad, but can't think of any better way short of
   maintaining our own version of the UTF8 modules. It is really sad,
   because the Perl powers that be have totally abandoned Opcode and
   Safe.
-  
+
   NOT RECOMMENDED FOR USE BY NON-SOPHISTICATED INTERCHANGE USERS.
 
 * Correct issue with hi-bit characters in search strings.
-    
+
   This corrects the "Wide character in subroutine entry" error that
   occurs when hi-bit characters are used in a search. The failure was
   caused by Digest::MD5's reluctance to process characters > 0xFF, so we
   just convert any search options to UTF8 before calculating the MD5.
 
 * Add support for SHA1 encrypted userdb passwords.
-    
+
   * Add new "promote" feature. When active, and passwords
     of any of the other algorithms are present, on next
     login the user's password will be promoted to the
     target hashing algorithm. This way, password strength
     can be increased organically.
-  
+
   Use of SHA1 passwords can be specified in the same manner
   as currently MD5 can be:
-  
+
   UserDB  ui  sha1  1
-  
+
   To utilize the promotion feature, you add a similar line
   for the UserDB definition:
-  
+
   UserDB  ui  promote 1
-  
+
   Promote implies that strength is increased, but in reality
   promotion will move in any direction desired. The requested
   hashing algorithm is the target, and whatever the form of the
   passwords in the database, they will be converted to the target.
-  
+
   E.g., if neither sha1 nor md5 is specified, and the database
   currently has md5 passwords, if promote is added, it will have
   the effect of promoting to crypt(), the target hashing algorithm
   (which happens to be the default).
-  
+
   If promote is not used, the change is fully backward compatible.
   Whatever method is specified will be used, and if the database
   has passwords of a different algorithm, authentication will fail.
-  
+
   You should not specify more than 1 hashing type. If you specify
   both md5 and sha1, you'll be subject to the whims of hash
   ordering from keys().
-  
+
   Also note that, before promoting to a stronger hash, you should
   ensure your database's password field is long enough to hold the
   new, longer datum.
-  
+
   Original work from Steven Jenkins <steven at endpoint.com> for
   framework of promotion code.
 
 * Add global timeout feature for payment gateways.
-    
+
   The different payment gateways all tend to implement their own timeout features
   with varying degrees of success. In particular, LWP-based clients do not appear
   to have any capability of passing a timeout by the developer whenever it uses
   the https protocol. Thus, the use of LWP's timeout feature is illusory and
   forces any activity to a 180s timeout.
-  
+
   The new feature completely separates out the gateway activity with a fork,
   giving it reliable control over the duration of the gateway request. It also
   eliminates the need for each gateway module to implement its own timeout,
   either because the developer chose not to, didn't consider it, or because the
   developer discovered it was hopeless to do so using LWP.
-  
+
   The feature is invoked using the "global_timeout" option in the payment route,
   or as an opt passed to [charge]. global_timeout should be any positive integer,
   which will define the number of seconds until the timeout is triggered. If this
   new option is not used, the effect is a no-op, with behavior identical to that
   prior to the feature. No changes in config means completely backward
   compatible.
-  
+
   Additionally, a new "global_timeout_msg" option is available so that the
   message produced if the alarm fires can be customized within the payment route.
-  
+
   E.g.:
-  
+
       Route   payflowpro    id                 "__PAYFLOWPRO_ID__"
       Route   payflowpro    secret             "__PAYFLOWPRO_SECRET__"
       Route   payflowpro    partner            "__PAYFLOWPRO_PARTNER__"
@@ -215,54 +215,54 @@ Core
 * Add new SourcePriority catalog directive.
 
   SourcePriority <source_list>
-  
+
   <source_list> is a prioritized list of cgi variables to get the source
   (affiliate) name from.  Can also include the following:
-  
+
   mv_pc - has the current special casing of mv_pc, (ie RESET is special as
   are values that contain only digits).
-  
+
   cookie-foo check the cookie with the foo label.
-  
+
   session - stop here if session already exists, do not check any further
   variables.
-  
+
   session-foo - stop here if foo session variable is set.
-  
+
   Default: SourcePriority mv_pc mv_source
-  
+
   Examples:
-  
+
   Check the MV_SOURCE cookie for an affiliate name as well as the other defaults:
   SourcePriority mv_pc mv_source cookie-MV_SOURCE
-  
+
   ...as above, but you don't want your affiliates using mv_pc:
   SourcePriority mv_source cookie-MV_SOURCE
-  
+
   Check the cgi variable affid instead:
   SourcePriority affid
-  
+
   Say you send affiliate traffic to other sites, and you don't want
   those sites to get credit for sales if a customer follows a banner from
   them back to your site:
   SourcePriority session mv_pc mv_source
-  
+
   If you want affiliates who use the specialsource cgi variable instead of
   mv_source to get special treatment and can override customers who
   already have sessions:
   SourcePriority specialsource session mv_pc mv_source
-  
+
   If you want to allow affiliates to get credit if there is a
   session but only if no other affiliate is already set:
   SourcePriority session-source mv_pc mv_source
 
 * Add directive SourceCookie, support for persistent affiliate tracking.
-    
+
   Setting SourceCookie defines the relevant attributes of a cookie to be
   maintained in conjunction with the usual session-only parameter
   $Session->{source}. Its usage eliminates the duration of the user's session as
   the limiting factor for applying credit to a referral.
-  
+
   SourceCookie and SourcePriority would be expected to typically work in tandem,
   and thus the same cookie defined in both contexts. However, there is no such
   requirement to do so. Defining SourceCookie by itself merely makes the cookie
@@ -270,34 +270,34 @@ Core
   $Session->{source}. That cookie may, or may not, be leveraged as an element in
   SourcePriority, which itself may look to a cookie not maintained by
   SourceCookie.
-  
+
   SourceCookie supports the following attributes:
-  
+
   * name (required)
   * expire (any format supported for [set-cookie])
   * domain
   * path
   * secure
   * autoreset
-  
+
   autoreset is a boolean that, when true, will cause each request from the client
   to reset the cookie in the response, effectively refreshing the expiration time
   relative to the current time. Uses, for example, might include a desire to
   ensure that the source cookie last "forever" (autoreset + sufficiently long
   expire period) or for more obscure uses such as "Affiliate should last [value
   of expire] from the last request".
-  
+
   Attributes may be positional in order of (name expire domain path secure), but
   it is recommended that they be expressed as key=value pairs for clarity.
-  
+
   Example using both SourcePriority and SourceCookie together in catalog.cfg:
-  
+
   SourcePriority mv_pc mv_source cookie-MV_SOURCE
   SourceCookie name=MV_SOURCE expire="180 days"
 
 * Add reload of AutoModifier based on a prepended ! (exclamation point).
   Example:
-     
+
      AutoModifier    !download  pricing:price_group
 
   The download attribute will be recomputed for the current sku when
@@ -336,7 +336,7 @@ Core
   modules that use a quasi-sequential session ID. You end up placing all
   sessions in the S/2 directory for a long time, followed by the S/3 directory,
   etc. A setting of:
-  
+
     SessionHashLength   4
     SessionHashLevels   1
 
@@ -397,6 +397,9 @@ Core
 * Fix PreFork mode daemon restart problem. Now child processes are properly
   killed off.
 
+* Make sure catalog TemplateDir and ErrorFile directives are safe when
+  NoAbsolute is set.
+
 Payment
 -------
 
@@ -556,9 +559,17 @@ Standard demo
 
 * Remove rarely used mass_setting admininstration page.
 
-* Add company name to shipping and billing addresses and filter output 
+* Add company name to shipping and billing addresses and filter output
   with evalue.
 
+Other
+-----
+
+* Added jEdit mode files for Interchange to eg/jedit. Thanks to Justin Otten.
+
+* Added runtime dump-memory global UserTag and ActionMap for very low-level
+  troubleshooting beyond what the structure files can offer.
+
 
 ------------------------------------------------------------------------------
 
@@ -751,7 +762,7 @@ Standard demo
 -------------
 
 * Added SQLite support.
- 
+
 * Disabled product comment to prevent spam showing up on default installations.
 
 * Provide reasonable defaults for shipping mode and country at checkout to avoid
diff --git a/eg/dump_memory.cfg b/eg/dump_memory.cfg
new file mode 100644
index 0000000..a3639bb
--- /dev/null
+++ b/eg/dump_memory.cfg
@@ -0,0 +1,46 @@
+# dump-memory: Interchange low-level memory dump tool for debugging
+# by Jon Jensen <jon at endpoint.com>
+#
+# To use:
+#
+# 1. Put this in interchange.cfg and restart.
+#
+# 2. Then go to /dump-memory with any of your catalog URLs.
+#
+# 3. You'll get back a very large text file with a dump of the Global::*
+# and %$Vend::Cfg namespaces as they actually exist in memory, which is
+# the same in many respects as the interchange.structure and
+# $catalog.structure dumps, but differs in some important respects as well.
+#
+# 4. Do *not* leave this in place on a production server accessible to the
+# general public, because you will likely be exposing confidential
+# information. Run it preferably only on a development machine, firewalled
+# from the outside world, or in the worst case on a production server
+# temporarily under a different ActionMap name or with web server access
+# control to the URL.
+
+UserTag dump-memory Routine <<EOR
+sub {
+    my %global;
+    @global{keys %Global::} = map { ${$Global::{$_}} } keys %Global::;
+    my %structure = (
+        global => \%global,
+        catalog => $Vend::Cfg,
+    );  
+    return ::uneval(\%structure);
+}
+EOR
+
+ActionMap dump-memory <<EOR
+sub {
+    $Document->header('Content-Type: text/plain');
+    $Document->hot(1);
+    HTML(
+        '# '
+        . $Tag->time
+        . "\n"
+        . $Tag->dump_memory
+    );  
+    return 0;
+}
+EOR
diff --git a/eg/jedit/README b/eg/jedit/README
new file mode 100644
index 0000000..7e61ec1
--- /dev/null
+++ b/eg/jedit/README
@@ -0,0 +1,35 @@
+from http://www.icdevgroup.org/pipermail/interchange-users/2009-March/050311.html
+
+Date: Mon, 23 Mar 2009 09:41:24 -0400
+From: Justin Otten <justino at fragrancenet.com>
+To: interchange-users at icdevgroup.org
+Subject: Re: [ic] Jedit interchange.xml language definition
+
+On Wed, Feb 11, 2009 at 4:46 PM, Sam Batschelet <sam at westbranchresort.com> wrote:
+>
+> Hello does anyone have a copy of this referenced in the IC docs
+> http://www.icdevgroup.org/doc-5.0/frames/ic_howto_cvs_43.html seems the link
+> is dead.
+>
+> Thanks
+> -Sam
+
+At some point, I updated the JEdit file that was found on the
+icdevgroup website so that jedit will properly syntax highlight CSS,
+HTML, and Javascript. It now also properly handles heredocs (makes
+working with usertags better).
+
+I had to modify the html.xml definition due to issues of sticking an
+IC tag in the middle of some html attribute. ie
+  <img src="[image-src]" alt="[image-alt]" />
+jedit refused to highlight these tags, the modification to html.xml is
+simply an addition of a delegation to interchange.xml to handle such
+tags
+
+I attached the three modified files to this email, let me know if you
+can't download them, I'll post them somewhere public.
+
+--
+Regards,
+Justin Otten
+FragranceNet.com
diff --git a/eg/jedit/catalog b/eg/jedit/catalog
new file mode 100644
index 0000000..9fb0d54
--- /dev/null
+++ b/eg/jedit/catalog
@@ -0,0 +1,491 @@
+<?xml version="1.0"?>
+
+<!-- This is a mode catalog. Edit modes must be listed here, -->
+<!-- otherwise they will not be available to jEdit. -->
+
+<!DOCTYPE MODES SYSTEM "catalog.dtd">
+
+<MODES>
+
+<MODE NAME="actionscript"	FILE="actionscript.xml"
+				FILE_NAME_GLOB="*.as" />
+
+<MODE NAME="ada95"		FILE="ada95.xml"
+				FILE_NAME_GLOB="*.{ada,adb,ads}" />
+
+<MODE NAME="antlr"		FILE="antlr.xml"
+				FILE_NAME_GLOB="*.g" />
+
+<MODE NAME="apacheconf"		FILE="apacheconf.xml"
+				FILE_NAME_GLOB="*httpd.conf" />
+
+
+<MODE NAME="apdl"		FILE="apdl.xml"
+				FILE_NAME_GLOB="*.{ans,inp,mak,mac}" />
+
+<MODE NAME="applescript"	FILE="applescript.xml"
+				FILE_NAME_GLOB="*.applescript" />
+
+<MODE NAME="asp"		FILE="asp.xml"
+				FILE_NAME_GLOB="*.{asp,asa}" />
+
+<MODE NAME="aspect-j"		FILE="aspect-j.xml"
+				FILE_NAME_GLOB="*.aj" />
+
+<MODE NAME="assembly-m68k"	FILE="assembly-m68k.xml" />
+
+<MODE NAME="assembly-macro32"	FILE="assembly-macro32.xml"
+				FILE_NAME_GLOB="*.mar" />
+
+<MODE NAME="assembly-mcs51"	FILE="assembly-mcs51.xml" />
+
+<MODE NAME="assembly-r2000"	FILE="assembly-r2000.xml"
+				FILE_NAME_GLOB="*.mips" />
+
+<MODE NAME="assembly-parrot"	FILE="assembly-parrot.xml"
+				FILE_NAME_GLOB="*.pasm" />
+
+<MODE NAME="assembly-x86"	FILE="assembly-x86.xml"
+				FILE_NAME_GLOB="*.asm" />
+
+<MODE NAME="awk"		FILE="awk.xml"
+				FILE_NAME_GLOB="*.awk"
+				FIRST_LINE_GLOB="#!*awk*" />
+
+<MODE NAME="b"			FILE="b.xml"
+				FILE_NAME_GLOB="*.{imp,ref,mch}" />
+
+<MODE NAME="batch"		FILE="batch.xml"
+				FILE_NAME_GLOB="*.{bat,cmd}" />
+
+<MODE NAME="bbj"		FILE="bbj.xml"
+				FILE_NAME_GLOB="*.bbj" />
+
+<!-- if anyone knows a file name glob that can be used with this mode,
+     please let me know -->
+<MODE NAME="bcel"		FILE="bcel.xml" />
+
+<!-- Now that BeanShell 2.0 supports class declarations, its syntax is
+     almost identical to Java. -->
+<MODE NAME="beanshell"		FILE="java.xml"
+				FILE_NAME_GLOB="*.bsh" />
+
+<MODE NAME="bibtex"		FILE="bibtex.xml"
+				FILE_NAME_GLOB="*.bib" />
+
+<!--  We let Objective C mode highlight .h files -->
+<MODE NAME="c"			FILE="c.xml"
+				FILE_NAME_GLOB="*.c" />
+
+<MODE NAME="chill"		FILE="chill.xml"
+				FILE_NAME_GLOB="*.{chl,mpol}" />
+
+<MODE NAME="cil"		FILE="cil.xml"
+				FILE_NAME_GLOB="*.il" />
+
+<MODE NAME="clips"		FILE="clips.xml"
+				FILE_NAME_GLOB="*.clp" />
+
+<MODE NAME="cobol"		FILE="cobol.xml"
+				FILE_NAME_GLOB="*.cbl" />
+
+<MODE NAME="coldfusion"		FILE="coldfusion.xml"
+				FILE_NAME_GLOB="*.{cfm,dbm,cfc}" />
+
+<MODE NAME="c++"		FILE="cplusplus.xml"
+				FILE_NAME_GLOB="*.{cc,cpp,hh,hpp,cxx}" />
+
+<MODE NAME="c#"			FILE="csharp.xml"
+				FILE_NAME_GLOB="*.cs" />
+
+<MODE NAME="css"		FILE="css.xml"
+				FILE_NAME_GLOB="*.css" />
+
+<MODE NAME="csv" 		FILE="csv.xml"
+				FILE_NAME_GLOB="*.csv" />
+
+<MODE NAME="cvs-commit"		FILE="cvs-commit.xml"
+				FILE_NAME_GLOB="cvs*.tmp"/>
+
+<MODE NAME="d"			FILE="d.xml"
+				FILE_NAME_GLOB="*.d" />
+
+<MODE NAME="django"		FILE="django.xml"/>
+
+<MODE NAME="doxygen"		FILE="doxygen.xml"
+				FILE_NAME_GLOB="doxyfile*" />
+
+<MODE NAME="dsssl"		FILE="dsssl.xml"
+				FILE_NAME_GLOB="*.dsl" />
+
+<MODE NAME="embperl"		FILE="embperl.xml"
+				FILE_NAME_GLOB="*.epl"/>
+
+<MODE NAME="erlang"		FILE="erlang.xml"
+				FILE_NAME_GLOB="*.erl"/>
+
+<MODE NAME="eiffel"		FILE="eiffel.xml"
+				FILE_NAME_GLOB="*.e" />
+
+<MODE NAME="fhtml"		FILE="fhtml.xml"
+				FILE_NAME_GLOB="*.{furnace,fhtml}"/>
+
+<MODE NAME="factor"		FILE="factor.xml"
+				FILE_NAME_GLOB="*.factor"/>
+
+<MODE NAME="forth"		FILE="forth.xml"
+				FILE_NAME_GLOB="*.f" />
+
+<MODE NAME="fortran"		FILE="fortran.xml"
+				FILE_NAME_GLOB="*.{for,fort,f77,f90}" />
+
+<MODE NAME="foxpro"		FILE="foxpro.xml"
+				FILE_NAME_GLOB="*.prg" />
+
+<MODE NAME="freemarker"		FILE="freemarker.xml"
+				FILE_NAME_GLOB="*.ftl"
+				FIRST_LINE_GLOB="&lt;\#ftl*"/>
+
+<MODE NAME="gettext"		FILE="gettext.xml"
+				FILE_NAME_GLOB="*.{po,pot}" />
+
+<MODE NAME="gnuplot"		FILE="gnuplot.xml"
+				FILE_NAME_GLOB="*.{dem,plt}" />
+
+<MODE NAME="groovy"		FILE="groovy.xml"
+				FILE_NAME_GLOB="*.{groovy,grv}"/>
+
+<MODE NAME="haskell"		FILE="haskell.xml"
+				FILE_NAME_GLOB="*.hs" />
+
+<!-- Used by Andre Kaplan's Hex plugin -->
+<MODE NAME="hex"		FILE="hex.xml" />
+
+<MODE NAME="hlsl"		FILE="hlsl.xml"
+				FILE_NAME_GLOB="*.fx" />
+
+<MODE NAME="htaccess"			FILE="htaccess.xml"
+				FILE_NAME_GLOB=".htaccess" />
+
+<MODE NAME="html"		FILE="html.xml"
+				FILE_NAME_GLOB="*.{html,htm,hta}" />
+
+<MODE NAME="i4gl"		FILE="i4gl.xml"
+				FILE_NAME_GLOB="*.4gl" />
+
+<MODE NAME="icon"		FILE="icon.xml"
+				FILE_NAME_GLOB="*.icn" />
+
+<MODE NAME="idl"		FILE="idl.xml"
+				FILE_NAME_GLOB="*.idl" />
+
+<MODE NAME="inform"		FILE="inform.xml"
+				FILE_NAME_GLOB="*.inf" />
+
+<MODE NAME="inno-setup"		FILE="inno-setup.xml"
+				FILE_NAME_GLOB="*.iss" />
+
+<MODE NAME="ini"		FILE="ini.xml"
+				FILE_NAME_GLOB="*.{ini,reg}" />
+
+<MODE NAME="interlis"		FILE="interlis.xml"
+				FILE_NAME_GLOB="*.ili" />
+				
+<MODE NAME="interchange"	FILE="interchange.xml"
+				FIRST_LINE_GLOB="?comment?" />
+
+<MODE NAME="io"			FILE="io.xml"
+				FILE_NAME_GLOB="*.io" />
+
+<MODE NAME="javacc" FILE="javacc.xml"
+        FILE_NAME_GLOB="*.{jj,jjt}"/>
+
+<MODE NAME="java"		FILE="java.xml"
+				FILE_NAME_GLOB="*.java" />
+
+<MODE NAME="javascript"		FILE="javascript.xml"
+				FILE_NAME_GLOB="*.js" />
+
+<MODE NAME="jcl"		FILE="jcl.xml"
+				FILE_NAME_GLOB="*.jcl" />
+
+<MODE NAME="jhtml"		FILE="jhtml.xml"
+				FILE_NAME_GLOB="*.jhtml" />
+
+<MODE NAME="jmk"		FILE="jmk.xml"
+				FILE_NAME_GLOB="*.jmk" />
+
+<MODE NAME="jsp"		FILE="jsp.xml"
+				FILE_NAME_GLOB="*.{jsp,jsf,jspf,tag}" />
+
+<!-- Note that a generic 'tex.xml' is included as well, for minimal
+     plain TeX/AMSTeX highlighting. -->
+
+<MODE NAME="latex"		FILE="latex.xml"
+				FILE_NAME_GLOB="*.{tex,sty,ltx}" />
+
+<MODE NAME="lilypond"		FILE="lilypond.xml"
+				FILE_NAME_GLOB="*.ly" />
+
+<MODE NAME="lisp"		FILE="lisp.xml"
+				FILE_NAME_GLOB="*.{lisp,lsp,el}" />
+
+<MODE NAME="literate-haskell"	FILE="literate-haskell.xml"
+				FILE_NAME_GLOB="*.lhs" />
+
+<MODE NAME="lotos"		FILE="lotos.xml"
+				FILE_NAME_GLOB="*.{lot,lotos}"/>
+
+<MODE NAME="lua"		FILE="lua.xml"
+				FILE_NAME_GLOB="*.lua" />
+
+<MODE NAME="mail"		FILE="mail.xml" />
+
+<MODE NAME="makefile"		FILE="makefile.xml"
+				FILE_NAME_GLOB="*makefile" />
+
+<MODE NAME="maple"		FILE="maple.xml"
+				FILE_NAME_GLOB="*.{mpl,mws}" />
+
+<MODE NAME="ml"			FILE="ml.xml"
+				FILE_NAME_GLOB="*.{sml,ml}" />
+
+<MODE NAME="modula3"		FILE="modula3.xml"
+				FILE_NAME_GLOB="*.[im]3" />
+
+<MODE NAME="moin"		FILE="moin.xml"
+				FILE_NAME_GLOB="*.moin" />
+
+<MODE NAME="mqsc"		FILE="mqsc.xml"
+				FILE_NAME_GLOB="*.mqsc" />
+
+<MODE NAME="myghty"			FILE="myghty.xml"
+				FILE_NAME_GLOB="{autohandler,dhandler,*.myt}"/>
+
+<MODE NAME="mysql"		FILE="mysql.xml" />
+
+<MODE NAME="netrexx"		FILE="netrexx.xml"
+				FILE_NAME_GLOB="*.nrx" />
+
+<MODE NAME="nqc"		FILE="nqc.xml"
+				FILE_NAME_GLOB="*.nqc" />
+
+<MODE NAME="nsis2"		FILE="nsis2.xml"
+				FILE_NAME_GLOB="*.{nsi,nsh}" />
+
+<MODE NAME="objective-c"	FILE="objective-c.xml"
+				FILE_NAME_GLOB="*.[mh]" />
+
+<MODE NAME="objectrexx"		FILE="objectrexx.xml"
+				FILE_NAME_GLOB="*.{rex,orx}" />
+
+<MODE NAME="occam"		FILE="occam.xml"
+				FILE_NAME_GLOB="*.icc" />
+
+<MODE NAME="omnimark"		FILE="omnimark.xml"
+				FILE_NAME_GLOB="*.x{om,in}" />
+
+<MODE NAME="pascal"		FILE="pascal.xml"
+				FILE_NAME_GLOB="*.{pas,dpr,dpk}" />
+
+<MODE NAME="patch"		FILE="patch.xml"
+				FILE_NAME_GLOB="*.{diff,patch}" />
+
+<MODE NAME="perl"		FILE="perl.xml"
+				FILE_NAME_GLOB="*.p[lm]"
+				FIRST_LINE_GLOB="#!/*perl*" />
+
+<MODE NAME="php"		FILE="php.xml"
+				FILE_NAME_GLOB="*.{php3,php4,php,phtml,inc}"
+				FIRST_LINE_GLOB="{&lt;?php*,#!/*php*}" />
+
+<MODE NAME="pike"		FILE="pike.xml"
+				FILE_NAME_GLOB="*.{pike,pmod}" />
+
+<MODE NAME="pl-sql"		FILE="pl-sql.xml"
+				FILE_NAME_GLOB="*.pls" />
+
+<MODE NAME="pl1"		FILE="pl1.xml"
+				FILE_NAME_GLOB="*.pl[i1]" />
+
+<MODE NAME="pop11"		FILE="pop11.xml"
+				FILE_NAME_GLOB="*.{p,pop11,p11}" />
+
+<MODE NAME="postscript"		FILE="postscript.xml"
+				FILE_NAME_GLOB="*.{ps,eps}" />
+
+<MODE NAME="powerdynamo"	FILE="powerdynamo.xml"
+				FILE_NAME_GLOB="*.{ssc,stm}" />
+
+<MODE NAME="povray"		FILE="povray.xml"
+				FILE_NAME_GLOB="*.{pov,povray}" />
+
+<MODE NAME="prolog"             FILE="prolog.xml"
+                                FILE_NAME_GLOB="*.pro" />
+
+<MODE NAME="progress"           FILE="progress.xml"
+                                FILE_NAME_GLOB="*.[piw]" />
+
+<MODE NAME="properties"		FILE="props.xml"
+				FILE_NAME_GLOB="*{properties,props}" />
+
+<MODE NAME="psp"		FILE="psp.xml"
+				FILE_NAME_GLOB="*.psp" />
+
+<MODE NAME="ptl"		FILE="ptl.xml"
+				FILE_NAME_GLOB="*.ptl"/>
+
+<MODE NAME="pvwave"		FILE="pvwave.xml"
+				FILE_NAME_GLOB="*.jou" />
+
+<MODE NAME="pyrex"		FILE="pyrex.xml"
+				FILE_NAME_GLOB="*.{pyx}" />
+
+<MODE NAME="python"		FILE="python.xml"
+				FILE_NAME_GLOB="*.{py,pyw,sc}"
+				FIRST_LINE_GLOB="#!*/*python*" />
+
+<MODE NAME="rebol"		FILE="rebol.xml"
+				FILE_NAME_GLOB="*.r" />
+
+<MODE NAME="redcode"		FILE="redcode.xml"
+				FILE_NAME_GLOB="*.{red,rc}" />
+
+<MODE NAME="relax-ng-compact"	FILE="relax-ng-compact.xml"
+				FILE_NAME_GLOB="*.rnc" />
+
+<MODE NAME="renderman-rib"	FILE="rib.xml"
+				FILE_NAME_GLOB="*.rib" />
+
+<MODE NAME="rd"			FILE="rd.xml"
+				FILE_NAME_GLOB="*.rd" />
+
+<MODE NAME="rest"		FILE="rest.xml"
+				FILE_NAME_GLOB="*.{rst,rest}"
+				FIRST_LINE_GLOB="{===,~~~}*"/>
+
+<MODE NAME="rhtml"		FILE="rhtml.xml"
+				FILE_NAME_GLOB="*.rhtml" />
+
+<MODE NAME="rpm-spec"		FILE="rpmspec.xml"
+				FILE_NAME_GLOB="*.spec" />
+
+<MODE NAME="rtf"		FILE="rtf.xml"
+				FILE_NAME_GLOB="*.rtf" />
+
+<MODE NAME="ruby"		FILE="ruby.xml"
+				FILE_NAME_GLOB="*.{rb,rbw}"
+	            FIRST_LINE_GLOB="#!*/*ruby*" />
+
+<MODE NAME="rview"		FILE="rview.xml"
+				FILE_NAME_GLOB="*.rvw" />
+
+<MODE NAME="s+"			FILE="splus.xml"
+				FILE_NAME_GLOB="*.ssc" />
+
+<MODE NAME="s#"			FILE="ssharp.xml"
+				FILE_NAME_GLOB="*.{ss,ssc,ssi,ssw,sts,aml}"  />
+
+<MODE NAME="sas"		FILE="sas.xml"
+				FILE_NAME_GLOB="*.sas" />
+
+<MODE NAME="scheme"		FILE="scheme.xml"
+				FILE_NAME_GLOB="*.scm" />
+
+<MODE NAME="sgml"		FILE="sgml.xml"
+				FILE_NAME_GLOB="*.{sgml,sgm,dtd}" />
+
+<MODE NAME="rcp" FILE="rcp.xml" FILE_NAME_GLOB="*.rcp" />
+
+<MODE NAME="shellscript"	FILE="shellscript.xml"
+				FILE_NAME_GLOB="*.{csh,sh,bash}"
+				FIRST_LINE_GLOB="#!/*sh*" />
+
+<MODE NAME="shtml"		FILE="shtml.xml"
+				FILE_NAME_GLOB="*.{shtml,shtm,ssi}" />
+
+<MODE NAME="slate"		FILE="slate.xml"
+				FILE_NAME_GLOB="*.slate" />
+
+<MODE NAME="smalltalk"		FILE="smalltalk.xml"
+				FILE_NAME_GLOB="*.{st,sources,changes}" />
+
+<MODE NAME="sdl/pr"		FILE="sdl_pr.xml"
+				FILE_NAME_GLOB="*.pr"/>
+
+<MODE NAME="sql-loader" 	FILE="sql-loader.xml"
+				FILE_NAME_GLOB="*.ctl" />
+
+<MODE NAME="smi-mib"		FILE="smi-mib.xml"
+				FILE_NAME_GLOB="*{.mib,-MIB.txt}" />
+
+<MODE NAME="sqr"                FILE="sqr.xml"
+                                FILE_NAME_GLOB="*.{sqr,sqc}" />
+
+<MODE NAME="squidconf"		FILE="squidconf.xml"
+				FILE_NAME_GLOB="squid.conf" />
+
+<MODE NAME="svn-commit"         FILE="svn-commit.xml"
+				FILE_NAME_GLOB="svn-commit*.tmp" />
+
+<MODE NAME="swig"		FILE="swig.xml"
+				FILE_NAME_GLOB="*.{i,swg}" />
+
+<MODE NAME="tcl"		FILE="tcl.xml"
+				FILE_NAME_GLOB="*.{tcl,tsh}" />
+
+<MODE NAME="texinfo"		FILE="texinfo.xml"
+				FILE_NAME_GLOB="*.texi" />
+
+<MODE NAME="tex"		FILE="tex.xml" />
+
+<MODE NAME="text"		FILE="text.xml"
+				FILE_NAME_GLOB="*.txt" />
+
+<MODE NAME="tpl"		FILE="tpl.xml"
+				FILE_NAME_GLOB="*.tpl" />
+
+<MODE NAME="transact-sql"	FILE="tsql.xml"
+				FILE_NAME_GLOB="*.sql" />
+
+<MODE NAME="template-toolkit"	FILE="tthtml.xml"
+				FILE_NAME_GLOB="*.tt{html,css,js}" />
+
+<MODE NAME="twiki"		FILE="twiki.xml"
+				FILE_NAME_GLOB="*.twiki"/>
+
+<MODE NAME="typoscript"         FILE="typoscript.xml"
+                                FILE_NAME_GLOB="*.ts"/>
+
+<MODE NAME="uscript"		FILE="uscript.xml"
+				FILE_NAME_GLOB="*.uc" />
+
+<MODE NAME="vbscript"		FILE="vbscript.xml"
+				FILE_NAME_GLOB="*.{vbs,bas,cls}" />
+
+<MODE NAME="velocity"		FILE="velocity.xml"
+				FILE_NAME_GLOB="*.vm" />
+
+<MODE NAME="verilog"		FILE="verilog.xml"
+				FILE_NAME_GLOB="*.{ver,v}" />
+
+<MODE NAME="vhdl"		FILE="vhdl.xml"
+				FILE_NAME_GLOB="*.vh*" />
+
+<!-- Great. AElfred doesn't support entities in attribute values,
+     but all other XML parsers complain if < appears. -->
+<MODE NAME="xml"		FILE="xml.xml"
+				FILE_NAME_GLOB="*.{xml,xhtml,xsd}"
+				FIRST_LINE_GLOB="&lt;\?xml*" />
+
+<MODE NAME="xq"			FILE="xq.xml"
+				FILE_NAME_GLOB="*.x{q,qm,ql}" />
+
+<MODE NAME="xsl"		FILE="xsl.xml"
+				FILE_NAME_GLOB="*.xsl" />
+
+<MODE NAME="zpt"		FILE="zpt.xml"
+				FILE_NAME_GLOB="*.{pt,zpt}"/>
+
+<MODE NAME="rfc" FILE="rfc.xml" FILE_NAME_GLOB="rfc*.txt" />
+</MODES>
diff --git a/eg/jedit/html.xml b/eg/jedit/html.xml
new file mode 100644
index 0000000..8fd7e9a
--- /dev/null
+++ b/eg/jedit/html.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<MODE>
+	<PROPS>
+		<PROPERTY NAME="commentStart" VALUE="&lt;!--" />
+		<PROPERTY NAME="commentEnd" VALUE="--&gt;" />
+	</PROPS>
+
+	<RULES IGNORE_CASE="TRUE">
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>&lt;!--</BEGIN>
+			<END>--&gt;</END>
+		</SPAN>
+
+		<!-- JavaScript -->
+		<SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">
+			<BEGIN>&lt;SCRIPT</BEGIN>
+			<END>&lt;/SCRIPT&gt;</END>
+		</SPAN>
+
+		<!-- stylesheet -->
+		<SPAN TYPE="MARKUP" DELEGATE="CSS">
+			<BEGIN>&lt;STYLE</BEGIN>
+			<END>&lt;/STYLE&gt;</END>
+		</SPAN>
+
+		<!-- DTD instructions -->
+		<SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">
+			<BEGIN>&lt;!</BEGIN>
+			<END>&gt;</END>
+		</SPAN>
+
+		<!-- markup tags -->
+		<SPAN TYPE="MARKUP" DELEGATE="TAGS">
+			<BEGIN>&lt;</BEGIN>
+			<END>&gt;</END>
+		</SPAN>
+
+		<!-- SGML entities -->
+		<SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">
+			<BEGIN>&amp;</BEGIN>
+			<END>;</END>
+		</SPAN>
+	</RULES>
+
+	<!-- ESCAPE is not exactly right but it is needed to correctly
+	     handle JavaScript in on* parameters.
+             NOTE: ESCAPE moved from RULE to SPANs! -->
+	<RULES SET="TAGS" DEFAULT="MARKUP">
+		<!-- Inline CSS -->
+ 		<SPAN_REGEXP TYPE="MARKUP" DELEGATE="css::PROPERTIES" HASH_CHAR="style">
+			<BEGIN>style\s*=\s*(["'])</BEGIN>
+			<END>$1</END>
+		</SPAN_REGEXP>
+
+		<!-- NOTE: no ESCAPE for quotes, at least for attributes; e.g onclick="alert(\"foo\");" is invalid! -->
+		<SPAN TYPE="LITERAL1">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL1">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+
+		<SEQ TYPE="OPERATOR">=</SEQ>
+
+		<KEYWORDS>
+			<!-- HTML/XHTML elements, taken from http://de.selfhtml.org/html/referenz/elemente.htm -->
+			<MARKUP>a</MARKUP>
+			<MARKUP>abbr</MARKUP>
+			<MARKUP>acronym</MARKUP>
+			<MARKUP>address</MARKUP>
+			<MARKUP>applet</MARKUP>
+			<MARKUP>area</MARKUP>
+			<MARKUP>b</MARKUP>
+			<MARKUP>base</MARKUP>
+			<MARKUP>basefont</MARKUP>
+			<MARKUP>bdo</MARKUP>
+			<MARKUP>big</MARKUP>
+			<MARKUP>blockquote</MARKUP>
+			<MARKUP>body</MARKUP>
+			<MARKUP>br</MARKUP>
+			<MARKUP>button</MARKUP>
+			<MARKUP>caption</MARKUP>
+			<MARKUP>center</MARKUP>
+			<MARKUP>cite</MARKUP>
+			<MARKUP>code</MARKUP>
+			<MARKUP>col</MARKUP>
+			<MARKUP>colgroup</MARKUP>
+			<MARKUP>dd</MARKUP>
+			<MARKUP>del</MARKUP>
+			<MARKUP>dfn</MARKUP>
+			<MARKUP>dir</MARKUP>
+			<MARKUP>div</MARKUP>
+			<MARKUP>dl</MARKUP>
+			<MARKUP>dt</MARKUP>
+			<MARKUP>em</MARKUP>
+			<MARKUP>fieldset</MARKUP>
+			<MARKUP>font</MARKUP>
+			<MARKUP>form</MARKUP>
+			<MARKUP>frame</MARKUP>
+			<MARKUP>frameset</MARKUP>
+			<MARKUP>h1</MARKUP>
+			<MARKUP>h2</MARKUP>
+			<MARKUP>h3</MARKUP>
+			<MARKUP>h4</MARKUP>
+			<MARKUP>h5</MARKUP>
+			<MARKUP>h6</MARKUP>
+			<MARKUP>head</MARKUP>
+			<MARKUP>hr</MARKUP>
+			<MARKUP>html</MARKUP>
+			<MARKUP>i</MARKUP>
+			<MARKUP>iframe</MARKUP>
+			<MARKUP>img</MARKUP>
+			<MARKUP>input</MARKUP>
+			<MARKUP>ins</MARKUP>
+			<MARKUP>isindex</MARKUP>
+			<MARKUP>kbd</MARKUP>
+			<MARKUP>label</MARKUP>
+			<MARKUP>legend</MARKUP>
+			<MARKUP>li</MARKUP>
+			<MARKUP>link</MARKUP>
+			<MARKUP>map</MARKUP>
+			<MARKUP>menu</MARKUP>
+			<MARKUP>meta</MARKUP>
+			<MARKUP>noframes</MARKUP>
+			<MARKUP>noscript</MARKUP>
+			<MARKUP>object</MARKUP>
+			<MARKUP>ol</MARKUP>
+			<MARKUP>optgroup</MARKUP>
+			<MARKUP>option</MARKUP>
+			<MARKUP>p</MARKUP>
+			<MARKUP>param</MARKUP>
+			<MARKUP>pre</MARKUP>
+			<MARKUP>q</MARKUP>
+			<MARKUP>s</MARKUP>
+			<MARKUP>samp</MARKUP>
+			<MARKUP>script</MARKUP>
+			<MARKUP>select</MARKUP>
+			<MARKUP>small</MARKUP>
+			<MARKUP>span</MARKUP>
+			<MARKUP>strike</MARKUP>
+			<MARKUP>strong</MARKUP>
+			<MARKUP>style</MARKUP>
+			<MARKUP>sub</MARKUP>
+			<MARKUP>sup</MARKUP>
+			<MARKUP>table</MARKUP>
+			<MARKUP>tbody</MARKUP>
+			<MARKUP>td</MARKUP>
+			<MARKUP>textarea</MARKUP>
+			<MARKUP>tfoot</MARKUP>
+			<MARKUP>th</MARKUP>
+			<MARKUP>thead</MARKUP>
+			<MARKUP>title</MARKUP>
+			<MARKUP>tr</MARKUP>
+			<MARKUP>tt</MARKUP>
+			<MARKUP>u</MARKUP>
+			<MARKUP>ul</MARKUP>
+			<MARKUP>var</MARKUP>
+		</KEYWORDS>
+	</RULES>
+
+	<RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">
+		<SEQ TYPE="MARKUP" DELEGATE="javascript::MAIN">&gt;</SEQ>
+		<!-- handle <SCRIPT SRC="..."> properly -->
+		<SEQ TYPE="MARKUP" DELEGATE="BACK_TO_HTML">SRC=</SEQ>
+
+		<!-- Inline CSS -->
+ 		<SPAN_REGEXP TYPE="MARKUP" DELEGATE="css::PROPERTIES" HASH_CHAR="style">
+			<BEGIN>style\s*=\s*(["'])</BEGIN>
+			<END>$1</END>
+		</SPAN_REGEXP>
+	</RULES>
+
+	<RULES SET="BACK_TO_HTML" DEFAULT="MARKUP">
+		<SEQ TYPE="MARKUP" DELEGATE="html::MAIN">&gt;</SEQ>
+	</RULES>
+
+	<RULES SET="CSS" DEFAULT="MARKUP">
+		<SEQ TYPE="MARKUP" DELEGATE="css::MAIN">&gt;</SEQ>
+	</RULES>
+</MODE>
diff --git a/eg/jedit/interchange.xml b/eg/jedit/interchange.xml
new file mode 100644
index 0000000..982258e
--- /dev/null
+++ b/eg/jedit/interchange.xml
@@ -0,0 +1,466 @@
+<?xml version="1.0"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+<!--
+	Interchange (IC) mode by Chris Jesseman (chris at sitemajic.net)
+	Extended by Justin Otten (justino at fragrancenet.com)
+	Works on IC 4.6.x, should be backwards compatible with Minivend 4.04x
+	This is a work in progress!
+	
+	Interchange tags in jEdit:
+	
+	Non Container Tags: KEYWORD1
+	Modifiers: KEYWORD2
+	Control Structures & Container Tags: KEYWORD3
+-->
+<MODE NAME="interchange">
+	<PROPS>
+		<PROPERTY NAME="commentStart" VALUE="&lt;!--" />
+		<PROPERTY NAME="commentEnd" VALUE="--&gt;" />
+		<PROPERTY NAME="filenameGlob" VALUE="*.html" />
+		<PROPERTY NAME="noWordSep" VALUE="-_" />
+		<PROPERTY NAME="tabSize" VALUE="4" />
+	</PROPS>
+	<RULES IGNORE_CASE="FALSE">
+		<!-- Set Comment Styles -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>[comment]</BEGIN>
+			<END>[/comment]</END>
+		</SPAN>
+		
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>&lt;!--</BEGIN>
+			<END>--&gt;</END>
+		</SPAN>
+		
+		<!-- Embed Perl when in perl type blocks -->
+		<SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">
+			<BEGIN>[perl</BEGIN>
+			<END>[/perl]</END>
+		</SPAN>
+		<SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">
+			<BEGIN>[calc]</BEGIN>
+			<END>[/calc]</END>
+		</SPAN>
+		<!-- Heredoc -->
+		<SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL2" DELEGATE="perl::MAIN">
+			<BEGIN><![CDATA[<<\p{Space}*(['"])([\p{Space}\p{Alnum}_]*)\1;?\s*]]></BEGIN>
+			<END AT_LINE_START="TRUE">$2</END>
+		</SPAN_REGEXP>
+		<SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL2" DELEGATE="perl::MAIN">
+			<BEGIN><![CDATA[<<([\p{Alpha}_][\p{Alnum}_]*);?\s*]]></BEGIN>
+			<END AT_LINE_START="TRUE">$1</END>
+		</SPAN_REGEXP>
+		
+		<!-- Interchange constructs -->
+		<SPAN TYPE="MARKUP" DELEGATE="INTERCHANGE">
+			<BEGIN>[</BEGIN>
+			<END>]</END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL2">
+			<BEGIN>@_</BEGIN>
+			<END>_@</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL2">
+			<BEGIN>@@</BEGIN>
+			<END>@@</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL2">
+			<BEGIN>__</BEGIN>
+			<END>__</END>
+		</SPAN>
+		
+		<!-- JavaScript -->
+		<SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">
+			<BEGIN>&lt;script</BEGIN>
+			<END>&lt;/script&gt;</END>
+		</SPAN>
+
+		<!-- CSS Stylr Sheet -->
+		<SPAN TYPE="MARKUP" DELEGATE="CSS">
+			<BEGIN>&lt;style</BEGIN>
+			<END>&lt;/style&gt;</END>
+		</SPAN>
+
+		<!-- DTD instructions -->
+		<SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">
+			<BEGIN>&lt;!</BEGIN>
+			<END>&gt;</END>
+		</SPAN>
+		
+		<!-- HTML markup tags -->
+		<SPAN TYPE="MARKUP" DELEGATE="HTML">
+			<BEGIN>&lt;</BEGIN>
+			<END>&gt;</END>
+		</SPAN>
+		
+		<!-- SGML entities -->
+		<SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">
+			<BEGIN>&amp;</BEGIN>
+			<END>;</END>
+		</SPAN>
+		
+		<MARK_FOLLOWING TYPE="LABEL">mv_</MARK_FOLLOWING>
+	</RULES>
+	
+	<RULES SET="HTML" DEFAULT="MARKUP">
+		<SPAN TYPE="KEYWORD1" DELEGATE="INTERCHANGE" EXCLUDE_MATCH="FALSE" NO_LINE_BREAK="FALSE" NO_WORD_BREAK="FALSE">
+			<BEGIN>[</BEGIN>
+			<END>]</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL2">
+			<BEGIN>@_</BEGIN>
+			<END>_@</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL2">
+			<BEGIN>@@</BEGIN>
+			<END>@@</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL2">
+			<BEGIN>__</BEGIN>
+			<END>__</END>
+		</SPAN>
+		
+		<!-- Inline CSS -->
+ 		<SPAN_REGEXP TYPE="MARKUP" DELEGATE="css::PROPERTIES" HASH_CHAR="style">
+			<BEGIN>style\s*=\s*(["'])</BEGIN>
+			<END>$1</END>
+		</SPAN_REGEXP>
+		
+		<MARK_FOLLOWING TYPE="LABEL">mv_</MARK_FOLLOWING>
+		
+		<SEQ TYPE="OPERATOR">=</SEQ>
+		
+		<KEYWORDS>
+			<!-- HTML/XHTML elements, taken from http://de.selfhtml.org/html/referenz/elemente.htm -->
+			<MARKUP>a</MARKUP>
+			<MARKUP>abbr</MARKUP>
+			<MARKUP>acronym</MARKUP>
+			<MARKUP>address</MARKUP>
+			<MARKUP>applet</MARKUP>
+			<MARKUP>area</MARKUP>
+			<MARKUP>b</MARKUP>
+			<MARKUP>base</MARKUP>
+			<MARKUP>basefont</MARKUP>
+			<MARKUP>bdo</MARKUP>
+			<MARKUP>big</MARKUP>
+			<MARKUP>blockquote</MARKUP>
+			<MARKUP>body</MARKUP>
+			<MARKUP>br</MARKUP>
+			<MARKUP>button</MARKUP>
+			<MARKUP>caption</MARKUP>
+			<MARKUP>center</MARKUP>
+			<MARKUP>cite</MARKUP>
+			<MARKUP>code</MARKUP>
+			<MARKUP>col</MARKUP>
+			<MARKUP>colgroup</MARKUP>
+			<MARKUP>dd</MARKUP>
+			<MARKUP>del</MARKUP>
+			<MARKUP>dfn</MARKUP>
+			<MARKUP>dir</MARKUP>
+			<MARKUP>div</MARKUP>
+			<MARKUP>dl</MARKUP>
+			<MARKUP>dt</MARKUP>
+			<MARKUP>em</MARKUP>
+			<MARKUP>fieldset</MARKUP>
+			<MARKUP>font</MARKUP>
+			<MARKUP>form</MARKUP>
+			<MARKUP>frame</MARKUP>
+			<MARKUP>frameset</MARKUP>
+			<MARKUP>h1</MARKUP>
+			<MARKUP>h2</MARKUP>
+			<MARKUP>h3</MARKUP>
+			<MARKUP>h4</MARKUP>
+			<MARKUP>h5</MARKUP>
+			<MARKUP>h6</MARKUP>
+			<MARKUP>head</MARKUP>
+			<MARKUP>hr</MARKUP>
+			<MARKUP>html</MARKUP>
+			<MARKUP>i</MARKUP>
+			<MARKUP>iframe</MARKUP>
+			<MARKUP>img</MARKUP>
+			<MARKUP>input</MARKUP>
+			<MARKUP>ins</MARKUP>
+			<MARKUP>isindex</MARKUP>
+			<MARKUP>kbd</MARKUP>
+			<MARKUP>label</MARKUP>
+			<MARKUP>legend</MARKUP>
+			<MARKUP>li</MARKUP>
+			<MARKUP>link</MARKUP>
+			<MARKUP>map</MARKUP>
+			<MARKUP>menu</MARKUP>
+			<MARKUP>meta</MARKUP>
+			<MARKUP>noframes</MARKUP>
+			<MARKUP>noscript</MARKUP>
+			<MARKUP>object</MARKUP>
+			<MARKUP>ol</MARKUP>
+			<MARKUP>optgroup</MARKUP>
+			<MARKUP>option</MARKUP>
+			<MARKUP>p</MARKUP>
+			<MARKUP>param</MARKUP>
+			<MARKUP>pre</MARKUP>
+			<MARKUP>q</MARKUP>
+			<MARKUP>s</MARKUP>
+			<MARKUP>samp</MARKUP>
+			<MARKUP>script</MARKUP>
+			<MARKUP>select</MARKUP>
+			<MARKUP>small</MARKUP>
+			<MARKUP>span</MARKUP>
+			<MARKUP>strike</MARKUP>
+			<MARKUP>strong</MARKUP>
+			<MARKUP>style</MARKUP>
+			<MARKUP>sub</MARKUP>
+			<MARKUP>sup</MARKUP>
+			<MARKUP>table</MARKUP>
+			<MARKUP>tbody</MARKUP>
+			<MARKUP>td</MARKUP>
+			<MARKUP>textarea</MARKUP>
+			<MARKUP>tfoot</MARKUP>
+			<MARKUP>th</MARKUP>
+			<MARKUP>thead</MARKUP>
+			<MARKUP>title</MARKUP>
+			<MARKUP>tr</MARKUP>
+			<MARKUP>tt</MARKUP>
+			<MARKUP>u</MARKUP>
+			<MARKUP>ul</MARKUP>
+			<MARKUP>var</MARKUP>
+		</KEYWORDS>
+	</RULES>
+	
+	<RULES SET="QUOTES" DEFAULT="LITERAL2">
+		<SPAN TYPE="KEYWORD1" DELEGATE="INTERCHANGE" EXCLUDE_MATCH="FALSE" NO_LINE_BREAK="FALSE" NO_WORD_BREAK="FALSE">
+			<BEGIN>[</BEGIN>
+			<END>]</END>
+		</SPAN>
+	</RULES>
+	
+	<RULES SET="INTERCHANGE" DEFAULT="LITERAL1">
+		<!-- backtick -> PERL -->
+		<SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">
+			<BEGIN>`</BEGIN>
+			<END>`</END>
+		</SPAN>
+		
+		<SPAN DELEGATE="QUOTES" NO_LINE_BREAK="FALSE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+
+		<SPAN DELEGATE="QUOTES" NO_LINE_BREAK="FALSE">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+		
+		<SPAN TYPE="KEYWORD1" DELEGATE="INTERCHANGE" EXCLUDE_MATCH="FALSE" NO_LINE_BREAK="FALSE" NO_WORD_BREAK="FALSE">
+			<BEGIN>[</BEGIN>
+			<END>]</END>
+		</SPAN>
+
+		<MARK_FOLLOWING TYPE="KEYWORD2">#</MARK_FOLLOWING>
+		
+		<KEYWORDS>
+			<!-- Non Container Tags --> 
+			<KEYWORD1>accessories</KEYWORD1>
+			<KEYWORD1>area</KEYWORD1>
+			<KEYWORD1>assign</KEYWORD1>
+			<KEYWORD1>banner</KEYWORD1>
+			<KEYWORD1>bounce</KEYWORD1>
+			<KEYWORD1>cart</KEYWORD1>
+			<KEYWORD1>cgi</KEYWORD1>
+			<KEYWORD1>checked</KEYWORD1>
+			<KEYWORD1>control</KEYWORD1>
+			<KEYWORD1>counter</KEYWORD1>
+			<KEYWORD1>css</KEYWORD1>
+			<KEYWORD1>data</KEYWORD1>
+			<KEYWORD1>default</KEYWORD1>
+			<KEYWORD1>delete-cart</KEYWORD1>
+			<KEYWORD1>description</KEYWORD1>
+			<KEYWORD1>discount-space</KEYWORD1>
+			<KEYWORD1>dump</KEYWORD1>
+			<KEYWORD1>ecml</KEYWORD1>
+			<KEYWORD1>env</KEYWORD1>
+			<KEYWORD1>error</KEYWORD1>
+			<KEYWORD1>explicit</KEYWORD1>
+			<KEYWORD1>export</KEYWORD1>
+			<KEYWORD1>field</KEYWORD1>
+			<KEYWORD1>file</KEYWORD1>
+			<KEYWORD1>flag</KEYWORD1>
+			<KEYWORD1>fly-tax</KEYWORD1>
+			<KEYWORD1>form-session-id</KEYWORD1>
+			<KEYWORD1>get-url</KEYWORD1>
+			<KEYWORD1>goto</KEYWORD1>
+			<KEYWORD1>handling</KEYWORD1>
+			<KEYWORD1>html_table</KEYWORD1>
+			<KEYWORD1>image</KEYWORD1>
+			<KEYWORD1>import</KEYWORD1>
+			<KEYWORD1>include</KEYWORD1>
+			<KEYWORD1>index</KEYWORD1>
+			<KEYWORD1>input_filter</KEYWORD1>
+			<KEYWORD1>item</KEYWORD1>
+			<KEYWORD1>label</KEYWORD1>
+			<KEYWORD1>load-cart</KEYWORD1>
+			<KEYWORD1>matches</KEYWORD1>
+			<KEYWORD1>more</KEYWORD1>
+			<KEYWORD1>nitems</KEYWORD1>
+			<KEYWORD1>order</KEYWORD1>
+			<KEYWORD1>page</KEYWORD1>
+			<KEYWORD1>pragma</KEYWORD1>
+			<KEYWORD1>price</KEYWORD1>
+			<KEYWORD1>process</KEYWORD1>
+			<KEYWORD1>quanity</KEYWORD1>
+			<KEYWORD1>read-cookie</KEYWORD1>
+			<KEYWORD1>restrict</KEYWORD1>
+			<KEYWORD1>record</KEYWORD1>
+			<KEYWORD1>salestax</KEYWORD1>
+			<KEYWORD1>save-cart</KEYWORD1>
+			<KEYWORD1>scratch</KEYWORD1>
+			<KEYWORD1>scratchd</KEYWORD1>
+			<KEYWORD1>search-region</KEYWORD1>
+			<KEYWORD1>selected</KEYWORD1>
+			<KEYWORD1>set-cookie</KEYWORD1>
+			<KEYWORD1>setlocale</KEYWORD1>
+			<KEYWORD1>shipping</KEYWORD1>
+			<KEYWORD1>shipping-desc</KEYWORD1>
+			<KEYWORD1>subtotal</KEYWORD1>
+			<KEYWORD1>timed-build</KEYWORD1>
+			<KEYWORD1>total-cost</KEYWORD1>
+			<KEYWORD1>uneval</KEYWORD1>
+			<KEYWORD1>update</KEYWORD1>
+			<KEYWORD1>userdb</KEYWORD1>
+			<KEYWORD1>usertrack</KEYWORD1>
+			<KEYWORD1>value_extended</KEYWORD1>
+			<KEYWORD1>value</KEYWORD1>
+			<KEYWORD1>value-extended</KEYWORD1>
+			<KEYWORD1>var</KEYWORD1>
+			<KEYWORD1>version</KEYWORD1>
+			
+			<!-- Modifiers -->
+			<KEYWORD2>alternate</KEYWORD2>
+			<KEYWORD2>change</KEYWORD2>
+			<KEYWORD2>code</KEYWORD2>
+			<KEYWORD2>color</KEYWORD2>
+			<KEYWORD2>compare</KEYWORD2>
+			<KEYWORD2>condition</KEYWORD2>
+			<KEYWORD2>config</KEYWORD2>
+			<KEYWORD2>increment</KEYWORD2>
+			<KEYWORD2>last</KEYWORD2>
+			<KEYWORD2>list</KEYWORD2>
+			<KEYWORD2>name=</KEYWORD2>
+			<KEYWORD2>next</KEYWORD2>
+			<KEYWORD2>param</KEYWORD2>
+			<KEYWORD2>pos</KEYWORD2>
+			<KEYWORD2>price</KEYWORD2>
+			<KEYWORD2>session</KEYWORD2>
+			<KEYWORD2>size</KEYWORD2>
+			<KEYWORD2>term</KEYWORD2>
+			<KEYWORD2>type</KEYWORD2>
+			<KEYWORD2>validcc</KEYWORD2>
+			
+			<!-- Universal tag attributes -->
+			<KEYWORD2>hide</KEYWORD2>
+			<KEYWORD2>interpolate</KEYWORD2>
+			<KEYWORD2>reparse</KEYWORD2>
+			
+			<!-- Control Structures & Container Tags -->
+			<KEYWORD3>button</KEYWORD3>
+			<KEYWORD3>calc</KEYWORD3>
+			<KEYWORD3>calcn</KEYWORD3>
+			<KEYWORD3>catch</KEYWORD3>
+			<KEYWORD3>col</KEYWORD3>
+			<KEYWORD3>column</KEYWORD3>
+			<KEYWORD3>control-set</KEYWORD3>
+			<KEYWORD3>currency</KEYWORD3>
+			<KEYWORD3>debug</KEYWORD3>
+			<KEYWORD3>discount</KEYWORD3>
+			<KEYWORD3>either</KEYWORD3>
+			<KEYWORD3>else</KEYWORD3>
+			<KEYWORD3>elsif</KEYWORD3>
+			<KEYWORD3>email</KEYWORD3>
+			<KEYWORD3>if</KEYWORD3>
+			<KEYWORD3>if-item-data</KEYWORD3>
+			<KEYWORD3>if-item-field</KEYWORD3>
+			<KEYWORD3>item-list</KEYWORD3>
+			<KEYWORD3>filter</KEYWORD3>
+			<KEYWORD3>fly-list</KEYWORD3>
+			<KEYWORD3>log</KEYWORD3>
+			<KEYWORD3>loop</KEYWORD3>
+			<KEYWORD3>modifier</KEYWORD3>
+			<KEYWORD3>more-list</KEYWORD3>
+			<KEYWORD3>mvasp</KEYWORD3>
+			<KEYWORD3>perl</KEYWORD3>
+			<KEYWORD3>query</KEYWORD3>
+			<KEYWORD3>row</KEYWORD3>			
+			<KEYWORD3>search-region</KEYWORD3>
+			<KEYWORD3>set</KEYWORD3>
+			<KEYWORD3>seti</KEYWORD3>
+			<KEYWORD3>tag</KEYWORD3>
+			<KEYWORD3>then</KEYWORD3>
+			<KEYWORD3>time</KEYWORD3>
+			<KEYWORD3>tmp</KEYWORD3>
+			<KEYWORD3>tmpn</KEYWORD3>
+			<KEYWORD3>tree</KEYWORD3>
+			<KEYWORD3>try</KEYWORD3>
+
+			<!-- Unknown -->
+			<KEYWORD3>items</KEYWORD3>			
+			<KEYWORD3>ordered</KEYWORD3>
+			
+			<!-- Pragmas -->
+			<KEYWORD4>compatible_5_2</KEYWORD4>
+			<KEYWORD4>dml</KEYWORD4>
+			<KEYWORD4>download</KEYWORD4>
+			<KEYWORD4>dynamic_variables</KEYWORD4>
+			<KEYWORD4>dynamic_variables_file_only</KEYWORD4>
+			<KEYWORD4>filter_sql_no_backslash</KEYWORD4>
+			<KEYWORD4>init_page</KEYWORD4>
+			<KEYWORD4>interpolate_itl_references</KEYWORD4>
+			<KEYWORD4>no_default_reparse</KEYWORD4>
+			<KEYWORD4>no_html_comment_embed</KEYWORD4>
+			<KEYWORD4>no_image_rewrite</KEYWORD4>
+			<KEYWORD4>no_locale_parse</KEYWORD4>
+			<KEYWORD4>perl_warnings_in_page</KEYWORD4>
+			<KEYWORD4>post_page</KEYWORD4>
+			<KEYWORD4>pre_page</KEYWORD4>
+			<KEYWORD4>safe_date</KEYWORD4>
+			<KEYWORD4>strip_white</KEYWORD4>
+			<KEYWORD4>substitute_table_image</KEYWORD4>
+		</KEYWORDS>
+			
+		<SEQ TYPE="OPERATOR">!</SEQ>
+		<SEQ TYPE="OPERATOR">&gt;</SEQ>
+		<SEQ TYPE="OPERATOR">&lt;</SEQ>
+		<SEQ TYPE="OPERATOR">/</SEQ>
+		<SEQ TYPE="OPERATOR">=</SEQ>
+		<SEQ TYPE="OPERATOR">+</SEQ>		
+		
+		<OPERATOR>==</OPERATOR>
+		<OPERATOR>eq</OPERATOR>
+		<OPERATOR>ne</OPERATOR>
+		<OPERATOR>gt</OPERATOR>
+		<OPERATOR>lt</OPERATOR>
+		<OPERATOR>!=</OPERATOR>
+
+		<MARK_FOLLOWING TYPE="LABEL">mv_</MARK_FOLLOWING>
+	</RULES>
+	
+	<RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">
+		<SEQ TYPE="MARKUP" DELEGATE="javascript::MAIN">&gt;</SEQ>
+		<!-- handle <SCRIPT SRC="..."> properly -->
+		<SEQ TYPE="MARKUP" DELEGATE="BACK_TO_INTERCHANGE">SRC=</SEQ>
+
+		<!-- Inline CSS -->
+ 		<SPAN_REGEXP TYPE="MARKUP" DELEGATE="css::PROPERTIES" HASH_CHAR="style">
+			<BEGIN>style\s*=\s*(["'])</BEGIN>
+			<END>$1</END>
+		</SPAN_REGEXP>
+	</RULES>
+	
+	<RULES SET="BACK_TO_INTERCHANGE" DEFAULT="MARKUP">
+		<SEQ TYPE="MARKUP" DELEGATE="interchange::MAIN">&gt;</SEQ>
+	</RULES>
+
+	<RULES SET="CSS" DEFAULT="MARKUP">
+		<SEQ TYPE="MARKUP" DELEGATE="css::MAIN">&gt;</SEQ>
+	</RULES>
+</MODE>


hooks/post-receive
-- 
Interchange



More information about the interchange-cvs mailing list