Introduction
~~~~~~~~~~~~

libIDL is a small library for creating parse trees of CORBA v2.2
compliant Interface Definition Language (IDL) files, which is a
specification for defining portable interfaces. See the file NEWS for
the most recent changes, which may require code updates.


What it Does
~~~~~~~~~~~~~

By calling IDL_parse_filename, libIDL performs compilation phases from
lexical analysis to nearly full semantic analysis and some
optimization, and will attempt to generate meaningful errors and
warnings for invalid or deprecated features, which can be redirected
using callbacks.  libIDL supports some extensions to standard IDL,
including declarations spec tags which can assign attributions to
certain IDL constructs.


Emacs Syntax Highlighting for IDL Code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you are using Emacs 20.x and do not have decent syntax highlighting
in your IDL mode, you can use the following Emacs lisp to add
IDL-specific highlighting using font-lock mode:

(font-lock-add-keywords
 'idl-mode
 `(("^#[ 	]*error[ 	]+\\(.+\\)" 1 'font-lock-warning-face prepend)
   ("^#[ 	]*\\(include\\)[ 	]+\\(<[^>\"\n]*>?\\)" 2 'font-lock-string-face)
   ("^#[ 	]*define[ 	]+\\(\\sw+\\)(" 1 'font-lock-function-name-face)
   ("^#[ 	]*\\(elif\\|if\\)\\>"
    ("\\<\\(defined\\)\\>[ 	]*(?\\(\\sw+\\)?" nil nil
     (1 'font-lock-reference-face)
     (2 'font-lock-variable-name-face nil t)))
   ("\\(__declspec\\)[ 	]*(\\([^)]+\\))"
    (1 'font-lock-reference-face)
    (2 'font-lock-variable-name-face))
   ("^#[ 	]*\\(\\sw+\\)\\>[ 	]*\\(\\sw+\\)?"
    (1 'font-lock-reference-face)
    (2 'font-lock-variable-name-face nil t))
   ("\\<\\(raises\\)\\>" 1 'font-lock-keyword-face)
   ("[ 	]*\\([A-Za-z][A-Za-z0-9_]*\\)[ 	]*(" 1 'font-lock-function-name-face)
   ("\\<\\(any\\|boolean\\|char\\|const\\|double\\|enum\\|fixed\\|float\\|interface\\|long\\|module\\|native\\|octet\\|Object\\|sequence\\|short\\|string\\|struct\\|unsigned\\|union\\|void\\|wchar\\|wstring\\)\\>" 1 'font-lock-type-face)
   ("\\<\\(attribute\\|case\\|context\\|default\\|exception\\|FALSE\\|in\\|inout\\|oneway\\|out\\|readonly\\|switch\\|TRUE\\|typedef\\)\\>" 1 'font-lock-keyword-face)) 'set)
(add-hook 'idl-mode-hook '(lambda () (font-lock-mode 1)))
