From 60e7ef0c6207706a594a667efc533e52698d86dc Mon Sep 17 00:00:00 2001 From: vlm Date: Wed, 13 Oct 2004 09:13:56 +0000 Subject: [PATCH] -X for XML DTD git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@500 59561ff5-6e30-0410-9f3c-9617f08c8826 --- ChangeLog | 3 +- asn1c/asn1c.1 | 8 ++- asn1c/asn1c.c | 8 ++- configure | 2 +- configure.in | 2 +- doc/asn1c-usage.html | 3 + doc/asn1c-usage.lyx | 24 ++++++- doc/asn1c-usage.pdf | Bin 108339 -> 108373 bytes libasn1print/asn1print.c | 141 +++++++++++++++++++++++++++++++++++++-- libasn1print/asn1print.h | 1 + 10 files changed, 178 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index c4b1ab21..0a8030c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ -0.9.7.2: 2004-Oct-12 +0.9.8: 2004-Oct-13 + * -X command line option added to asn1c to generate XML DTD. * Empty SEQUENCE and SET clauses are now allowed. 0.9.7.1: 2004-Oct-12 diff --git a/asn1c/asn1c.1 b/asn1c/asn1c.1 index b331d440..7a6f87f5 100644 --- a/asn1c/asn1c.1 +++ b/asn1c/asn1c.1 @@ -3,18 +3,19 @@ asn1c \- ASN.1 Compiler .SH SYNOPSIS asn1c [\fB\-E\fR [\fB-F\fR] | \fB\-P\fR | \fB\-R\fR] - [\fB\-S\fR\fIdir\fR] + [\fB\-S\fR\fIdir\fR] [\fB-X\fR] [\fB\-W\fR\fIdebug-\fR...] [\fB\-f\fR\fIoption\fR...] [\fB\-p\fR\fIrint-\fR...] \fIinfile\fR... .SH DESCRIPTION asn1c compiles the ASN.1 specifications into the set of -target language (C/C++) encoders and decoders for BER, DER, +target language (C/C++) encoders and decoders for BER, DER, XER, and other encoding standards. .SH OPTIONS .TP \fIOverall Options\fR \fB\-E \-F \-P \-R\fR .BI "\-S " directory +\fB\-X .TP \fIWarning Options\fR .br @@ -50,6 +51,9 @@ omitting the usual support code. .TP \fB\-S\fR \fIdirectory\fR Use the specified directory with ASN.1 skeleton files. +.TP +.B \-X +Generate the XML DTD schema for the specified ASN.1 files. .SH WARNING OPTIONS .TP .B \-Werror diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c index 98a607aa..32e6e744 100644 --- a/asn1c/asn1c.c +++ b/asn1c/asn1c.c @@ -70,7 +70,7 @@ main(int ac, char **av) { /* * Process command-line options. */ - while((ch = getopt(ac, av, "EFf:hLPp:RS:vW:")) != -1) + while((ch = getopt(ac, av, "EFf:hLPp:RS:vW:X")) != -1) switch(ch) { case 'E': print_arg__print_out = 1; @@ -146,6 +146,11 @@ main(int ac, char **av) { exit(EX_USAGE); } break; + case 'X': + print_arg__print_out = 1; /* Implicit -E */ + print_arg__fix_n_print = 1; /* Implicit -F */ + asn1_printer_flags |= APF_PRINT_XML_DTD; + break; default: usage(av[0]); } @@ -299,6 +304,7 @@ usage(const char *av0) { " -R Restrict output (tables only, no support code)\n" " -S Directory with support (skeleton?) files\n" " (Default is \"%s\")\n" +" -X Generate and print the XML DTD\n" "\n" " -Werror Treat warnings as errors; abort if any warning\n" diff --git a/configure b/configure index 78e1c9a9..75013376 100755 --- a/configure +++ b/configure @@ -1881,7 +1881,7 @@ fi # Define the identity of the package. PACKAGE=asn1c - VERSION=0.9.7.2 + VERSION=0.9.8 cat >>confdefs.h <<_ACEOF diff --git a/configure.in b/configure.in index 5c6a1e79..ce67231d 100644 --- a/configure.in +++ b/configure.in @@ -3,7 +3,7 @@ AC_INIT(libasn1parser/asn1p_y.y) AC_CANONICAL_BUILD AC_CANONICAL_TARGET AC_PREREQ(2.53) -AM_INIT_AUTOMAKE(asn1c, 0.9.7.2) +AM_INIT_AUTOMAKE(asn1c, 0.9.8) AM_MAINTAINER_MODE diff --git a/doc/asn1c-usage.html b/doc/asn1c-usage.html index fcc2980c..e9096bfc 100644 --- a/doc/asn1c-usage.html +++ b/doc/asn1c-usage.html @@ -692,6 +692,9 @@ ting the usual support code. -S <directory> Use the specified directory with ASN.1 skeleton files. +-X +Generate the XML DTD schema for the specified ASN.1 modules. + Warning Options Description diff --git a/doc/asn1c-usage.lyx b/doc/asn1c-usage.lyx index 012503c0..c6b377f9 100644 --- a/doc/asn1c-usage.lyx +++ b/doc/asn1c-usage.lyx @@ -71,7 +71,7 @@ status Open \backslash lhead{Document describes \backslash -href{http://lionet.info/soft/asn1c-0.9.6.tar.gz}{asn1c-0.9.6}} +href{http://lionet.info/asn1c}{asn1c-0.9.8}} \layout Standard \backslash @@ -1341,7 +1341,7 @@ collapsed false \begin_inset Tabular - + @@ -1452,7 +1452,7 @@ Restrict the compiler to generate only the ASN.1 tables, omit- ting the usual \end_inset - + \begin_inset Text @@ -1474,6 +1474,24 @@ Use the specified directory with ASN.1 skeleton files. \end_inset + + +\begin_inset Text + +\layout Standard + +-X +\end_inset + + +\begin_inset Text + +\layout Standard + +Generate the XML DTD for the specified ASN.1 modules. +\end_inset + + \begin_inset Text diff --git a/doc/asn1c-usage.pdf b/doc/asn1c-usage.pdf index df871b0c3cc688f9a355e1f9d1147ebd3270b099..bab14c4451be17afee8fae99e23f561afb6afd8c 100644 GIT binary patch delta 14669 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 delta 14581 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 diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c index 4132204f..a6c3edb5 100644 --- a/libasn1print/asn1print.c +++ b/libasn1print/asn1print.c @@ -10,7 +10,7 @@ #include "asn1print.h" #define INDENT(fmt, args...) do { \ - int __i = level; while(__i--) putchar(' '); \ + int __i = level; while(__i--) printf(" "); \ printf(fmt, ##args); \ } while(0) @@ -22,8 +22,8 @@ static int asn1print_params(asn1p_paramlist_t *pl,enum asn1print_flags flags); static int asn1print_with_syntax(asn1p_wsyntx_t *wx, enum asn1print_flags flags); static int asn1print_constraint(asn1p_constraint_t *, enum asn1print_flags); static int asn1print_value(asn1p_value_t *val, enum asn1print_flags flags); -static int asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, - int level); +static int asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, int level); +static int asn1print_expr_dtd(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, int level); /* * Print the contents of the parsed ASN tree. @@ -38,6 +38,9 @@ asn1print(asn1p_t *asn, enum asn1print_flags flags) { return -1; } + if(flags & APF_PRINT_XML_DTD) + printf("\n\n"); + TQ_FOR(mod, &(asn->modules), mod_next) { if(modno++) printf("\n"); asn1print_module(asn, mod, flags); @@ -50,12 +53,28 @@ static int asn1print_module(asn1p_t *asn, asn1p_module_t *mod, enum asn1print_flags flags) { asn1p_expr_t *tc; + if(flags & APF_PRINT_XML_DTD) + printf("\n\n"); + + TQ_FOR(tc, &(mod->members), next) { + asn1print_expr_dtd(asn, mod, tc, flags, 0); + } + + return 0; + } + printf("DEFINITIONS"); if(mod->module_flags & MSF_TAG_INSTRUCTIONS) @@ -442,7 +461,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri int SEQ_OF = 0; if(flags & APF_LINE_COMMENTS) - INDENT("-- #line %d\n", tc->_lineno); + INDENT("-- #line %d\n", tc->_lineno); if(tc->Identifier) INDENT("%s", tc->Identifier); @@ -539,7 +558,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri /* * Print the expression as it were a stand-alone type. */ - asn1print_expr(asn, mod, se, flags, level + 4); + asn1print_expr(asn, mod, se, flags, level + 1); if((se->marker.flags & EM_DEFAULT) == EM_DEFAULT) { printf(" DEFAULT "); asn1print_value(se->marker.default_value, flags); @@ -614,3 +633,115 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri return 0; } + +static int +asn1print_expr_dtd(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *expr, enum asn1print_flags flags, int level) { + asn1p_expr_t *se; + int expr_unordered = 0; + + switch(expr->meta_type) { + case AMT_TYPE: + case AMT_TYPEREF: + break; + default: + if(expr->expr_type == A1TC_UNIVERVAL) + break; + return 0; + } + + if(!expr->Identifier) return 0; + + if(expr->expr_type == ASN_CONSTR_CHOICE + || expr->expr_type == ASN_CONSTR_SEQUENCE_OF + || expr->expr_type == ASN_CONSTR_SET_OF + || expr->expr_type == ASN_CONSTR_SET + || expr->expr_type == ASN_BASIC_INTEGER + || expr->expr_type == ASN_BASIC_ENUMERATED) { + expr_unordered = 1; + } + + if(flags & APF_LINE_COMMENTS) + INDENT("\n", expr->_lineno); + INDENT("Identifier); + + if(expr->expr_type == A1TC_REFERENCE) { + se = asn1f_find_terminal_type_ex(asn, expr); + if(!se) { + printf("(ANY)"); + return 0; + } + expr = se; + } + + if(TQ_FIRST(&expr->members)) { + int extensible = 0; + printf(" ("); + TQ_FOR(se, &(expr->members), next) { + if(se->expr_type == A1TC_EXTENSIBLE) { + extensible = 1; + continue; + } else if(!se->Identifier + && se->expr_type == A1TC_REFERENCE) { + asn1print_ref(se->reference, flags); + } else if(se->Identifier) { + printf("%s", se->Identifier); + } else { + printf("ANY"); + } + if(expr->expr_type != ASN_CONSTR_SET + && expr->expr_type != ASN_CONSTR_CHOICE + && expr->expr_type != ASN_BASIC_INTEGER + && expr->expr_type != ASN_BASIC_ENUMERATED) { + if(expr_unordered) + printf("*"); + else if(se->marker.flags) + printf("?"); + } + if(TQ_NEXT(se, next) + && TQ_NEXT(se, next)->expr_type != A1TC_EXTENSIBLE) { + printf(expr_unordered?"|":", "); + } + } + if(extensible) { + printf(expr_unordered?"|":", "); + printf("ANY"); + if(expr->expr_type != ASN_CONSTR_SET + && expr->expr_type != ASN_CONSTR_CHOICE + && expr->expr_type != ASN_BASIC_INTEGER + && expr->expr_type != ASN_BASIC_ENUMERATED) + printf("*"); + } + + printf(")"); + if(expr->expr_type == ASN_CONSTR_SET) + printf("*"); + + } else if((expr->expr_type & ASN_CONSTR_MASK) + || expr->expr_type == ASN_BASIC_NULL) { + printf(" EMPTY"); + } else if(expr->expr_type == A1TC_UNIVERVAL) { + printf(" EMPTY"); + } else if(expr->expr_type == ASN_TYPE_ANY) { + printf(" ANY"); + } else if(expr->expr_type == ASN_BASIC_BIT_STRING + || expr->expr_type == ASN_BASIC_OBJECT_IDENTIFIER + || expr->expr_type == ASN_BASIC_RELATIVE_OID + || expr->expr_type == ASN_BASIC_UTCTime + || expr->expr_type == ASN_BASIC_GeneralizedTime + ) { + printf(" (#CDATA)"); + } else { + printf(" (#PCDATA)"); + } + printf(">\n"); + + /* + * Display the descendants (children) of the current type. + */ + TQ_FOR(se, &(expr->members), next) { + if(se->expr_type == A1TC_EXTENSIBLE) continue; + asn1print_expr_dtd(asn, mod, se, flags, level + 1); + } + + return 0; +} diff --git a/libasn1print/asn1print.h b/libasn1print/asn1print.h index c24e58e8..51233e99 100644 --- a/libasn1print/asn1print.h +++ b/libasn1print/asn1print.h @@ -5,6 +5,7 @@ enum asn1print_flags { APF_NOFLAGS, APF_LINE_COMMENTS = 0x01, /* Include line comments */ APF_DEBUG_CONSTRAINTS = 0x02, /* Explain constraints */ + APF_PRINT_XML_DTD = 0x04, /* Generate XML DTD */ }; /*