зеркало из https://github.com/mozilla/gecko-dev.git
76 строки
3.7 KiB
Plaintext
76 строки
3.7 KiB
Plaintext
libIDL README
|
|
~~~~~~~~~~~~~
|
|
|
|
Introduction
|
|
~~~~~~~~~~~~
|
|
|
|
libIDL is a library licensed under the GNU LGPL for creating trees of
|
|
CORBA Interface Definition Language (IDL) files, which is a
|
|
specification for defining portable interfaces. libIDL was initially
|
|
written for ORBit (the ORB from the GNOME project, and the primary
|
|
means of libIDL distribution). However, the functionality was
|
|
designed to be as reusable and portable as possible.
|
|
|
|
It is written in C, and the aim is to retain the ability to compile it
|
|
on a system with a standard C compiler. Preprocessed parser files are
|
|
included so you are not forced to rebuild the parser, however an
|
|
effort is made to keep the parser and lexer compatible with standard
|
|
Unix yacc and lex (although bison and flex are more efficient, and are
|
|
used for the preprocessed parsers in the distribution).
|
|
|
|
With libIDL, you can parse an IDL file which will be automatically run
|
|
through the C preprocessor (on systems with one available), and have
|
|
detailed error and warning messages displayed. On a compilation
|
|
without errors, the tree is returned to the custom application.
|
|
libIDL performs compilation phases from lexical analysis to nearly
|
|
full semantic analysis with some optimizations, and will attempt to
|
|
generate meaningful errors and warnings for invalid or deprecated IDL.
|
|
|
|
libIDL exports functionality used to generate detailed conforming
|
|
error and warning messages in gcc-like format, and also comes with a
|
|
default backend to generate IDL into a file or string (useful for
|
|
customized messages or comments in the output). The IDL backend is
|
|
complete enough that most generated IDL can be reparsed by libIDL
|
|
without errors. libIDL returns separate syntax and namespace trees,
|
|
and includes functionality to hide syntactical information from the
|
|
primary tree, while keeping it accessible through the namespace for
|
|
type information and name lookup.
|
|
|
|
Optional extensions to standard IDL can be enabled using parse flags.
|
|
These include node properties, embedded code fragments, and XPIDL.
|
|
Nodes can also have declarations tags which assign particular
|
|
attributions to certain IDL constructs to further facilitate custom
|
|
applications.
|
|
|
|
If you are upgrading to a new version, please see the NEWS file for
|
|
any changes which may affect code.
|
|
|
|
|
|
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)))
|