Difference between revisions of "Emacs"

From Apertium
Jump to navigation Jump to search
Line 21: Line 21:
 
Also, if you like having all &lt;i&gt; elements aligned at eg. column 25, the minor mode lets you do <code>M-x align</code> on a region to achieve that, and also aligns &lt;p&gt; to 10 and &lt;r&gt; to 44 (for bidix). These numbers are customizable with <code>M-x customize-group RET dix</code>. (Ie. there's no extra indentation function, but then nxml already has that.)
 
Also, if you like having all &lt;i&gt; elements aligned at eg. column 25, the minor mode lets you do <code>M-x align</code> on a region to achieve that, and also aligns &lt;p&gt; to 10 and &lt;r&gt; to 44 (for bidix). These numbers are customizable with <code>M-x customize-group RET dix</code>. (Ie. there's no extra indentation function, but then nxml already has that.)
   
== Relax NG-schemas ==
+
== Validation (Relax NG-schemas) ==
 
nxml-mode uses compact Relax NG schemas for validation (without these, XML is only checked for well-formedness by nxml-mode).
for validation in nxml-mode are available at:
 
  +
* [http://www.student.uib.no/~kun041/doc/dix.rng dix.rng]
 
* [http://www.student.uib.no/~kun041/doc/modes.rng modes.rng]
+
(There is a non-compact [http://www.student.uib.no/~kun041/doc/dix.rng dix.rng here], while transfer.rng and modes.rng are in trunk/apertium/apertium.)
  +
* [http://www.student.uib.no/~kun041/doc/transfer.rng transfer.rng]
 
  +
You can make compact Relax NG schemas (<code>.rnc</code>) using [http://www.thaiopensource.com/relaxng/trang.html trang]. Use a script like this to keep all your rnc's up-to-date:
(without these, XML is only checked for well-formedness by nxml-mode)
 
  +
  +
cd /path/to/trunk/apertium/apertium
  +
for DTD in `ls *.dtd`; do
  +
OUT=`echo $DTD | sed 's/dtd$/rnc/'`;
  +
CMD="java -jar /path/to/trang.jar $DTD $OUT"
  +
echo $CMD
  +
eval $CMD
  +
done
   
 
== See also ==
 
== See also ==

Revision as of 08:57, 5 March 2010

Emacs has a nice xml editing mode called nXML, with syntax highlighting, movement commands to navigate through the XML (out of, into, across elements, etc.).

Note: since the dix-files can often get rather huge, syntax highlighting can make nXML a bit slow (at least if you're eg. planning on running a keyboard macro 10000 times). To speed it up, just temporarily turn off syntax highlighting with by typing M-x set-variable RET nxml-syntax-highlight-flag RET nil RET. Alternatively, use the dix.el function C-c H (dix-toggle-syntax-highlighting).

dix-mode

In svn there is a minor mode for editing .dix files, dix.el (or use svn co https://apertium.svn.sourceforge.net/svnroot/apertium/trunk/apertium-tools). It uses nxml-mode.

Usage:

 (add-to-list 'load-path "/path/to/dix.el")
 (require 'dix)
 (add-hook 'nxml-mode-hook
 	  (lambda () (if (string-match "\\.dix$" buffer-file-name) (dix-mode 1))))

I use Apertium-dixtools-formatted dix, not all functions have been tested in the regular format.

The minor mode adds keyboard shortcuts C-c L and C-c R which make LR or RL restricted copies of <e>'s (use C-TAB to cycle between restriction possibilities LR, RL or none, C-c C creates a copy without modifying restrictions), C-c G which finds the pardef of a dictionary entry (and lets you go back with C-u C-SPC) and C-c S which sorts a pardef by its right-hand-side <r>. M-n and M-p move to the next and previous "important bits" of <e>-elements (just try it!). Inside a pardef, C-c A shows all usages of that pardef within the dictionaries represented by the variable `dix-dixfiles', while C-c D gives you a list of all pardefs which use these suffixes (where a suffix is the contents of an <l>-element). The space bar inserts a <b/> in <r>, <l> or <i> elements (o/w a regular space).

Also, if you like having all <i> elements aligned at eg. column 25, the minor mode lets you do M-x align on a region to achieve that, and also aligns <p> to 10 and <r> to 44 (for bidix). These numbers are customizable with M-x customize-group RET dix. (Ie. there's no extra indentation function, but then nxml already has that.)

Validation (Relax NG-schemas)

nxml-mode uses compact Relax NG schemas for validation (without these, XML is only checked for well-formedness by nxml-mode).

(There is a non-compact dix.rng here, while transfer.rng and modes.rng are in trunk/apertium/apertium.)

You can make compact Relax NG schemas (.rnc) using trang. Use a script like this to keep all your rnc's up-to-date:

cd /path/to/trunk/apertium/apertium
for DTD in `ls *.dtd`; do
    OUT=`echo $DTD | sed 's/dtd$/rnc/'`;
    CMD="java -jar /path/to/trang.jar $DTD $OUT"
    echo $CMD
    eval $CMD
done

See also