import initial.
authorBenoît Pin <benoit.pin@gmail.com>
Sun, 7 Nov 2010 01:56:00 +0000 (02:56 +0100)
committerBenoît Pin <benoit.pin@gmail.com>
Sun, 7 Nov 2010 01:56:00 +0000 (02:56 +0100)
87 files changed:
.project [new file with mode: 0644]
CHANGES.txt [new file with mode: 0755]
Extensions/EpozPostTidy.py [new file with mode: 0755]
Extensions/Install.py [new file with mode: 0755]
Extensions/__init__.py [new file with mode: 0755]
FAQ.txt [new file with mode: 0755]
HISTORY.txt [new file with mode: 0755]
LICENSE.txt [new file with mode: 0755]
README.txt [new file with mode: 0755]
TODO.txt [new file with mode: 0755]
__init__.py [new file with mode: 0755]
epoz/epoz_core/epoz_blank_iframe.html.pt [new file with mode: 0755]
epoz/epoz_core/epoz_iframe_trigger.js.dtml [new file with mode: 0644]
epoz/epoz_core/epoz_iframe_trigger.js.dtml.metadata [new file with mode: 0644]
epoz/epoz_core/epoz_multilingual.js.pt [new file with mode: 0644]
epoz/epoz_core/epoz_multilingual.js.pt.metadata [new file with mode: 0644]
epoz/epoz_core/epoz_redirect.js.dtml [new file with mode: 0644]
epoz/epoz_core/epoz_redirect.js.dtml.metadata [new file with mode: 0644]
epoz/epoz_core/epoz_script_color.html.dtml [new file with mode: 0755]
epoz/epoz_core/epoz_script_detect.js.dtml [new file with mode: 0755]
epoz/epoz_core/epoz_script_detect.js.dtml.metadata [new file with mode: 0644]
epoz/epoz_core/epoz_script_main.js.dtml [new file with mode: 0755]
epoz/epoz_core/epoz_script_main.js.dtml.metadata [new file with mode: 0644]
epoz/epoz_core/epoz_script_table.html.dtml [new file with mode: 0755]
epoz/epoz_core/epoz_script_widget.js.dtml [new file with mode: 0755]
epoz/epoz_core/vcXMLRPC.js.dtml [new file with mode: 0755]
epoz/epoz_core/vcXMLRPC.js.dtml.metadata [new file with mode: 0644]
epoz/epoz_i18n/epoz_lang_da.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_de.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_en.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_es.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_fi.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_fr.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_hu.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_it.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_nl.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_no.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_pl.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_pt-br.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_pt.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_ru.js.dtml [new file with mode: 0755]
epoz/epoz_i18n/epoz_lang_zh-cn.js.dtml [new file with mode: 0755]
epoz/epoz_images/epoz_button_anchor.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_bgcolor.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_bold.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_centre.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_hr.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_hyperlink.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_image.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_indent.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_italic.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_left_just.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_list.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_numbered_list.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_outdent.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_redo.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_right_just.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_space.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_strikethrough.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_subscript.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_superscript.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_table.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_textcolor.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_tools.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_underline.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_undo.gif [new file with mode: 0644]
epoz/epoz_images/epoz_button_unformat.gif [new file with mode: 0644]
epoz/epoz_plone/epoz_toolbox.pt [new file with mode: 0755]
epoz/epoz_plone/epoz_wysiwyg_support.pt [new file with mode: 0755]
epoz/epoz_plone/wysiwyg_support.pt [new file with mode: 0755]
i18n/epoz_lang_da.po [new file with mode: 0644]
i18n/epoz_lang_de.po [new file with mode: 0644]
i18n/epoz_lang_en.po [new file with mode: 0644]
i18n/epoz_lang_es.po [new file with mode: 0644]
i18n/epoz_lang_fi.po [new file with mode: 0644]
i18n/epoz_lang_fr.po [new file with mode: 0644]
i18n/epoz_lang_hu.po [new file with mode: 0644]
i18n/epoz_lang_it.po [new file with mode: 0644]
i18n/epoz_lang_nl.po [new file with mode: 0644]
i18n/epoz_lang_no.po [new file with mode: 0644]
i18n/epoz_lang_pl.po [new file with mode: 0644]
i18n/epoz_lang_pt-br.po [new file with mode: 0644]
i18n/epoz_lang_pt.po [new file with mode: 0644]
i18n/epoz_lang_ru.po [new file with mode: 0644]
i18n/epoz_lang_zh-cn.po [new file with mode: 0644]
mxTidyHowTo.txt [new file with mode: 0755]
version.txt [new file with mode: 0755]

diff --git a/.project b/.project
new file mode 100644 (file)
index 0000000..39c412f
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>Epoz</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.python.pydev.PyDevBuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>com.ibm.sse.model.structuredbuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.trustudio.core.trustudio</nature>\r
+               <nature>org.python.pydev.pythonNature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100755 (executable)
index 0000000..20b358e
--- /dev/null
@@ -0,0 +1,213 @@
+Epoz - Changes
+
+ 0.9.0
+     - Reorganized directory layout into core, i18n, images & plone. Please
+       note: You need to "reinstall" Epoz with Quickinstaller / External Method
+       when using Epoz in CMF/Plone.
+     
+        - Andy Dustman provided a patch for removing MS-Word-Garbage-tags.
+          Thanks Andy!!!
+          
+     - Documentation about Epoz for end-users is provided by Tom Purl (see 
+       "EpozBook":http://zopewiki.org/EpozBook). Thanks Tom!
+     - fixed bug: Plone-Toolbox didn't check permissions 'View' and 
+       'List folder contents' in breadcrumbs. Thanks to Cyrille Lebeaupin
+       from Ingeniweb for patch!
+       
+     - fixed bug: Image-Preview in Plone-Toolbox was broken in IE.
+     
+     - fixed bug: JavaScript in content-area could break Epoz...       
+       Thanks to Christian Zagrodnick from gocept.com for patch!
+       
+     - cleaned up line-endings. No more need to write complicated 
+       PERL/C++/ADA-Scripts to get rid of them...
+     
+     
+ 0.8.6
+
+     - fixed bug: Mozilla / Firefox leaves a single br-tag for
+       an empty form. Epoz will clean this mess now.
+
+     - added a wysiwyg_support-switch so Epoz can coexist with 
+       other wysiwyg-editors in Plone (esp. Kupu). Moved former
+       wysiwyg_support to epoz_wysiwyg_support. Thanks to
+       Duncan Booth for patch!!!
+
+     - little cleanup to epoz_script_widget: refactored img-string
+       for spacer, so the code becomes more readable.
+                
+     - fixed bug in epoz_toolbox: CMFPhotos were only shown for preview,
+       but not for inserting as image. Thanks to Bjorn van der Meer
+       for patch!!!
+       
+     - updated russian translation; thanks to Michael Krishtopa!
+        
+     - added some new FAQs.
+
+        
+ 0.8.5
+      
+     - added keyboard shortcuts for Mozilla / Firefox which are already
+       supported by IE: CTRL + b for bold, CTRL + i for italics, CTRL + u
+       for underlined, CTRL + k for create link.
+
+     - added a HowTo for easier setup of mxTidy to get valid XHTML from Epoz
+       (see mxTidyHowTo.txt).
+     
+     - fixed bug: made width/height-settings for Epoz working
+       with Archetypes. Thanks to Christian Theune from Gocept for patch!
+       
+        - fixed bug: corrected the slashing of folders in Epoz-toolbox 
+          for Plone (http://plone.org/collector/3479)
+                 
+       
+ 0.8.4
+
+     - fixed bug: toolbox didn't start from the correct location if the
+       portal_factory was activated.
+
+     - fixed bug: wysiwyg support in Plone could be broken, because
+       URL3 in wysiwyg_support isn't available under all circumstances.
+       I forgot that the damn test()-method evaluates all expressions
+       always, regardless of the condition... Thanks to Simon Pamies
+       for patch!
+       
+     - updated browser-detection-javascript to Browser Detect v2.1.6.
+              
+     - some whitespace-cleanups thanks to AnyEdit for Eclipse.      
+
+ 0.8.3
+
+     - added a FAQ. Pleae read it before asking questions...
+
+     - added label for html-source-switch, because many people asked for
+       it. Hope this helps clearing up the meaning of the little checkbox
+       below the wysiwyg-area...
+
+     - added translations for tidy-messages in the browser-status-bar to
+       en & de. Please note: Don't use any entities if you want to translate,
+       because the browser-status-bar doesn't support entities!
+
+     - Fixed bug: missing form_path in epoz_script_widget caused problems
+       when using portal_factory in Plone. Thanks to Danny Bloemendaal (for
+       detecting the problem) and Geoff Davis for patch! Added a check to
+       wysiwyg_support to detect document-creation via portal_factory.
+
+     - Fixed bug: the Epoz-Iframe in epoz_script_widget wasn't loaded via
+       an absolute url, so browsers could complain when running Epoz via https.
+
+ 0.8.2
+
+     - Updated license to Zope Public License 2.1.
+
+     - Danny Bloemendaal provided a cleaned up toolbox for use in Plone 2.
+       Thank you, Danny!
+
+     - Added "Photo" (CMFPhoto) as selectable image-type to the toolbox.
+       Thanks to Shane Graber for patch!
+
+     - set wordwrap for mxTidy/uTidy to 79 character to avoid some problems
+       with splitted a-href-tags.
+
+     - fixed bug: making relative urls for images was broken in EpozPostTidy
+       for people who have no mxTidy / uTidylib installed.
+
+     - fixed bug: removed .strip() from data-handler in Extensions/EpozPostTidy.py,
+       so required whitespace isn't killed; added a "useless-whitespace"-cleanup
+       to EpozPostTidy.
+
+ 0.8.1
+
+     - Now the setup for getting relative urls from Epoz is much more easier:
+       There's a default EpozPostTidy.py in Epoz/Extensions which can be
+       used out of the box.
+       Simply create an External-Method in the root of the ZMI or your Plone-Site with
+       id=EpozPostTidy, Module-Name=Epoz.EpozPostTidy, Function-Name=EpozPostTidy.
+
+     - added a customcss-parameter (esp. for use in Plone) to render customized
+       css-styles in difference to a global css correctly.
+
+     - fixed bug: the XMLRPC for tidying etc. is now independent of your
+       Zope-Server-Root, so the EpozPostTidy-Hook can be created in
+       your Plone-Instance without a VHM-Setup anymore.
+
+     - fixed bug: canceling "Add anchor" resulted in emtpy tag. Thanks to
+       Simon Pamies for patch!!!
+
+     - fixed bug: IE complained about security when Epoz was called via
+       https. Thanks to Sam Brauer and Andrew Athan for patches!
+
+     - fixed bug: <embed>-tag was replaced by <ibed> in Mozilla. Thanks
+       to Christian Ledermann.
+
+     - fixed bug in epoz_script_main.js.dtml/InitEpoz: IE 5.0 isn't
+       wysiwyg-able and therefore needs to fall back to a textarea. Thanks
+       to Marc Zacher!
+
+     - updated epoz_lang_pt-br. Thanks to Luiz Fernando Pasqual S. Souza!
+
+     - updated epoz_lang_zh-cn. Thanks to panjunyong!
+
+     - updated epoz_lang_no.js.dtml. Thanks to Einar Jensen!
+
+
+ 0.8.0
+
+     - added support for uTidylib (http://utidylib.sourceforge.net/);
+       Thanks to Shane Hathaway from Zope Corporation for his
+       patches!!! Please note: there are still some problems with UTF8;
+       maybe someone can provide a patch?
+
+     - rearranged the Javascript so that it's not necessary to
+       "auto"-switch to source mode when saving. Thanks
+       again to Shane Hathaway from Zope Corporation for his patches!!!
+
+     - added pageurl-parameter to Epoz; pageurl defines the base
+       url of the edited page. The pageurl is forwarded to Epoz(Post)Tidy,
+       so you can rewrite urls according to the given base url.
+       **PLEASE NOTE:** You must add an additional parameter
+       if you use EpozPostTidy-Hooks in your applications.
+
+     - added support for adding anchors; works very nice with Mozilla, IE
+       doesn't show the css-styles. IE is crap anyway...
+       Thanks to Christian Theune from Gocept for his patches!!!
+
+     - added global support (EpozGetRelativeUrl) for calculating relative urls
+       from absolute urls; Thanks to Gilles Lenfant for this feature! Please
+       see README.txt for how to enable this feature.
+
+     - added simple example for EpozPostTidy-Hook to README.txt.
+
+     - added danish-translation; thanks to Nikolay Kim!!!
+
+     - fixed bug: IE couldn't handle anchors; added base-tag to
+       epoz_blank_iframe.html. Thanks to Stefanie Panke pointing
+       me to this problem.
+
+     - changed default height of the edit form in Plone to be a more
+       sensible 450px (limi).
+
+     - removed annoying pop-up saying "Your browser does not support
+       XML-RPC" from the JS. If it doesn't, we degrade anyway - no reason
+       to insult the user. ;) (limi)
+
+     - fixed epoz_toolbox to use 'sanctioned' calls for meta_types. Thanks
+       to Marc Lindahl for patch!!!
+
+     - wysiwyg_support was causing a wierd error when used
+       inside CMFBoard sometimes (Attribute Error: meta_type). Traced it to
+       test of text_format. test() evaluates both true and false branches.
+       Restructured it to fix the problem.  Thanks to Marc Lindahl for patch!!!
+
+     - fixed tabindex for Plone (limi)
+
+     - added class="visualFontSizeCorrection" to body-tag of
+       epoz_blank_iframe.html; mostly needed for displaying correct font-sizes
+       for the wysiywg-area in Plone 2.0. Please note: To use this with
+       older Plones, add visualFontSizeCorrection { font-size: 75%; }
+       to your ploneCustom.css (limi)
+
+     - synced default wysiwyg_support with Plone 2.0.
+
diff --git a/Extensions/EpozPostTidy.py b/Extensions/EpozPostTidy.py
new file mode 100755 (executable)
index 0000000..7fde6b1
--- /dev/null
@@ -0,0 +1,82 @@
+###
+# EpozPostTidy.py
+#
+# This is just an example for transforming
+# absolute urls to relative urls with Epoz.
+#
+# Use it at your own risk or improve it!
+###
+
+from HTMLParser import HTMLParser
+import re
+
+# These tags will get a newline after the closing tag
+blocktags = ['p', 'pre', 'div',
+             'table', 'tr', 'th', 'td', 'thead', 'tbody', 'tfoot',
+             'ul','ol','li',
+             'h1', 'h2', 'h3', 'h4', 'h5', 'h6']
+
+# Just a simple htmlparser
+class aHTMLParser(HTMLParser):
+    res = ""
+
+    def handle_starttag(self, tag, attrs):
+        attributes=""
+        for (key,value) in attrs:
+            # Internal Link?
+            if (tag=="a" and key=="href") or (tag=="img" and key=="src"):
+                value = self.getRelativeUrl(self.pageurl, value)
+            attributes += ' %s="%s"' % (key,value)
+        self.res += "<%s%s>" % (tag, attributes)
+
+    def handle_endtag(self, tag):
+        self.res += "</%s>" % (tag,)
+        # Some pretty-nice-printing for block-elements
+        if tag in blocktags:
+            self.res += "\n"
+
+    def handle_startendtag(self, tag, attrs):
+        attributes=""
+        for (key,value) in attrs:
+            # Image?
+            if tag=="img" and key=="src":
+                value = self.getRelativeUrl(self.pageurl, value)
+            attributes += ' %s="%s"' % (key,value)
+        self.res += "<%s%s />" % (tag, attributes)
+
+    def handle_data(self, data):
+        self.res += data
+
+    def handle_charref(self, data):
+        self.res += "&%s;" % data
+
+    def handle_entityref(self, data):
+        self.res += "&%s;" % data
+
+    def handle_comment(self, data):
+        self.res += "<!-- %s -->"
+
+
+def EpozPostTidy(self, html, pageurl):
+
+    # Create a parser
+    parser = aHTMLParser()
+
+    # Give the parser the global method for relative urls
+    parser.getRelativeUrl = self.EpozGetRelativeUrl
+
+    # Submit the pageurl as base-url for calculating urls
+    parser.pageurl = pageurl
+
+    # And now lets turn the wheels
+    parser.feed(html)
+    parser.close()
+
+    # Get & return postprocessed html from parser
+    html = parser.res
+
+    # Just some cleanups to remove useless whitespace
+    html = re.sub("[ ]+"," ",html)
+    html = re.sub("[\n]+","\n", html)
+        
+    return html
diff --git a/Extensions/Install.py b/Extensions/Install.py
new file mode 100755 (executable)
index 0000000..353ff62
--- /dev/null
@@ -0,0 +1,54 @@
+###
+# Epoz-Installer-Script for CMF/Plone
+# Taken and adapted from CMFVisualEditor
+###
+
+from Products.Epoz import cmfepoz_globals
+from StringIO import StringIO
+from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.DirectoryView import addDirectoryViews
+
+_globals = globals()
+
+def install_plone(self, out):
+    """ add Epoz to 'my preferences' """
+    portal_props=getToolByName(self,'portal_properties')
+    site_props=getattr(portal_props,'site_properties', None)
+    attrname='available_editors'
+    if site_props is not None:
+        editors=list(site_props.getProperty(attrname))
+        if 'Epoz' not in editors:
+            editors.append('Epoz')
+            site_props._updateProperty(attrname, editors)
+            print >>out, "Added 'Epoz' to available editors in Plone."
+
+def install_subskin(self, out, skin_name, globals=cmfepoz_globals):
+    skinstool=getToolByName(self, 'portal_skins')
+    if skin_name not in skinstool.objectIds():
+        addDirectoryViews(skinstool, 'epoz', globals)
+
+    for skinName in skinstool.getSkinSelections():
+        path = skinstool.getSkinPath(skinName)
+        path = [i.strip() for i in  path.split(',')]
+        try:
+            if skin_name not in path:
+                path.insert(path.index('custom') +1, skin_name)
+        except ValueError:
+            if skin_name not in path:
+                path.append(skin_name)
+
+        path = ','.join(path)
+        skinstool.addSkinSelection(skinName, path)
+
+def install(self):
+    out = StringIO()
+    print >>out, "Installing Epoz"
+    install_subskin(self, out, 'epoz_core')
+    install_subskin(self, out, 'epoz_i18n')
+    install_subskin(self, out, 'epoz_images')
+    install_subskin(self, out, 'epoz_plone')
+    install_plone(self, out)
+
+    print >>out, "Done."
+
+    return out.getvalue()
diff --git a/Extensions/__init__.py b/Extensions/__init__.py
new file mode 100755 (executable)
index 0000000..83c1312
--- /dev/null
@@ -0,0 +1 @@
+# This is needed for import.
diff --git a/FAQ.txt b/FAQ.txt
new file mode 100755 (executable)
index 0000000..9124277
--- /dev/null
+++ b/FAQ.txt
@@ -0,0 +1,71 @@
+Epoz-FAQ
+
+ - What does Epoz mean?
+
+    Nothing special. Don't break your mind! Sounds nice and is simply
+    Zope turned around. Long history for that one...
+
+
+ - Will Epoz be maintained in the future? I've heard of Kupu...
+    Yes, it will. The Kupu-project (formerly know as Epoz 1.X)
+    will not replace Epoz 0.x in any of my applications, because
+    I need a "simple, but rock-stable solution". I'll maintain, support
+    and develop Epoz therefore in the future.
+ - Does Epoz work with Opera, Konqueror, Safari, Mac-IE, ...?
+
+    No! No chance to make it work. Epoz uses a rich-text-feature
+    which is only supported by IE >=5.5 and Mozilla >= 1.3 (or other
+    recent Gecko-based browsers). But there are rumors that Opera
+    and Safari will implement a rich-text-engine in upcoming
+    releases. We'll see...
+
+
+ - Can I use several Epoz-Widgets in one page (e.g. for Archetypes)?
+
+    No, you can't and I have no idea how to make this work. If someone can
+    provide a patch (several people tried hard, but found no solution),
+    I'm fine and you will get famous, if not, that's the end of the story.
+
+
+ - How can I get relative URLs from Epoz?
+
+    Install the shipped EpozPostTidy-Hook. Create an External Method
+    as described in the README.txt to make it work. Very simple.
+
+
+ - Why doesn't Epoz support different fonts or sizes?
+
+    Simple answer: because I don't like crazy people playing with fonts and
+    different font-sizes. All fonts or sizes should be set in stylesheets
+    and not in the content. If you want this feature, please do it yourself.
+
+
+ - How can I get valid XHTML from Epoz?
+
+    Simply install mxTidy (http://www.lemburg.com/files/python/mxTidy.html)
+    and restart your server. Please see the mxTidyHowTo.txt provided with
+    Epoz if you have problems installing mxTidy. Please note: I do NOT
+    support mxTidy-problems!
+        
+    
+ - How can I edit ZPT, DTML or JavaScript with Epoz?
+    Simple answer: you can't!!! Epoz is a HTML-wysiwyg-**content**-editor,
+    just a simple replacement for (Re)StructuredText for the average user.
+    You CAN'T (!!!) edit any JavaScript, DTML, ZPT, PHP, ASP, JSP, PSP,
+    CSP, ABC, XYZ, AWK, Python, Forth, Assembler, AmigaBasic,
+    Half-Life-Mod or your haircut with Epoz... it's sad, but I have no 
+    time to work on these features...;) 
+    
+    
+ - How can I change the background-color of the Epoz-Wysiwyg-Area in Plone?
+    Epoz uses the Plone-CSS for rendering the wyswyg-area. In some cases
+    this might be a problem, so you want to specify another background-color
+    for editing content. Simply add a customized css-definition to your
+    ploneCustom.css::
+    
+     .visualFontSizeCorrection {font-size: 75%; background-color: #e0e0e0;}
diff --git a/HISTORY.txt b/HISTORY.txt
new file mode 100755 (executable)
index 0000000..d18806b
--- /dev/null
@@ -0,0 +1,378 @@
+Epoz - History
+
+ 0.7.5
+
+     - updated to Plone 2.0 format in preparation of the release (limi).
+
+     - added portugese-translation; Thanks to Nuno Teixeira!!!
+
+     - added chinese-translation; Thanks to panjunyong!!!
+
+ 0.7.4
+
+     - fixed bug: Catched all errors for XMLRPC-call, so
+       content is secured if something fails between
+       client and server.
+
+     - Changed char_encoding for mxTidy from raw to utf8
+       to avoid problems with &nbsp;
+
+ 0.7.3
+
+     - changed all default-encodings to utf-8; sorry,
+       I've had a broken installation of mxTidy so I thought
+       utf-8 didn't work well with mxTidy and released 0.7.2
+       to early... removed charset-arg from EpozTidy.
+
+ 0.7.2
+
+     - changed toolbox-icon into a folder; link-icon and
+       toolbox-icon were to similar before.
+
+     - added remove-format-button; this can be useful if you want
+       to remove several text-formats at once. Maybe someone can
+       provide a better icon? Please note: IE is a little bit
+       smarter than Mozilla. IE removes colors as well...
+
+     - made some css-fixes for using Epoz with tableless layout
+       in Plone 2:
+
+        - removed nowrap-style around epoz_toolbox;
+
+        - changed toolbox-width in wysiwyg_support from
+          absolute px to relative percentage, so Epoz won't
+          break the layout anymore;
+
+        - made widget xhtml-compatible.
+
+       Please note: Epoz uses the Plone-CSS to render the content.
+       The Plone-CSS doesn't allow other alignments then left-aligned
+       for paragraphs and so clicking on the Epoz-alignment-buttons
+       shows no effect in Plone. Please don't mail me about this...
+       fix the Plone-CSS (remove 'text-align: left;' from
+       p-defintion in plone.css).
+
+     - removed break_before_br in EpozTidy to keep pre-formatted
+       text in order.
+
+     - fixed bug: Stefanie Panke noticed encoding problems
+       when using the Euro-Sign. Switched all default
+       encodings from ISO-8859-1 to more universal windows-1252.
+       Thanks, Stefanie!
+
+     - fixed bug: Casey Duncan from Zope Corporation tracked
+       down a subtle bug in the product initialisation process
+       of Epoz. Short story: Registering a product and a method
+       with the same name (Epoz) can cause conflicts under some
+       circumstances (esp. running test-suites in Zope 2.7 etc.).
+       Now Epoz is marked as __replaceable__. Thanks, Casey!!!
+
+     - fixed bug: removed hardcoded protocol (http:) in
+       XMLRPC-call; Epoz over https: should now work again.
+       Thanks to Gabriel Wicke for his complaints!
+
+ 0.7.1
+
+     - fixed critical bug: Mozilla truncated contents to
+       4096 bytes received from EpozTidy over XMLRPC
+       due to a bug in the string-code of the vcXMLRPC-library.
+
+     - fixed critical bug: if mxTidy found errors in html,
+       an empty document was returned to Epoz. JavaScript-alert
+       informs the user about critical errors in document.
+
+     - added a paragraph in the README.txt explaining the
+       relation of Epoz 0.x to Epoz 1.x. Thanks to
+       Gregor Hoffleit!
+
+     - updated french tranlsation; Thanks to Jean Laroque!!!
+
+ 0.7.0
+
+     - added support for mxTidy to produce nice and valid xhtml-code.
+
+     - added site-hook EpozPostTidy, so you can change the output of Epoz
+       with an additional script / external method. Useful if you want
+       to clean up or rewrite (absolute) links etc.pp.
+
+     - added missing language support for Plone.
+
+     - fixed breadcrumb-bug in Plone-Toolbox.
+
+     - updated sample code for edit-method; now a File-Object is used
+       as default, because, no, really no, Epoz can't edit any DTML-tags...
+
+     - updated hungarian translation. thanks to Tamas Decsi.
+
+ 0.6.1
+
+     - Fixed bug: The css-skin-parameter in wysiwyg_support.pt wasn't
+       url quoted, so skin-names with spaces weren't called correctly.
+
+ 0.6.0
+
+     - Epoz renders now the wysiwyg-textarea with your given
+       css-styles. This gives you a more realistic feeling about
+       the look of your work (esp. in Plone). Many kudos to
+       Ariel Sebbag for the solution to a real problem!!!
+
+     - Fixed issue for from time to time disabled wysiwyg-areas on
+       Mozilla. Removed EpozTimeOut by a try-catch-poll in order
+       to get Mozilla working in wysiwyg-mode. Many thanks to
+       Guido Wesdorp for this idea!!!
+
+     - Improved Table-Popup: Now you can insert tables
+       with or without heads.
+
+     - Added nowrap-style around Epoz-Toolbar so buttons
+       won't break onto two lines.
+
+     - Added finish translation. Thanks to Petri Savolainen!
+
+
+ 0.5.2
+
+     - Added strikethrough-button. Now you can use Epoz to correct
+       websites online if you are a teacher...;)
+
+     - Added nice workaround for all people who want cleaner
+       html-code from Epoz: switching the views (wysiwyg, source)
+       automatically before submitting the form will give you
+       browser-cleaned-up-code (Mozilla does a nice job, IE is crap
+       anyway).
+
+     - Added hungarian-translation. Thanks to Tamas Decsi and
+       Gabor Suveg!
+
+     - Fixed bug in epoz_toolbox. The default_charset was broken.
+       Thanks to Marian Saeger for the patch!
+
+     - Fixed a minor bug in the Plone-Toolbox: Images with single
+       quotes in the title weren't opened in the popup. Thanks to
+       Tony Addyman.
+
+     - Added a dummy blank page. IE breaks over SSL if no source
+       is given in the inline frame. Thanks to Brian Brinegar for
+       his patches!
+
+     - Sanitized the Epoz-init-string in __init__.py with dictionary.
+       Thanks to Philipp von Weitershausen for his patch!
+
+     - Improved i18n-layer. Untranslated strings will now fall
+       back to default-english. Thanks to Sergey Volobuev for his
+       help and patches!
+
+     - fixed typo in the example in the README.txt.
+       Thanks to Luiz Fernando.
+
+
+ 0.5.1
+
+     - fixed bug with different format-tags for IE
+       and Mozilla. Mozilla couldn't "unbold" text which
+       was created with IE.
+
+       Mozilla now inserts no more style-tags
+       for simple formats like bold and italics. Additionaly
+       IE's EM- and STRONG-tags will be converted to Mozilla's
+       I- and B-tags, which works perfectly with both browsers
+       rich-text-controls.
+
+     - introduced EpozTimeOut; if you encounter problems with
+       Mozilla on MacOS / etc.pp. (you can't see a cursor
+       in the wysiwyg-area or edit anything) adjust this variable.
+
+     - added norwegian-language-file. Thanks to Einar Naess Jensen!
+
+
+ 0.5.0
+
+     - added source-view-switch. Now you can view / edit
+       the html-source by clicking on the little checkbox
+       below the editor. If you use a customized
+       widget-template, please diff it to the current one
+       before upgrading.
+
+     - added search-feature to Plone-Toolbox. Now you can
+       search for contents via SearchableText.
+
+     - added a frameborder="0" to iframe, so IE doesn't
+       render an additional border anymore.
+
+     - added French translation; Thanks to Jean Laroque &
+       Yannick Dirou!
+
+     - switched license to Zope Public License (ZPL 2.0).
+       This should give you more freedom in integrating
+       Epoz into your own commercial applications / services.
+
+
+ 0.4.1
+
+     - fixed bug in wysiwyg_support.pt for Plone 1.0.1. No more dependency
+       on global 'member' which was introduced after 1.0.1.
+
+     - added missing translations for Spanish. Thanks to Pedro J. Rey Sanchiz!
+
+     - added Polnish translation; Thanks to Jakub Kasprzycki!
+
+     - added Dutch translation; Thanks to Ad Schellevis!
+
+
+ 0.4.0
+
+     - redesigned buttons with CSS; now you can have a real
+       customizable Plone/or/something/else-look&feel...:)
+       Please note: I had to make some minor changes to the Epoz-API,
+       so diff your customized templates against the current
+       ones before upgrading.
+       Thanks to Vidar Andersen from BlackTar.com for providing the
+       icons! I had to convert Vidar's icons to GIFs, because IE
+       doesn't handle PNGs with transparent background
+       very well.
+
+     - fixed bug in wysiwyg_support: no more error when wysiwyg
+       is not set.
+
+     - added language-file for italian; thanks to Nicola Bertellini
+
+     - added language-file for russian; thanks to Sergey V. Volobuev!
+
+     - added missing translations to pt-BR;
+       thanks to Luiz Fernando Pasqual S. Souza!
+
+
+ 0.3.0
+
+     - added a default-toolbox for Plone. Now you can insert links & images
+       by simply navigating through your site... could be a killer-feature
+       for Epoz & Plone.
+
+     - fixed installer: Epoz will not be added more than once to the
+       available editor-list in Plone.
+
+     - minor fix: corrected alt-attributes for sub/superscript-button.
+
+
+ 0.2.3
+
+     - fixed bug: backslashes weren't quoted, so Epoz did eat them
+       up. Thanks to Michael Bickel. (Note: Please update your
+       PythonScript if you use Epoz on a shared server like
+       freezope.org.)
+
+     - fixed bug: Epoz didn't work when Zope was served via CGI, corrected
+       the path to Epoz-scripts with BASE1. Thanks to Ralf Kraudelt.
+
+     - minor clean/speed-up for select-format. Thanks to Puna Tannehill.
+
+
+ 0.2.2
+
+     - added buttons for sub- and superscript to Epoz.
+
+     - added a widget-parameter, so you can specify your own-js-widget
+       for Epoz; take epoz_script_widget.js as starting-point.
+
+     - changed timeout from 10 to 100 for Mozilla getting the midas-controls.
+       This should fix some sync-issues with Mozilla.
+
+     - made widget-rendering faster by removing expensive document.writeln
+       for each row; added a break after tag-selection-box, so
+       Epoz won't need so much horizontal space.
+
+     - added translation for background-color to pt-br.
+       Thanks to Luiz Fernando.
+
+
+ 0.2.1
+
+     - Tables are now inserted at the current selection.
+
+     - added a focus-on-load for table- and colorselector, so an
+       already openend tool is brought into front when already opened.
+       Thanks to Puna Tannehill.
+
+     - reworked code; the Epoz-Editor is only fetched once by getElementbyId,
+       so this should speed up Epoz on slow machines; Thanks to Puna Tannehill.
+
+     - removed focus (and bottom-scrolling on IE) for initialization
+       of document; Thanks to Puna Tannehill.
+
+     - fixed bug: IE on MacOS was recognized as rich-text-editor,
+       which it is not; Bill G., maybe you can sync your IE's on
+       all platforms? Thanks to Martin Huntley.
+
+     - fixed bug: Gecko-Browsers without Midas will now display a
+       textarea instead of breaking.
+
+     - corrected language-code for Portuguese/Brasil (pt-br).
+
+
+ 0.2
+
+     - integrated Epoz as Wysiwyg-Editor into Plone.
+       Added install-script for Plone. Moved files to skin/epoz and prefixed
+       them with 'epoz_*'.
+
+     - seperated JavaScripts for browser-detection, widget-drawing, etc.
+
+     - removed hard-wired-dependency on SubmitEpoz for submit-buttons. You
+       can/must use your own submit-button now! Please correct your forms
+       (simply add a submit-button).  Removed submit from parameter-list.
+
+     - removed useless table around Epoz-Box.
+
+
+ 0.1.2
+
+     - reworked table-selection as popup-window.
+
+     - reworked color-selector as popup-window. The former
+       iframe-implementation was broken in Plone.
+
+     - added a background-color-selection.
+
+     - cleaned up the JavaScript-code a bit.
+
+     - added a portugese(brasilian)-language-file. Thanks to Luiz
+       Fernando Pasqual S. Souza!
+
+     - added spanish-language-file. Thanks to Pedro J. Rey Sanchiz!
+
+     - html-quoted non-ascii-chars in language-files.
+       InternetExplorer can crash when Unicode is set as character
+       set, but latin-coded "umlaute" appear in JavaScript.
+
+     - made the submit-button optional (pass a empty
+       submit-paramter). This will make it easier to integrate Epoz
+       into your own form-layout. Please be sure to call
+       onclick="SubmitEpoz();" for your customized submitt-button.
+       Thanks to Volker Bachschneider!
+
+
+ 0.1.1
+
+     - removed dependency on hard-wired paths to scripts/images; Epoz can now
+       be used more easily standalone
+
+     - added a description on how to turn Epoz into a
+       standalone-Zope-Web-Application which can be installed on shared
+       servers with no filesystem access (e.g. freezope.org)
+
+     - added newlines to CreateTable (results in more readable table-source)
+
+     - added a convenient catch for calling Epoz when data is None;
+       thanks to Joachim Schmitz!
+
+     - fixed broken style-parameter
+
+     - fixed a spelling-typo in www/de.js
+
+     - fixed some minor misunderstandings in the README.txt; corrected
+       sample-edit-method (no more empty action, method should be post)
+
+
+ 0.1
+
+     - inital release
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100755 (executable)
index 0000000..7c69cb1
--- /dev/null
@@ -0,0 +1,51 @@
+Epoz - Copyright (C) 2004 Maik Jablonski (maik.jablonski@uni-bielefeld.de)
+All Rights Reserved.
+
+This software is subject to the provisions of the Zope Public License,
+Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+FOR A PARTICULAR PURPOSE. 
+
+
+Zope Public License (ZPL) Version 2.1
+
+A copyright notice accompanies this license document that identifies the
+copyright holders.
+
+This license has been certified as open source. It has also been designated as
+GPL compatible by the Free Software Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+   1. Redistributions in source code must retain the accompanying copyright 
+      notice, this list of conditions, and the following disclaimer.
+   2. Redistributions in binary form must reproduce the accompanying copyright
+      notice, this list of conditions, and the following disclaimer in the 
+      documentation and/or other materials provided with the distribution.
+   3. Names of the copyright holders must not be used to endorse or promote 
+      products derived from this software without prior written permission from
+      the copyright holders.
+   4. The right to distribute this software or to use it for any purpose does
+      not give you the right to use Servicemarks (sm) or Trademarks (tm) of 
+      the copyright holders. Use of them is covered by separate agreement with 
+      the copyright holders.
+   5. If any files are modified, you must cause the modified files to carry 
+      prominent notices stating that you changed the files and the date of any
+      change.
+
+Disclaimer
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
+EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/README.txt b/README.txt
new file mode 100755 (executable)
index 0000000..5d8d853
--- /dev/null
@@ -0,0 +1,156 @@
+Epoz - a cross-browser-wysiwyg-editor for Zope
+
+ Epoz allows you to edit Zope-objects with a wysiwyg-editor. No
+ plugins are required. You only have to use a recent browser (IE >=
+ 5.5, Mozilla >= 1.3.1, Netscape >= 7.1, Firebird >= 0.7) that
+ supports Rich-Text-controls (called Midas for Mozilla).
+
+ Please read the CHANGES.txt before upgrading Epoz.
+
+ To use Epoz, simply install it into your Products-directory of your
+ Zope-Server and restart the server. If you want to get nice
+ formatted and xhtml-compatible html-code from Epoz, you should also
+ install "mxTidy":http://www.lemburg.com/files/python/mxTidy.html or
+ "uTidylib":http://utidylib.sourceforge.net on your server.
+
+ Documentation about Epoz for end-users is provided by Tom Purl (see 
+ "EpozBook":http://zopewiki.org/EpozBook). Thanks Tom!
+
+ Epoz talks over XMLRPC to the Zope-Server to clean up the html-code.
+ After the processing of mxTidy, Epoz tries to call an additional hook
+ (EpozPostTidy) which can do postprocessings on the html-source.
+
+ If you want to use the EpozPostTidy-Hook for getting relative urls from
+ Epoz out of the box, create an External Method in the root of the ZMI or
+ your Plone-Site with id=EpozPostTidy,  Module Name=Epoz.EpozPostTidy,
+ Function Name=EpozPostTidy.
+
+ If you want to use the EpozPostTidy-Hook for customized tasks, please
+ have a look at Epoz/Extensions/EpozPostTidy.py on how to build an
+ EpozPostTidy-hook. To use the EpozPostTidy-Hook for your
+ own applications, create an external method or a python-script with
+ id=EpozPostTidy in the root of your site, which expects three parameters
+ 'self' (=server context), 'html' (=only htmlbody) and 'pageurl' (=the "real" base
+ url of current page, use it to traverse the object, rewrite urls, etc.).
+ It should return a new html-body.
+
+ If you want to use Epoz with Plone use the CMFQuickInstaller or
+ create an External Method with id=Install in your Plone-Site.
+ Then edit the newly created External Method, set
+ Module Name = Epoz.Install, Function Name = install and
+ click on 'Test'. Now you can select Epoz as default editor in "your
+ preferences" of the Plone-Site. You can customize the widget
+ (uncomment elements you don't want to see) through customization
+ of portal_skins/epoz/epoz_script_widget.js. Epoz is shipped with a
+ default toolbox for Plone (icon with folder on it). You can insert links
+ (please highlight text before inserting a link) and images by
+ searching / navigating through your site and simply click
+ "Insert Link/Image".
+
+ If you want to use Epoz with native Zope applications, you have to
+ create a customized edit-script. Because there is no unique
+ interface for editing Zope-Objects, I did not include a
+ "manage_edit_all"-script for Epoz. You have to create it yourself!!!
+ To start working with Epoz, simply create a DTML-Method with
+ id=edit::
+
+  <dtml-var standard_html_header>
+  <dtml-if html>
+    <dtml-call "manage_edit('', content_type='text/html', filedata=_.str(html))">
+  </dtml-if>
+
+  <p><a href="<dtml-var URL1>">View Document</a></p>
+
+  <form action="<dtml-var URL>" method="post">
+   <dtml-var "Epoz('html:string', data=this().data,
+                           toolbox='/toolbox',
+                           lang='en',
+                           style='width: 620px; height: 250px; border: 1px solid #000000;')">
+   <input type="submit" name="submit" value=" Save Changes " >
+  </form>
+  <dtml-var standard_html_footer>
+
+
+ Then create an empty File with id=test and point your
+ browser to http://yourServer/test/edit. That's all...:) Please note:
+ Epoz is a pure HTML-editor and can't edit any ZPT-or-DTML-Tags!
+
+ To create an Epoz-Rich-Text-Editor from your own
+ Products/Scripts/Methods/ZPT, you have to call it with one fixed and several
+ optional paramters::
+
+ Epoz(self, name, data='', toolbox='', lang='en',
+            path='', widget='',
+            style='width: 600px; height: 250px; border: 1px solid #000000;',
+            button='background-color: #EFEFEF; border: 1px solid #A0A0A0; cursor: pointer; margin-right: 1px; margin-bottom: 1px;',
+            css='', customcss='', charset='utf-8', pageurl=''):
+    """ Create an Epoz-Wysiwyg-Editor.
+
+        name : the name of the form-element which submits the data
+        data : the data to edit
+        toolbox : a link to a HTML-Page which delivers additional tools
+        lang: a code for the language-file (en,de,...)
+        path : path to Epoz-Javascript. Needed mainly for Plone (portal_url).
+        widget: You can specify a path to an alternative JavaScript for
+                epoz_script_widget.js
+        style : style-definition for the editor-area
+        button : style-definiton for buttons
+        css : url to a global css which should be used for rendering
+                content in editor-area
+        customcss : url to a customized css which should be used for rendering
+                         content in editor-area
+        charset : charset which is edited in the editor-area
+        pageurl: the base-url for the edited page
+
+        If Epoz can't create a Rich-Text-Editor, a simple textarea is created.
+    """
+
+ Epoz is shipped with a very nice additional feature. Besides the
+ rich-text-controls you can set up a customized toolbox. This is
+ simply an URL which provides a popup-window with special functions.
+ To get the idea, create a DTML-Method with id=toolbox in your Zope-Root
+ and enter something like::
+
+  <html>
+  <head><title>Epoz-Toolbox</title></head>
+  <body onload="this.focus();">
+
+  <h1>Images</h1>
+
+  <dtml-in "PYTHONPATH.TO.IMAGES.objectValues(['Image'])">
+   <img src="<dtml-var absolute_url>"
+        border="0"
+        width="16"
+        height="16"
+        alt="<dtml-var title_or_id>"
+        style="cursor: pointer;"
+        onclick="window.opener.CreateImage('<dtml-var absolute_url>'); window.close();">
+  </dtml-in>
+
+  <hr />
+
+  <h1>Links</h1>
+
+  <dtml-tree "PYTHONPATH.TO.CONTENT" branches_expr="objectValues(['Folder','File'])"  nowrap=1>
+   <a href="#"
+      style="cursor: pointer;"
+      onclick="window.opener.CreateLink('<dtml-var absolute_url>'); window.close();" ><dtml-var title_or_id></a>
+  </dtml-tree>
+
+  </body>
+  </html>
+
+ Now you can click onto the little icon with the folder on it and get a
+ popup, which provides images (simply click) and links (select text in
+ Epoz-window, then click onto link).
+
+ If you want to translate Epoz into your own language, have a look at
+ skins/epoz_lang_en.js.dtml. It would be nice if you want to share
+ your translation with me.
+
+ I hope you'll enjoy Epoz. For me Epoz is the missing link to Zope.
+ If you consider using Epoz, please write me a short mail about your
+ use-case.
+ Bug-reports & patches are welcome. Please send them to:
+ maik.jablonski@uni-bielefeld.de
diff --git a/TODO.txt b/TODO.txt
new file mode 100755 (executable)
index 0000000..a532037
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,3 @@
+Fix bugs...
+
+- Unicode doesn't work propertly for uTidylib. Someone an idea?
diff --git a/__init__.py b/__init__.py
new file mode 100755 (executable)
index 0000000..dcb18dd
--- /dev/null
@@ -0,0 +1,347 @@
+#####
+###  Epoz - a cross-browser-wysiwyg-editor for Zope
+##   Copyright (C) 2005 Maik Jablonski (maik.jablonski@uni-bielefeld.de)
+#
+#    All Rights Reserved.
+#
+#    This software is subject to the provisions of the Zope Public License,
+#    Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+#    THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+#    WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+##   WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+###  FOR A PARTICULAR PURPOSE.
+####
+
+import re
+import urlparse
+import cgi
+
+# try to import mxTidy as default
+try:
+    from mx import Tidy
+    mxTidyIsAvailable = 1
+except:
+    mxTidyIsAvailable = 0
+
+# try to import uTidylib as fallback
+try:
+    import tidy
+    uTidyIsAvailable = 1
+except ImportError:
+    uTidyIsAvailable = 0
+
+import Globals
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+from App.ImageFile import ImageFile
+
+# Regexp for snipping the body of a document
+HTML_BODY = re.compile('<body[^>]*?>(.*)</body[^>]*?>', re.DOTALL|re.IGNORECASE)
+MSO_CLASS = re.compile(r'<(\w+)\W+(class="Mso.*?")>', re.IGNORECASE)
+EPOZ_SCRIPT = re.compile(r'<epoz:script (style="[^"]*")? ?')
+
+misc_ = {
+ # The Format-Controls
+'epoz_script_main.js':ImageFile('epoz/epoz_core/epoz_script_main.js.dtml', globals()),
+
+ # Rendering of the widget
+'epoz_script_widget.js':ImageFile('epoz/epoz_core/epoz_script_widget.js.dtml', globals()),
+
+ # Browser-detection
+'epoz_script_detect.js':ImageFile('epoz/epoz_core/epoz_script_detect.js.dtml', globals()),
+
+ # Code for the color-selection-popup
+'epoz_script_color.html':ImageFile('epoz/epoz_core/epoz_script_color.html.dtml', globals()),
+
+ # Code for the table-popup
+'epoz_script_table.html':ImageFile('epoz/epoz_core/epoz_script_table.html.dtml', globals()),
+
+ # The XMLRPC-handler
+'vcXMLRPC.js':ImageFile('epoz/epoz_core/vcXMLRPC.js.dtml', globals()),
+
+# Multi-Epoz
+'epoz_redirect.js':ImageFile('epoz/epoz_core/epoz_redirect.js.dtml', globals()),
+'epoz_iframe_trigger.js':ImageFile('epoz/epoz_core/epoz_iframe_trigger.js.dtml', globals()),
+
+ # The Epoz-Language-Files
+'epoz_lang_da.js':ImageFile('epoz/epoz_i18n/epoz_lang_da.js.dtml', globals()),
+'epoz_lang_de.js':ImageFile('epoz/epoz_i18n/epoz_lang_de.js.dtml', globals()),
+'epoz_lang_en.js':ImageFile('epoz/epoz_i18n/epoz_lang_en.js.dtml', globals()),
+'epoz_lang_es.js':ImageFile('epoz/epoz_i18n/epoz_lang_es.js.dtml', globals()),
+'epoz_lang_fi.js':ImageFile('epoz/epoz_i18n/epoz_lang_fi.js.dtml', globals()),
+'epoz_lang_fr.js':ImageFile('epoz/epoz_i18n/epoz_lang_fr.js.dtml', globals()),
+'epoz_lang_hu.js':ImageFile('epoz/epoz_i18n/epoz_lang_hu.js.dtml', globals()),
+'epoz_lang_it.js':ImageFile('epoz/epoz_i18n/epoz_lang_it.js.dtml', globals()),
+'epoz_lang_nl.js':ImageFile('epoz/epoz_i18n/epoz_lang_nl.js.dtml', globals()),
+'epoz_lang_no.js':ImageFile('epoz/epoz_i18n/epoz_lang_no.js.dtml', globals()),
+'epoz_lang_pl.js':ImageFile('epoz/epoz_i18n/epoz_lang_pl.js.dtml', globals()),
+'epoz_lang_pt.js':ImageFile('epoz/epoz_i18n/epoz_lang_pt.js.dtml', globals()),
+'epoz_lang_pt-br.js':ImageFile('epoz/epoz_i18n/epoz_lang_pt-br.js.dtml', globals()),
+'epoz_lang_ru.js':ImageFile('epoz/epoz_i18n/epoz_lang_ru.js.dtml', globals()),
+'epoz_lang_zh-cn.js':ImageFile('epoz/epoz_i18n/epoz_lang_zh-cn.js.dtml', globals()),
+
+# Generic language file transalted by PlacelessTranslationService (for example)
+'epoz_multilingual.js':PageTemplateFile('epoz/epoz_core/epoz_multilingual.js.pt', globals()),
+
+ # The Epoz-Buttons
+'epoz_button_anchor.gif':ImageFile('epoz/epoz_images/epoz_button_anchor.gif', globals()),
+'epoz_button_bgcolor.gif':ImageFile('epoz/epoz_images/epoz_button_bgcolor.gif', globals()),
+'epoz_button_bold.gif':ImageFile('epoz/epoz_images/epoz_button_bold.gif', globals()),
+'epoz_button_centre.gif':ImageFile('epoz/epoz_images/epoz_button_centre.gif', globals()),
+'epoz_button_hr.gif':ImageFile('epoz/epoz_images/epoz_button_hr.gif', globals()),
+'epoz_button_hyperlink.gif':ImageFile('epoz/epoz_images/epoz_button_hyperlink.gif', globals()),
+'epoz_button_image.gif':ImageFile('epoz/epoz_images/epoz_button_image.gif', globals()),
+'epoz_button_indent.gif':ImageFile('epoz/epoz_images/epoz_button_indent.gif', globals()),
+'epoz_button_italic.gif':ImageFile('epoz/epoz_images/epoz_button_italic.gif', globals()),
+'epoz_button_left_just.gif':ImageFile('epoz/epoz_images/epoz_button_left_just.gif', globals()),
+'epoz_button_list.gif':ImageFile('epoz/epoz_images/epoz_button_list.gif', globals()),
+'epoz_button_numbered_list.gif':ImageFile('epoz/epoz_images/epoz_button_numbered_list.gif', globals()),
+'epoz_button_outdent.gif':ImageFile('epoz/epoz_images/epoz_button_outdent.gif', globals()),
+'epoz_button_redo.gif':ImageFile('epoz/epoz_images/epoz_button_redo.gif', globals()),
+'epoz_button_right_just.gif':ImageFile('epoz/epoz_images/epoz_button_right_just.gif', globals()),
+'epoz_button_strikethrough.gif':ImageFile('epoz/epoz_images/epoz_button_strikethrough.gif', globals()),
+'epoz_button_subscript.gif':ImageFile('epoz/epoz_images/epoz_button_subscript.gif', globals()),
+'epoz_button_superscript.gif':ImageFile('epoz/epoz_images/epoz_button_superscript.gif', globals()),
+'epoz_button_table.gif':ImageFile('epoz/epoz_images/epoz_button_table.gif', globals()),
+'epoz_button_textcolor.gif':ImageFile('epoz/epoz_images/epoz_button_textcolor.gif', globals()),
+'epoz_button_tools.gif':ImageFile('epoz/epoz_images/epoz_button_tools.gif', globals()),
+'epoz_button_underline.gif':ImageFile('epoz/epoz_images/epoz_button_underline.gif', globals()),
+'epoz_button_undo.gif':ImageFile('epoz/epoz_images/epoz_button_undo.gif', globals()),
+'epoz_button_unformat.gif':ImageFile('epoz/epoz_images/epoz_button_unformat.gif', globals()),
+}
+
+
+def Epoz(self, name, data='', toolbox='', lang='auto',
+               path='', widget='',
+               style='width: 600px; height: 250px; border: 1px solid #000000;',
+               button='background-color: #EFEFEF; border: 1px solid #A0A0A0; cursor: pointer; margin-right: 1px; margin-bottom: 1px;',
+               css='', customcss='', charset='utf-8', pageurl=''):
+    """ Create an Epoz-Wysiwyg-Editor.
+
+        name : the name of the form-element which submits the data
+        data : the data to edit
+        toolbox : a link to a HTML-Page which delivers additional tools
+        lang: a code for the language-file (en,de,...).
+                 Use auto to enable browser language detection.
+                 In this case, a localization product must be installed (like PlacelessTranslationService).
+        path : path to Epoz-Javascript. Needed mainly for Plone (portal_url).
+        widget: You can specify a path to an alternative JavaScript for
+                epoz_script_widget.js
+        style : style-definition for the editor-area
+        button : style-definiton for buttons
+        css : url to a global css which should be used for rendering
+               content in editor-area
+        customcss: url to a customized css which should be used for rendering
+                        content in editor-area
+        charset : charset which is edited in the editor-area
+        pageurl: the base-url for the edited page
+
+        If Epoz can't create a Rich-Text-Editor, a simple textarea is created.
+    """
+
+    if data is None:
+        data=''
+
+    js_data = data
+    data = cgi.escape(data)
+
+    # hide scripts without removing them
+    js_data = js_data.replace('<script ',
+                                    '<epoz:script style="display: none" ')
+    js_data = js_data.replace('</script>', '</epoz:script>')
+
+    # Quote newlines and single quotes, so the Epoz-JavaScript won't break.
+    # Needs to be a list and no dictionary, cause we need order!!!
+
+    quotes = (("\\","\\\\"), ("\n","\\n"), ("\r","\\r"), ("'","\\'"))
+
+    for item in quotes:
+        js_data = js_data.replace(item[0], item[1])
+
+    # Determine the correct path for VirtualHostMonsters & PCGI & etc.pp.
+    if not path:
+        path = "%s/misc_/Epoz/" % (self.REQUEST.get('BASEPATH1',''),)
+
+    if not pageurl:
+        pageurl = self.REQUEST.get('URL1','')
+
+    if lang == 'auto' :
+        i18n='<script language="JavaScript" type="text/javascript" src="%(path)sepoz_multilingual.js?charset=%(charset)s" charset="%(charset)s"></script>' % {'path' : path, 'charset' : charset}
+    else :
+        i18n='<script language="JavaScript" type="text/javascript" src="%sepoz_lang_en.js"></script>' % (path,)
+        if lang<>'en':
+            i18n += '<script language="JavaScript" type="text/javascript" src="%sepoz_lang_%s.js"></script>' % (path, lang)
+
+    if not widget:
+       widget = "%sepoz_script_widget.js" % path
+
+    # This is just a dummy page for test-iframe
+    # to prevent IE complaining when using Epoz via https
+    iframesrc = pageurl+'/epoz_blank_iframe.html'
+
+    # Return the HTML-Code for the Epoz-Rich-Text-Editor
+    return """
+%(i18n)s
+<script language="JavaScript" type="text/javascript" src="%(widget)s"></script>
+<script language="JavaScript" type="text/javascript" src="%(path)svcXMLRPC.js"></script>
+<script language="JavaScript" type="text/javascript" src="%(path)sepoz_script_detect.js"></script>
+<script language="JavaScript" type="text/javascript" src="%(path)sepoz_script_main.js" charset="utf-8"></script>
+<script language="JavaScript" type="text/javascript" src="%(path)sepoz_redirect.js"></script>
+<script language="JavaScript" type="text/javascript">
+<!--
+  InitIframe('%(name)s','%(js_data)s','%(path)s','%(toolbox)s','%(style)s','%(button)s','%(css)s','%(customcss)s','%(charset)s', '%(pageurl)s');
+//-->
+</script>
+<noscript><textarea name="%(name)s" style="%(style)s">%(data)s</textarea></noscript>
+""" % {
+       'i18n': i18n,
+       'widget':  widget,
+       'path':    path,
+       'name':    name,
+       'js_data': js_data,
+       'toolbox': toolbox,
+       'style':   style,
+       'button':  button,
+       'css': css,
+       'customcss': customcss,
+       'charset': charset,
+       'data':    data,
+       'pageurl': pageurl,
+       'iframesrc': iframesrc
+      }
+
+
+
+def EpozTidy(self, html, pageurl):
+    """ Take html and deliver xhtml if mxTidy is installed;
+        call EpozPostTidy for html-postprocessings before returning the result
+    """
+
+    errors = 0
+    output = html
+    errordata = ""
+
+    input = html.encode("utf-8")
+    input = EPOZ_SCRIPT.sub('<script ', input)
+    input = input.replace('</epoz:script>', '</script>')
+
+    if mxTidyIsAvailable:
+        (errors, warnings, output, errordata) = Tidy.tidy(
+            input, drop_empty_paras=1, indent_spaces=1, indent="auto",
+            output_xhtml=1, word_2000=1, wrap=79, char_encoding="utf8")
+        if errors:
+            output = html
+    elif uTidyIsAvailable:
+        parsed = tidy.parseString(
+            input, drop_empty_paras=1, indent_spaces=1, indent="auto",
+            output_xhtml=1, word_2000=1, wrap=79, char_encoding="utf8",
+            add_xml_decl=0, doctype="omit", indent_attributes=1,
+            drop_proprietary_attributes=1, bare=1, clean=1,
+            enclose_text=1, tidy_mark=0)
+        reports = parsed.get_errors()
+        all_errors = [str(x) for x in reports if x.severity != 'W']
+        errors = len(all_errors)
+        errordata = '\n'.join(all_errors)
+        if errors:
+            output = html
+        else:
+            output = str(parsed)
+
+    output = MSO_CLASS.sub(r"<\1>", output)
+    result = HTML_BODY.search(output)
+    if result:
+        output = result.group(1)
+
+    # Call External Method / PythonScript for postprocessing
+    # The script should expect two parameters:
+    # self = called context (=server)
+    # html = the htmlbody to postprocess
+    # pathname = path of edited object (maybe with template!)
+    # The script should return the new htmlbody
+
+    EpozPostTidy = getattr(self, 'EpozPostTidy', None)
+    if EpozPostTidy is not None:
+        output = EpozPostTidy(self, output, pageurl)
+
+    return (errors, output, errordata)
+
+
+def EpozGetRelativeUrl(self, pageUrl, targetUrl):
+    """ Returns relative path from targetUrl to pageUrl. """
+
+    # Just some shortcuts...
+    SCHEME, HOSTNAME, PATH, PARAMS, QUERY, FRAGMENT = range(6)
+
+    pageUnits = urlparse.urlparse(pageUrl)
+    targetUnits = urlparse.urlparse(targetUrl)
+
+    if pageUnits[:PATH] != targetUnits[:PATH]:
+        # Scheme (http) or host:port (www.comain.com) are different
+        # -> no possible relative URL
+        return targetUrl
+
+    afterPath = targetUnits[PARAMS:]
+
+    pagePath = pageUnits[PATH].split('/')
+    pagePath.reverse()
+
+    targetPath = targetUnits[PATH].split('/')
+    targetPath.reverse()
+
+    # Remove parts which are equal (['a', 'b'] ['a', 'c'] --> ['c'])
+    while (len(pagePath) > 0
+       and len(targetPath) > 0
+       and pagePath[-1] == targetPath[-1]):
+        pagePath.pop()
+        last_pop = targetPath.pop()
+    if len(pagePath) == 0 and len(targetPath) == 0:
+        # Special case: link to itself (http://foo/a http://foo/a -> a)
+        targetPath.append(last_pop)
+    if len(pagePath) == 1 and pagePath[0] == "" and len(targetPath) == 0:
+        # Special case: (http://foo/a/ http://foo/a -> ../a)
+        pagePath.append(last_pop)
+        targetPath.append(last_pop)
+
+    targetPath.reverse()
+
+    relativeUrl = ['..'] * (len(pagePath) -1)
+    relativeUrl = ('', '', '/'.join(relativeUrl + targetPath)) + tuple(afterPath)
+
+    return urlparse.urlunparse(relativeUrl)
+
+
+# Make sure the Epoz method is replaceable in the Products folder
+Epoz.__replaceable__ = Globals.REPLACEABLE
+
+# Register Epoz as global method
+# Register EpozTidy as global method for XMLRPC
+# Register EpozGetRelativeUrl as global method
+# Register epoz_blank_iframe.html as global PageTemplate
+
+methods = {
+'Epoz': Epoz,
+'Epoz__roles__': None,
+
+'EpozTidy': EpozTidy,
+'EpozTidy__roles__': None,
+
+'EpozGetRelativeUrl': EpozGetRelativeUrl,
+'EpozGetRelativeUrl__roles__': None,
+
+'epoz_blank_iframe.html': PageTemplateFile('epoz/epoz_core/epoz_blank_iframe.html.pt', globals()),
+'epoz_blank_iframe.html__roles__': None,
+}
+
+
+# And now try to register Epoz for CMF/Plone
+
+try:
+    from Products.CMFCore.DirectoryView import registerDirectory
+
+    global cmfepoz_globals
+    cmfepoz_globals=globals()
+
+    def initialize(context):
+        registerDirectory('epoz', cmfepoz_globals)
+except:
+    pass
+    
\ No newline at end of file
diff --git a/epoz/epoz_core/epoz_blank_iframe.html.pt b/epoz/epoz_core/epoz_blank_iframe.html.pt
new file mode 100755 (executable)
index 0000000..59606df
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+xmlns:metal="http://xml.zope.org/namespaces/metal">
+<head>
+<base tal:attributes="href python: request.get('pageurl',here.absolute_url())" />
+<meta http-equiv="Content-Type"
+          tal:define="dummy python:request.RESPONSE.setHeader('Content-Type', 'text/html;; charset=%s' % request.get('charset','utf-8'))"
+          tal:attributes="content python: 'text/html;; charset=%s' % request.get('charset','utf-8')" />
+<style media="all" type="text/css">
+<!--
+ a[name] {
+     border:1px solid grey;
+     background: lightgrey url(misc_/Epoz/epoz_button_anchor.gif) -2px -3px no-repeat;
+     padding: 1px 0px 1px 20px;
+     margin: 5px;
+ }
+
+ a[name]:after {
+     content: attr(name);
+ }
+-->
+</style>
+<style tal:condition="python: request.get('css')" type="text/css" media="all"
+          tal:content="string:@import url(${request/css});"></style>
+<style tal:condition="python: request.get('customcss')" type="text/css" media="all"
+          tal:content="string:@import url(${request/customcss});"></style>
+<script language="javascript" type="text/javascript" src="misc_/Epoz/epoz_script_detect.js"></script>
+<script language="javascript" type="text/javascript" src="misc_/Epoz/epoz_iframe_trigger.js"></script>
+</head>
+<body class="visualFontSizeCorrection" contentEditable="true" style="height:100%">
+</body>
+</html>
\ No newline at end of file
diff --git a/epoz/epoz_core/epoz_iframe_trigger.js.dtml b/epoz/epoz_core/epoz_iframe_trigger.js.dtml
new file mode 100644 (file)
index 0000000..d7863ae
--- /dev/null
@@ -0,0 +1,39 @@
+var IFramePrefix = "Iframe_";
+var IFramePrefixLength = IFramePrefix.length;
+var DocPrefix = "doc_";
+var DocPrefixLength = DocPrefix.length;
+
+
+function raiseEpozRedirect() {
+       docid = document.id;
+       if (!docid) return; // single mode
+       docid = document.id.slice(DocPrefixLength);
+       frameId = IFramePrefix + docid;
+       iframe = window.parent.document.getElementById(frameId);
+       if (iframe)
+               raiseEvent(iframe, "click");
+}
+
+function raiseEvent(ob, eventName) {
+    if (browser.isIE55 || browser.isIE6up) {
+       eventName = "on" + eventName;
+       ob.fireEvent(eventName);
+    }
+    else if (browser.isGecko) {
+       event = document.createEvent("MouseEvents");
+       event.initEvent(eventName, true, true);
+       ob.dispatchEvent(event);
+    }
+
+}
+
+function addMouseDownListener() {
+    if (browser.isIE55 || browser.isIE6up) {
+               document.attachEvent("onmousedown", raiseEpozRedirect);
+    }
+    else if (browser.isGecko) {
+               document.addEventListener("mousedown", raiseEpozRedirect, false);
+    }
+}
+
+window.onload = addMouseDownListener;
diff --git a/epoz/epoz_core/epoz_iframe_trigger.js.dtml.metadata b/epoz/epoz_core/epoz_iframe_trigger.js.dtml.metadata
new file mode 100644 (file)
index 0000000..855fecc
--- /dev/null
@@ -0,0 +1,2 @@
+[default]
+cache=HTTPCache
diff --git a/epoz/epoz_core/epoz_multilingual.js.pt b/epoz/epoz_core/epoz_multilingual.js.pt
new file mode 100644 (file)
index 0000000..4a40e59
--- /dev/null
@@ -0,0 +1,55 @@
+var EpozLang=[];
+<tal:block define="messages python:[
+  'Normal'
+, 'Paragraph'
+, 'Heading1'
+, 'Heading2'
+, 'Heading3'
+, 'Heading4'
+, 'Heading5'
+, 'Heading6'
+, 'Formatted'
+, 'Bold'
+, 'Italic'
+, 'Underline'
+, 'Strikethrough'
+, 'Subscript'
+, 'Superscript'
+, 'RemoveFormat'
+, 'TextColor'
+, 'BackColor'
+, 'AlignLeft'
+, 'Center'
+, 'AlignRight'
+, 'OrderedList'
+, 'UnorderedList'
+, 'Outdent'
+, 'Indent'
+, 'InsertLink'
+, 'InsertAnchor'
+, 'InsertImage'
+, 'InsertRule'
+, 'InsertTable'
+, 'Toolbox'
+, 'Undo'
+, 'Redo'
+, 'EnterLinkURL'
+, 'EnterAnchorName'
+, 'EnterImageURL'
+, 'EnterTableRows'
+, 'EnterTableColumns'
+, 'EnterTableBorder'
+, 'TableWithHead'
+, 'TableWithoutHead'
+, 'HTML'
+, 'TidyStart'
+, 'TidyStop'
+, 'TidyError'
+] ;
+charset request/form/charset;
+dummy python:request.RESPONSE.setHeader('Content-Type', 'text/javascript;;charset=' + charset)
+"
+i18n:domain="epoz"
+>
+<tal:block repeat="m messages">EpozLang["<tal:block replace="m" />"]="<tal:block content="m" i18n:translate="" tal:omit-tag="" />";</tal:block>
+</tal:block>
\ No newline at end of file
diff --git a/epoz/epoz_core/epoz_multilingual.js.pt.metadata b/epoz/epoz_core/epoz_multilingual.js.pt.metadata
new file mode 100644 (file)
index 0000000..855fecc
--- /dev/null
@@ -0,0 +1,2 @@
+[default]
+cache=HTTPCache
diff --git a/epoz/epoz_core/epoz_redirect.js.dtml b/epoz/epoz_core/epoz_redirect.js.dtml
new file mode 100644 (file)
index 0000000..b76cb71
--- /dev/null
@@ -0,0 +1,260 @@
+// This script allow to use several Epoz WYSIWYG fields.
+// Copyright (C) 2005 Benoît PIN <mailto:pin@cri.ensmp.fr>
+
+var IFramePrefix = "Iframe_";
+var IFramePrefixLength = IFramePrefix.length;
+var DocPrefix = "doc_";
+var DocPrefixLength = DocPrefix.length;
+var CheckBoxPrefix = "CB_";
+var CheckBoxPrefixLength = CheckBoxPrefix.length;
+var ToolBarPrefix = "ToolBar_";
+var ToolBarPrefixLength = ToolBarPrefix.length;
+
+
+function redirectEpoz(iframe) {
+       if(EpozElement) {
+               if (EpozElement == iframe)
+                       return;
+               changeBorderStyle(EpozElement, "dashed");
+               unwrapEpozVariables();
+       }
+
+       // update Epoz variables        
+       wrapEpozVariables(iframe);
+
+       //cosmetic      
+       changeBorderStyle(EpozElement, "solid");
+       EpozElement.contentWindow.focus();
+}
+
+
+function wrapEpozVariables(iframe) {
+       try {
+               fieldId = iframe.contentWindow.document.id.slice(DocPrefixLength);
+       }
+       catch (e) {
+               // maybe not an epoz iframe
+               return false;
+       }
+       
+       iframe.id = Epoz ;
+       EpozElement=iframe;
+       EpozTextArea = document.getElementById(fieldId);
+       toolBar = document.getElementById(ToolBarPrefix + fieldId);
+       toolBar.id = "EpozToolbar";
+       checkBox = document.getElementById(CheckBoxPrefix + fieldId);
+       checkBox.id = "EpozViewMode";
+       return true;
+}
+
+
+function unwrapEpozVariables() {
+       if (!EpozElement) // no redirection happens yet.
+               return;
+       fieldId = EpozElement.contentWindow.document.id.slice(DocPrefixLength);
+       
+       EpozElement.id = IFramePrefix + fieldId;
+       toolBar = document.getElementById("EpozToolbar");
+       toolBar.id = ToolBarPrefix + fieldId;
+       checkBox = document.getElementById("EpozViewMode");
+       checkBox.id = CheckBoxPrefix + fieldId;
+}
+
+
+
+// Initialization functions
+
+if (!formDatas) {
+       var formDatas = new Array();
+}
+
+function InitIframe(name, data, path, toolbox, style, button, css, customcss, charset, pageurl) {
+    form_name = name;
+    form_data = data;
+    form_path = path;
+    form_toolbox = toolbox;
+    form_area_style = style;
+    form_button_style = button;
+    form_css = css;
+    form_customcss = customcss;
+    form_charset = charset;
+    form_pageurl = pageurl;
+    
+    var richText;
+
+    if (browser.isIE55 || browser.isIE6up) {
+        // Mac-IE doesn't support RichText-Edit at the moment
+        if (browser.isMac) {
+            CreateTextarea();
+            richText = false;
+        } else {
+            CreateEpoz();
+            richText = true;
+        }
+    }
+    else if (browser.isGecko) {
+        //check to see if midas is enabled
+        try {
+            // Just a few cleanups for Mozilla
+
+            form_data = form_data.replace(/<strong>/ig,'<b>');
+            form_data = form_data.replace(/<strong(\s[^>]*)>/ig,'<b$1>');
+            form_data = form_data.replace(/<\/strong>/ig,'</b>');
+
+            form_data = form_data.replace(/<em>/ig,'<i>');
+            form_data = form_data.replace(/<em(\s[^>]*)>/ig,'<i$1>');
+            form_data = form_data.replace(/<\/em>/ig,'</i>');
+
+            CreateEpoz();
+            richText = true;
+        } catch (e) {
+          CreateTextarea();
+          richText = false;
+        }
+    }
+    else {
+        CreateTextarea();
+        richText = false;
+    }
+    
+    if (richText) {
+           // change iframe id
+           formDatas[name] = form_data;
+           var iframe = document.getElementById(Epoz);
+           iframe.id = IFramePrefix + name;
+           
+           // change EpozToolbar id
+           var toolBar = document.getElementById("EpozToolbar");
+           toolBar.id = ToolBarPrefix + name;
+           
+           // Retrieve the switch HTML mode checkbox and change id and onclick function.
+           nodes = iframe.parentNode.nextSibling.nextSibling.childNodes;
+           var i;
+           for (i=0 ; i<nodes.length ; i++ ) {
+               if (nodes[i].nodeType == 1 && nodes[i].nodeName == 'INPUT')
+                       break;
+           }
+               var checkbox = nodes[i];
+               checkbox.id = CheckBoxPrefix + name;
+               
+           changeBorderStyle(iframe, "dashed");
+    }
+}
+
+
+
+function HandleEpozRedirect() {
+    if (browser.isIE55 || browser.isIE6up) {
+       iframe = event.srcElement;
+    }
+    else if (browser.isGecko) {
+       iframe = this;
+    }
+       redirectEpoz(iframe);
+}
+
+function redirectAndSwitchViewMode(checkbox) {
+    if (checkbox.id != "EpozViewMode") {    // Otherwise, EpozElement already targets the good field.
+       var iframe = document.getElementById(IFramePrefix + checkbox.id.slice(CheckBoxPrefixLength));
+               redirectEpoz(iframe);
+       }
+       SwitchViewMode(checkbox.checked);
+}
+
+
+// cosmetics
+function changeBorderStyle(ob, borderStyle) {
+       s = ob.style;
+       s.borderBottomStyle = borderStyle;
+       s.borderLeftStyle = borderStyle;
+       s.borderRightStyle = borderStyle;
+       s.borderTopStyle = borderStyle;
+}
+
+// « overloads »
+
+function InitDocument(iframe) {
+    fieldId = iframe.id.slice(IFramePrefixLength);
+    var data = formDatas[fieldId];
+    delete formDatas[fieldId];
+    ta = document.getElementById(fieldId);
+    iframe.contentWindow.document.body.innerHTML = data;
+    ta.value = data;
+    iframe.contentWindow.document.id = DocPrefix + fieldId;
+       addListener(iframe, "click", HandleEpozRedirect);
+       form = retrieveForm(ta);
+       form.onsubmit=SyncEpoz;
+       if (browser.isGecko) {
+               scriptExpr = 'EnableDesignMode("' + iframe.id + '");';
+               window.setTimeout(scriptExpr, 10);
+       }
+}
+
+
+function SyncEpoz() {
+    if (document.getElementsByTagName)
+        var iframes = document.getElementsByTagName("IFRAME");
+    else if (document.all)
+        var iframes = document.all.tags("IFRAME");
+    
+
+    for (var i=0;i<iframes.length;i++) {
+        
+       unwrapEpozVariables();
+       if(!wrapEpozVariables(iframes[i]))
+                       continue;
+
+           var html = TidyHTML(GetHTML());
+           
+           // strip trailing whitespace    
+           html = (html.replace(/^\s*/,'')).replace(/\s*$/,'');
+       
+           // remove single br left by Firefox / Mozilla
+           if (html=="<br />" || html=="<br>" || html=="<p></p>") {
+               html = "";
+           }
+           form_name = EpozElement.contentWindow.document.id.slice(DocPrefixLength);
+           document.getElementById(form_name).value = html;
+       }
+        
+}
+
+function EnableDesignMode(iframeId) {
+       iframe = document.getElementById(iframeId);
+       try {
+           iframe.contentDocument.designMode = "on";
+           iframe.contentWindow.document.addEventListener("keypress", HandleKeyboardEvent, true);
+       } catch (e) {
+               scriptExpr = 'EnableDesignMode("' + iframeId + '");';
+           setTimeout(scriptExpr, 10);
+       }
+}
+
+
+
+//utils
+
+function retrieveForm(baseOb){
+       var pn = baseOb.parentNode;
+       
+       while (pn != document) {
+               if (pn.nodeName == 'FORM')
+                       break;
+               else {
+                       pn = pn.parentNode;
+               }
+       }
+       return pn;
+}
+
+
+function addListener(ob, eventName, functionReference){
+    if (browser.isIE55 || browser.isIE6up) {
+       eventName = "on" + eventName;
+       ob.attachEvent(eventName, functionReference);
+    }
+    else if (browser.isGecko) {
+       ob.addEventListener(eventName, functionReference, false);
+    }
+
+}
\ No newline at end of file
diff --git a/epoz/epoz_core/epoz_redirect.js.dtml.metadata b/epoz/epoz_core/epoz_redirect.js.dtml.metadata
new file mode 100644 (file)
index 0000000..855fecc
--- /dev/null
@@ -0,0 +1,2 @@
+[default]
+cache=HTTPCache
diff --git a/epoz/epoz_core/epoz_script_color.html.dtml b/epoz/epoz_core/epoz_script_color.html.dtml
new file mode 100755 (executable)
index 0000000..36db526
--- /dev/null
@@ -0,0 +1,124 @@
+<html>
+<head>
+
+<title>Epoz</title>
+
+<script type="text/javascript">
+
+function InitColorPalette() {
+  if (document.getElementsByTagName)
+      var x = document.getElementsByTagName('TD');
+  else if (document.all)
+      var x = document.all.tags('TD');
+  for (var i=0;i<x.length;i++) {
+      x[i].onmouseover = over;
+      x[i].onmouseout = out;
+      x[i].onclick = click;
+  }
+}
+
+function over() {
+  this.style.border='1px dotted white';
+}
+
+function out() {
+  this.style.border='1px solid gray';
+}
+
+function click() {
+  window.opener.SetColor(this.id);
+  window.close();
+}
+</script>
+</head>
+
+<body bgcolor="white" onLoad="InitColorPalette(); this.focus();">
+
+<table border="1" cellpadding="1" cellspacing="1">
+<tr>
+<td id="#FFFFFF" bgcolor="#FFFFFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFCCCC" bgcolor="#FFCCCC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFCC99" bgcolor="#FFCC99" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFFF99" bgcolor="#FFFF99" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFFFCC" bgcolor="#FFFFCC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#99FF99" bgcolor="#99FF99" width="20" height="20"><img width="1" height="1"></td>
+<td id="#99FFFF" bgcolor="#99FFFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CCFFFF" bgcolor="#CCFFFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CCCCFF" bgcolor="#CCCCFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFCCFF" bgcolor="#FFCCFF" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+<tr>
+<td id="#CCCCCC" bgcolor="#CCCCCC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FF6666" bgcolor="#FF6666" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FF9966" bgcolor="#FF9966" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFFF66" bgcolor="#FFFF66" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFFF33" bgcolor="#FFFF33" width="20" height="20"><img width="1" height="1"></td>
+<td id="#66FF99" bgcolor="#66FF99" width="20" height="20"><img width="1" height="1"></td>
+<td id="#33FFFF" bgcolor="#33FFFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#66FFFF" bgcolor="#66FFFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#9999FF" bgcolor="#9999FF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FF99FF" bgcolor="#FF99FF" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+<tr>
+<td id="#C0C0C0" bgcolor="#C0C0C0" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FF0000" bgcolor="#FF0000" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FF9900" bgcolor="#FF9900" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFCC66" bgcolor="#FFCC66" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFFF00" bgcolor="#FFFF00" width="20" height="20"><img width="1" height="1"></td>
+<td id="#33FF33" bgcolor="#33FF33" width="20" height="20"><img width="1" height="1"></td>
+<td id="#66CCCC" bgcolor="#66CCCC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#33CCFF" bgcolor="#33CCFF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#6666CC" bgcolor="#6666CC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CC66CC" bgcolor="#CC66CC" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+<tr>
+<td id="#999999" bgcolor="#999999" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CC0000" bgcolor="#CC0000" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FF6600" bgcolor="#FF6600" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFCC33" bgcolor="#FFCC33" width="20" height="20"><img width="1" height="1"></td>
+<td id="#FFCC00" bgcolor="#FFCC00" width="20" height="20"><img width="1" height="1"></td>
+<td id="#33CC00" bgcolor="#33CC00" width="20" height="20"><img width="1" height="1"></td>
+<td id="#00CCCC" bgcolor="#00CCCC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#3366FF" bgcolor="#3366FF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#6633FF" bgcolor="#6633FF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CC33CC" bgcolor="#CC33CC" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+<tr>
+<td id="#666666" bgcolor="#666666" width="20" height="20"><img width="1" height="1"></td>
+<td id="#990000" bgcolor="#990000" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CC6600" bgcolor="#CC6600" width="20" height="20"><img width="1" height="1"></td>
+<td id="#CC9933" bgcolor="#CC9933" width="20" height="20"><img width="1" height="1"></td>
+<td id="#999900" bgcolor="#999900" width="20" height="20"><img width="1" height="1"></td>
+<td id="#009900" bgcolor="#009900" width="20" height="20"><img width="1" height="1"></td>
+<td id="#339999" bgcolor="#339999" width="20" height="20"><img width="1" height="1"></td>
+<td id="#3333FF" bgcolor="#3333FF" width="20" height="20"><img width="1" height="1"></td>
+<td id="#6600CC" bgcolor="#6600CC" width="20" height="20"><img width="1" height="1"></td>
+<td id="#993399" bgcolor="#993399" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+<tr>
+<td id="#333333" bgcolor="#333333" width="20" height="20"><img width="1" height="1"></td>
+<td id="#660000" bgcolor="#660000" width="20" height="20"><img width="1" height="1"></td>
+<td id="#993300" bgcolor="#993300" width="20" height="20"><img width="1" height="1"></td>
+<td id="#996633" bgcolor="#996633" width="20" height="20"><img width="1" height="1"></td>
+<td id="#666600" bgcolor="#666600" width="20" height="20"><img width="1" height="1"></td>
+<td id="#006600" bgcolor="#006600" width="20" height="20"><img width="1" height="1"></td>
+<td id="#336666" bgcolor="#336666" width="20" height="20"><img width="1" height="1"></td>
+<td id="#000099" bgcolor="#000099" width="20" height="20"><img width="1" height="1"></td>
+<td id="#333399" bgcolor="#333399" width="20" height="20"><img width="1" height="1"></td>
+<td id="#663366" bgcolor="#663366" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+<tr>
+<td id="#000000" bgcolor="#000000" width="20" height="20"><img width="1" height="1"></td>
+<td id="#330000" bgcolor="#330000" width="20" height="20"><img width="1" height="1"></td>
+<td id="#663300" bgcolor="#663300" width="20" height="20"><img width="1" height="1"></td>
+<td id="#663333" bgcolor="#663333" width="20" height="20"><img width="1" height="1"></td>
+<td id="#333300" bgcolor="#333300" width="20" height="20"><img width="1" height="1"></td>
+<td id="#003300" bgcolor="#003300" width="20" height="20"><img width="1" height="1"></td>
+<td id="#003333" bgcolor="#003333" width="20" height="20"><img width="1" height="1"></td>
+<td id="#000066" bgcolor="#000066" width="20" height="20"><img width="1" height="1"></td>
+<td id="#330099" bgcolor="#330099" width="20" height="20"><img width="1" height="1"></td>
+<td id="#330033" bgcolor="#330033" width="20" height="20"><img width="1" height="1"></td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/epoz/epoz_core/epoz_script_detect.js.dtml b/epoz/epoz_core/epoz_script_detect.js.dtml
new file mode 100755 (executable)
index 0000000..85071e9
--- /dev/null
@@ -0,0 +1,100 @@
+// Browser Detect  v2.1.6
+// documentation: http://www.dithered.com/javascript/browser_detect/index.html
+// license: http://creativecommons.org/licenses/by/1.0/
+// code by Chris Nott (chris[at]dithered[dot]com)
+
+
+function BrowserDetect() {
+   var ua = navigator.userAgent.toLowerCase(); 
+
+   // browser engine name
+   this.isGecko       = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
+   this.isAppleWebKit = (ua.indexOf('applewebkit') != -1);
+
+   // browser name
+   this.isKonqueror   = (ua.indexOf('konqueror') != -1); 
+   this.isSafari      = (ua.indexOf('safari') != - 1);
+   this.isOmniweb     = (ua.indexOf('omniweb') != - 1);
+   this.isOpera       = (ua.indexOf('opera') != -1); 
+   this.isIcab        = (ua.indexOf('icab') != -1); 
+   this.isAol         = (ua.indexOf('aol') != -1); 
+   this.isIE          = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1) ); 
+   this.isMozilla     = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
+   this.isFirebird    = (ua.indexOf('firebird/') != -1);
+   this.isNS          = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && !this.isOpera && !this.isSafari && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
+   
+   // spoofing and compatible browsers
+   this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
+   this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
+   
+   // rendering engine versions
+   this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
+   this.equivalentMozilla = ( (this.isGecko) ? parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) ) : -1 );
+   this.appleWebKitVersion = ( (this.isAppleWebKit) ? parseFloat( ua.substring( ua.indexOf('applewebkit/') + 12) ) : -1 );
+   
+   // browser version
+   this.versionMinor = parseFloat(navigator.appVersion); 
+   
+   // correct version number
+   if (this.isGecko && !this.isMozilla) {
+      this.versionMinor = parseFloat( ua.substring( ua.indexOf('/', ua.indexOf('gecko/') + 6) + 1 ) );
+   }
+   else if (this.isMozilla) {
+      this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
+   }
+   else if (this.isIE && this.versionMinor >= 4) {
+      this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
+   }
+   else if (this.isKonqueror) {
+      this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
+   }
+   else if (this.isSafari) {
+      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('safari/') + 7 ) );
+   }
+   else if (this.isOmniweb) {
+      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('omniweb/') + 8 ) );
+   }
+   else if (this.isOpera) {
+      this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera') + 6 ) );
+   }
+   else if (this.isIcab) {
+      this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab') + 5 ) );
+   }
+   
+   this.versionMajor = parseInt(this.versionMinor); 
+   
+   // dom support
+   this.isDOM1 = (document.getElementById);
+   this.isDOM2Event = (document.addEventListener && document.removeEventListener);
+   
+   // css compatibility mode
+   this.mode = document.compatMode ? document.compatMode : 'BackCompat';
+
+   // platform
+   this.isWin    = (ua.indexOf('win') != -1);
+   this.isWin32  = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
+   this.isMac    = (ua.indexOf('mac') != -1);
+   this.isUnix   = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
+   this.isLinux  = (ua.indexOf('linux') != -1);
+   
+   // specific browser shortcuts
+   this.isNS4x = (this.isNS && this.versionMajor == 4);
+   this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
+   this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
+   this.isNS4up = (this.isNS && this.versionMinor >= 4);
+   this.isNS6x = (this.isNS && this.versionMajor == 6);
+   this.isNS6up = (this.isNS && this.versionMajor >= 6);
+   this.isNS7x = (this.isNS && this.versionMajor == 7);
+   this.isNS7up = (this.isNS && this.versionMajor >= 7);
+   
+   this.isIE4x = (this.isIE && this.versionMajor == 4);
+   this.isIE4up = (this.isIE && this.versionMajor >= 4);
+   this.isIE5x = (this.isIE && this.versionMajor == 5);
+   this.isIE55 = (this.isIE && this.versionMinor == 5.5);
+   this.isIE5up = (this.isIE && this.versionMajor >= 5);
+   this.isIE6x = (this.isIE && this.versionMajor == 6);
+   this.isIE6up = (this.isIE && this.versionMajor >= 6);
+   
+   this.isIE4xMac = (this.isIE4x && this.isMac);
+}
+var browser = new BrowserDetect();
\ No newline at end of file
diff --git a/epoz/epoz_core/epoz_script_detect.js.dtml.metadata b/epoz/epoz_core/epoz_script_detect.js.dtml.metadata
new file mode 100644 (file)
index 0000000..855fecc
--- /dev/null
@@ -0,0 +1,2 @@
+[default]
+cache=HTTPCache
diff --git a/epoz/epoz_core/epoz_script_main.js.dtml b/epoz/epoz_core/epoz_script_main.js.dtml
new file mode 100755 (executable)
index 0000000..432d250
--- /dev/null
@@ -0,0 +1,298 @@
+//#####
+//###  Epoz - a cross-browser-wysiwyg-editor for Zope
+//##   Copyright (C) 2004 Maik Jablonski (maik.jablonski@uni-bielefeld.de)
+//#
+
+// Just to prevent typos when fetching the Epoz-IFrame...
+
+var Epoz = "EpozEditor";
+
+// Speed-Up-Storage for document.getElementById(Epoz);
+
+var EpozElement;
+var EpozTextArea;
+
+// Global storages
+
+var form_data;  // the document-data
+var form_name;  // the name of the form-element
+var form_path;  // path to buttons, font-selectors, ...
+var form_toolbox; // path to optional toolbox
+var form_area_style; // css-definition for wysiwyg-area
+var form_button_style; // css-definition for buttons
+var form_css; // css-style for iframe
+var form_customcss; // customized css-style for iframe
+var form_charset; // charset for iframe
+var form_pageurl; // real url for the edited page
+
+
+// Returns the current HTML.
+
+function GetHTML(source_mode) {
+    if (source_mode == null)
+        source_mode = document.getElementById('EpozViewMode').checked;
+    if (source_mode) {
+        return EpozTextArea.value;
+    }
+    else {
+        try {
+            return EpozElement.contentWindow.document.body.innerHTML;
+        } catch (e) {
+            return EpozElement.value;
+        }
+    }
+}
+
+// Just a XMLRPC to a web-service to clean up the html
+
+function TidyHTML(html) {
+    window.status = EpozLang["TidyStart"];
+    try {
+      // Call EpozTidy one step above the given pageurl.
+      // This should avoid some problems with VHM & PageTemplates etc.
+      xmlrpchost = form_pageurl + "/..";
+        result = XMLRPC.call(xmlrpchost, "EpozTidy", html, form_pageurl);
+
+        errors = result[0];
+        output = result[1];
+        errordata = result[2];
+
+        if (errors != 0) {
+            window.status = EpozLang["TidyError"];
+            alert(errordata);
+        }
+        else {
+          window.status = EpozLang["TidyStop"];
+        }
+        return (output);
+    } catch (e) {
+        return (html);
+    }
+}
+
+// -------------------------------------------------------------
+// Here are the definitions for the control-and-format-functions
+
+// Format text with RichText-Controls
+
+function FormatText(command, option) {
+    EpozElement.contentWindow.focus();
+
+    // Mozilla inserts css-styles per default
+
+  if (browser.isGecko) {
+      EpozElement.contentWindow.document.execCommand('useCSS',false, true);
+    }
+
+    EpozElement.contentWindow.document.execCommand(command, false, option);
+}
+
+
+// Insert arbitrary HTML at current selection
+
+function InsertHTML(html) {
+
+    EpozElement.contentWindow.focus();
+
+    if (browser.isIE5up) {
+        selection = EpozElement.contentWindow.document.selection;
+        range = selection.createRange();
+        try {
+            range.pasteHTML(html);
+        } catch (e) {
+            // catch error when range is evil for IE
+        }
+    } else {
+        selection = EpozElement.contentWindow.window.getSelection();
+        EpozElement.contentWindow.focus();
+        if (selection) {
+            range = selection.getRangeAt(0);
+        } else {
+            range = EpozElement.contentWindow.document.createRange();
+        }
+
+        var fragment = EpozElement.contentWindow.document.createDocumentFragment();
+        var div = EpozElement.contentWindow.document.createElement("div");
+        div.innerHTML = html;
+
+        while (div.firstChild) {
+            fragment.appendChild(div.firstChild);
+        }
+
+        selection.removeAllRanges();
+        range.deleteContents();
+
+        var node = range.startContainer;
+        var pos = range.startOffset;
+
+        switch (node.nodeType) {
+            case 3:
+                if (fragment.nodeType == 3) {
+                    node.insertData(pos, fragment.data);
+                    range.setEnd(node, pos + fragment.length);
+                    range.setStart(node, pos + fragment.length);
+                } else {
+                    node = node.splitText(pos);
+                    node.parentNode.insertBefore(fragment, node);
+                    range.setEnd(node, pos + fragment.length);
+                    range.setStart(node, pos + fragment.length);
+                }
+                break;
+
+            case 1:
+                node = node.childNodes[pos];
+                node.parentNode.insertBefore(fragment, node);
+                range.setEnd(node, pos + fragment.length);
+                range.setStart(node, pos + fragment.length);
+                break;
+        }
+        selection.addRange(range);
+    }
+}
+
+
+// Create an anchor - no browser supports this directly
+
+function CreateAnchor(name) {
+  name = prompt(EpozLang["EnterAnchorName"], "");
+  if (name) {
+    anchorhtml = '<a name="' + name + '" title="' + name + '"></a>';
+    InsertHTML(anchorhtml);
+  }
+}
+
+
+// Create a Hyperlink - IE has its own implementation
+
+function CreateLink(URL) {
+    if (browser.isIE5up == false && ((URL == null) || (URL == ""))) {
+        URL = prompt(EpozLang["EnterLinkURL"], "");
+
+        if ((URL != null) && (URL != "")) {
+            EpozElement.contentWindow.document.execCommand("CreateLink",false,URL)
+        } else {
+            EpozElement.contentWindow.document.execCommand("Unlink",false, "")
+        }
+    } else {
+        EpozElement.contentWindow.document.execCommand("CreateLink",false,URL)
+    }
+}
+
+
+// Insert image via a URL
+
+function CreateImage(URL) {
+    if ((URL == null) || (URL == "")) {
+        URL = prompt(EpozLang["EnterImageURL"], "");
+    }
+    if ((URL != null) && (URL != "")) {
+        EpozElement.contentWindow.focus()
+        EpozElement.contentWindow.document.execCommand('InsertImage', false, URL);
+    }
+}
+
+
+// Creates a simple table
+
+function CreateTable(rows, cols, border, head) {
+    rows = parseInt(rows);
+    cols = parseInt(cols);
+
+  if ((rows > 0) && (cols > 0)) {
+      table = ' <table border="' + border + '">\n';
+
+    for (var i=0; i < rows; i++) {
+          table = table + " <tr>\n";
+            for (var j=0; j < cols; j++) {
+              if(i==0 && head=="1") {
+                   table += "  <th>#</th>\n";
+              } else {
+                 table += "  <td>#</td>\n";
+        }
+      }
+            table += " </tr>\n";
+    }
+    table += " </table>\n";
+    InsertHTML(table);
+  }
+    EpozElement.contentWindow.focus()
+}
+
+
+// Sets selected formats
+
+function SelectFormat(selectname)
+{
+    // First one is only a label
+    if (selectname.selectedIndex != 0) {
+        EpozElement.contentWindow.document.execCommand(selectname.id, false, selectname.options[selectname.selectedIndex].value);
+        selectname.selectedIndex = 0;
+    }
+    EpozElement.contentWindow.focus();
+}
+
+
+// Sets foreground-color
+
+function SetTextColor() {
+    EpozColorCommand='forecolor';
+    window.open(form_path+'epoz_script_color.html','EpozColor','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=220,height=220');
+}
+
+// Sets background-color
+
+function SetBackColor() {
+    EpozColorCommand='backcolor';
+    window.open(form_path+'epoz_script_color.html','EpozColor','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=220,height=220');
+}
+
+// Submit color-command to Rich-Text-Controls
+
+function SetColor(color) {
+
+    if (browser.isGecko) {
+       EpozElement.contentWindow.document.execCommand('useCSS',false, false);
+    }
+
+    EpozElement.contentWindow.document.execCommand(EpozColorCommand, false, color);
+    EpozElement.contentWindow.focus();
+}
+
+// Switch between Source- and Wysiwyg-View
+
+function SwitchViewMode(source_mode)
+{
+    var html = GetHTML(!source_mode);
+
+    if (source_mode) {
+        EpozTextArea.value=TidyHTML(html);
+        document.getElementById("EpozToolbar").style.display="none";
+        EpozTextArea.style.display="inline";
+    } else {
+        html = html.replace('<script ', '<epoz:script style="display: none" ')
+        html = html.replace('</script>', '</epoz:script>')
+    
+        EpozElement.contentWindow.document.body.innerHTML = html;
+        document.getElementById("EpozToolbar").style.display="inline";
+        EpozTextArea.style.display="none";
+
+        if (browser.isGecko) {
+            EpozElement.contentDocument.designMode = "on";
+        }
+    }
+}
+
+// Keyboard-Handler for Mozilla (supports same shortcuts as IE)
+
+function HandleKeyboardEvent(event)
+{
+       if (event.ctrlKey) {
+               var key = String.fromCharCode(event.charCode).toLowerCase();
+               switch (key) {
+                       case 'b': FormatText('bold',''); event.preventDefault(); break;
+                       case 'i': FormatText('italic',''); event.preventDefault(); break;
+                       case 'u': FormatText('underline',''); event.preventDefault(); break;
+                       case 'k': CreateLink(); event.preventDefault(); break;
+               };
+       }
+}
diff --git a/epoz/epoz_core/epoz_script_main.js.dtml.metadata b/epoz/epoz_core/epoz_script_main.js.dtml.metadata
new file mode 100644 (file)
index 0000000..855fecc
--- /dev/null
@@ -0,0 +1,2 @@
+[default]
+cache=HTTPCache
diff --git a/epoz/epoz_core/epoz_script_table.html.dtml b/epoz/epoz_core/epoz_script_table.html.dtml
new file mode 100755 (executable)
index 0000000..dd5c794
--- /dev/null
@@ -0,0 +1,67 @@
+<html>
+<head>
+
+<title>Epoz</title>
+
+<style type="text/css">
+<!--
+* {font-family: Arial, Helvetica, Sans-Serif; font-size: 12px;}
+//-->
+</style>
+
+<script type="text/javascript">
+
+function SubmitForm() {
+ rows = document.getElementById('rows').value;
+ cols = document.getElementById('cols').value;
+ border = document.getElementById('border').value;
+ head = document.getElementById('head').value;
+ window.opener.CreateTable(rows, cols, border, head);
+ window.close();
+};
+
+</script>
+</head>
+
+<body onload="this.focus();">
+
+<form>
+<table border="0" cellspacing="4" cellpadding="4">
+<tbody>
+
+ <tr>
+  <td><script type="text/javascript">document.writeln(opener.EpozLang["EnterTableRows"]);</script></td>
+  <td><input type="text" name="rows" id="rows" size="5" value="3" /></td>
+ </tr>
+
+ <tr>
+  <td><script type="text/javascript">document.writeln(opener.EpozLang["EnterTableColumns"]);</script></td>
+  <td><input type="text" name="cols" id="cols" size="5" value="3" /></td>
+ </tr>
+
+ <tr>
+  <td><script type="text/javascript">document.writeln(opener.EpozLang["EnterTableBorder"]);</script></td>
+  <td><input type="text" name="border" id="border" size="5" value="1" /></td>
+ </tr>
+
+ <tr>
+  <td colspan="2">
+        <select id="head" name="head">
+          <option value="0"><script type="text/javascript">document.writeln(opener.EpozLang["TableWithoutHead"]);</script></option>
+          <option value="1"><script type="text/javascript">document.writeln(opener.EpozLang["TableWithHead"]);</script></option>
+         </select>
+   </td>
+ </tr>
+
+ <tr>
+  <td colspan="2">
+   <button type="button" onclick="return SubmitForm();"><script type="text/javascript">document.writeln(opener.EpozLang["InsertTable"]);</script></button>
+  </td>
+ </tr>
+
+ </tbody>
+</table>
+
+</form>
+</body>
+</html>
diff --git a/epoz/epoz_core/epoz_script_widget.js.dtml b/epoz/epoz_core/epoz_script_widget.js.dtml
new file mode 100755 (executable)
index 0000000..429831f
--- /dev/null
@@ -0,0 +1,125 @@
+//
+// Create HTML for Epoz-Editor
+//
+// Comment out the parts you don't want to be shown.
+//
+
+function CreateEpoz() {
+
+    var widget = '';
+    var spacer = '<img src="'+form_path+'epoz_button_space.gif" width="2" height="1">';
+
+    widget += '<div id="EpozToolbar">';
+
+/*
+    The select-box for formats
+*/
+
+    widget += '<select id="formatblock" onchange="SelectFormat(this);" style="margin-bottom: 2px;">';
+    widget += '<option value="">'+EpozLang["Normal"]+'</option>';
+    widget += '<option value="<p>">'+EpozLang["Paragraph"]+'</option>';
+    widget += '<option value="<h1>">'+EpozLang["Heading1"]+'</option>';
+    widget += '<option value="<h2>">'+EpozLang["Heading2"]+'</option>';
+    widget += '<option value="<h3>">'+EpozLang["Heading3"]+'</option>';
+    widget += '<option value="<h4>">'+EpozLang["Heading4"]+'</option>';
+    widget += '<option value="<h5>">'+EpozLang["Heading5"]+'</option>';
+    widget += '<option value="<h6>">'+EpozLang["Heading6"]+'</option>';
+    widget += '<option value="<pre>">'+EpozLang["Formatted"]+'</option>';
+    widget += '</select>';
+    widget += '<br />';
+
+/*
+    The font-face-buttons (bold, italic, underline)
+*/
+
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_bold.gif" width="23" height="22" alt="'+EpozLang["Bold"]+'" title="'+EpozLang["Bold"]+'" onClick="FormatText(\'bold\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_italic.gif" width="23" height="22" alt="'+EpozLang["Italic"]+'" title="'+EpozLang["Italic"]+'" onClick="FormatText(\'italic\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_underline.gif" width="23" height="22" alt="'+EpozLang["Underline"]+'" title="'+EpozLang["Underline"]+'" onClick="FormatText(\'underline\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_strikethrough.gif" width="23" height="22" alt="'+EpozLang["Strikethrough"]+'" title="'+EpozLang["Strikethrough"]+'" onClick="FormatText(\'strikethrough\', \'\');" />';
+    widget += spacer;
+
+/*
+    The sub-/superscript-buttons
+*/
+
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_subscript.gif" width="23" height="22" alt="'+EpozLang["Subscript"]+'" title="'+EpozLang["Subscript"]+'" onClick="FormatText(\'subscript\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_superscript.gif" width="23" height="22" alt="'+EpozLang["Superscript"]+'" title="'+EpozLang["Superscript"]+'" onClick="FormatText(\'superscript\', \'\');" />';
+    widget += spacer;
+
+/*
+    The remove-format-button
+*/
+
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_unformat.gif" width="23" height="22" alt="'+EpozLang["RemoveFormat"]+'" title="'+EpozLang["RemoveFormat"]+'" onClick="FormatText(\'removeformat\', \'\');" />';
+    widget += spacer;
+
+/*
+    The color-selections (foreground, background)
+*/
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_textcolor.gif" width="23" height="22" alt="'+EpozLang["TextColor"]+'" title="'+EpozLang["TextColor"]+'" onClick="SetTextColor();" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_bgcolor.gif" width="23" height="22" alt="'+EpozLang["BackColor"]+'" title="'+EpozLang["BackColor"]+'" onClick="SetBackColor();" />';
+    widget += spacer;
+
+/*
+    Alignment-controls
+*/
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_left_just.gif" width="23" height="22" alt="'+EpozLang["AlignLeft"]+'" title="'+EpozLang["AlignLeft"]+'" onClick="FormatText(\'justifyleft\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_centre.gif" width="23" height="22" alt="'+EpozLang["Center"]+'" title="'+EpozLang["Center"]+'" onClick="FormatText(\'justifycenter\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_right_just.gif" width="23" height="22" alt="'+EpozLang["AlignRight"]+'" title="'+EpozLang["AlignRight"]+'" onClick="FormatText(\'justifyright\', \'\');" />';
+    widget += spacer;
+
+/*
+    Lists and In/Outdent
+*/
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_numbered_list.gif" width="23" height="22" alt="'+EpozLang["OrderedList"]+'" title="'+EpozLang["OrderedList"]+'" onClick="FormatText(\'insertorderedlist\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_list.gif" width="23" height="22" alt="'+EpozLang["UnorderedList"]+'" title="'+EpozLang["UnorderedList"]+'" onClick="FormatText(\'insertunorderedlist\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_outdent.gif" width="23" height="22" alt="'+EpozLang["Outdent"]+'" title="'+EpozLang["Outdent"]+'" onClick="FormatText(\'outdent\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_indent.gif" width="23" height="22" alt="'+EpozLang["Indent"]+'" title="'+EpozLang["Indent"]+'" onClick="FormatText(\'indent\', \'\');" />';
+    widget += spacer;
+
+/*
+    Insert Link, Image, Rule, Table
+*/
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_hyperlink.gif" width="23" height="22" alt="'+EpozLang["InsertLink"]+'" title="'+EpozLang["InsertLink"]+'" onClick="CreateLink();" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_anchor.gif" width="23" height="22" alt="'+EpozLang["InsertAnchor"]+'" title="'+EpozLang["InsertAnchor"]+'" onClick="CreateAnchor();" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_image.gif" width="23" height="22" alt="'+EpozLang["InsertImage"]+'" title="'+EpozLang["InsertImage"]+'" onClick="CreateImage();" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_hr.gif" width="23" height="22" alt="'+EpozLang["InsertRule"]+'" title="'+EpozLang["InsertRule"]+'" onClick="FormatText(\'inserthorizontalrule\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_table.gif" width="23" height="22" alt="'+EpozLang["InsertTable"]+'" title="'+EpozLang["InsertTable"]+'" onClick="window.open(\''+form_path+'epoz_script_table.html\',\'EpozTable\',\'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=220,height=220\');" />';
+
+/*
+    The optional toolbox
+*/
+    if ((form_toolbox != null) && (form_toolbox != "")) {
+        widget += spacer;
+        widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_tools.gif" width="23" height="22" alt="'+EpozLang["Toolbox"]+'" title="'+EpozLang["Toolbox"]+'"" onClick="window.open(\''+form_toolbox+'\',\'EpozToolbox\',\'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=400,height=400\');" />';
+    }
+
+    widget += spacer;
+
+/*
+    Undo & Redo
+*/
+
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_undo.gif" width="23" height="22" alt="'+EpozLang["Undo"]+'" title="'+EpozLang["Undo"]+'" onClick="FormatText(\'undo\', \'\');" />';
+    widget += '<img style="'+form_button_style+'" src="'+form_path+'epoz_button_redo.gif" width="23" height="22" alt="'+EpozLang["Redo"]+'" title="'+EpozLang["Redo"]+'" onClick="FormatText(\'redo\', \'\');" />';
+
+/*
+     Don't remove!!! And better not touch...;)
+*/
+
+    widget += '\n<br />\n';
+    widget += '<iframe src="'+form_pageurl+'/epoz_blank_iframe.html?charset='+form_charset+'&css='+form_css+'&customcss='+form_customcss+'&pageurl='+form_pageurl+'" frameborder="0" id="' + Epoz + '" style="' + form_area_style + '" onload="InitDocument(this);"></iframe>';
+    widget += '</div>';
+
+    widget += '<textarea style="display: none; ' + form_area_style + '"  id="' + form_name + '" name="' + form_name + '" value=""></textarea>';
+    widget += '<div style="margin: 0px;"><input id="EpozViewMode" style="margin: 0px; width: 10px; height: 10px;" type="checkbox" onclick="redirectAndSwitchViewMode(this);" />&nbsp;<span style="font-size: 10px;">' + EpozLang["HTML"] + '</span></div>';
+
+    document.writeln(widget);
+}
+
+
+// Create a default-textbox for browsers without Rich-Text-Features
+
+function CreateTextarea() {
+    document.writeln('<textarea name="' + form_name + '" id="' + Epoz + '" style="' + form_area_style + '">'+form_data+'</textarea>');
+}
diff --git a/epoz/epoz_core/vcXMLRPC.js.dtml b/epoz/epoz_core/vcXMLRPC.js.dtml
new file mode 100755 (executable)
index 0000000..b46166d
--- /dev/null
@@ -0,0 +1,633 @@
+//
+//    Copyright (C) 2000, 2001, 2002  Virtual Cowboys info@virtualcowboys.nl
+//
+//             Author: Ruben Daniels <ruben@virtualcowboys.nl>
+//             Version: 0.91
+//             Date: 29-08-2001
+//             Site: www.vcdn.org/Public/XMLRPC/
+//
+//    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
+
+
+Object.prototype.toXMLRPC = function(){
+  var wo = this.valueOf();
+
+  if(wo.toXMLRPC == this.toXMLRPC){
+    retstr = "<struct>";
+
+    for(prop in this){
+      if(typeof wo[prop] != "function"){
+        retstr += "<member><name>" + prop + "</name><value>" + XMLRPC.getXML(wo[prop]) + "</value></member>";
+      }
+    }
+    retstr += "</struct>";
+
+    return retstr;
+  }
+  else{
+    return wo.toXMLRPC();
+  }
+}
+
+String.prototype.toXMLRPC = function(){
+  //<![CDATA[***your text here***]]>
+  return "<string><![CDATA[" + this.replace(/\]\]/g, "] ]") + "]]></string>";//.replace(/</g, "&lt;").replace(/&/g, "&amp;")
+}
+
+Number.prototype.toXMLRPC = function(){
+  if(this == parseInt(this)){
+    return "<int>" + this + "</int>";
+  }
+  else if(this == parseFloat(this)){
+    return "<double>" + this + "</double>";
+  }
+  else{
+    return false.toXMLRPC();
+  }
+}
+
+Boolean.prototype.toXMLRPC = function(){
+  if(this) return "<boolean>1</boolean>";
+  else return "<boolean>0</boolean>";
+}
+
+Date.prototype.toXMLRPC = function(){
+  //Could build in possibilities to express dates
+  //in weeks or other iso8601 possibillities
+  //hmmmm ????
+  //19980717T14:08:55
+  return "<dateTime.iso8601>" + doYear(this.getUTCYear()) + doZero(this.getMonth()) + doZero(this.getUTCDate()) + "T" + doZero(this.getHours()) + ":" + doZero(this.getMinutes()) + ":" + doZero(this.getSeconds()) + "</dateTime.iso8601>";
+
+  function doZero(nr) {
+    nr = String("0" + nr);
+    return nr.substr(nr.length-2, 2);
+  }
+
+  function doYear(year) {
+    if(year > 9999 || year < 0)
+      XMLRPC.handleError(new Error("Unsupported year: " + year));
+
+    year = String("0000" + year)
+    return year.substr(year.length-4, 4);
+  }
+}
+
+Array.prototype.toXMLRPC = function(){
+  var retstr = "<array><data>";
+  for(var i=0;i<this.length;i++){
+    retstr += "<value>" + XMLRPC.getXML(this[i]) + "</value>";
+  }
+  return retstr + "</data></array>";
+}
+
+function VirtualService(servername, oRPC){
+  this.version = '0.91';
+  this.URL = servername;
+  this.multicall = false;
+  this.autoroute = true;
+  this.onerror = null;
+
+  this.rpc = oRPC;
+  this.receive = {};
+
+  this.purge = function(receive){
+    return this.rpc.purge(this, receive);
+  }
+
+  this.revert = function(){
+    this.rpc.revert(this);
+  }
+
+  this.add = function(name, alias, receive){
+    this.rpc.validateMethodName();if(this.rpc.stop){this.rpc.stop = false;return false}
+    if(receive) this.receive[name] = receive;
+    this[(alias || name)] = new Function('var args = new Array(), i;for(i=0;i<arguments.length;i++){args.push(arguments[i]);};return this.call("' + name + '", args);');
+    return true;
+  }
+
+  //internal function for sending data
+  this.call = function(name, args){
+    var info = this.rpc.send(this.URL, name, args, this.receive[name], this.multicall, this.autoroute);
+
+    if(info){
+      if(!this.multicall) this.autoroute = info[0];
+      return info[1];
+    }
+    else{
+      if(this.onerror) this.onerror(XMLRPC.lastError);
+      return false;
+    }
+  }
+}
+
+
+XMLRPC = {
+  routeServer : "http://www.vcdn.org/cgi-bin/rpcproxy.cgi",
+  autoroute : true,
+  multicall : false,
+
+  services : {},
+  stack : {},
+  queue : new Array(),
+  timers : new Array(),
+  timeout : 30000,
+
+  ontimeout : null,
+
+  getService : function(serviceName){
+    //serviceNames cannot contain / or .
+    if(/[\/\.]/.test(serviceName)){
+      return new VirtualService(serviceName, this);
+    }
+    else if(this.services[serviceName]){
+      return this.services[serviceName];
+    }
+    else{
+      try{
+        var ct = eval(serviceName);
+        this.services[serviceName] = new ct(this);
+      }
+      catch(e){
+        return false;
+      }
+    }
+  },
+
+  purge : function(modConst, receive){
+    if(this.stack[modConst.URL].length){
+      var info = this.send(modConst.URL, "system.multicall", [this.stack[modConst.URL]], receive, false, modConst.autoroute);
+      modConst.autoroute = info[0];
+      this.revert(modConst);
+
+      if(info){
+        modConst.autoroute = info[0];
+        return info[1];
+      }
+      else{
+        if(modConst.onerror) modConst.onerror(this.lastError);
+        return false;
+      }
+    }
+  },
+
+  revert : function(modConst){
+    this.stack[modConst.URL] = new Array();
+  },
+
+  call : function(){
+    //[optional info || receive, servername,] functionname, args......
+    var args = new Array(), i, a = arguments;
+    var servername, methodname, receive, service, info, autoroute, multicall;
+
+    if(typeof a[0] == "object"){
+      receive = a[0][0];
+      servername = a[0][1].URL;
+      methodname = a[1];
+      multicall = (a[0][1].supportsMulticall && a[0][1].multicall);
+      autoroute = a[0][1].autoroute;
+      service = a[0][1];
+    }
+    else if(typeof a[0] == "function"){
+      i = 3;
+      receive = a[0];
+      servername = a[1];
+      methodname = a[2];
+    }
+    else{
+      i = 2;
+      servername = a[0];
+      methodname = a[1];
+    }
+
+    for(i=i;i<a.length;i++){
+      args.push(a[i]);
+    }
+
+    info = this.send(servername, methodname, args, receive, multicall, autoroute);
+    if(info){
+      (service || this).autoroute = info[0];
+      return info[1];
+    }
+    else{
+      if(service && service.onerror) service.onerror(this.lastError);
+      return false;
+    }
+
+  },
+
+  /***
+  * Perform typematching on 'vDunno' and return a boolean value corresponding
+  * to the result of the evaluation-match of the mask-value stated in the 2nd argument.
+  * The 2nd argument is optional (none will be treated as a 0-mask) or a sum of
+  * several masks as follows:
+  * type/s    ->  mask/s
+  * --------------------
+  * undefined ->  0/1 [default]
+  * number    ->  2
+  * boolean   ->  4
+  * string    ->  8
+  * function  -> 16
+  * object    -> 32
+  * --------------------
+  * Examples:
+  * Want [String] only: (eqv. (typeof(vDunno) == 'string') )
+  *  Soya.Common.typematch(unknown, 8)
+  * Anything else than 'undefined' acceptable:
+  *  Soya.Common.typematch(unknown)
+  * Want [Number], [Boolean] or [Function]:
+  *  Soya.Common.typematch(unknown, 2 + 4 + 16)
+  * Want [Number] only:
+  *  Soya.Common.typematch(unknown, 2)
+  **/
+  typematch : function (vDunno, nCase){
+    var nMask;
+    switch(typeof(vDunno)){
+      case 'number'  : nMask = 2;  break;
+      case 'boolean' : nMask = 4;  break;
+      case 'string'  : nMask = 8;  break;
+      case 'function': nMask = 16; break;
+      case 'object'  : nMask = 32; break;
+      default       : nMask = 1;  break;
+    }
+    return Boolean(nMask & (nCase || 62));
+  },
+
+  getNode : function(data, tree){
+    var nc = 0;//nodeCount
+    //node = 1
+    if(data != null){
+      for(i=0;i<data.childNodes.length;i++){
+        if(data.childNodes[i].nodeType == 1){
+          if(nc == tree[0]){
+            data = data.childNodes[i];
+            if(tree.length > 1){
+              tree.shift();
+              data = this.getNode(data, tree);
+            }
+            return data;
+          }
+          nc++
+        }
+      }
+    }
+
+    return false;
+  },
+
+  toObject : function(data){
+    var ret, i;
+    switch(data.tagName){
+      case "string":
+               var s=""
+               //Mozilla has many textnodes with a size of 4096 chars each instead of one large one.
+               //They all need to be concatenated.
+               for(var j=0;j<data.childNodes.length;j++){
+                  s+=new String(data.childNodes.item(j).nodeValue);
+               }
+               return s;
+         break;
+      case "int":
+      case "i4":
+      case "double":
+        return (data.firstChild) ? new Number(data.firstChild.nodeValue) : 0;
+        break;
+      case "dateTime.iso8601":
+        /*
+        Have to read the spec to be able to completely
+        parse all the possibilities in iso8601
+        07-17-1998 14:08:55
+        19980717T14:08:55
+        */
+
+        var sn = (isIE) ? "-" : "/";
+
+        if(/^(\d{4})(\d{2})(\d{2})T(\d{2}):(\d{2}):(\d{2})/.test(data.firstChild.nodeValue)){;//data.text)){
+            return new Date(RegExp.$2 + sn + RegExp.$3 + sn +
+                      RegExp.$1 + " " + RegExp.$4 + ":" +
+                      RegExp.$5 + ":" + RegExp.$6);
+          }
+          else{
+            return new Date();
+          }
+
+        break;
+      case "array":
+        data = this.getNode(data, [0]);
+
+        if(data && data.tagName == "data"){
+          ret = new Array();
+
+          var i = 0;
+          while(child = this.getNode(data, [i++])){
+              ret.push(this.toObject(child));
+          }
+
+          return ret;
+        }
+        else{
+          this.handleError(new Error("Malformed XMLRPC Message1"));
+          return false;
+        }
+        break;
+      case "struct":
+        ret = {};
+
+        var i = 0;
+        while(child = this.getNode(data, [i++])){
+          if(child.tagName == "member"){
+            ret[this.getNode(child, [0]).firstChild.nodeValue] = this.toObject(this.getNode(child, [1]));
+          }
+          else{
+            this.handleError(new Error("Malformed XMLRPC Message2"));
+            return false;
+          }
+        }
+
+        return ret;
+        break;
+      case "boolean":
+        return Boolean(isNaN(parseInt(data.firstChild.nodeValue)) ? (data.firstChild.nodeValue == "true") : parseInt(data.firstChild.nodeValue))
+
+        break;
+      case "base64":
+        return this.decodeBase64(data.firstChild.nodeValue);
+        break;
+      case "value":
+        child = this.getNode(data, [0]);
+        return (!child) ? ((data.firstChild) ? new String(data.firstChild.nodeValue) : "") : this.toObject(child);
+
+        break;
+      default:
+        this.handleError(new Error("Malformed XMLRPC Message: " + data.tagName));
+        return false;
+        break;
+    }
+  },
+
+  /*** Decode Base64 ******
+  * Original Idea & Code by thomas@saltstorm.net
+  * from Soya.Encode.Base64 [http://soya.saltstorm.net]
+  **/
+  decodeBase64 : function(sEncoded){
+    // Input must be dividable with 4.
+    if(!sEncoded || (sEncoded.length % 4) > 0)
+      return sEncoded;
+
+    /* Use NN's built-in base64 decoder if available.
+       This procedure is horribly slow running under NN4,
+       so the NN built-in equivalent comes in very handy. :) */
+
+    else if(typeof(atob) != 'undefined')
+      return atob(sEncoded);
+
+      var nBits, i, sDecoded = '';
+      var base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+    sEncoded = sEncoded.replace(/\W|=/g, '');
+
+    for(i=0; i < sEncoded.length; i += 4){
+      nBits =
+        (base64.indexOf(sEncoded.charAt(i))   & 0xff) << 18 |
+        (base64.indexOf(sEncoded.charAt(i+1)) & 0xff) << 12 |
+        (base64.indexOf(sEncoded.charAt(i+2)) & 0xff) <<  6 |
+        base64.indexOf(sEncoded.charAt(i+3)) & 0xff;
+      sDecoded += String.fromCharCode(
+        (nBits & 0xff0000) >> 16, (nBits & 0xff00) >> 8, nBits & 0xff);
+    }
+
+    // not sure if the following statement behaves as supposed under
+    // all circumstances, but tests up til now says it does.
+
+    return sDecoded.substring(0, sDecoded.length -
+     ((sEncoded.charCodeAt(i - 2) == 61) ? 2 :
+      (sEncoded.charCodeAt(i - 1) == 61 ? 1 : 0)));
+  },
+
+  getObject : function(type, message){
+    if(type == "HTTP"){
+      if(isIE)
+        obj = new ActiveXObject("microsoft.XMLHTTP");
+      else if(isNS)
+        obj = new XMLHttpRequest();
+    }
+    else if(type == "XMLDOM"){
+      if(isIE){
+        obj = new ActiveXObject("microsoft.XMLDOM");
+        obj.loadXML(message)
+      }else if(isNS){
+        obj = new DOMParser();
+        obj = obj.parseFromString(message, "text/xml");
+      }
+
+    }
+    else{
+      this.handleError(new Error("Unknown Object"));
+    }
+
+    return obj;
+  },
+
+  validateMethodName : function(name){
+    /*do Checking:
+
+    The string may only contain identifier characters,
+    upper and lower-case A-Z, the numeric characters, 0-9,
+    underscore, dot, colon and slash.
+
+    */
+    if(/^[A-Za-z0-9\._\/:]+$/.test(name))
+      return true
+    else
+      this.handleError(new Error("Incorrect method name"));
+  },
+
+  getXML : function(obj){
+    if(typeof obj == "function"){
+      this.handleError(new Error("Cannot Parse functions"));
+    }else if(obj == null || obj == undefined || (typeof obj == "number" && !isFinite(obj)))
+      return false.toXMLRPC();
+    else
+      return obj.toXMLRPC();
+  },
+
+  handleError : function(e){
+    if(!this.onerror || !this.onerror(e)){
+      //alert("An error has occured: " + e.message);
+      throw e;
+    }
+    this.stop = true;
+    this.lastError = e;
+  },
+
+  cancel : function(id){
+    //You can only cancel a request when it was executed async (I think)
+    if(!this.queue[id]) return false;
+
+    this.queue[id][0].abort();
+    return true;
+  },
+
+  send : function(serverAddress, functionName, args, receive, multicall, autoroute){
+    var id, http;
+    //default is sync
+    this.validateMethodName();
+    if(this.stop){this.stop = false; return false;}
+
+    //setting up multicall
+    multicall = (multicall != null) ? multicall : this.multicall;
+
+    if(multicall){
+      if(!this.stack[serverAddress]) this.stack[serverAddress] = new Array();
+      this.stack[serverAddress].push({methodName : functionName, params : args});
+      return true;
+    }
+
+    //creating http object
+    var http = this.getObject("HTTP");
+
+    //setting some things for async/sync transfers
+    if(!receive || isNS){;
+      async = false;
+    }
+    else{
+      async = true;
+      /* The timer functionality is implemented instead of
+        the onreadystatechange event because somehow
+        the calling of this event crashed IE5.x
+      */
+      id = this.queue.push([http, receive, null, new Date()])-1;
+
+      this.queue[id][2] = new Function("var id='" + id + "';var dt = new Date(new Date().getTime() - XMLRPC.queue[id][3].getTime());diff = parseInt(dt.getSeconds()*1000 + dt.getMilliseconds());if(diff > XMLRPC.timeout){if(XMLRPC.ontimeout) XMLRPC.ontimeout(); clearInterval(XMLRPC.timers[id]);XMLRPC.cancel(id);return};if(XMLRPC.queue[id][0].readyState == 4){XMLRPC.queue[id][0].onreadystatechange = function(){};XMLRPC.receive(id);clearInterval(XMLRPC.timers[id])}");
+      this.timers[id] = setInterval("XMLRPC.queue[" + id + "][2]()", 20);
+    }
+
+    //setting up the routing
+    autoroute = (autoroute || this.autoroute);
+
+    //'active' is only set when direct sending the message has failed
+    var srv = (autoroute == "active") ? this.routeServer : serverAddress;
+
+    try{
+      http.open('POST', srv, async);
+      http.setRequestHeader("User-Agent", "vcXMLRPC v0.91 (" + navigator.userAgent + ")");
+      http.setRequestHeader("Host", srv.replace(/^https?:\/{2}([:\[\]\-\w\.]+)\/?.*/, '$1'));
+      http.setRequestHeader("Content-type", "text/xml");
+      if(autoroute == "active"){
+        http.setRequestHeader("X-Proxy-Request", serverAddress);
+        http.setRequestHeader("X-Compress-Response", "gzip");
+      }
+    }
+    catch(e){
+      if(autoroute == true){
+        //Access has been denied, Routing call.
+        autoroute = "active";
+        if(id){
+          delete this.queue[id];
+          clearInterval(this.timers[id]);
+        }
+        return this.send(serverAddress, functionName, args, receive, multicall, autoroute);
+      }
+
+      //Routing didn't work either..Throwing error
+      this.handleError(new Error("Could not sent XMLRPC Message (Reason: Access Denied on client)"));
+      if(this.stop){this.stop = false;return false}
+    }
+
+    //Construct the message
+    var message = '<?xml version="1.0"?><methodCall><methodName>' + functionName + '</methodName><params>';
+     for(i=0;i<args.length;i++){
+       message += '<param><value>' + this.getXML(args[i]) + '</value></param>';
+    }
+    message += '</params></methodCall>';
+
+    var xmldom = this.getObject('XMLDOM', message);
+    if(self.DEBUG) alert(message);
+
+    try{
+      //send message
+      http.send(xmldom);
+    }
+    catch(e){
+      //Most likely the message timed out(what happend to your internet connection?)
+      this.handleError(new Error("XMLRPC Message not Sent(Reason: " + e.message + ")"));
+      if(this.stop){this.stop = false;return false}
+    }
+
+    if(!async && receive)
+      return [autoroute, receive(this.processResult(http))];
+    else if(receive)
+      return [autoroute, id];
+    else
+      return [autoroute, this.processResult(http)];
+  },
+
+  receive : function(id){
+    //Function for handling async transfers..
+    if(this.queue[id]){
+      var data = this.processResult(this.queue[id][0]);
+      this.queue[id][1](data);
+      delete this.queue[id];
+    }
+    else{
+      this.handleError(new Error("Error while processing queue"));
+    }
+  },
+
+  processResult : function(http){
+    if(self.DEBUG) alert(http.responseText);
+    if(http.status == 200){
+      //getIncoming message
+       dom = http.responseXML;
+
+       if(dom){
+         var rpcErr, main;
+
+         //Check for XMLRPC Errors
+         rpcErr = dom.getElementsByTagName("fault");
+         if(rpcErr.length > 0){
+           rpcErr = this.toObject(rpcErr[0].firstChild);
+           this.handleError(new Error(rpcErr.faultCode, rpcErr.faultString));
+           return false
+         }
+
+         //handle method result
+         main = dom.getElementsByTagName("param");
+          if(main.length == 0) this.handleError(new Error("Malformed XMLRPC Message"));
+        data = this.toObject(this.getNode(main[0], [0]));
+
+        //handle receiving
+        if(this.onreceive) this.onreceive(data);
+        return data;
+       }
+       else{
+          this.handleError(new Error("Malformed XMLRPC Message"));
+      }
+    }
+    else{
+      this.handleError(new Error("HTTP Exception: (" + http.status + ") " + http.statusText + "\n\n" + http.responseText));
+    }
+  }
+}
+
+//Smell something
+ver = navigator.appVersion;
+app = navigator.appName;
+isNS = Boolean(navigator.productSub)
+//moz_can_do_http = (parseInt(navigator.productSub) >= 20010308)
+
+isIE = (ver.indexOf("MSIE 5") != -1 || ver.indexOf("MSIE 6") != -1) ? 1 : 0;
+isIE55 = (ver.indexOf("MSIE 5.5") != -1) ? 1 : 0;
+
+isOTHER = (!isNS && !isIE) ? 1 : 0;
+
diff --git a/epoz/epoz_core/vcXMLRPC.js.dtml.metadata b/epoz/epoz_core/vcXMLRPC.js.dtml.metadata
new file mode 100644 (file)
index 0000000..855fecc
--- /dev/null
@@ -0,0 +1,2 @@
+[default]
+cache=HTTPCache
diff --git a/epoz/epoz_i18n/epoz_lang_da.js.dtml b/epoz/epoz_i18n/epoz_lang_da.js.dtml
new file mode 100755 (executable)
index 0000000..739b65d
--- /dev/null
@@ -0,0 +1,53 @@
+// Epoz-Language-File: da (Danish)
+// maik.jablonski@uni-bielefeld.de, 2003
+// Translated by overby@opentobusiness.com
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Citat';
+EpozLang["Heading1"]='Overskift 1';
+EpozLang["Heading2"]='Overskift 2';
+EpozLang["Heading3"]='Overskift 3';
+EpozLang["Heading4"]='Overskift 4';
+EpozLang["Heading5"]='Overskift 5';
+EpozLang["Heading6"]='Overskift 6';
+EpozLang["Formatted"]='Formatteret';
+
+EpozLang["Bold"]='Fed';
+EpozLang["Italic"]='Kursiv';
+EpozLang["Underline"]='Understreg';
+EpozLang["Strikethrough"]='Gennemstreg';
+
+EpozLang["Subscript"]='Sænket skrift';
+EpozLang["Superscript"]='Hævet skrift';
+
+EpozLang["RemoveFormat"]='Fjern formattering';
+
+EpozLang["TextColor"]='Skriftfarve';
+EpozLang["BackColor"]='Baggrundsfarve';
+
+EpozLang["AlignLeft"]='Venstrejusteret';
+EpozLang["Center"]='Centreret';
+EpozLang["AlignRight"]='Højrejusteret';
+
+EpozLang["OrderedList"]='Nummereret liste';
+EpozLang["UnorderedList"]='Punktliste';
+EpozLang["Outdent"]='Formindsk indrykning';
+EpozLang["Indent"]='Forøg indrykning';
+
+EpozLang["InsertLink"]='Indsæt link';
+EpozLang["InsertImage"]='Indsæt billede';
+EpozLang["InsertRule"]='Indsæt linie';
+EpozLang["InsertTable"]='Indsæt table';
+EpozLang["Toolbox"]='Værktøjskasse';
+
+EpozLang["Undo"]='Fortryd';
+EpozLang["Redo"]='Annuller fortryd';
+
+EpozLang["EnterLinkURL"]='Indsæt link adresse';
+EpozLang["EnterImageURL"]='Indsæt bille placering';
+
+EpozLang["EnterTableRows"]='Indsæt række';
+EpozLang["EnterTableColumns"]='Indsæt kolonne';
+EpozLang["EnterTableBorder"]='Kant';
+EpozLang["TableWithHead"]='Tabel med hoved';
+EpozLang["TableWithoutHead"]='Tabel uden hoved';
diff --git a/epoz/epoz_i18n/epoz_lang_de.js.dtml b/epoz/epoz_i18n/epoz_lang_de.js.dtml
new file mode 100755 (executable)
index 0000000..fc05240
--- /dev/null
@@ -0,0 +1,60 @@
+// Epoz-Language-File: de (Deutsch)
+// maik.jablonski@uni-bielefeld.de, 2003
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Absatz';
+EpozLang["Heading1"]='&Uuml;berschrift 1';
+EpozLang["Heading2"]='&Uuml;berschrift 2';
+EpozLang["Heading3"]='&Uuml;berschrift 3';
+EpozLang["Heading4"]='&Uuml;berschrift 4';
+EpozLang["Heading5"]='&Uuml;berschrift 5';
+EpozLang["Heading6"]='&Uuml;berschrift 6';
+EpozLang["Formatted"]='Formatiert';
+
+EpozLang["Bold"]='Fett';
+EpozLang["Italic"]='Kursiv';
+EpozLang["Underline"]='Unterstrichen';
+EpozLang["Strikethrough"]='Durchgestrichen';
+
+EpozLang["Subscript"]='Tiefstellen';
+EpozLang["Superscript"]='Hochstellen';
+
+EpozLang["RemoveFormat"]='Formatierung entfernen';
+
+EpozLang["TextColor"]='Textfarbe';
+EpozLang["BackColor"]='Hintergrundfarbe';
+
+EpozLang["AlignLeft"]='Linksb&uuml;ndig';
+EpozLang["Center"]='Zentriert';
+EpozLang["AlignRight"]='Rechtsb&uuml;ndig';
+
+EpozLang["OrderedList"]='Aufz&auml;hlung';
+EpozLang["UnorderedList"]='Liste';
+EpozLang["Outdent"]='Ausr&uuml;cken';
+EpozLang["Indent"]='Einr&uuml;cken';
+
+EpozLang["InsertLink"]='Link einf&uuml;gen';
+EpozLang["InsertAnchor"]='Anker einf&uuml;gen';
+EpozLang["InsertImage"]='Bild einf&uuml;gen';
+EpozLang["InsertRule"]='Linie einf&uuml;gen';
+EpozLang["InsertTable"]='Tabelle einf&uuml;gen';
+EpozLang["Toolbox"]='Werkzeuge';
+
+EpozLang["Undo"]='Undo';
+EpozLang["Redo"]='Redo';
+
+EpozLang["EnterLinkURL"]='URL des Links eingeben';
+EpozLang["EnterAnchorName"]='Namen des Ankers eingeben';
+EpozLang["EnterImageURL"]='URL des Bildes eingeben';
+
+EpozLang["EnterTableRows"]='Anzahl der Reihen';
+EpozLang["EnterTableColumns"]='Anzahl der Spalten';
+EpozLang["EnterTableBorder"]='Randst&auml;rke';
+EpozLang["TableWithHead"]='Tabelle mit Kopf';
+EpozLang["TableWithoutHead"]='Tabelle ohne Kopf';
+
+EpozLang["HTML"]='HTML';
+
+EpozLang["TidyStart"]='HTML-Bereinigung...';
+EpozLang["TidyStop"]='HTML-Bereinigung abgeschlossen.'
+EpozLang["TidyError"]='Fehler im HTML-Quelltext.';
diff --git a/epoz/epoz_i18n/epoz_lang_en.js.dtml b/epoz/epoz_i18n/epoz_lang_en.js.dtml
new file mode 100755 (executable)
index 0000000..2642f2e
--- /dev/null
@@ -0,0 +1,68 @@
+// Epoz-Language-File: en (English)
+// maik.jablonski@uni-bielefeld.de, 2003
+
+// Global Epoz language-strings dictionary
+// Should be present only in "default" language file
+
+var EpozLang=[];
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Paragraph';
+EpozLang["Heading1"]='Heading 1';
+EpozLang["Heading2"]='Heading 2';
+EpozLang["Heading3"]='Heading 3';
+EpozLang["Heading4"]='Heading 4';
+EpozLang["Heading5"]='Heading 5';
+EpozLang["Heading6"]='Heading 6';
+EpozLang["Formatted"]='Formatted';
+
+EpozLang["Bold"]='Bold';
+EpozLang["Italic"]='Italic';
+EpozLang["Underline"]='Underline';
+EpozLang["Strikethrough"]='Strikethrough';
+
+EpozLang["Subscript"]='Subscript';
+EpozLang["Superscript"]='Superscript';
+
+EpozLang["RemoveFormat"]='Remove Format';
+
+EpozLang["TextColor"]='Text Color';
+EpozLang["BackColor"]='Background Color';
+
+EpozLang["AlignLeft"]='Align Left';
+EpozLang["Center"]='Center';
+EpozLang["AlignRight"]='Align Right';
+
+EpozLang["OrderedList"]='Ordered List';
+EpozLang["UnorderedList"]='Unordered List';
+EpozLang["Outdent"]='Outdent';
+EpozLang["Indent"]='Indent';
+    
+EpozLang["InsertLink"]='Insert Link';
+EpozLang["InsertAnchor"]='Insert Anchor';
+EpozLang["InsertImage"]='Insert Image';
+EpozLang["InsertRule"]='Insert Rule';
+EpozLang["InsertTable"]='Insert Table';
+EpozLang["Toolbox"]='Toolbox';
+
+EpozLang["Undo"]='Undo';
+EpozLang["Redo"]='Redo';
+
+EpozLang["EnterLinkURL"]='Enter Link URL';
+EpozLang["EnterAnchorName"]='Enter Anchor Name';
+EpozLang["EnterImageURL"]='Enter Image URL';
+
+EpozLang["EnterTableRows"]='Enter Rows';
+EpozLang["EnterTableColumns"]='Enter Columns';
+EpozLang["EnterTableBorder"]='Enter Border';
+EpozLang["TableWithHead"]='Table with Head';
+EpozLang["TableWithoutHead"]='Table without Head';
+
+EpozLang["HTML"]='HTML';
+
+// Browser-Status-Messages
+// don't use any entities for translations
+
+EpozLang["TidyStart"]='Tidying...';
+EpozLang["TidyStop"]='Tidying complete.'
+EpozLang["TidyError"]='Detected errors in the HTML block.';
diff --git a/epoz/epoz_i18n/epoz_lang_es.js.dtml b/epoz/epoz_i18n/epoz_lang_es.js.dtml
new file mode 100755 (executable)
index 0000000..f6937e0
--- /dev/null
@@ -0,0 +1,47 @@
+// Epoz-Language-File: es (Spanish)
+// Thanks to Pedro J. Rey Sanchiz
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='P&aacute;rrafo';
+EpozLang["Heading1"]='Cabecera 1';
+EpozLang["Heading2"]='Cabecera 2';
+EpozLang["Heading3"]='Cabecera 3';
+EpozLang["Heading4"]='Cabecera 4';
+EpozLang["Heading5"]='Cabecera 5';
+EpozLang["Heading6"]='Cabecera 6';
+EpozLang["Formatted"]='Formateado';
+
+EpozLang["Bold"]='Negrita';
+EpozLang["Italic"]='Cursiva';
+EpozLang["Underline"]='Subrayado';
+
+EpozLang["Subscript"]='Sub&iacute;ndice';
+EpozLang["Superscript"]='Super&iacute;ndice';
+
+EpozLang["TextColor"]='Color';
+EpozLang["BackColor"]='Color de fondo'; 
+
+EpozLang["AlignLeft"]='Alineaci&oacute;n izquierda';
+EpozLang["Center"]='Centrado';
+EpozLang["AlignRight"]='Alineaci&oacute;n derecha';
+
+EpozLang["OrderedList"]='Lista numerada';
+EpozLang["UnorderedList"]='Vi&ntilde;etas';
+EpozLang["Outdent"]='Sangrar m&aacute;s';
+EpozLang["Indent"]='Sangrar menos';
+    
+EpozLang["InsertLink"]='Insertar hiperv&iacute;nculo';
+EpozLang["InsertImage"]='Insertar imagen';
+EpozLang["InsertRule"]='Insertar regla horizontal';
+EpozLang["InsertTable"]='Insertar tabla';
+EpozLang["Toolbox"]='Toolbox';
+
+EpozLang["Undo"]='Deshacer';
+EpozLang["Redo"]='Rehacer';
+
+EpozLang["EnterLinkURL"]='Introduzca la direcci&oacute;n del hiperv&iacute;nculo';
+EpozLang["EnterImageURL"]='Introduzca la situaci?n de la imagen';
+
+EpozLang["EnterTableRows"]='Introduzca el n&uacute;mero de l&iacute;neas';
+EpozLang["EnterTableColumns"]='Introduzca el n&uacute;mero de columnas';
+EpozLang["EnterTableBorder"]='Introduzca el ancho del borde';
diff --git a/epoz/epoz_i18n/epoz_lang_fi.js.dtml b/epoz/epoz_i18n/epoz_lang_fi.js.dtml
new file mode 100755 (executable)
index 0000000..05aaeba
--- /dev/null
@@ -0,0 +1,48 @@
+// Epoz-Language-File: fi (Finnish)
+// petri.savolainen@iki.fi, 2003
+
+EpozLang["Normal"]='Normaali';
+EpozLang["Paragraph"]='Kappale';
+EpozLang["Heading1"]='Otsikko 1';
+EpozLang["Heading2"]='Otsikko 2';
+EpozLang["Heading3"]='Otsikko 3';
+EpozLang["Heading4"]='Otsikko 4';
+EpozLang["Heading5"]='Otsikko 5';
+EpozLang["Heading6"]='Otsikko 6';
+EpozLang["Formatted"]='Muotoiltu';
+
+EpozLang["Bold"]='Lihavoitu';
+EpozLang["Italic"]='Kursivoitu';
+EpozLang["Underline"]='Alleviivattu';
+EpozLang["Strikethrough"]='Yliviivattu';
+
+EpozLang["Subscript"]='Alaindeksi';
+EpozLang["Superscript"]='Yläindeksi';
+
+EpozLang["TextColor"]='Tekstin väri';
+EpozLang["BackColor"]='Taustan väri';
+
+EpozLang["AlignLeft"]='Tasaa vasemmalle';
+EpozLang["Center"]='Keskitä';
+EpozLang["AlignRight"]='Tasaa oikealle';
+
+EpozLang["OrderedList"]='Järjestetty lista';
+EpozLang["UnorderedList"]='Järjestämätön lista';
+EpozLang["Outdent"]='Vähennä sisennystä';
+EpozLang["Indent"]='Kasvata sisennystä';
+
+EpozLang["InsertLink"]='Lisää linkki';
+EpozLang["InsertImage"]='Lisää kuva';
+EpozLang["InsertRule"]='Lisää viiva';
+EpozLang["InsertTable"]='Lisää taulukko';
+EpozLang["Toolbox"]='Työkalupakki';
+
+EpozLang["Undo"]='Peru';
+EpozLang["Redo"]='Tee uudelleen';
+
+EpozLang["EnterLinkURL"]='Anna linkin URL';
+EpozLang["EnterImageURL"]='Anna kuvan URL';
+
+EpozLang["EnterTableRows"]='Anna rivimäärä';
+EpozLang["EnterTableColumns"]='Anna sarakemäärä';
+EpozLang["EnterTableBorder"]='Anna kehyksen määrittely';
diff --git a/epoz/epoz_i18n/epoz_lang_fr.js.dtml b/epoz/epoz_i18n/epoz_lang_fr.js.dtml
new file mode 100755 (executable)
index 0000000..2093d9e
--- /dev/null
@@ -0,0 +1,50 @@
+// Epoz-Language-File: fr (French)
+// Jean.Laroque@saint-gobain.com
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Paragraphe';
+EpozLang["Heading1"]='Titre 1';
+EpozLang["Heading2"]='Titre 2';
+EpozLang["Heading3"]='Titre 3';
+EpozLang["Heading4"]='Titre 4';
+EpozLang["Heading5"]='Titre 5';
+EpozLang["Heading6"]='Titre 6';
+EpozLang["Formatted"]='Format&eacute;';
+
+EpozLang["Bold"]='Gras';
+EpozLang["Italic"]='Italique';
+EpozLang["Underline"]='Soulign&eacute;';
+EpozLang["Strikethrough"]='Barr&eacute;';
+
+EpozLang["Subscript"]='Indice';
+EpozLang["Superscript"]='Exposant';
+
+EpozLang["TextColor"]='Couleur Texte';
+EpozLang["BackColor"]='Couleur Fond';
+
+EpozLang["AlignLeft"]='Aligner &agrave; Gauche';
+EpozLang["Center"]='Centrer';
+EpozLang["AlignRight"]='Aligner &agrave; Droite';
+
+EpozLang["OrderedList"]='Liste Ordonn&eacute;e';
+EpozLang["UnorderedList"]='Liste D&eacute;sordonn&eacute;e';
+EpozLang["Outdent"]='Diminuer le retrait';
+EpozLang["Indent"]='Augmenter le retrait';
+    
+EpozLang["InsertLink"]='Insertion Lien';
+EpozLang["InsertImage"]='Insertion Image';
+EpozLang["InsertRule"]='Insertion Trait';
+EpozLang["InsertTable"]='Insertion Tableau';
+EpozLang["Toolbox"]='Boite &agrave; Outil';
+
+EpozLang["Undo"]='Annuler';
+EpozLang["Redo"]='R&eacute;tablir';
+
+EpozLang["EnterLinkURL"]='Entrer Lien URL';
+EpozLang["EnterImageURL"]='Entrer Image URL';
+
+EpozLang["EnterTableRows"]='Nombre de Lignes';
+EpozLang["EnterTableColumns"]='Nombre de Colonnes';
+EpozLang["EnterTableBorder"]='Type de Bordure';
+EpozLang["TableWithHead"]='Tableau avec Ent&ecirc;te';
+EpozLang["TableWithoutHead"]='Tableau sans Ent&ecirc;te';
diff --git a/epoz/epoz_i18n/epoz_lang_hu.js.dtml b/epoz/epoz_i18n/epoz_lang_hu.js.dtml
new file mode 100755 (executable)
index 0000000..0e16d2a
--- /dev/null
@@ -0,0 +1,50 @@
+// Epoz-Language-File: hu (Hungarian)
+// dtamas@pressflex.com, 2003
+
+EpozLang["Normal"]='Norm&aacute;l';
+EpozLang["Paragraph"]='Bekezd&eacute;s';
+EpozLang["Heading1"]='C&iacute;msor 1';
+EpozLang["Heading2"]='C&iacute;msor 2';
+EpozLang["Heading3"]='C&iacute;msor 3';
+EpozLang["Heading4"]='C&iacute;msor 4';
+EpozLang["Heading5"]='C&iacute;msor 5';
+EpozLang["Heading6"]='C&iacute;msor 6';
+EpozLang["Formatted"]='Form&aacute;zott';
+
+EpozLang["Bold"]='F&eacute;lk&ouml;v&eacute;r';
+EpozLang["Italic"]='Kurz&iacute;v';
+EpozLang["Underline"]='Al&aacute;h&uacute;zott';
+EpozLang["Strikethrough"]='&Aacute;th&uacute;zott';
+
+EpozLang["Subscript"]='Als&oacute; index';
+EpozLang["Superscript"]='Fels&ocirc; index';
+
+EpozLang["TextColor"]='Sz&ouml;vegsz&iacute;n';
+EpozLang["BackColor"]='H&aacute;tt&eacute;rsz&iacute;n';
+
+EpozLang["AlignLeft"]='Balra igaz&iacute;tott';
+EpozLang["Center"]='K&ouml;z&eacute;p';
+EpozLang["AlignRight"]='Jobbra igaz&iacute;tott';
+
+EpozLang["OrderedList"]='Sorsz&aacute;mozott lista';
+EpozLang["UnorderedList"]='Felsorol&aacute;s';
+EpozLang["Outdent"]='Kih&uacute;z&aacute;s';
+EpozLang["Indent"]='Beh&uacute;z&aacute;s';
+    
+EpozLang["InsertLink"]='Hivatkoz&aacute;s besz&uacute;r&aacute;sa';
+EpozLang["InsertImage"]='K&eacute;p besz&uacute;r&aacute;sa';
+EpozLang["InsertRule"]='Elv&aacute;laszt&oacute; besz&uacute;r&aacute;sa';
+EpozLang["InsertTable"]='T&aacute;bl&aacute;zat besz&uacute;r&aacute;sa';
+EpozLang["Toolbox"]='Eszk&ouml;zt&aacute;r';
+
+EpozLang["Undo"]='Vissza';
+EpozLang["Redo"]='&Uacute;jra';
+
+EpozLang["EnterLinkURL"]='&Iacute;rja be a hivatkoz&aacute;s URL-j&eacute;t';
+EpozLang["EnterImageURL"]='&Iacute;rja be a k&eacute;p URL-j&eacute;t';
+
+EpozLang["EnterTableRows"]='Sorok sz&aacute;ma';
+EpozLang["EnterTableColumns"]='Oszlopok sz&aacute;ma';
+EpozLang["EnterTableBorder"]='Keretvastags&aacute;g';
+EpozLang["TableWithHead"]='T&aacute;bl&aacute;zat fejl&eacute;ccel';
+EpozLang["TableWithoutHead"]='T&aacute;bl&aacute;zat fejl&eacute;c n&eacute;lk&uuml;l';
diff --git a/epoz/epoz_i18n/epoz_lang_it.js.dtml b/epoz/epoz_i18n/epoz_lang_it.js.dtml
new file mode 100755 (executable)
index 0000000..958521f
--- /dev/null
@@ -0,0 +1,48 @@
+// Epoz-Language-File: it (Italiano)
+// maik.jablonski@uni-bielefeld.de, 2003
+// nbe@libero.it, 2003 traduzione
+
+EpozLang["Normal"]='Normale';
+EpozLang["Paragraph"]='Paragrafo';
+EpozLang["Heading1"]='Titolo 1';
+EpozLang["Heading2"]='Titolo 2';
+EpozLang["Heading3"]='Titolo 3';
+EpozLang["Heading4"]='Titolo 4';
+EpozLang["Heading5"]='Titolo 5';
+EpozLang["Heading6"]='Titolo 6';
+EpozLang["Formatted"]='Formattato';
+
+EpozLang["Bold"]='Grassetto';
+EpozLang["Italic"]='Italico';
+EpozLang["Underline"]='Sottolineato';
+
+EpozLang["Subscript"]='Pedice';
+EpozLang["Superscript"]='Apice';
+
+EpozLang["TextColor"]='Colore testo';
+EpozLang["BackColor"]='Colore sfondo';
+
+EpozLang["AlignLeft"]='Allinea sinistra';
+EpozLang["Center"]='Centra';
+EpozLang["AlignRight"]='Allinea destra';
+
+EpozLang["OrderedList"]='Lista numerata';
+EpozLang["UnorderedList"]='Lista puntata';
+EpozLang["Outdent"]='Riduci rientro';
+EpozLang["Indent"]='Aumenta rientro';
+    
+EpozLang["InsertLink"]='Inserisci link';
+EpozLang["InsertImage"]='Inserisci immagine';
+EpozLang["InsertRule"]='Inserisci separatore';
+EpozLang["InsertTable"]='Inserisci tabella';
+EpozLang["Toolbox"]='Toolbox';
+
+EpozLang["Undo"]='Annulla';
+EpozLang["Redo"]='Ripeti';
+
+EpozLang["EnterLinkURL"]='Inserisci URL link';
+EpozLang["EnterImageURL"]='Inserisci immagine link';
+
+EpozLang["EnterTableRows"]='Inserisci righe';
+EpozLang["EnterTableColumns"]='Inserisci colonne';
+EpozLang["EnterTableBorder"]='Inserisci bordo';
diff --git a/epoz/epoz_i18n/epoz_lang_nl.js.dtml b/epoz/epoz_i18n/epoz_lang_nl.js.dtml
new file mode 100755 (executable)
index 0000000..d9d7590
--- /dev/null
@@ -0,0 +1,47 @@
+// Epoz-Language-File: nl (Dutch)
+// ad.schellevis@imasgroep.nl, 2003
+
+EpozLang["Normal"]='Normaal';
+EpozLang["Paragraph"]='Paragraaf';
+EpozLang["Heading1"]='Kop 1';
+EpozLang["Heading2"]='Kop 2';
+EpozLang["Heading3"]='Kop 3';
+EpozLang["Heading4"]='Kop 4';
+EpozLang["Heading5"]='Kop 5';
+EpozLang["Heading6"]='Kop 6';
+EpozLang["Formatted"]='Opgemaakt';
+
+EpozLang["Bold"]='Vet';
+EpozLang["Italic"]='Cursief';
+EpozLang["Underline"]='Onderstreept';
+
+EpozLang["Subscript"]='Subscript';
+EpozLang["Superscript"]='Superscript';
+
+EpozLang["TextColor"]='Tekst kleur';
+EpozLang["BackColor"]='Achtergrond kleur';
+
+EpozLang["AlignLeft"]='Links uitlijnen';
+EpozLang["Center"]='Centreren';
+EpozLang["AlignRight"]='Rechts uitlijnen';
+
+EpozLang["OrderedList"]='Nummering';
+EpozLang["UnorderedList"]='Opsommingstekens';
+EpozLang["Outdent"]='Inspringen verkleinen';
+EpozLang["Indent"]='Inspringen vergroten';
+    
+EpozLang["InsertLink"]='Hyperlink invoegen';
+EpozLang["InsertImage"]='Plaatje invoegen';
+EpozLang["InsertRule"]='Rand invoegen';
+EpozLang["InsertTable"]='Tabel invoegen';
+EpozLang["Toolbox"]='Toolbox';
+
+EpozLang["Undo"]='Ongedaan maken';
+EpozLang["Redo"]='Herhalen';
+
+EpozLang["EnterLinkURL"]='Ingeven hyperlink URL';
+EpozLang["EnterImageURL"]='Ingeven locatie plaatje';
+
+EpozLang["EnterTableRows"]='Invoeren Rijen';
+EpozLang["EnterTableColumns"]='Invoegen Kolommen';
+EpozLang["EnterTableBorder"]='Invoegen Kader';
diff --git a/epoz/epoz_i18n/epoz_lang_no.js.dtml b/epoz/epoz_i18n/epoz_lang_no.js.dtml
new file mode 100755 (executable)
index 0000000..7c35e62
--- /dev/null
@@ -0,0 +1,55 @@
+// Epoz-Language-File: no (Norwegian)
+// einar.ness.jensen@hf.ntnu.no, 2004
+
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Avsnitt';
+EpozLang["Heading1"]='Overskrift 1';
+EpozLang["Heading2"]='Overskrift 2';
+EpozLang["Heading3"]='Overskrift 3';
+EpozLang["Heading4"]='Overskrift 4';
+EpozLang["Heading5"]='Overskrift 5';
+EpozLang["Heading6"]='Overskrift 6';
+EpozLang["Formatted"]='Preformatert';
+
+EpozLang["Bold"]='Fet';
+EpozLang["Italic"]='Kursiv';
+EpozLang["Underline"]='Understreket';
+EpozLang["Strikethrough"]='Gjennomstreket';
+
+EpozLang["Subscript"]='Subskrift';
+EpozLang["Superscript"]='Superskrift';
+
+EpozLang["RemoveFormat"]='Fjern Formatering';
+
+EpozLang["TextColor"]='Tekstfarge';
+EpozLang["BackColor"]='Bakgrunnsfarge';
+
+EpozLang["AlignLeft"]='Venstrejustert';
+EpozLang["Center"]='Midtjustert';
+EpozLang["AlignRight"]='H&oslash;yrejustert';
+
+EpozLang["OrderedList"]='Ordnet Liste';
+EpozLang["UnorderedList"]='Uordnet Liste';
+EpozLang["Outdent"]='Minsk Innrykk';
+EpozLang["Indent"]='&Oslash;k Innrykk';
+    
+EpozLang["InsertLink"]='Sett inn Lenke';
+EpozLang["InsertAnchor"]='Sett inn Anker';
+EpozLang["InsertImage"]='Sett inn Bilde';
+EpozLang["InsertRule"]='Sett inn Horisontal Linje';
+EpozLang["InsertTable"]='Sett inn Tabell';
+EpozLang["Toolbox"]='Verkt&oslash;y';
+
+EpozLang["Undo"]='Angre';
+EpozLang["Redo"]='Gjenta';
+
+EpozLang["EnterLinkURL"]='Skriv inn Lenke-URL';
+EpozLang["EnterAnchorName"]='Skriv inn Navn på Anker';
+EpozLang["EnterImageURL"]='Skriv inn Bilde-URL';
+
+EpozLang["EnterTableRows"]='Antall Rader';
+EpozLang["EnterTableColumns"]='Antall Kolonner';
+EpozLang["EnterTableBorder"]='Bredde Kantlinje';
+EpozLang["TableWithHead"]='Tabell med Topplinje';
+EpozLang["TableWithoutHead"]='Tabell uten Topplinje';
diff --git a/epoz/epoz_i18n/epoz_lang_pl.js.dtml b/epoz/epoz_i18n/epoz_lang_pl.js.dtml
new file mode 100755 (executable)
index 0000000..7912509
--- /dev/null
@@ -0,0 +1,47 @@
+// Epoz-Language-File: pl (Polish)
+// qbak@qbak.net, 2003
+
+EpozLang["Normal"]='Normalny';
+EpozLang["Paragraph"]='Akapit';
+EpozLang["Heading1"]='Nag³ówek 1';
+EpozLang["Heading2"]='Nag³ówek 2';
+EpozLang["Heading3"]='Nag³ówek 3';
+EpozLang["Heading4"]='Nag³ówek 4';
+EpozLang["Heading5"]='Nag³ówek 5';
+EpozLang["Heading6"]='Nag³ówek 6';
+EpozLang["Formatted"]='Sformatowany';
+
+EpozLang["Bold"]='Pogrubienie';
+EpozLang["Italic"]='Kursywa';
+EpozLang["Underline"]='Podkre¶lenie';
+
+EpozLang["Subscript"]='Indeks dolny';
+EpozLang["Superscript"]='Indeks górny';
+
+EpozLang["TextColor"]='Kolor tekstu';
+EpozLang["BackColor"]='Kolor t³a';
+
+EpozLang["AlignLeft"]='Wyrównanie do lewej';
+EpozLang["Center"]='Wy¶rodkowanie';
+EpozLang["AlignRight"]='Wyrównanie do prawej';
+
+EpozLang["OrderedList"]='Lista numerowana';
+EpozLang["UnorderedList"]='Lista wypunktowana';
+EpozLang["Outdent"]='Zmniejsz wciêcie';
+EpozLang["Indent"]='Zwiêksz wciêcie';
+
+EpozLang["InsertLink"]='Wstaw odno¶nik';
+EpozLang["InsertImage"]='Wstaw obrazek';
+EpozLang["InsertRule"]='Wstaw linijkê';
+EpozLang["InsertTable"]='Wstaw tabelê';
+EpozLang["Toolbox"]='Narzêdzia';
+
+EpozLang["Undo"]='Cofnij';
+EpozLang["Redo"]='Powtórz';
+
+EpozLang["EnterLinkURL"]='Wprowad¼ URL odno¶nika';
+EpozLang["EnterImageURL"]='Wprowad¼ URL obrazka';
+
+EpozLang["EnterTableRows"]='Wprowad¼ wiersze';
+EpozLang["EnterTableColumns"]='Wprowad¼ kolumny';
+EpozLang["EnterTableBorder"]='Wprowad¼ ramkê';
diff --git a/epoz/epoz_i18n/epoz_lang_pt-br.js.dtml b/epoz/epoz_i18n/epoz_lang_pt-br.js.dtml
new file mode 100755 (executable)
index 0000000..85831d2
--- /dev/null
@@ -0,0 +1,54 @@
+// Epoz-Language-File: pt_br (Portuguese Brazil)
+// "Luiz Fernando Pasqual S. Souza" <pasquall@amcham.com.br>, 2004
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Par&aacute;grafo';
+EpozLang["Heading1"]='Cabe&ccedil;alho 1';
+EpozLang["Heading2"]='Cabe&ccedil;alho 2';
+EpozLang["Heading3"]='Cabe&ccedil;alho 3';
+EpozLang["Heading4"]='Cabe&ccedil;alho 4';
+EpozLang["Heading5"]='Cabe&ccedil;alho 5';
+EpozLang["Heading6"]='Cabe&ccedil;alho 6';
+EpozLang["Formatted"]='Formatado';
+
+EpozLang["Bold"]='Negrito';
+EpozLang["Italic"]='It&aacute;lico';
+EpozLang["Underline"]='Sublinhado';
+EpozLang["Strikethrough"]='Riscado';
+
+EpozLang["Subscript"]='Subescrito';
+EpozLang["Superscript"]='Sobrescrito';
+
+EpozLang["RemoveFormat"]='Remover formata&ccedil;&atilde;o';
+
+EpozLang["TextColor"]='Cor do texto';
+EpozLang["BackColor"]='Cor do fundo';
+
+EpozLang["AlignLeft"]='Alinhar &agrave; esquerda';
+EpozLang["Center"]='Centralizar';
+EpozLang["AlignRight"]='Alinhar &agrave; direita';
+
+EpozLang["OrderedList"]='Lista numerada';
+EpozLang["UnorderedList"]='Lista ordenada';
+EpozLang["Outdent"]='Diminuir par&aacute;grafo';
+EpozLang["Indent"]='Aumentar par&aacute;grafo';
+    
+EpozLang["InsertLink"]='Inserir Link';
+EpozLang["InsertAnchor"]='Inserir &acirc;ncora';
+EpozLang["InsertImage"]='Inserir Imagem';
+EpozLang["InsertRule"]='Inserir Linha';
+EpozLang["InsertTable"]='Inserir Tabela';
+EpozLang["Toolbox"]='Caixa de ferramentas';
+
+EpozLang["Undo"]='Voltar';
+EpozLang["Redo"]='Refazer';
+
+EpozLang["EnterLinkURL"]='URL do link';
+EpozLang["EnterAnchorName"]='Nome da &acirc;ncora';
+EpozLang["EnterImageURL"]='URL da imagem';
+
+EpozLang["EnterTableRows"]='Linhas';
+EpozLang["EnterTableColumns"]='Colunas';
+EpozLang["EnterTableBorder"]='Bordas';
+EpozLang["TableWithHead"]='Tabela com cabe&ccedil;alho';
+EpozLang["TableWithoutHead"]='Tabela sem cabe&ccedil;alho';
diff --git a/epoz/epoz_i18n/epoz_lang_pt.js.dtml b/epoz/epoz_i18n/epoz_lang_pt.js.dtml
new file mode 100755 (executable)
index 0000000..7756b57
--- /dev/null
@@ -0,0 +1,52 @@
+// Epoz-Language-File: pt (Portuguese)
+// nteixeira@bmc.pt, 2003
+
+EpozLang["Normal"]='Normal';
+EpozLang["Paragraph"]='Par&aacute;grafo';
+EpozLang["Heading1"]='Cabe&ccedil;alho 1';
+EpozLang["Heading2"]='Cabe&ccedil;alho 2';
+EpozLang["Heading3"]='Cabe&ccedil;alho 3';
+EpozLang["Heading4"]='Cabe&ccedil;alho 4';
+EpozLang["Heading5"]='Cabe&ccedil;alho 5';
+EpozLang["Heading6"]='Cabe&ccedil;alho 6';
+EpozLang["Formatted"]='Formatado';
+
+EpozLang["Bold"]='Negrito';
+EpozLang["Italic"]='It&aacute;lico';
+EpozLang["Underline"]='Sublinhado';
+EpozLang["Strikethrough"]='Tra&ccedil;ado';
+
+EpozLang["Subscript"]='Subescrito';
+EpozLang["Superscript"]='Sobrescrito';
+
+EpozLang["RemoveFormat"]='Retirar Formata&ccedil;&atilde;o';
+
+EpozLang["TextColor"]='Cor do texto';
+EpozLang["BackColor"]='Cor do fundo';
+
+EpozLang["AlignLeft"]='Alinhar &agrave; esquerda';
+EpozLang["Center"]='Centrar';
+EpozLang["AlignRight"]='Alinhar &agrave; direita';
+
+EpozLang["OrderedList"]='Lista numerada';
+EpozLang["UnorderedList"]='Lista ordenada';
+EpozLang["Outdent"]='Diminuir par&aacute;grafo';
+EpozLang["Indent"]='Aumentar par&aacute;grafo';
+    
+EpozLang["InsertLink"]='Inserir Link';
+EpozLang["InsertImage"]='Inserir Imagem';
+EpozLang["InsertRule"]='Inserir Linha';
+EpozLang["InsertTable"]='Inserir Tabela';
+EpozLang["Toolbox"]='Caixa de ferramentas';
+
+EpozLang["Undo"]='Desfazer';
+EpozLang["Redo"]='Refazer';
+
+EpozLang["EnterLinkURL"]='URL do link';
+EpozLang["EnterImageURL"]='URL da imagem';
+
+EpozLang["EnterTableRows"]='N&uacute;mero de Linhas';
+EpozLang["EnterTableColumns"]='N&uacute;mero de Colunas';
+EpozLang["EnterTableBorder"]='Tamanho das Bordas';
+EpozLang["TableWithHead"]='Tabela com cabe&ccedil;alho';
+EpozLang["TableWithoutHead"]='Tabela sem cabe&ccedil;alho';
diff --git a/epoz/epoz_i18n/epoz_lang_ru.js.dtml b/epoz/epoz_i18n/epoz_lang_ru.js.dtml
new file mode 100755 (executable)
index 0000000..7a7fb48
--- /dev/null
@@ -0,0 +1,59 @@
+// Epoz-Language-File: ru (Russian (UTF-8))
+// Sergey V. Volobuev, 2003
+// Theo (theo@ua.fm), 22-10-2004
+
+EpozLang["Normal"]='Обычный';
+EpozLang["Paragraph"]='Абзац';
+EpozLang["Heading1"]='Заголовок 1';
+EpozLang["Heading2"]='Заголовок 2';
+EpozLang["Heading3"]='Заголовок 3';
+EpozLang["Heading4"]='Заголовок 4';
+EpozLang["Heading5"]='Заголовок 5';
+EpozLang["Heading6"]='Заголовок 6';
+EpozLang["Formatted"]='Форматированный';
+
+EpozLang["Bold"]='Полужирный';
+EpozLang["Italic"]='Курсив';
+EpozLang["Underline"]='Подчеркнутый';
+EpozLang["Strikethrough"]='Зачёркнутый';
+
+EpozLang["Subscript"]='Нижний индекс';
+EpozLang["Superscript"]='Верхний индекс';
+
+EpozLang["RemoveFormat"]='Убрать форматирование';
+
+EpozLang["TextColor"]='Цвет шрифта';
+EpozLang["BackColor"]='Цвет фона';
+
+EpozLang["AlignLeft"]='По левому краю';
+EpozLang["Center"]='По центру';
+EpozLang["AlignRight"]='По правому краю';
+
+EpozLang["OrderedList"]='Нумерация';
+EpozLang["UnorderedList"]='Маркеры';
+EpozLang["Outdent"]='Уменьшить отступ';
+EpozLang["Indent"]='Увеличить отступ';
+
+EpozLang["InsertLink"]='Вставить гиперссылку';
+EpozLang["InsertAnchor"]='Вставить якорь';
+EpozLang["InsertImage"]='Вставить изображение';
+EpozLang["InsertRule"]='Вставить линейку';
+EpozLang["InsertTable"]='Вставить таблицу';
+EpozLang["Toolbox"]='Инструменты';
+
+EpozLang["Undo"]='Отменить';
+EpozLang["Redo"]='Повторить';
+
+EpozLang["EnterLinkURL"]='Введите URL страницы';
+EpozLang["EnterAnchorName"]='Введите названия якоря';
+EpozLang["EnterImageURL"]='Введите URL изображения';
+
+EpozLang["EnterTableRows"]='Число строк';
+EpozLang["EnterTableColumns"]='Число столбцов';
+EpozLang["EnterTableBorder"]='Ширина границы';
+
+EpozLang["TableWithHead"]='Таблица с заголовком';
+EpozLang["TableWithoutHead"]='Таблица без заголовка';
+
+EpozLang["HTML"]='HTML';
+
diff --git a/epoz/epoz_i18n/epoz_lang_zh-cn.js.dtml b/epoz/epoz_i18n/epoz_lang_zh-cn.js.dtml
new file mode 100755 (executable)
index 0000000..2fce01d
--- /dev/null
@@ -0,0 +1,58 @@
+// Epoz-Language-File: zh (Chinese)
+// panjy@plone.cn, 2003
+
+var EpozLang=[];
+
+EpozLang['Normal']='常规';
+EpozLang['Paragraph']='段落';
+EpozLang['Heading1']='标题 1';
+EpozLang['Heading2']='标题 2';
+EpozLang['Heading3']='标题 3';
+EpozLang['Heading4']='标题 4';
+EpozLang['Heading5']='标题 5';
+EpozLang['Heading6']='标题 6';
+EpozLang['Formatted']='保持格式';
+
+EpozLang['Bold']='加粗';
+EpozLang['Italic']='倾斜';
+EpozLang['Underline']='下划线';
+EpozLang["Strikethrough"]='中划线';
+
+EpozLang['Subscript']='下标';
+EpozLang['Superscript']='上标';
+
+EpozLang["RemoveFormat"]='去除格式';
+
+EpozLang['TextColor']='文字颜色'; 
+EpozLang['BackColor']='背景颜色';
+
+EpozLang['AlignLeft']='左对齐';
+EpozLang['Center']='居中';
+EpozLang['AlignRight']='右对齐';
+
+EpozLang['OrderedList']='有序清单';
+EpozLang['UnorderedList']='无序清单';
+EpozLang['Outdent']='减少缩进';
+EpozLang['Indent']='增加缩进';
+
+EpozLang['InsertLink']='添加链接';
+EpozLang["InsertAnchor"]='添加书签(Anchor)';
+EpozLang['InsertImage']='添加图片';
+EpozLang['InsertRule']='添加尺线';
+EpozLang['InsertTable']='添加表格';
+EpozLang['Toolbox']='工具箱';
+
+EpozLang['Undo']='撤销';
+EpozLang['Redo']='恢复';
+
+EpozLang['EnterLinkURL']='输入链接的URL地址';
+EpozLang["EnterAnchorName"]='输入书签(Anchor)名';
+EpozLang['EnterImageURL']='输入图片的UR地址';
+
+EpozLang['EnterTableRows']='输入行数';
+EpozLang['EnterTableColumns']='输入列数';
+EpozLang['EnterTableBorder']='输入边框';
+EpozLang["TableWithHead"]='带标题的表格';
+EpozLang["TableWithoutHead"]='不带标题的表格';
+
+
diff --git a/epoz/epoz_images/epoz_button_anchor.gif b/epoz/epoz_images/epoz_button_anchor.gif
new file mode 100644 (file)
index 0000000..74b3dac
Binary files /dev/null and b/epoz/epoz_images/epoz_button_anchor.gif differ
diff --git a/epoz/epoz_images/epoz_button_bgcolor.gif b/epoz/epoz_images/epoz_button_bgcolor.gif
new file mode 100644 (file)
index 0000000..436503a
Binary files /dev/null and b/epoz/epoz_images/epoz_button_bgcolor.gif differ
diff --git a/epoz/epoz_images/epoz_button_bold.gif b/epoz/epoz_images/epoz_button_bold.gif
new file mode 100644 (file)
index 0000000..671240d
Binary files /dev/null and b/epoz/epoz_images/epoz_button_bold.gif differ
diff --git a/epoz/epoz_images/epoz_button_centre.gif b/epoz/epoz_images/epoz_button_centre.gif
new file mode 100644 (file)
index 0000000..d7534cb
Binary files /dev/null and b/epoz/epoz_images/epoz_button_centre.gif differ
diff --git a/epoz/epoz_images/epoz_button_hr.gif b/epoz/epoz_images/epoz_button_hr.gif
new file mode 100644 (file)
index 0000000..03bdd0f
Binary files /dev/null and b/epoz/epoz_images/epoz_button_hr.gif differ
diff --git a/epoz/epoz_images/epoz_button_hyperlink.gif b/epoz/epoz_images/epoz_button_hyperlink.gif
new file mode 100644 (file)
index 0000000..7a63eb5
Binary files /dev/null and b/epoz/epoz_images/epoz_button_hyperlink.gif differ
diff --git a/epoz/epoz_images/epoz_button_image.gif b/epoz/epoz_images/epoz_button_image.gif
new file mode 100644 (file)
index 0000000..db3c786
Binary files /dev/null and b/epoz/epoz_images/epoz_button_image.gif differ
diff --git a/epoz/epoz_images/epoz_button_indent.gif b/epoz/epoz_images/epoz_button_indent.gif
new file mode 100644 (file)
index 0000000..56833dc
Binary files /dev/null and b/epoz/epoz_images/epoz_button_indent.gif differ
diff --git a/epoz/epoz_images/epoz_button_italic.gif b/epoz/epoz_images/epoz_button_italic.gif
new file mode 100644 (file)
index 0000000..acccd12
Binary files /dev/null and b/epoz/epoz_images/epoz_button_italic.gif differ
diff --git a/epoz/epoz_images/epoz_button_left_just.gif b/epoz/epoz_images/epoz_button_left_just.gif
new file mode 100644 (file)
index 0000000..bdcbf3c
Binary files /dev/null and b/epoz/epoz_images/epoz_button_left_just.gif differ
diff --git a/epoz/epoz_images/epoz_button_list.gif b/epoz/epoz_images/epoz_button_list.gif
new file mode 100644 (file)
index 0000000..51ebe77
Binary files /dev/null and b/epoz/epoz_images/epoz_button_list.gif differ
diff --git a/epoz/epoz_images/epoz_button_numbered_list.gif b/epoz/epoz_images/epoz_button_numbered_list.gif
new file mode 100644 (file)
index 0000000..aa49171
Binary files /dev/null and b/epoz/epoz_images/epoz_button_numbered_list.gif differ
diff --git a/epoz/epoz_images/epoz_button_outdent.gif b/epoz/epoz_images/epoz_button_outdent.gif
new file mode 100644 (file)
index 0000000..a0d1b07
Binary files /dev/null and b/epoz/epoz_images/epoz_button_outdent.gif differ
diff --git a/epoz/epoz_images/epoz_button_redo.gif b/epoz/epoz_images/epoz_button_redo.gif
new file mode 100644 (file)
index 0000000..6f2b9e9
Binary files /dev/null and b/epoz/epoz_images/epoz_button_redo.gif differ
diff --git a/epoz/epoz_images/epoz_button_right_just.gif b/epoz/epoz_images/epoz_button_right_just.gif
new file mode 100644 (file)
index 0000000..e994cdc
Binary files /dev/null and b/epoz/epoz_images/epoz_button_right_just.gif differ
diff --git a/epoz/epoz_images/epoz_button_space.gif b/epoz/epoz_images/epoz_button_space.gif
new file mode 100644 (file)
index 0000000..2799b45
Binary files /dev/null and b/epoz/epoz_images/epoz_button_space.gif differ
diff --git a/epoz/epoz_images/epoz_button_strikethrough.gif b/epoz/epoz_images/epoz_button_strikethrough.gif
new file mode 100644 (file)
index 0000000..a231879
Binary files /dev/null and b/epoz/epoz_images/epoz_button_strikethrough.gif differ
diff --git a/epoz/epoz_images/epoz_button_subscript.gif b/epoz/epoz_images/epoz_button_subscript.gif
new file mode 100644 (file)
index 0000000..a9a6c86
Binary files /dev/null and b/epoz/epoz_images/epoz_button_subscript.gif differ
diff --git a/epoz/epoz_images/epoz_button_superscript.gif b/epoz/epoz_images/epoz_button_superscript.gif
new file mode 100644 (file)
index 0000000..b032453
Binary files /dev/null and b/epoz/epoz_images/epoz_button_superscript.gif differ
diff --git a/epoz/epoz_images/epoz_button_table.gif b/epoz/epoz_images/epoz_button_table.gif
new file mode 100644 (file)
index 0000000..3241d36
Binary files /dev/null and b/epoz/epoz_images/epoz_button_table.gif differ
diff --git a/epoz/epoz_images/epoz_button_textcolor.gif b/epoz/epoz_images/epoz_button_textcolor.gif
new file mode 100644 (file)
index 0000000..7ce1139
Binary files /dev/null and b/epoz/epoz_images/epoz_button_textcolor.gif differ
diff --git a/epoz/epoz_images/epoz_button_tools.gif b/epoz/epoz_images/epoz_button_tools.gif
new file mode 100644 (file)
index 0000000..8bf363e
Binary files /dev/null and b/epoz/epoz_images/epoz_button_tools.gif differ
diff --git a/epoz/epoz_images/epoz_button_underline.gif b/epoz/epoz_images/epoz_button_underline.gif
new file mode 100644 (file)
index 0000000..7a646a8
Binary files /dev/null and b/epoz/epoz_images/epoz_button_underline.gif differ
diff --git a/epoz/epoz_images/epoz_button_undo.gif b/epoz/epoz_images/epoz_button_undo.gif
new file mode 100644 (file)
index 0000000..1424112
Binary files /dev/null and b/epoz/epoz_images/epoz_button_undo.gif differ
diff --git a/epoz/epoz_images/epoz_button_unformat.gif b/epoz/epoz_images/epoz_button_unformat.gif
new file mode 100644 (file)
index 0000000..2c370df
Binary files /dev/null and b/epoz/epoz_images/epoz_button_unformat.gif differ
diff --git a/epoz/epoz_plone/epoz_toolbox.pt b/epoz/epoz_plone/epoz_toolbox.pt
new file mode 100755 (executable)
index 0000000..618087b
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      i18n:domain="plone">
+
+<head tal:define="ztu modules/ZTUtils;">
+<title tal:content="here/title_or_id">Title or Id</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"
+          tal:define="charset here/portal_properties/site_properties/default_charset;
+                      dummy python:request.RESPONSE.setHeader('Content-Type', 'text/html;;charset=%s' % charset)"
+          tal:attributes="content string:text/html;;charset=${charset}" />
+<style type="text/css" media="all"
+       tal:define="current_skin python:ztu.make_query(skin=request.get(here.portal_skins.getRequestVarname(), ''))"
+       tal:content="string: @import url(${here/portal_url}/plone.css?${current_skin});">
+</style>
+</head>
+
+<body onload="focus();" 
+      style="margin: 4px;padding:0.5em;"
+      tal:define="checkPermission python: here.portal_membership.checkPermission;">
+
+  <form
+        action="search"
+        method="post"
+        name="search"
+        style="padding-bottom:1em;"
+        tal:define="DateTime python:modules['DateTime'].DateTime"
+        tal:attributes="action string: ${here/absolute_url}/${template/getId}">
+
+   <div i18n:translate="legend_search_terms">Search Terms</div>
+    <input type="text"
+           id="searchGadget"
+           name="SearchableText"
+           size="25"
+           tabindex=""
+           />
+    <input tabindex=""
+           class="searchButton"
+           type="submit"
+           name="submit"
+           value="Search"
+           i18n:attributes="value"
+           />
+  </form>
+
+  <tal:block tal:define="query_results python:[brain.getObject() for brain in here.queryCatalog()];">
+   <div tal:condition="query_results">
+     <span i18n:translate="heading_search_results">Search results</span>
+   </div>
+   <div style="border-top:1px solid black;border-bottom:1px solid black;"
+        tal:attributes="style string:border-top:1px solid ${here/base_properties/globalBorderColor};;
+                                                 border-bottom:1px solid ${here/base_properties/globalBorderColor};;
+                                                 margin-bottom:1em;;padding:0.2em 0 0.1em 0"
+        tal:condition="not: query_results"
+        tal:define="parents request/PARENTS;
+                    nil python: parents.reverse();
+                    portal here/portal_url/getPortalObject;">
+      <tal:block tal:repeat="parent parents">
+        <tal:block tal:condition="python:checkPermission('View', parent) and checkPermission('List folder contents', parent)">
+           <img tal:condition="repeat/parent/start" tal:attributes="src string:${here/portal_url}/logoIcon.gif"/>
+           <tal:block tal:condition="not: repeat/parent/start">
+               <a tal:attributes="href string: ${parent/absolute_url}/${template/getId};">
+                  <span tal:content="string: ${parent/title_or_id}"
+                        tal:condition="python: parent.absolute_url()!=portal.absolute_url()"/>
+                  <span tal:content="string:Home" tal:condition="python: parent.absolute_url()==portal.absolute_url()"/>
+                  <span tal:condition="not: repeat/parent/end" class="breadcrumbSeparator">&raquo;</span>
+                </a>
+           </tal:block>
+        </tal:block>
+      </tal:block>
+   </div>
+
+   <tal:block tal:define="results python: test(query_results, query_results,
+                                          [item for item in here.listFolderContents()
+                                          if checkPermission('View',item)]);">
+
+   <table tal:condition="results"
+          class="group" width="100%" cellspacing="0" cellpadding="2">
+
+    <tbody>
+
+    <tal:block tal:repeat="item results">
+     <tr tal:define="oddrow repeat/item/odd"
+         tal:attributes="class python:test(oddrow, 'even', 'odd')" >
+
+      <td width="50%">
+        <img src="#" tal:attributes="src string:${here/portal_url}/${item/getIcon};alt item/Title" />
+        <a tal:condition="python: item.isPrincipiaFolderish and item<>here"
+           tal:attributes="href string: ${item/absolute_url}/${template/getId}"
+           tal:content="item/title_or_id">Title</a>
+
+        <b tal:condition="python: not item.isPrincipiaFolderish or item==here"
+           tal:content="item/title_or_id">Title</b>
+
+        <a tal:condition="python: item.getTypeInfo().getId() in ['Image','Photo']"
+           tal:attributes="href string:#;
+                           onclick string: window.open('${item/absolute_url}','${repeat/item/index}','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=${item/width},height=${item/height}');; ;">
+           <img tal:define="max python: 32;"
+                tal:attributes="src item/absolute_url;
+                                height python: test(item.height < max, item.height, max);" />
+        </a>
+      </td>
+
+      <td width="25%"
+          i18n:translate=""
+          tal:content="python:item.getTypeInfo().Title()">Metatype</td>
+
+      <td width="25%" tal:define="url python: item.absolute_url() + test(item.isPrincipiaFolderish,'/','');">
+        <a tal:attributes="href string: #;
+                           onclick string: window.opener.CreateLink('${url}');; window.close();; ;"
+           i18n:translate="epoz_insert_link">Insert Link</a>
+         <div tal:condition="python: item.getTypeInfo().getId() in ['Image','Photo']">
+          <a tal:attributes="href string: #;
+                             onclick string: window.opener.CreateImage('${url}');; window.close();; ;"
+             i18n:translate="epoz_insert_image">Insert Image</a>
+         </div>
+      </td>
+     </tr>
+     </tal:block>
+
+    </tbody>
+   </table>
+
+  </tal:block>
+
+ </tal:block>
+</body>
+</html>
diff --git a/epoz/epoz_plone/epoz_wysiwyg_support.pt b/epoz/epoz_plone/epoz_wysiwyg_support.pt
new file mode 100755 (executable)
index 0000000..a08d19e
--- /dev/null
@@ -0,0 +1,113 @@
+<html i18n:domain="plone">
+
+<div metal:define-macro="wysiwygEditorBox">
+
+ <tal:block tal:define="wysiwyg python: here.portal_membership.getAuthenticatedMember().getProperty('wysiwyg_editor')=='Epoz';">
+
+  <tal:block tal:condition="wysiwyg"
+           tal:define="ztu modules/ZTUtils;
+                       pss modules/Products/PythonScripts/standard;
+                       text_format python: getattr(here,'text_format','html');
+                       is_stx python:text_format=='structured-text';
+                       is_ptx python:text_format=='plain';
+                       url3 request/URL3|nothing;
+                       pageurl python: test(here.portal_factory.isTemporary(here), url3, here.absolute_url());
+                       getProperty python: here.stylesheet_properties.getProperty;
+                       current_skin python: ztu.make_query(skin=request.get(here.portal_skins.getRequestVarname(), ''));"
+
+             tal:replace="structure python: here.Epoz(
+                            inputname,
+                            data = (is_stx and pss.structured_text(inputvalue))
+                                      or (is_ptx and pss.newline_to_br(inputvalue))
+                                      or inputvalue,
+                            toolbox = pageurl + '/epoz_toolbox',
+                            lang = here.portal_properties.site_properties.default_language,
+                            style = 'width: %s; height: %s; margin-top: 2px; border: %s;' % (path('width|string:99%'), path('height|string:450px'), getProperty('preBorder','1px solid #8cacbb'),),
+                            button = 'background-color: %s; border: 1px solid %s; cursor: pointer; margin-right: 1px; margin-bottom: 1px;' % (
+                                        getProperty('contentTabBackground','#CDE2A7'),
+                                        getProperty('contentTabFontColor','#578308'),),
+                            path = here.portal_url() + '/',
+                            css = here.portal_url()+'/plone.css?'+pss.url_quote(current_skin),
+                            customcss = here.portal_url()+'/ploneCustom.css?'+pss.url_quote(current_skin),
+                            charset = here.portal_properties.site_properties.default_charset,
+                            pageurl = pageurl)">
+  </tal:block>
+
+  <tal:block condition="not: wysiwyg">
+
+  <textarea cols="80"
+            rows="25"
+            tabindex=""
+            name="description"
+            tal:content="inputvalue"
+            tal:attributes="name inputname;
+                            id inputname;
+                            tabindex tabindex|nothing;
+                            rows rows|default;
+                            cols cols|default;"></textarea>
+  </tal:block>
+ </tal:block>
+</div>
+
+<div metal:define-macro="textFormatSelector">
+
+ <tal:block tal:define="wysiwyg python: here.portal_membership.getAuthenticatedMember().getProperty('wysiwyg_editor')=='Epoz'">
+
+  <tal:block condition="wysiwyg">
+        <input type="hidden"
+               name="text_format"
+               value="html" />
+  </tal:block>
+
+  <tal:block condition="not: wysiwyg">
+
+   <div class="field"
+     tal:define="tabindex tabindex/next;
+                     text_format python:request.get('text_format', getattr(here,'text_format','structured-text'))">
+
+    <label for="text_format" i18n:translate="label_format">Format</label>
+
+    <div class="formHelp" i18n:translate="help_format_wysiwyg">
+    If you are unsure of which format to use, just select Plain
+    Text and type the document as you usually do.
+    </div>
+
+    <input class="noborder"
+           type="radio"
+           name="text_format"
+           value="structured-text"
+           tabindex=""
+           id="cb_structuredtext"
+           tal:attributes="checked python:test(text_format=='structured-text', 1, None);
+                           tabindex tabindex;"
+           />
+    <label for="cb_structuredtext" i18n:translate="structured_text">Structured Text</label> <br />
+
+    <input class="noborder"
+           type="radio"
+           name="text_format"
+           value="html"
+           tabindex=""
+           id="cb_html"
+           tal:attributes="checked python:test(text_format=='html', 1, None);
+                           tabindex tabindex;"
+           />
+    <label for="cb_html" i18n:translate="html">HTML</label> <br />
+
+    <input class="noborder"
+           type="radio"
+           name="text_format"
+           value="plain"
+           tabindex=""
+           id="cb_plain"
+           tal:attributes="checked python:test(text_format=='plain', 1, None);
+                           tabindex tabindex;"
+           />
+    <label for="cb_plain" i18n:translate="plain_text">Plain Text</label>
+
+   </div>
+  </tal:block>
+
+ </tal:block>
+</div>
+</html>
\ No newline at end of file
diff --git a/epoz/epoz_plone/wysiwyg_support.pt b/epoz/epoz_plone/wysiwyg_support.pt
new file mode 100755 (executable)
index 0000000..5fa8114
--- /dev/null
@@ -0,0 +1,21 @@
+<html i18n:domain="plone">
+
+<!-- wysiwyg multiplexing widget, this allows for both Epoz and Kupu to coexist -->
+
+<div metal:define-macro="wysiwygEditorBox">
+  <tal:block define="editor python: member.getProperty('wysiwyg_editor').lower();
+                     support python: path('nocall:here/%s_wysiwyg_support|here/%s/wysiwyg_support|here/plone_wysiwyg/wysiwyg_support' % (editor, editor));">
+   <metal:block metal:use-macro="support/macros/wysiwygEditorBox">
+   </metal:block>
+  </tal:block>
+</div>
+
+<div metal:define-macro="textFormatSelector">
+  <tal:block define="editor python: member.getProperty('wysiwyg_editor').lower();
+                     support python: path('nocall:here/%s_wysiwyg_support|here/%s/wysiwyg_support|here/plone_wysiwyg/wysiwyg_support' % (editor, editor));">
+   <metal:block metal:use-macro="support/macros/textFormatSelector">
+   </metal:block>
+  </tal:block>
+</div>
+
+</html>
diff --git a/i18n/epoz_lang_da.po b/i18n/epoz_lang_da.po
new file mode 100644 (file)
index 0000000..70d30a0
--- /dev/null
@@ -0,0 +1,134 @@
+# Gettext Epoz-Language-File: da (Danish)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: overby@opentobusiness.com\n"
+"Language-Team: maik.jablonski@uni-bielefeld.de, overby@opentobusiness.com\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: da\n"
+"Language-Name: Danish\n"
+"Preferred-Encodings: utf-8 latin2\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Citat"
+
+msgid "Heading1"
+msgstr "Overskift 1"
+
+msgid "Heading2"
+msgstr "Overskift 2"
+
+msgid "Heading3"
+msgstr "Overskift 3"
+
+msgid "Heading4"
+msgstr "Overskift 4"
+
+msgid "Heading5"
+msgstr "Overskift 5"
+
+msgid "Heading6"
+msgstr "Overskift 6"
+
+msgid "Formatted"
+msgstr "Formatteret"
+
+msgid "Bold"
+msgstr "Fed"
+
+msgid "Italic"
+msgstr "Kursiv"
+
+msgid "Underline"
+msgstr "Understreg"
+
+msgid "Strikethrough"
+msgstr "Gennemstreg"
+
+msgid "Subscript"
+msgstr "Sænket skrift"
+
+msgid "Superscript"
+msgstr "Hævet skrift"
+
+msgid "RemoveFormat"
+msgstr "Fjern formattering"
+
+msgid "TextColor"
+msgstr "Skriftfarve"
+
+msgid "BackColor"
+msgstr "Baggrundsfarve"
+
+msgid "AlignLeft"
+msgstr "Venstrejusteret"
+
+msgid "Center"
+msgstr "Centreret"
+
+msgid "AlignRight"
+msgstr "Højrejusteret"
+
+msgid "OrderedList"
+msgstr "Nummereret liste"
+
+msgid "UnorderedList"
+msgstr "Punktliste"
+
+msgid "Outdent"
+msgstr "Formindsk indrykning"
+
+msgid "Indent"
+msgstr "Forøg indrykning"
+
+msgid "InsertLink"
+msgstr "Indsæt link"
+
+msgid "InsertImage"
+msgstr "Indsæt billede"
+
+msgid "InsertRule"
+msgstr "Indsæt linie"
+
+msgid "InsertTable"
+msgstr "Indsæt table"
+
+msgid "Toolbox"
+msgstr "Værktøjskasse"
+
+msgid "Undo"
+msgstr "Fortryd"
+
+msgid "Redo"
+msgstr "Annuller fortryd"
+
+msgid "EnterLinkURL"
+msgstr "Indsæt link adresse"
+
+msgid "EnterImageURL"
+msgstr "Indsæt bille placering"
+
+msgid "EnterTableRows"
+msgstr "Indsæt række"
+
+msgid "EnterTableColumns"
+msgstr "Indsæt kolonne"
+
+msgid "EnterTableBorder"
+msgstr "Kant"
+
+msgid "TableWithHead"
+msgstr "Tabel med hoved"
+
+msgid "TableWithoutHead"
+msgstr "Tabel uden hoved"
diff --git a/i18n/epoz_lang_de.po b/i18n/epoz_lang_de.po
new file mode 100644 (file)
index 0000000..c5f4c1b
--- /dev/null
@@ -0,0 +1,153 @@
+# Gettext Epoz-Language-File: de (Deutsch)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: maik.jablonski@uni-bielefeld.de\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: de\n"
+"Language-Name: Deutsch\n"
+"Preferred-Encodings: utf-8 latin2\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: de-de, de-at, de-li, de-lu, de-ch\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Absatz"
+
+msgid "Heading1"
+msgstr "Überschrift 1"
+
+msgid "Heading2"
+msgstr "Überschrift 2"
+
+msgid "Heading3"
+msgstr "Überschrift 3"
+
+msgid "Heading4"
+msgstr "Überschrift 4"
+
+msgid "Heading5"
+msgstr "Überschrift 5"
+
+msgid "Heading6"
+msgstr "Überschrift 6"
+
+msgid "Formatted"
+msgstr "Formatiert"
+
+msgid "Bold"
+msgstr "Fett"
+
+msgid "Italic"
+msgstr "Kursiv"
+
+msgid "Underline"
+msgstr "Unterstrichen"
+
+msgid "Strikethrough"
+msgstr "Durchgestrichen"
+
+msgid "Subscript"
+msgstr "Tiefstellen"
+
+msgid "Superscript"
+msgstr "Hochstellen"
+
+msgid "RemoveFormat"
+msgstr "Formatierung entfernen"
+
+msgid "TextColor"
+msgstr "Textfarbe"
+
+msgid "BackColor"
+msgstr "Hintergrundfarbe"
+
+msgid "AlignLeft"
+msgstr "Linksbündig"
+
+msgid "Center"
+msgstr "Zentriert"
+
+msgid "AlignRight"
+msgstr "Rechtsbündig"
+
+msgid "OrderedList"
+msgstr "Aufzählung"
+
+msgid "UnorderedList"
+msgstr "Liste"
+
+msgid "Outdent"
+msgstr "Ausrücken"
+
+msgid "Indent"
+msgstr "Einrücken"
+
+msgid "InsertLink"
+msgstr "Link einfügen"
+
+msgid "InsertAnchor"
+msgstr "Anker einfügen"
+
+msgid "InsertImage"
+msgstr "Bild einfügen"
+
+msgid "InsertRule"
+msgstr "Linie einfügen"
+
+msgid "InsertTable"
+msgstr "Tabelle einfügen"
+
+msgid "Toolbox"
+msgstr "Werkzeuge"
+
+msgid "Undo"
+msgstr "Undo"
+
+msgid "Redo"
+msgstr "Redo"
+
+msgid "EnterLinkURL"
+msgstr "URL des Links eingeben"
+
+msgid "EnterAnchorName"
+msgstr "Namen des Ankers eingeben"
+
+msgid "EnterImageURL"
+msgstr "URL des Bildes eingeben"
+
+msgid "EnterTableRows"
+msgstr "Anzahl der Reihen"
+
+msgid "EnterTableColumns"
+msgstr "Anzahl der Spalten"
+
+msgid "EnterTableBorder"
+msgstr "Randstärke"
+
+msgid "TableWithHead"
+msgstr "Tabelle mit Kopf"
+
+msgid "TableWithoutHead"
+msgstr "Tabelle ohne Kopf"
+
+msgid "HTML"
+msgstr "HTML"
+
+msgid "TidyStart"
+msgstr "HTML-Bereinigung..."
+
+msgid "TidyStop"
+msgstr "HTML-Bereinigung abgeschlossen."
+
+msgid "TidyError"
+msgstr "Fehler im HTML-Quelltext."
diff --git a/i18n/epoz_lang_en.po b/i18n/epoz_lang_en.po
new file mode 100644 (file)
index 0000000..39b0334
--- /dev/null
@@ -0,0 +1,156 @@
+# Gettext Epoz-Language-File: en (English)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: maik.jablonski@uni-bielefeld.de\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: en\n"
+"Language-Name: English\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: en-za, en-au, en-bz, en-ca, en-ie, en-jm, en-nz, en-ph, en-gb, en-tt, en-zw, en-us\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Paragraph"
+
+msgid "Heading1"
+msgstr "Heading 1"
+
+msgid "Heading2"
+msgstr "Heading 2"
+
+msgid "Heading3"
+msgstr "Heading 3"
+
+msgid "Heading4"
+msgstr "Heading 4"
+
+msgid "Heading5"
+msgstr "Heading 5"
+
+msgid "Heading6"
+msgstr "Heading 6"
+
+msgid "Formatted"
+msgstr "Formatted"
+
+msgid "Bold"
+msgstr "Bold"
+
+msgid "Italic"
+msgstr "Italic"
+
+msgid "Underline"
+msgstr "Underline"
+
+msgid "Strikethrough"
+msgstr "Strikethrough"
+
+msgid "Subscript"
+msgstr "Subscript"
+
+msgid "Superscript"
+msgstr "Superscript"
+
+msgid "RemoveFormat"
+msgstr "Remove Format"
+
+msgid "TextColor"
+msgstr "Text Color"
+
+msgid "BackColor"
+msgstr "Background Color"
+
+msgid "AlignLeft"
+msgstr "Align Left"
+
+msgid "Center"
+msgstr "Center"
+
+msgid "AlignRight"
+msgstr "Align Right"
+
+msgid "OrderedList"
+msgstr "Ordered List"
+
+msgid "UnorderedList"
+msgstr "Unordered List"
+
+msgid "Outdent"
+msgstr "Outdent"
+
+msgid "Indent"
+msgstr "Indent"
+
+msgid "InsertAnchor"
+msgstr "Insert Anchor"
+
+msgid "InsertFile"
+msgstr "Insert File"
+
+msgid "InsertImage"
+msgstr "Insert Image"
+
+msgid "InsertLink"
+msgstr "Insert Link"
+
+msgid "InsertRule"
+msgstr "Insert Rule"
+
+msgid "InsertTable"
+msgstr "Insert Table"
+
+msgid "Toolbox"
+msgstr "Toolbox"
+
+msgid "Undo"
+msgstr "Undo"
+
+msgid "Redo"
+msgstr "Redo"
+
+msgid "EnterLinkURL"
+msgstr "Enter Link URL"
+
+msgid "EnterAnchorName"
+msgstr "Enter Anchor Name"
+
+msgid "EnterImageURL"
+msgstr "Enter Image URL"
+
+msgid "EnterTableRows"
+msgstr "Enter Rows"
+
+msgid "EnterTableColumns"
+msgstr "Enter Columns"
+
+msgid "EnterTableBorder"
+msgstr "Enter Border"
+
+msgid "TableWithHead"
+msgstr "Table with Head"
+
+msgid "TableWithoutHead"
+msgstr "Table without Head"
+
+msgid "HTML"
+msgstr "HTML"
+
+msgid "TidyStart"
+msgstr "Tidying..."
+
+msgid "TidyStop"
+msgstr "Tidying complete."
+
+msgid "TidyError"
+msgstr "Detected errors in the HTML block."
diff --git a/i18n/epoz_lang_es.po b/i18n/epoz_lang_es.po
new file mode 100644 (file)
index 0000000..93496f9
--- /dev/null
@@ -0,0 +1,123 @@
+# Gettext Epoz-Language-File: es (Spanish)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: Pedro J. Rey Sanchiz\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: es\n"
+"Language-Name: Spanish\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: es-ar, es-bo, es-cl, es-co, es-cr, es-es, es-gt, es-hn, es-mx, es-ni, es-pa, es-py, es-pr, es-pe, es-do, es-sv, es-uy, es-ve, es-ec\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Párrafo"
+
+msgid "Heading1"
+msgstr "Cabecera 1"
+
+msgid "Heading2"
+msgstr "Cabecera 2"
+
+msgid "Heading3"
+msgstr "Cabecera 3"
+
+msgid "Heading4"
+msgstr "Cabecera 4"
+
+msgid "Heading5"
+msgstr "Cabecera 5"
+
+msgid "Heading6"
+msgstr "Cabecera 6"
+
+msgid "Formatted"
+msgstr "Formateado"
+
+msgid "Bold"
+msgstr "Negrita"
+
+msgid "Italic"
+msgstr "Cursiva"
+
+msgid "Underline"
+msgstr "Subrayado"
+
+msgid "Subscript"
+msgstr "Subíndice"
+
+msgid "Superscript"
+msgstr "Superíndice"
+
+msgid "TextColor"
+msgstr "Color"
+
+msgid "BackColor"
+msgstr "Color de fondo"
+
+msgid "AlignLeft"
+msgstr "Alineación izquierda"
+
+msgid "Center"
+msgstr "Centrado"
+
+msgid "AlignRight"
+msgstr "Alineación derecha"
+
+msgid "OrderedList"
+msgstr "Lista numerada"
+
+msgid "UnorderedList"
+msgstr "Viñetas"
+
+msgid "Outdent"
+msgstr "Sangrar más"
+
+msgid "Indent"
+msgstr "Sangrar menos"
+
+msgid "InsertLink"
+msgstr "Insertar hipervínculo"
+
+msgid "InsertImage"
+msgstr "Insertar imagen"
+
+msgid "InsertRule"
+msgstr "Insertar regla horizontal"
+
+msgid "InsertTable"
+msgstr "Insertar tabla"
+
+msgid "Toolbox"
+msgstr "Toolbox"
+
+msgid "Undo"
+msgstr "Deshacer"
+
+msgid "Redo"
+msgstr "Rehacer"
+
+msgid "EnterLinkURL"
+msgstr "Introduzca la dirección del hipervínculo"
+
+msgid "EnterImageURL"
+msgstr "Introduzca la situación de la imagen"
+
+msgid "EnterTableRows"
+msgstr "Introduzca el número de líneas"
+
+msgid "EnterTableColumns"
+msgstr "Introduzca el número de columnas"
+
+msgid "EnterTableBorder"
+msgstr "Introduzca el ancho del borde"
diff --git a/i18n/epoz_lang_fi.po b/i18n/epoz_lang_fi.po
new file mode 100644 (file)
index 0000000..4a178c9
--- /dev/null
@@ -0,0 +1,125 @@
+# Gettext Epoz-Language-File: fi (Finnish)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: petri.savolainen@iki.fi\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: fi\n"
+"Language-Name: Finnish\n"
+"Preferred-Encodings: utf-8 latin2\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Normaali"
+
+msgid "Paragraph"
+msgstr "Kappale"
+
+msgid "Heading1"
+msgstr "Otsikko 1"
+
+msgid "Heading2"
+msgstr "Otsikko 2"
+
+msgid "Heading3"
+msgstr "Otsikko 3"
+
+msgid "Heading4"
+msgstr "Otsikko 4"
+
+msgid "Heading5"
+msgstr "Otsikko 5"
+
+msgid "Heading6"
+msgstr "Otsikko 6"
+
+msgid "Formatted"
+msgstr "Muotoiltu"
+
+msgid "Bold"
+msgstr "Lihavoitu"
+
+msgid "Italic"
+msgstr "Kursivoitu"
+
+msgid "Underline"
+msgstr "Alleviivattu"
+
+msgid "Strikethrough"
+msgstr "Yliviivattu"
+
+msgid "Subscript"
+msgstr "Alaindeksi"
+
+msgid "Superscript"
+msgstr "Yläindeksi"
+
+msgid "TextColor"
+msgstr "Tekstin väri"
+
+msgid "BackColor"
+msgstr "Taustan väri"
+
+msgid "AlignLeft"
+msgstr "Tasaa vasemmalle"
+
+msgid "Center"
+msgstr "Keskitä"
+
+msgid "AlignRight"
+msgstr "Tasaa oikealle"
+
+msgid "OrderedList"
+msgstr "Järjestetty lista"
+
+msgid "UnorderedList"
+msgstr "Järjestämätön lista"
+
+msgid "Outdent"
+msgstr "Vähennä sisennystä"
+
+msgid "Indent"
+msgstr "Kasvata sisennystä"
+
+msgid "InsertLink"
+msgstr "Lisää linkki"
+
+msgid "InsertImage"
+msgstr "Lisää kuva"
+
+msgid "InsertRule"
+msgstr "Lisää viiva"
+
+msgid "InsertTable"
+msgstr "Lisää taulukko"
+
+msgid "Toolbox"
+msgstr "Työkalupakki"
+
+msgid "Undo"
+msgstr "Peru"
+
+msgid "Redo"
+msgstr "Tee uudelleen"
+
+msgid "EnterLinkURL"
+msgstr "Anna linkin URL"
+
+msgid "EnterImageURL"
+msgstr "Anna kuvan URL"
+
+msgid "EnterTableRows"
+msgstr "Anna rivimäärä"
+
+msgid "EnterTableColumns"
+msgstr "Anna sarakemäärä"
+
+msgid "EnterTableBorder"
+msgstr "Anna kehyksen määrittely"
diff --git a/i18n/epoz_lang_fr.po b/i18n/epoz_lang_fr.po
new file mode 100644 (file)
index 0000000..6808be4
--- /dev/null
@@ -0,0 +1,155 @@
+# Gettext Epoz-Language-File: fr (French)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: benoit.pin@cri.ensmp.fr\n"
+"Language-Team: Jean.Laroque@saint-gobain.com, benoit.pin@cri.ensmp.fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: fr\n"
+"Language-Name: French\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: fr-be fr-ca fr-lu fr-mc fr-ch\n"
+
+
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Paragraphe"
+
+msgid "Heading1"
+msgstr "Titre 1"
+
+msgid "Heading2"
+msgstr "Titre 2"
+
+msgid "Heading3"
+msgstr "Titre 3"
+
+msgid "Heading4"
+msgstr "Titre 4"
+
+msgid "Heading5"
+msgstr "Titre 5"
+
+msgid "Heading6"
+msgstr "Titre 6"
+
+msgid "Formatted"
+msgstr "Formaté"
+
+msgid "Bold"
+msgstr "Gras"
+
+msgid "Italic"
+msgstr "Italique"
+
+msgid "Underline"
+msgstr "Souligné"
+
+msgid "Strikethrough"
+msgstr "Barré"
+
+msgid "Subscript"
+msgstr "Indice"
+
+msgid "Superscript"
+msgstr "Exposant"
+
+msgid "RemoveFormat"
+msgstr "Supprimer la mise en forme"
+
+msgid "TextColor"
+msgstr "Couleur Texte"
+
+msgid "BackColor"
+msgstr "Couleur Fond"
+
+msgid "AlignLeft"
+msgstr "Aligner à Gauche"
+
+msgid "Center"
+msgstr "Centrer"
+
+msgid "AlignRight"
+msgstr "Aligner à Droite"
+
+msgid "OrderedList"
+msgstr "Liste numérotée"
+
+msgid "UnorderedList"
+msgstr "Liste à puces"
+
+msgid "Outdent"
+msgstr "Diminuer le retrait"
+
+msgid "Indent"
+msgstr "Augmenter le retrait"
+    
+msgid "InsertAnchor"
+msgstr "Insérer une ancre"
+
+msgid "InsertFile"
+msgstr "Insérer Fichier"
+
+msgid "InsertImage"
+msgstr "Insérer Image"
+
+msgid "InsertLink"
+msgstr "Insérer Lien"
+
+msgid "InsertRule"
+msgstr "Insérer Trait"
+
+msgid "InsertTable"
+msgstr "Insérer Tableau"
+
+msgid "Toolbox"
+msgstr "Boîte à Outil"
+
+msgid "Undo"
+msgstr "Annuler"
+
+msgid "Redo"
+msgstr "Rétablir"
+
+msgid "EnterLinkURL"
+msgstr "Entrer l'URL du lien"
+
+msgid "EnterAnchorName"
+msgstr "Entrer le nom de l'ancre"
+
+msgid "EnterImageURL"
+msgstr "Entrer l'URL de l'image"
+
+msgid "EnterTableRows"
+msgstr "Nombre de Lignes"
+
+msgid "EnterTableColumns"
+msgstr "Nombre de Colonnes"
+
+msgid "EnterTableBorder"
+msgstr "Type de Bordure"
+
+msgid "TableWithHead"
+msgstr "Tableau à en-tête"
+
+msgid "TableWithoutHead"
+msgstr "Tableau sans en-tête"
+
+msgid "TidyStart"
+msgstr "Nettoyage..."
+
+msgid "TidyStop"
+msgstr "Nettoyage terminé."
+
+msgid "TidyError"
+msgstr "Erreurs detectées dans le bloc de texte."
diff --git a/i18n/epoz_lang_hu.po b/i18n/epoz_lang_hu.po
new file mode 100644 (file)
index 0000000..0b11cbd
--- /dev/null
@@ -0,0 +1,131 @@
+# Gettext Epoz-Language-File: hu (Hungarian)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: dtamas@pressflex.com\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: hu\n"
+"Language-Name: Hungarian\n"
+"Preferred-Encodings: utf-8 latin2\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Normál"
+
+msgid "Paragraph"
+msgstr "Bekezdés"
+
+msgid "Heading1"
+msgstr "Címsor 1"
+
+msgid "Heading2"
+msgstr "Címsor 2"
+
+msgid "Heading3"
+msgstr "Címsor 3"
+
+msgid "Heading4"
+msgstr "Címsor 4"
+
+msgid "Heading5"
+msgstr "Címsor 5"
+
+msgid "Heading6"
+msgstr "Címsor 6"
+
+msgid "Formatted"
+msgstr "Formázott"
+
+msgid "Bold"
+msgstr "Félkövér"
+
+msgid "Italic"
+msgstr "Kurzív"
+
+msgid "Underline"
+msgstr "Aláhúzott"
+
+msgid "Strikethrough"
+msgstr "Áthúzott"
+
+msgid "Subscript"
+msgstr "Alsó index"
+
+msgid "Superscript"
+msgstr "Felsô index"
+
+msgid "TextColor"
+msgstr "Szövegszín"
+
+msgid "BackColor"
+msgstr "Háttérszín"
+
+msgid "AlignLeft"
+msgstr "Balra igazított"
+
+msgid "Center"
+msgstr "Közép"
+
+msgid "AlignRight"
+msgstr "Jobbra igazított"
+
+msgid "OrderedList"
+msgstr "Sorszámozott lista"
+
+msgid "UnorderedList"
+msgstr "Felsorolás"
+
+msgid "Outdent"
+msgstr "Kihúzás"
+
+msgid "Indent"
+msgstr "Behúzás"
+
+msgid "InsertLink"
+msgstr "Hivatkozás beszúrása"
+
+msgid "InsertImage"
+msgstr "Kép beszúrása"
+
+msgid "InsertRule"
+msgstr "Elválasztó beszúrása"
+
+msgid "InsertTable"
+msgstr "Táblázat beszúrása"
+
+msgid "Toolbox"
+msgstr "Eszköztár"
+
+msgid "Undo"
+msgstr "Vissza"
+
+msgid "Redo"
+msgstr "Újra"
+
+msgid "EnterLinkURL"
+msgstr "Írja be a hivatkozás URL-jét"
+
+msgid "EnterImageURL"
+msgstr "Írja be a kép URL-jét"
+
+msgid "EnterTableRows"
+msgstr "Sorok száma"
+
+msgid "EnterTableColumns"
+msgstr "Oszlopok száma"
+
+msgid "EnterTableBorder"
+msgstr "Keretvastagság"
+
+msgid "TableWithHead"
+msgstr "Táblázat fejléccel"
+
+msgid "TableWithoutHead"
+msgstr "Táblázat fejléc nélkül"
diff --git a/i18n/epoz_lang_it.po b/i18n/epoz_lang_it.po
new file mode 100644 (file)
index 0000000..6700214
--- /dev/null
@@ -0,0 +1,123 @@
+# Gettext Epoz-Language-File: it (Italiano)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: nbe@libero.it\n"
+"Language-Team: maik.jablonski@uni-bielefeld.de, nbe@libero.it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: it\n"
+"Language-Name: Italiano\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: it-ch\n"
+
+
+msgid "Normal"
+msgstr "Normale"
+
+msgid "Paragraph"
+msgstr "Paragrafo"
+
+msgid "Heading1"
+msgstr "Titolo 1"
+
+msgid "Heading2"
+msgstr "Titolo 2"
+
+msgid "Heading3"
+msgstr "Titolo 3"
+
+msgid "Heading4"
+msgstr "Titolo 4"
+
+msgid "Heading5"
+msgstr "Titolo 5"
+
+msgid "Heading6"
+msgstr "Titolo 6"
+
+msgid "Formatted"
+msgstr "Formattato"
+
+msgid "Bold"
+msgstr "Grassetto"
+
+msgid "Italic"
+msgstr "Italico"
+
+msgid "Underline"
+msgstr "Sottolineato"
+
+msgid "Subscript"
+msgstr "Pedice"
+
+msgid "Superscript"
+msgstr "Apice"
+
+msgid "TextColor"
+msgstr "Colore testo"
+
+msgid "BackColor"
+msgstr "Colore sfondo"
+
+msgid "AlignLeft"
+msgstr "Allinea sinistra"
+
+msgid "Center"
+msgstr "Centra"
+
+msgid "AlignRight"
+msgstr "Allinea destra"
+
+msgid "OrderedList"
+msgstr "Lista numerata"
+
+msgid "UnorderedList"
+msgstr "Lista puntata"
+
+msgid "Outdent"
+msgstr "Riduci rientro"
+
+msgid "Indent"
+msgstr "Aumenta rientro"
+
+msgid "InsertLink"
+msgstr "Inserisci link"
+
+msgid "InsertImage"
+msgstr "Inserisci immagine"
+
+msgid "InsertRule"
+msgstr "Inserisci separatore"
+
+msgid "InsertTable"
+msgstr "Inserisci tabella"
+
+msgid "Toolbox"
+msgstr "Toolbox"
+
+msgid "Undo"
+msgstr "Annulla"
+
+msgid "Redo"
+msgstr "Ripeti"
+
+msgid "EnterLinkURL"
+msgstr "Inserisci URL link"
+
+msgid "EnterImageURL"
+msgstr "Inserisci immagine link"
+
+msgid "EnterTableRows"
+msgstr "Inserisci righe"
+
+msgid "EnterTableColumns"
+msgstr "Inserisci colonne"
+
+msgid "EnterTableBorder"
+msgstr "Inserisci bordo"
diff --git a/i18n/epoz_lang_nl.po b/i18n/epoz_lang_nl.po
new file mode 100644 (file)
index 0000000..790a709
--- /dev/null
@@ -0,0 +1,123 @@
+# Gettext Epoz-Language-File: nl (Dutch)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: ad.schellevis@imasgroep.nl\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: nl\n"
+"Language-Name: Dutch\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: nl-be\n"
+
+
+msgid "Normal"
+msgstr "Normaal"
+
+msgid "Paragraph"
+msgstr "Paragraaf"
+
+msgid "Heading1"
+msgstr "Kop 1"
+
+msgid "Heading2"
+msgstr "Kop 2"
+
+msgid "Heading3"
+msgstr "Kop 3"
+
+msgid "Heading4"
+msgstr "Kop 4"
+
+msgid "Heading5"
+msgstr "Kop 5"
+
+msgid "Heading6"
+msgstr "Kop 6"
+
+msgid "Formatted"
+msgstr "Opgemaakt"
+
+msgid "Bold"
+msgstr "Vet"
+
+msgid "Italic"
+msgstr "Cursief"
+
+msgid "Underline"
+msgstr "Onderstreept"
+
+msgid "Subscript"
+msgstr "Subscript"
+
+msgid "Superscript"
+msgstr "Superscript"
+
+msgid "TextColor"
+msgstr "Tekst kleur"
+
+msgid "BackColor"
+msgstr "Achtergrond kleur"
+
+msgid "AlignLeft"
+msgstr "Links uitlijnen"
+
+msgid "Center"
+msgstr "Centreren"
+
+msgid "AlignRight"
+msgstr "Rechts uitlijnen"
+
+msgid "OrderedList"
+msgstr "Nummering"
+
+msgid "UnorderedList"
+msgstr "Opsommingstekens"
+
+msgid "Outdent"
+msgstr "Inspringen verkleinen"
+
+msgid "Indent"
+msgstr "Inspringen vergroten"
+
+msgid "InsertLink"
+msgstr "Hyperlink invoegen"
+
+msgid "InsertImage"
+msgstr "Plaatje invoegen"
+
+msgid "InsertRule"
+msgstr "Rand invoegen"
+
+msgid "InsertTable"
+msgstr "Tabel invoegen"
+
+msgid "Toolbox"
+msgstr "Toolbox"
+
+msgid "Undo"
+msgstr "Ongedaan maken"
+
+msgid "Redo"
+msgstr "Herhalen"
+
+msgid "EnterLinkURL"
+msgstr "Ingeven hyperlink URL"
+
+msgid "EnterImageURL"
+msgstr "Ingeven locatie plaatje"
+
+msgid "EnterTableRows"
+msgstr "Invoeren Rijen"
+
+msgid "EnterTableColumns"
+msgstr "Invoegen Kolommen"
+
+msgid "EnterTableBorder"
+msgstr "Invoegen Kader"
diff --git a/i18n/epoz_lang_no.po b/i18n/epoz_lang_no.po
new file mode 100644 (file)
index 0000000..139c4a8
--- /dev/null
@@ -0,0 +1,141 @@
+# Gettext Epoz-Language-File: no (Norwegian)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: einar.ness.jensen@hf.ntnu.no\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: no\n"
+"Language-Name: Norwegian\n"
+"Preferred-Encodings: utf-8 latin2\n"
+"Domain: epoz\n"
+"X-Is-Fallback-For: nb, nn\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Avsnitt"
+
+msgid "Heading1"
+msgstr "Overskrift 1"
+
+msgid "Heading2"
+msgstr "Overskrift 2"
+
+msgid "Heading3"
+msgstr "Overskrift 3"
+
+msgid "Heading4"
+msgstr "Overskrift 4"
+
+msgid "Heading5"
+msgstr "Overskrift 5"
+
+msgid "Heading6"
+msgstr "Overskrift 6"
+
+msgid "Formatted"
+msgstr "Preformatert"
+
+msgid "Bold"
+msgstr "Fet"
+
+msgid "Italic"
+msgstr "Kursiv"
+
+msgid "Underline"
+msgstr "Understreket"
+
+msgid "Strikethrough"
+msgstr "Gjennomstreket"
+
+msgid "Subscript"
+msgstr "Subskrift"
+
+msgid "Superscript"
+msgstr "Superskrift"
+
+msgid "RemoveFormat"
+msgstr "Fjern Formatering"
+
+msgid "TextColor"
+msgstr "Tekstfarge"
+
+msgid "BackColor"
+msgstr "Bakgrunnsfarge"
+
+msgid "AlignLeft"
+msgstr "Venstrejustert"
+
+msgid "Center"
+msgstr "Midtjustert"
+
+msgid "AlignRight"
+msgstr "Høyrejustert"
+
+msgid "OrderedList"
+msgstr "Ordnet Liste"
+
+msgid "UnorderedList"
+msgstr "Uordnet Liste"
+
+msgid "Outdent"
+msgstr "Minsk Innrykk"
+
+msgid "Indent"
+msgstr "Øk Innrykk"
+
+msgid "InsertLink"
+msgstr "Sett inn Lenke"
+
+msgid "InsertAnchor"
+msgstr "Sett inn Anker"
+
+msgid "InsertImage"
+msgstr "Sett inn Bilde"
+
+msgid "InsertRule"
+msgstr "Sett inn Horisontal Linje"
+
+msgid "InsertTable"
+msgstr "Sett inn Tabell"
+
+msgid "Toolbox"
+msgstr "Verktøy"
+
+msgid "Undo"
+msgstr "Angre"
+
+msgid "Redo"
+msgstr "Gjenta"
+
+msgid "EnterLinkURL"
+msgstr "Skriv inn Lenke-URL"
+
+msgid "EnterAnchorName"
+msgstr "Skriv inn Navn pĺ Anker"
+
+msgid "EnterImageURL"
+msgstr "Skriv inn Bilde-URL"
+
+msgid "EnterTableRows"
+msgstr "Antall Rader"
+
+msgid "EnterTableColumns"
+msgstr "Antall Kolonner"
+
+msgid "EnterTableBorder"
+msgstr "Bredde Kantlinje"
+
+msgid "TableWithHead"
+msgstr "Tabell med Topplinje"
+
+msgid "TableWithoutHead"
+msgstr "Tabell uten Topplinje"
diff --git a/i18n/epoz_lang_pl.po b/i18n/epoz_lang_pl.po
new file mode 100644 (file)
index 0000000..426f2de
--- /dev/null
@@ -0,0 +1,122 @@
+# Gettext Epoz-Language-File: pl (Polish)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: qbak@qbak.net\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: pl\n"
+"Language-Name: Polish\n"
+"Preferred-Encodings: utf-8 latin2\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Normalny"
+
+msgid "Paragraph"
+msgstr "Akapit"
+
+msgid "Heading1"
+msgstr "Nagłówek 1"
+
+msgid "Heading2"
+msgstr "Nagłówek 2"
+
+msgid "Heading3"
+msgstr "Nagłówek 3"
+
+msgid "Heading4"
+msgstr "Nagłówek 4"
+
+msgid "Heading5"
+msgstr "Nagłówek 5"
+
+msgid "Heading6"
+msgstr "Nagłówek 6"
+
+msgid "Formatted"
+msgstr "Sformatowany"
+
+msgid "Bold"
+msgstr "Pogrubienie"
+
+msgid "Italic"
+msgstr "Kursywa"
+
+msgid "Underline"
+msgstr "Podkreślenie"
+
+msgid "Subscript"
+msgstr "Indeks dolny"
+
+msgid "Superscript"
+msgstr "Indeks górny"
+
+msgid "TextColor"
+msgstr "Kolor tekstu"
+
+msgid "BackColor"
+msgstr "Kolor tła"
+
+msgid "AlignLeft"
+msgstr "Wyrównanie do lewej"
+
+msgid "Center"
+msgstr "Wyśrodkowanie"
+
+msgid "AlignRight"
+msgstr "Wyrównanie do prawej"
+
+msgid "OrderedList"
+msgstr "Lista numerowana"
+
+msgid "UnorderedList"
+msgstr "Lista wypunktowana"
+
+msgid "Outdent"
+msgstr "Zmniejsz wcięcie"
+
+msgid "Indent"
+msgstr "Zwiększ wcięcie"
+
+msgid "InsertLink"
+msgstr "Wstaw odnośnik"
+
+msgid "InsertImage"
+msgstr "Wstaw obrazek"
+
+msgid "InsertRule"
+msgstr "Wstaw linijkę"
+
+msgid "InsertTable"
+msgstr "Wstaw tabelę"
+
+msgid "Toolbox"
+msgstr "Narzędzia"
+
+msgid "Undo"
+msgstr "Cofnij"
+
+msgid "Redo"
+msgstr "Powtórz"
+
+msgid "EnterLinkURL"
+msgstr "Wprowadź URL odnośnika"
+
+msgid "EnterImageURL"
+msgstr "Wprowadź URL obrazka"
+
+msgid "EnterTableRows"
+msgstr "Wprowadź wiersze"
+
+msgid "EnterTableColumns"
+msgstr "Wprowadź kolumny"
+
+msgid "EnterTableBorder"
+msgstr "Wprowadź ramkę"
diff --git a/i18n/epoz_lang_pt-br.po b/i18n/epoz_lang_pt-br.po
new file mode 100644 (file)
index 0000000..0d8ec90
--- /dev/null
@@ -0,0 +1,140 @@
+# Gettext Epoz-Language-File: pt-br (Portuguese Brazil)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: Luiz Fernando Pasqual S. Souza <pasquall@amcham.com.br>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: pt-br\n"
+"Language-Name: Portuguese Brazil\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Parágrafo"
+
+msgid "Heading1"
+msgstr "Cabeçalho 1"
+
+msgid "Heading2"
+msgstr "Cabeçalho 2"
+
+msgid "Heading3"
+msgstr "Cabeçalho 3"
+
+msgid "Heading4"
+msgstr "Cabeçalho 4"
+
+msgid "Heading5"
+msgstr "Cabeçalho 5"
+
+msgid "Heading6"
+msgstr "Cabeçalho 6"
+
+msgid "Formatted"
+msgstr "Formatado"
+
+msgid "Bold"
+msgstr "Negrito"
+
+msgid "Italic"
+msgstr "Itálico"
+
+msgid "Underline"
+msgstr "Sublinhado"
+
+msgid "Strikethrough"
+msgstr "Riscado"
+
+msgid "Subscript"
+msgstr "Subescrito"
+
+msgid "Superscript"
+msgstr "Sobrescrito"
+
+msgid "RemoveFormat"
+msgstr "Remover formatação"
+
+msgid "TextColor"
+msgstr "Cor do texto"
+
+msgid "BackColor"
+msgstr "Cor do fundo"
+
+msgid "AlignLeft"
+msgstr "Alinhar à esquerda"
+
+msgid "Center"
+msgstr "Centralizar"
+
+msgid "AlignRight"
+msgstr "Alinhar à direita"
+
+msgid "OrderedList"
+msgstr "Lista numerada"
+
+msgid "UnorderedList"
+msgstr "Lista ordenada"
+
+msgid "Outdent"
+msgstr "Diminuir parágrafo"
+
+msgid "Indent"
+msgstr "Aumentar parágrafo"
+
+msgid "InsertLink"
+msgstr "Inserir Link"
+
+msgid "InsertAnchor"
+msgstr "Inserir âncora"
+
+msgid "InsertImage"
+msgstr "Inserir Imagem"
+
+msgid "InsertRule"
+msgstr "Inserir Linha"
+
+msgid "InsertTable"
+msgstr "Inserir Tabela"
+
+msgid "Toolbox"
+msgstr "Caixa de ferramentas"
+
+msgid "Undo"
+msgstr "Voltar"
+
+msgid "Redo"
+msgstr "Refazer"
+
+msgid "EnterLinkURL"
+msgstr "URL do link"
+
+msgid "EnterAnchorName"
+msgstr "Nome da âncora"
+
+msgid "EnterImageURL"
+msgstr "URL da imagem"
+
+msgid "EnterTableRows"
+msgstr "Linhas"
+
+msgid "EnterTableColumns"
+msgstr "Colunas"
+
+msgid "EnterTableBorder"
+msgstr "Bordas"
+
+msgid "TableWithHead"
+msgstr "Tabela com cabeçalho"
+
+msgid "TableWithoutHead"
+msgstr "Tabela sem cabeçalho"
diff --git a/i18n/epoz_lang_pt.po b/i18n/epoz_lang_pt.po
new file mode 100644 (file)
index 0000000..d094094
--- /dev/null
@@ -0,0 +1,134 @@
+# Epoz-Language-File: pt (Portuguese)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: nteixeira@bmc.pt\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: pt\n"
+"Language-Name: Portuguese\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Normal"
+
+msgid "Paragraph"
+msgstr "Parágrafo"
+
+msgid "Heading1"
+msgstr "Cabeçalho 1"
+
+msgid "Heading2"
+msgstr "Cabeçalho 2"
+
+msgid "Heading3"
+msgstr "Cabeçalho 3"
+
+msgid "Heading4"
+msgstr "Cabeçalho 4"
+
+msgid "Heading5"
+msgstr "Cabeçalho 5"
+
+msgid "Heading6"
+msgstr "Cabeçalho 6"
+
+msgid "Formatted"
+msgstr "Formatado"
+
+msgid "Bold"
+msgstr "Negrito"
+
+msgid "Italic"
+msgstr "Itálico"
+
+msgid "Underline"
+msgstr "Sublinhado"
+
+msgid "Strikethrough"
+msgstr "Traçado"
+
+msgid "Subscript"
+msgstr "Subescrito"
+
+msgid "Superscript"
+msgstr "Sobrescrito"
+
+msgid "RemoveFormat"
+msgstr "Retirar Formatação"
+
+msgid "TextColor"
+msgstr "Cor do texto"
+
+msgid "BackColor"
+msgstr "Cor do fundo"
+
+msgid "AlignLeft"
+msgstr "Alinhar à esquerda"
+
+msgid "Center"
+msgstr "Centrar"
+
+msgid "AlignRight"
+msgstr "Alinhar à direita"
+
+msgid "OrderedList"
+msgstr "Lista numerada"
+
+msgid "UnorderedList"
+msgstr "Lista ordenada"
+
+msgid "Outdent"
+msgstr "Diminuir parágrafo"
+
+msgid "Indent"
+msgstr "Aumentar parágrafo"
+
+msgid "InsertLink"
+msgstr "Inserir Link"
+
+msgid "InsertImage"
+msgstr "Inserir Imagem"
+
+msgid "InsertRule"
+msgstr "Inserir Linha"
+
+msgid "InsertTable"
+msgstr "Inserir Tabela"
+
+msgid "Toolbox"
+msgstr "Caixa de ferramentas"
+
+msgid "Undo"
+msgstr "Desfazer"
+
+msgid "Redo"
+msgstr "Refazer"
+
+msgid "EnterLinkURL"
+msgstr "URL do link"
+
+msgid "EnterImageURL"
+msgstr "URL da imagem"
+
+msgid "EnterTableRows"
+msgstr "Número de Linhas"
+
+msgid "EnterTableColumns"
+msgstr "Número de Colunas"
+
+msgid "EnterTableBorder"
+msgstr "Tamanho das Bordas"
+
+msgid "TableWithHead"
+msgstr "Tabela com cabeçalho"
+
+msgid "TableWithoutHead"
+msgstr "Tabela sem cabeçalho"
diff --git a/i18n/epoz_lang_ru.po b/i18n/epoz_lang_ru.po
new file mode 100644 (file)
index 0000000..230b7a6
--- /dev/null
@@ -0,0 +1,143 @@
+# Gettext Epoz-Language-File: ru (Russian (UTF-8))
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: Theo (theo@ua.fm)\n"
+"Language-Team: Sergey V. Volobuev, Theo (theo@ua.fm)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: ru\n"
+"Language-Name: Russian\n"
+"Preferred-Encodings: utf-8\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "Обычный"
+
+msgid "Paragraph"
+msgstr "Абзац"
+
+msgid "Heading1"
+msgstr "Заголовок 1"
+
+msgid "Heading2"
+msgstr "Заголовок 2"
+
+msgid "Heading3"
+msgstr "Заголовок 3"
+
+msgid "Heading4"
+msgstr "Заголовок 4"
+
+msgid "Heading5"
+msgstr "Заголовок 5"
+
+msgid "Heading6"
+msgstr "Заголовок 6"
+
+msgid "Formatted"
+msgstr "Форматированный"
+
+msgid "Bold"
+msgstr "Полужирный"
+
+msgid "Italic"
+msgstr "Курсив"
+
+msgid "Underline"
+msgstr "Подчеркнутый"
+
+msgid "Strikethrough"
+msgstr "Зачёркнутый"
+
+msgid "Subscript"
+msgstr "Нижний индекс"
+
+msgid "Superscript"
+msgstr "Верхний индекс"
+
+msgid "RemoveFormat"
+msgstr "Убрать форматирование"
+
+msgid "TextColor"
+msgstr "Цвет шрифта"
+
+msgid "BackColor"
+msgstr "Цвет фона"
+
+msgid "AlignLeft"
+msgstr "По левому краю"
+
+msgid "Center"
+msgstr "По центру"
+
+msgid "AlignRight"
+msgstr "По правому краю"
+
+msgid "OrderedList"
+msgstr "Нумерация"
+
+msgid "UnorderedList"
+msgstr "Маркеры"
+
+msgid "Outdent"
+msgstr "Уменьшить отступ"
+
+msgid "Indent"
+msgstr "Увеличить отступ"
+
+msgid "InsertLink"
+msgstr "Вставить гиперссылку"
+
+msgid "InsertAnchor"
+msgstr "Вставить якорь"
+
+msgid "InsertImage"
+msgstr "Вставить изображение"
+
+msgid "InsertRule"
+msgstr "Вставить линейку"
+
+msgid "InsertTable"
+msgstr "Вставить таблицу"
+
+msgid "Toolbox"
+msgstr "Инструменты"
+
+msgid "Undo"
+msgstr "Отменить"
+
+msgid "Redo"
+msgstr "Повторить"
+
+msgid "EnterLinkURL"
+msgstr "Введите URL страницы"
+
+msgid "EnterAnchorName"
+msgstr "Введите названия якоря"
+
+msgid "EnterImageURL"
+msgstr "Введите URL изображения"
+
+msgid "EnterTableRows"
+msgstr "Число строк"
+
+msgid "EnterTableColumns"
+msgstr "Число столбцов"
+
+msgid "EnterTableBorder"
+msgstr "Ширина границы"
+
+msgid "TableWithHead"
+msgstr "Таблица с заголовком"
+
+msgid "TableWithoutHead"
+msgstr "Таблица без заголовка"
+
+msgid "HTML"
+msgstr "HTML"
diff --git a/i18n/epoz_lang_zh-cn.po b/i18n/epoz_lang_zh-cn.po
new file mode 100644 (file)
index 0000000..5ea9aef
--- /dev/null
@@ -0,0 +1,144 @@
+# Gettext Epoz-Language-File: zh (Chinese)
+msgid ""
+msgstr ""
+"Project-Id-Version: EPOZ 0.9\n"
+"POT-Creation-Date: 2005-01-29 19:18+0100\n"
+"PO-Revision-Date: 2005-01-29 19:18+0100\n"
+"Last-Translator: panjy@plone.cn\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Code: zh\n"
+"Language-Name: Chinese\n"
+"Preferred-Encodings: utf-8\n"
+"Domain: epoz\n"
+
+
+msgid "Normal"
+msgstr "常规"
+
+msgid "Paragraph"
+msgstr "段落"
+
+msgid "Heading1"
+msgstr "标题 1"
+
+msgid "Heading2"
+msgstr "标题 2"
+
+msgid "Heading3"
+msgstr "标题 3"
+
+msgid "Heading4"
+msgstr "标题 4"
+
+msgid "Heading5"
+msgstr "标题 5"
+
+msgid "Heading6"
+msgstr "标题 6"
+
+msgid "Formatted"
+msgstr "保持格式"
+
+msgid "Bold"
+msgstr "加粗"
+
+msgid "Italic"
+msgstr "倾斜"
+
+msgid "Underline"
+msgstr "下划线"
+
+msgid "Strikethrough"
+msgstr "中划线"
+
+msgid "Subscript"
+msgstr "下标"
+
+msgid "Superscript"
+msgstr "上标"
+
+msgid "RemoveFormat"
+msgstr "去除格式"
+
+msgid "TextColor"
+msgstr "文字颜色"
+
+msgid "BackColor"
+msgstr "背景颜色"
+
+
+msgid "AlignLeft"
+msgstr "左对齐"
+
+msgid "Center"
+msgstr "居中"
+
+msgid "AlignRight"
+msgstr "右对齐"
+
+msgid "OrderedList"
+msgstr "有序清单"
+
+msgid "UnorderedList"
+msgstr "无序清单"
+
+msgid "Outdent"
+msgstr "减少缩进"
+
+msgid "Indent"
+msgstr "增加缩进"
+
+msgid "InsertLink"
+msgstr "添加链接"
+
+msgid "InsertAnchor"
+msgstr "添加书签(Anchor)"
+
+msgid "InsertImage"
+msgstr "添加图片"
+
+msgid "InsertRule"
+msgstr "添加尺线"
+
+msgid "InsertTable"
+msgstr "添加表格"
+
+msgid "Toolbox"
+msgstr "工具箱"
+
+
+msgid "Undo"
+msgstr "撤销"
+
+msgid "Redo"
+msgstr "恢复"
+
+
+msgid "EnterLinkURL"
+msgstr "输入链接的URL地址"
+
+msgid "EnterAnchorName"
+msgstr "输入书签(Anchor)名"
+
+msgid "EnterImageURL"
+msgstr "输入图片的UR地址"
+
+
+msgid "EnterTableRows"
+msgstr "输入行数"
+
+msgid "EnterTableColumns"
+msgstr "输入列数"
+
+msgid "EnterTableBorder"
+msgstr "输入边框"
+
+msgid "TableWithHead"
+msgstr "带标题的表格"
+
+msgid "TableWithoutHead"
+msgstr "不带标题的表格"
diff --git a/mxTidyHowTo.txt b/mxTidyHowTo.txt
new file mode 100755 (executable)
index 0000000..7e0b59f
--- /dev/null
@@ -0,0 +1,188 @@
+How do I install mxTidy with Zope / Plone?
+
+Here are the steps. Be sure to use the same python as your Zope / Plone uses
+for setting up mxTidy correctly!
+
+1) Download these packages:
+
+http://www.egenix.com/files/python/egenix-mx-base-2.0.5.tar.gz
+http://www.egenix.com/files/python/egenix-mx-experimental-0.8.0.tar.gz
+
+2) Untar the packages
+
+tar xfvz egenix-mx-base-2.0.5.tar.gz
+tar xfvz egenix-mx-experimental-0.8.0.tar.gz
+
+3) Change to egenix-mx-base-2.0.5
+
+python setup.py install
+
+4) Change to egenix-mx-experimental-0.8.0
+
+python setup.py install
+
+Maybe you'll get an error like "Can't compile etc.pp."...
+
+If so, copy the "patched" file below (it just skips
+the "buggy" number-module which isn't needed for tidy) to
+egenix-mx-experimental-0.8.0/mxEXPERIMENTAL.py and try again.
+
+5) Restart your Zope / Plone to take changes effect!
+
+-----------------------------------------------------
+patched mxEXPERIMENTAL.py for easier mxTidy-Setup
+-----------------------------------------------------
+
+#!/usr/local/bin/python2.0
+
+""" Configuration for the eGenix mx EXPERIMENTAL distribution.
+
+     Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal(ät)lemburg.com
+     Copyright (c) 2000-2003, eGenix.com Software GmbH;
+mailto:info(ät)egenix.com
+     See the documentation for further information on copyrights,
+     or contact the author. All Rights Reserved.
+"""
+from mxSetup import mx_Extension
+import sys, glob, os
+
+#
+# Package version
+#
+version = '0.8.0'
+
+#
+# Setup information
+#
+name = "egenix-mx-experimental"
+
+#
+# Meta-Data
+#
+description = "eGenix mx-Extensions - EXPERIMENTAL package"
+long_description = """\
+The eGenix mx Extension Series are a collection of
+Python extensions written in ANSI C and Python
+which provide a large spectrum of useful additions
+to everyday Python programming.
+
+This package includes experimental subpackages of the
+series. Please understand that the software in these
+packages is still in alpha state and does not meet the
+quality standards of production quality software.
+
+This software is brought to you by eGenix.com. The included
+subpackages are either covered by the eGenix.com Public
+License or the eGenix.com Commercial License and/or other
+licenses. Please check the  subpackage documentation for
+details or contact eGenix.com for more license information.
+"""
+license = (
+"Copyright (c) 2000-2003, eGenix.com Software GmbH, All Rights Reserved"
+)
+author = "Marc-Andre Lemburg"
+author_email = "mal(ät)egenix.com"
+url = "http://www.egenix.com/files/python/eGenix-mx-Extensions.html"
+
+#
+# Python packages
+#
+packages = [
+
+     'mx',
+
+     # mxTidy
+     'mx.Tidy',
+     'mx.Tidy.mxTidy',
+
+     # mxURL
+     'mx.URL',
+     'mx.URL.mxURL',
+
+     # mxUID
+     'mx.UID',
+     'mx.UID.mxUID',
+
+     ]
+
+#
+# C libraries
+#
+
+libraries = [
+
+     # libtidy.a needed by mxTidy
+     ('libtidy',
+      {'sources':
+       glob.glob(os.path.join('mx','Tidy','mxTidy','libtidy','*.c')),
+       'include_dirs':
+       [os.path.join('mx','Tidy','mxTidy','libtidy')],
+       'macros':
+       [('COMPILING_TIDY', 1)],
+       }),
+
+     ]
+
+#
+# C Extensions
+#
+ext_modules = [
+
+     # mxTidy
+     mx_Extension('mx.Tidy.mxTidy.mxTidy',
+                  ['mx/Tidy/mxTidy/mxTidy.c'],
+                  include_dirs=['mx/Tidy/mxTidy',
+                                'mx/Tidy/mxTidy/libtidy'],
+                  libraries=['libtidy'],
+                  library_dirs=['mx/Tidy/mxTidy/libtidy']),
+
+     # mxURL
+     mx_Extension('mx.URL.mxURL.mxURL',
+                  ['mx/URL/mxURL/mxURL.c'],
+                  include_dirs=['mx/URL/mxURL']),
+
+     # mxUID
+     mx_Extension('mx.UID.mxUID.mxUID',
+                  ['mx/UID/mxUID/mxUID.c'],
+                  include_dirs=['mx/UID/mxUID']),
+
+     ]
+
+#
+# Data files
+#
+data_files = [
+
+     # mxTidy
+     'mx/Tidy/Doc/mxTidy.html',
+     'mx/Tidy/Doc/mxLicense.html',
+     'mx/Tidy/Doc/Overview.html',
+     'mx/Tidy/Doc/pending.html',
+     'mx/Tidy/Doc/release-notes.html',
+     'mx/Tidy/Doc/tidy.gif',
+     'mx/Tidy/COPYRIGHT',
+     'mx/Tidy/LICENSE',
+     'mx/Tidy/README',
+     'mx/Tidy/mxTidy/mxTidy.h',
+     'mx/Tidy/mxTidy/mxh.h',
+     'mx/Tidy/mxTidy/input.html',
+
+     # mxURL
+     'mx/URL/Doc/mxURL.html',
+     'mx/URL/Doc/mxLicense.html',
+     'mx/URL/COPYRIGHT',
+     'mx/URL/LICENSE',
+     'mx/URL/README',
+     'mx/URL/mxURL/mxURL.h',
+     'mx/URL/mxURL/mxh.h',
+
+     # mxUID
+     'mx/UID/Doc/mxUID.html',
+     'mx/UID/Doc/mxLicense.html',
+     'mx/UID/COPYRIGHT',
+     'mx/UID/LICENSE',
+     'mx/UID/README',
+     'mx/UID/mxUID/mxUID.h',
+     'mx/UID/mxUID/mxh.h',
+
+     ]
diff --git a/version.txt b/version.txt
new file mode 100755 (executable)
index 0000000..f374f66
--- /dev/null
@@ -0,0 +1 @@
+0.9.1