XML Copy Editor

Copyright © 2005–2006 Gerald Schmidt

http://xml-copy-editor.sourceforge.net

This is a wxWidgets application. The XML parsers are Expat and libxml. The XSLT library is libxslt. The editor component is Scintilla. The spelling and style module uses Perl Compatible Regular Expressions.


General

Features
Getting started
Templates
Printing
Working with large documents
Microsoft Word documents


Features

XML Copy Editor is an XML editor with DTD/XML Schema/RELAX NG validation, XSLT, XPath, pretty-printing, syntax highlighting, folding, tag completion and tag locking.

If Microsoft Word is installed on your computer, you can import and export Microsoft Word documents without loss of content or formatting.

The spelling and style check supports inclusive language, harmonizes preferred spellings and converts documents from Commonwealth to American spelling (and vice versa).


Getting started

The best way to get started is to select New or Open from the File menu. The editor offers a range of facilities including syntax highlighting, folding and tag completion.

The File and Edit menus (and shortcuts) will be familiar to users of office programs. The View menu allows the user to switch between documents, open documents in the browser, choose a different color scheme or adjust the font size. All XML tools are accessible via the XML menu and function keys. The Tools menu contains the Spelling and Style and Options dialogs.

The main design goal has been to avoid non-essential windows and toolbars. The toolbar contains only a handful of icons and can be hidden if it is not needed. The documents are shown as tabs in a single notebook (as in Firefox, you can close tabs using the middle mouse button).

Message boxes are only used if a user response is required. For all other communications, a message pane opens above the status bar. (You can close this pane by clicking on the ‘x’ symbol or pressing Escape.)


Templates

New documents can be based on one of a number of default templates (e.g. XHTML, XSL stylesheet, XML Schema, RELAX NG grammar, WordprocessingML document).

To add a template to the list, simply create a new document and save it with extension ‘.xml’ under ‘templates’ in the application directory. The next time you select ‘New...’ from the File menu, the template will be available. The template file does not need to be well-formed XML.


Printing

You can access Print Setup, Print Preview and Print from the File menu.

Printouts (and previews) do not take account of the appearance of the text in the edit control (color, size, proportional/non-proportional font, folding, etc.).


Working with large documents

You can select ‘Open Large Document...’ from the File menu to open documents that take too long to open in normal mode. Documents opened in large document mode are not parsed on open. Most visual editor features are disabled: the document appears in a non-proportional font in black and white, without syntax highlighting, folding, indentation guides, and so on.

If the computer runs out of memory while opening a document in normal mode, the user is given the option of opening the document in large document mode instead.

Files opened in large document mode will also be saved, unparsed, in large document mode.

When should I open a document in large document mode?

This depends entirely on the memory and processing power of your computer. It is usually best to attempt opening a document in normal mode first.


Microsoft Word documents

The options ‘Import Microsoft Word Document’ and ‘Export Microsoft Word Document’ in the File menu allow you to edit Word documents without loss of content or formatting.

Lossless conversion requires version 2003 or later of Microsoft Word. Earlier versions (2000 and XP) can be used to import Unicode text from binary Word documents, but all formatting is lost.

It is also possible to create XML-based Microsoft Word documents from scratch. To create a new Word document, select ‘New’ from the File menu and choose the WordprocessingML template. Select ‘Export Microsoft Word Document’ to save the document in binary (*.doc) format.

If you wish to launch XML Copy Editor from Microsoft Word, see Microsoft Word integration in the Appendix.


Editor

Syntax highlighting
Folding
Tag completion
Font size


Syntax highlighting

The syntax of XML documents is highlighted by default. You can choose a color scheme from the View menu; if you prefer to view your document in black and white, select ‘None’.


Folding

Folding is available both for XML elements and for embedded scripts (e.g. PHP).

If you are working with large documents, you may find that folding is fairly processor-intensive. You can achieve significant performance gains by disabling this option in the Editor tab of the Options dialog.


Tag completion

If you have selected this option, all tags you enter are closed automatically and you also will be prompted for element names, attribute keys and attribute values.

Tag completion lists all known child elements of the parent element, without regard for further constraints expressed in the DTD/XML Schema/RELAX NG grammar. The set of known child elements is derived from the document itself and updated every time the document is opened or saved, so tag completion will work even if a document is not attached to a schema.


Font size

The editor component offers a range of font sizes. You can adjust the size in the Text Size submenu of the View menu or by pressing Ctrl+I (increase font size), Ctrl+D (decrease font size) and Ctrl+0 (normal font size).

Changing the font size has no effect on the appearance of printouts (see Printing above).


XML

Validation
Association
Attribute hiding
Tag locking
Processing


Validation

XML Copy Editor supports DTD, XML Schema and RELAX NG validation.

To validate against a DTD or XML Schema, the document needs to be attached to the relevant definition or schema.

DTDs are stored locally. A number of DTDs are installed by default (e.g. the public identifier ‘-//W3C/DTD XHTML 1.0 Strict//EN’ is keyed to a local copy of the XHTML 1.0 Strict DTD), but you can also add new DTDs by editing the file ‘catalog’ in the ‘catalog’ directory and saving copies of the DTDs themselves in the ‘dtd’ directory.

As RELAX NG does not define an association mechanism, you can either select one of a number of RELAX NG preset grammars (XHTML, DocBook, XSLT, etc.) or select a grammar using a file dialog. You can supply additional preset grammars by copying them to the ‘rng’ directory.


Association

You can associate documents with DTDs, XML Schemas and XSL stylesheets.

In the absence of a standard association mechanism, RELAX NG grammars cannot be associated with instance documents in this way.


Attribute hiding

To hide attribute keys and values, select ‘Hide Attributes’ from the XML menu or press Ctrl+H. Especially in combination with tag locking, this function can help the user concentrate on the content rather than formatting and metadata.

The document content is not affected by this: rather, the editor component treats attributes as invisible text.


Tag locking

You can enable/disable tag locking by selecting ‘Lock tags’ from the XML menu or by pressing F8.

When active, tag locking blocks access to tags and attributes while facilitating cursor navigation (the cursor will skip tags and entity references) and translating literal ‘&’, ‘<’ and ‘>’ to the relevant XML entity references.

The aim is to prevent inadvertent changes to the document structure while preserving the user’s freedom to enter, delete, select, cut, copy and paste text.

You may wish to choose a color scheme that supports tag locking by de-emphasizing tags.


Processing

You can pretty-print your document, apply XSL transformations, evaluate XPath expressions and change the document encoding. The results of XSL transformations and XPath evaluations are presented in a new document.

Changing the encoding is not just a matter of converting the characters that make up the document: the parser ensures that the output document is well-formed XML (e.g. by applying character entities and adjusting the charset pseudo-attribute of XHTML meta elements).

All processing tools require well-formed input.


Spelling and Style

Introduction
Default rules
Creating rules
Creating filters


Introduction

The aim has been to create a spelling and style check that is more user-friendly and flexible but no less reliable than the ones provided by standard office applications.

To start, select ‘Spelling and Style’ from the Tools menu or press F7. At the top of the Spelling and Style Dialog, you can select a rule set (e.g. Default dictionary or Diversity) and filter (e.g. XHTML or WordprocessingML). Press ‘Report’ to check the document.

Once the table of matches and suggestions has been filled, you can tweak the report (e.g. mark some matches as ‘Ignore’, others as ‘Change’) before making the selected changes by pressing ‘Edit’.

Double-clicking items toggles the item status between ‘Change’ and ‘Ignore’. Right-clicking the item allows you to change the status of groups of matches or enter a new suggestion.

The ‘Web report’ and ‘Web summary’ options are intended for users who wish to check the matches in a browser or on paper. Only items marked ‘Change’ are listed here. To set all items to ‘Ignore’ or ‘Change’ in one step, select ‘Change all’ or ‘Ignore all’.

The spelling and style check is parser-based, not least in order to enable the user to exclude the contents of specific elements (e.g. binData elements in namespace http://schemas.microsoft.com/office/word/2003/wordml). As a result, documents that are not well-formed are checked in read-only mode.


Default rules

The default rule sets address basic concerns such as Commonwealth/American spelling and inclusive language.

The modules relating to Commonwealth/American spelling are based on advice given in the Wikipedia article ‘American and British English differences’ <http://en.wikipedia.org/wiki/American_and_British_English_differences>.

The default dictionary is based on Kevin Atkinson’s Spell Checker Oriented Word Lists <http://wordlist.sourceforge.net>.


Creating rules

To create a new rule set, create an XML document using the XML Schema ‘ruleset.xsd’.

Rule sets consist of a title, an optional copyright notice, optional lists of excluded and inherited house styles, and a list of rules. Rules are of two kinds. In most cases, each rule specifies a report string (e.g. ‘Words to avoid’) and a regular expression matching a phrase or spelling discouraged by the rule, plus a suggested replacement string.

Alternatively, rules can contain dictionaries. If at least one dictionary is selected, all words not found in the dictionary are reported as matches.

Files that are stored in the ‘rulesets’ directory are available from the left-hand drop-down menu in the Spelling and Style dialog.

Here is a sample rule set file:

<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ruleset.xsd">
  <title>Repetition</title>
  <rule>
    <report>one word</report>
    <regex>
      <find>\b(\w+) \1\b</find>
      <replace tentative="true">\1</replace>
    </regex>
  </rule>
  <rule>
    <report>two words</report>
    <regex>
      <find>\b(\w+ \w+) \1\b</find>
      <replace tentative="true">\1</replace>
    </regex>
  </rule>
</ruleset>

Rule sets are typically based on a hierarchy of modules (e.g. the default style inherits Commonwealth, Ise, Gender, etc.).

Exclusions can be used to block specific modules (e.g. to combine the default module for Commonwealth spelling with -ize/-yse rather than -ise spelling).

If available, ‘Default dictionary and style’ is selected at start-up.


Creating filters

To set up a new filter, create an XML document using the schema ‘filter.xsd’.

Filters consist of a title, optional lists of excluded and inherited filters, and a list of elements. Each element specifies a particular tag and, optionally, a map of attribute keys and values.

Here is a sample filter definition:

<?xml version="1.0" encoding="UTF-8"?>
<filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="filter.xsd">
  <title>WordprocessingML</title>
  <element>urn:schemas-microsoft-com:office:office:DocumentProperties</element>
  <element>urn:schemas-microsoft-com:office:office:CustomDocumentProperties</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:binData</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:delText</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:docPr</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:fldData</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:fonts</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:instrText</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:lists</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:shapeDefaults</element>
  <element>http://schemas.microsoft.com/office/word/2003/wordml:styles</element>
</filter>

Filter processing is namespace aware (hence the long element names).


Appendix

Microsoft Word integration


Microsoft Word integration

To launch XML Copy Editor from Microsoft Word, you can use a simple macro. The following macro will open the active document in XML Copy Editor and display the Spelling and Style dialog:

Sub xmlcopyeditor()
  On Error GoTo ErrorHandler

  Dim cmd As String
  Dim app As String
  Dim switch As String
  Dim doc As String
  Dim ruleset As String
  Dim filter As String
  Dim applicationDir As String

  app = Chr(34) _
    & "C:\Program Files\XML Copy Editor\xmlcopyeditor.exe" _
    & Chr(34)

  If Application.Documents.Count <> 0 Then
    If ActiveDocument.Path <> "" Then
      switch = "-ws"
      doc = Chr(34) _
        & ActiveDocument.Path _
        & Application.PathSeparator _
        & ActiveDocument.Name & Chr(34)
      ruleset = Chr(34) _
        & "Default dictionary and style" _
        & Chr(34)
      filter = Chr(34) _
        & "WordprocessingML" _
        & Chr(34)
    End If
  End If

  cmd = app & " " _
    & switch & " " _
    & doc & " " _
    & ruleset & " " _
    & filter

  Shell cmd, vbNormalFocus
  On Error GoTo 0
  Exit Sub

ErrorHandler:
  MsgBox "Unable to open XML Copy Editor"
End Sub