summaryrefslogtreecommitdiff
path: root/libIDL2.texi
diff options
context:
space:
mode:
Diffstat (limited to 'libIDL2.texi')
-rw-r--r--libIDL2.texi359
1 files changed, 359 insertions, 0 deletions
diff --git a/libIDL2.texi b/libIDL2.texi
new file mode 100644
index 0000000..0d4ca97
--- /dev/null
+++ b/libIDL2.texi
@@ -0,0 +1,359 @@
+\input texinfo @c -*- mode: texinfo -*-
+@setfilename libIDL2.info
+@settitle libIDL2
+@setchapternewpage odd
+
+@ifinfo
+@dircategory Libraries
+@direntry
+* libIDL2: (libIDL2). Interface Definition Language parsing library.
+@end direntry
+
+Copyright 1998 Andrew T. Veliath
+@end ifinfo
+
+@titlepage
+@title libIDL2
+@author Andrew T. Veliath
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1998, 1999 Andrew T. Veliath
+@end titlepage
+
+@node Top, , , (dir)
+@ifinfo
+This file documents the Interface Definition Language (IDL) parsing
+library, libIDL.
+
+This document applies to version 0.6 of libIDL. It is still incomplete.
+@end ifinfo
+
+@menu
+* Overview:: General overview.
+* Example:: Simple example.
+* Reference:: Data structure and function reference.
+
+* Function Index:: Index of available functions.
+@end menu
+
+@node Overview, Example, top, top
+@chapter Overview
+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.
+
+@node Example, Reference, Overview, top
+@chapter Usage
+The following C program using libIDL will parse an IDL file and print
+the Repository IDs of the interfaces in the IDL module.
+
+@example
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <libIDL/IDL.h>
+
+gboolean
+print_repo_id (IDL_tree_func_data *tfd, gpointer user_data)
+@{
+ char *repo_id = NULL;
+
+ if (IDL_NODE_TYPE (tfd->tree) == IDLN_INTERFACE)
+ repo_id = IDL_IDENT_REPO_ID (IDL_INTERFACE (tfd->tree).ident);
+
+ if (repo_id)
+ printf ("%s\n", repo_id);
+
+ return TRUE;
+@}
+
+int
+main (int argc, char *argv[])
+@{
+ IDL_tree tree;
+ IDL_ns ns;
+ char *fn;
+ int rv;
+
+ if (argc < 2) @{
+ fprintf (stderr, "usage: %s <file>\n", argv[0]);
+ exit (1);
+ @}
+ fn = argv[1];
+
+ rv = IDL_parse_filename (fn, NULL, NULL, &tree, &ns, 0, IDL_WARNING1);
+
+ if (rv == IDL_ERROR || rv < 0) @{
+ if (rv < 0)
+ perror (fn);
+ exit (1);
+ @}
+ IDL_tree_walk_in_order (tree, print_repo_id, NULL);
+ IDL_ns_free (ns);
+ IDL_tree_free (tree);
+
+ return 0;
+@}
+@end example
+
+@node Reference, Function Index, Example, top
+@chapter Reference
+
+@menu
+* Data Types:: Constructed data types used.
+* Functions:: Functions provided.
+* Extensions:: Extensions provided to standard IDL.
+* Tree Structure:: The C IDL tree representation.
+@end menu
+
+@node Data Types, Functions, , Reference
+@chapter Data Types
+
+@itemize @bullet
+@item
+IDL_tree
+
+A semi-opaque tree which encapsulates an IDL tree node. Must be freed
+with IDL_tree_free (@pxref{Functions}).
+
+@item
+IDL_ns
+
+A semi-opaque structure which encapsulates the IDL module namespace.
+Must be freed with IDL_ns_free (@pxref{Functions}).
+
+@item
+IDL_msg_callback
+
+Defined as typedef int (*IDL_msg_callback)(int LEVEL, int NUM, int LINE,
+const char *NAME, const char *ERR). A function of this type can be
+optionally passed to IDL_parse_filename to be called when a parse
+warning or error occurs.
+
+@item
+IDL_tree_func
+
+Defined as typedef gboolean (*IDL_tree_func) (IDL_tree_func_data
+*TREE_FUNC_DATA, gpointer DATA). A function of this type is passed to
+IDL_tree_walk_in_order to traverse the tree. TREE_FUNC_DATA contains an
+up traversal hierarchy of the current traversal, as well as some state
+information. The current node being processed is given by
+TREE_FUNC_DATA->tree.
+
+@end itemize
+
+@node Functions, Extensions, Data Types, Reference
+@chapter Functions
+
+@itemize @bullet
+@item
+Function: int IDL_parse_filename (const char *NAME, const char *CPP_ARGS,
+IDL_msg_callback CALLBACK, IDL_tree *TREE, IDL_ns *NS, unsigned long FLAGS,
+int MAX_MESSAGE_LEVEL)
+@findex IDL_parse_filename
+
+Parse an file containing an IDL definition into a parse tree. Returns
+IDL_SUCCESS if successful, or IDL_ERROR if there was a parse error. If
+-1 is returned, errno will be set accordingly. Usually, if IDL_ERROR is
+returned, all one needs to do is exit with a non-zero status, since
+libIDL will probably have made the reason for failure explictly known.
+
+@itemize @minus
+@item
+NAME: required, specifies the filename to be parsed.
+
+@item
+CPP_ARGS: optional, if non-NULL, specifies extra arguments to pass to
+the C preprocessor. The most common type of string would be in the form
+of -I<dir> to include additional directories for file inclusion search,
+or defines in the form of -D<define>=<value>.
+
+@item
+CALLBACK: optional, if non-NULL, this function will be called when a
+warning or error is generated (@pxref{Data Types}). If not given,
+warnings and errors will be sent to stderr. All errors and warning,
+including callbacks, are subject to MAX_MESSAGE_LEVEL as described
+below.
+
+@item
+TREE: optional, if non-NULL, points to an IDL_tree * to return the
+generated tree which must be freed with IDL_tree_free. If NULL, the
+tree is freed and not returned.
+
+@item
+NS: optional, if non-NULL, points to an IDL_ns * to return the namespace
+tree which must be freed with IDL_ns_free. If NULL, the tree is freed
+and not returned. If TREE is NULL, then NS must also be NULL, since the
+namespace is created as the AST is generated.
+
+@item
+FLAGS: optional, specifies extra flags for parsing or 0. The various
+flags are described here.
+
+@item
+General Parse Flags
+
+@itemize @minus
+@item
+IDLF_NO_EVAL_CONST: instructs the parser not to evaluate constant expressions.
+
+@item
+IDLF_COMBINE_REOPENED_MODULES: instructs the parser to combine modules
+defined later in the IDL code in the first module node in the tree.
+
+@item
+IDLF_PREFIX_FILENAME: instructs the parser to prefix the filename to the
+namespace.
+
+@item
+IDLF_IGNORE_FORWARDS: instructs the parser to not try to resolve and
+print messages for unresovled forward declarations.
+
+@item
+IDLF_PEDANTIC: instructs the parser to display stricter errors and
+warnings.
+
+@item
+IDLF_INHIBIT_TAG_ONLY: only tag inhibited nodes, do not remove them.
+Use IDL_tree_remove_inhibits to remove them at a later time.
+
+@item
+IDLF_INHIBIT_INCLUDES: causes libIDL to automatically inhibit IDL trees
+in included files.
+@end itemize
+
+@item
+Syntax Extension Flags
+
+@itemize @minus
+@item
+IDLF_TYPECODES: understand the `TypeCode' keyword extension.
+
+@item
+IDLF_XPIDL: enable XPIDL syntax.
+
+@item
+IDLF_PROPERTIES: enable support for node properties.
+
+@item
+IDLF_CODEFRAGS: enable support for embedded code fragments.
+@end itemize
+
+@item
+MAX_MESSAGE_LEVEL:
+
+This specifies the maximum message level to display. Possible values
+are -1 for no messages, IDL_ERROR for errors only, or IDL_WARNING1,
+IDL_WARNING2 and IDL_WARNING3. A typical value is IDL_WARNING1, which
+will limit verbosity. IDL_WARNINGMAX is defined as the value in which
+all messages will be displayed.
+
+@end itemize
+
+@item
+Function: void IDL_tree_walk_in_order (IDL_tree ROOT, IDL_tree_func
+FUNC, gpointer DATA)
+@findex IDL_tree_walk_in_order
+
+Walks an IDL_tree, calling FUNC for every node. If the FUNC returns
+TRUE for a particular node, that particular node will also be traversed,
+if FALSE is returned, that particular node will be skipped, in the
+assumption that the function has taken care of it.
+
+@itemize @minus
+@item
+ROOT: required, specifies the IDL_tree to traverse.
+
+@item
+FUNC: required, specifies the callback function (@pxref{Data Types}).
+
+@item
+DATA: optional, specifies the callback data.
+
+@end itemize
+
+@item
+Function: void IDL_tree_free (IDL_tree TREE)
+@findex IDL_tree_free
+
+Frees the memory associated with TREE.
+
+@item
+Function: void IDL_ns_free (IDL_ns NS)
+@findex IDL_ns_free
+
+Frees the memory associated with NS.
+
+@end itemize
+
+@node Extensions, Tree Structure, Functions, Reference
+@chapter Extensions
+This page documents extensions to standard IDL which libIDL will
+understand. To maintain portability, it is recommended that these
+extensions are only used with some sort of C preprocessor define so they
+can be conditionally omitted.
+
+@itemize @bullet
+@item
+__declspec (<spec>)
+
+This token assigns special attributions to particular IDL constructs.
+
+@itemize @minus
+@item
+inhibit
+
+If __declspec (inhibit) is placed before a definition or export, that
+module or interface definition will be removed from the tree. The tree
+is only deleted when the IDL_ns component is freed, so it can be
+traversed from the namespace component for extended information, but
+will be omitted from the primary tree.
+
+@end itemize
+
+@end itemize
+
+@node Tree Structure, , Extensions, Reference
+@chapter Tree Structure
+
+@node Function Index, , Reference, top
+@chapter Function Index
+@printindex fn
+
+@contents
+@bye