print double parametrization


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@649 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index c8d2eb5..4a0379c 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -10,7 +10,10 @@
 #include "asn1print.h"
 
 #define	INDENT(fmt, args...)	do {					\
-		int __i = level; while(__i--) printf("    ");		\
+		if(!(flags & APF_NOINDENT)) {				\
+			int __i = level;				\
+			while(__i--) printf("    ");			\
+		}							\
 		printf(fmt, ##args);					\
 	} while(0)
 
@@ -460,7 +463,7 @@
 asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, int level) {
 	int SEQ_OF = 0;
 
-	if(flags & APF_LINE_COMMENTS)
+	if(flags & APF_LINE_COMMENTS && !(flags & APF_NOINDENT))
 		INDENT("-- #line %d\n", tc->_lineno);
 	if(tc->Identifier)
 		INDENT("%s", tc->Identifier);
@@ -473,7 +476,7 @@
 	&& tc->meta_type != AMT_VALUESET
 	&& tc->expr_type != A1TC_EXTENSIBLE) {
 		if(level) {
-			if(tc->Identifier)
+			if(tc->Identifier && !(flags & APF_NOINDENT))
 				printf("\t");
 		} else {
 			printf(" ::=");
@@ -496,9 +499,10 @@
 		SEQ_OF = 1; /* Equivalent to SET OF for printint purposes */
 		printf("    COMPONENTS OF");
 		break;
+	case A1TC_PARAMETRIZED:
+		flags |= APF_NOINDENT;
 	case A1TC_REFERENCE:
 	case A1TC_UNIVERVAL:
-	case A1TC_PARAMETRIZED:
 		break;
 	case A1TC_CLASSDEF:
 		printf(" CLASS");
@@ -528,7 +532,8 @@
 	}
 
 	if(tc->reference) {
-		printf(" ");
+		if(!(flags & APF_NOINDENT))
+			printf(" ");
 		asn1print_ref(tc->reference, flags);
 	}
 
@@ -548,10 +553,17 @@
 		int put_braces = !SEQ_OF; /* Don't need 'em, if SET OF... */
 
 		if(put_braces) {
-			printf(" {");
-			if(TQ_FIRST(&tc->members))
-				printf("\n");
-			else	printf(" }");
+			if(flags & APF_NOINDENT) {
+				printf("{");
+				if(!TQ_FIRST(&tc->members))
+					printf("}");
+			} else {
+				printf(" {");
+				if(TQ_FIRST(&tc->members))
+					printf("\n");
+				else
+					printf(" }");
+			}
 		}
 
 		TQ_FOR(se, &(tc->members), next) {
@@ -568,12 +580,14 @@
 			}
 			if(TQ_NEXT(se, next)) {
 				printf(",");
-				INDENT("\n");
+				if(!(flags & APF_NOINDENT))
+					INDENT("\n");
 			}
 		}
 
 		if(put_braces && TQ_FIRST(&tc->members)) {
-			printf("\n");
+			if(!(flags & APF_NOINDENT))
+				printf("\n");
 			INDENT("}");
 		}
 	}
@@ -605,7 +619,7 @@
 	}
 
 	/*
-	 * The following section exists entirely for debugging only.
+	 * The following section exists entirely for debugging.
 	 */
 	if(flags & APF_DEBUG_CONSTRAINTS
 	&& tc->expr_type != A1TC_EXTENSIBLE) {
diff --git a/libasn1print/asn1print.h b/libasn1print/asn1print.h
index 51233e9..336ba1e 100644
--- a/libasn1print/asn1print.h
+++ b/libasn1print/asn1print.h
@@ -6,6 +6,7 @@
 	APF_LINE_COMMENTS	= 0x01, /* Include line comments */
 	APF_DEBUG_CONSTRAINTS	= 0x02,	/* Explain constraints */
 	APF_PRINT_XML_DTD	= 0x04,	/* Generate XML DTD */
+	APF_NOINDENT		= 0x08,	/* Disable indentation */
 };
 
 /*