parsing WITH SYNTAX clauses


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1074 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index 865d90b..ced31db 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -106,7 +106,7 @@
 
 	TQ_FOR(tc, &(mod->members), next) {
 		asn1print_expr(asn, mod, tc, flags, 0);
-		if(flags & APF_DEBUG_CONSTRAINTS)
+		if(flags & APF_PRINT_CONSTRAINTS)
 			printf("\n");
 		else
 			printf("\n\n");
@@ -416,11 +416,9 @@
 		  switch(wc->type) {
 		  case WC_LITERAL:
 		  case WC_WHITESPACE:
+		  case WC_FIELD:
 			printf("%s", wc->content.token);
 			break;
-		  case WC_REFERENCE:
-			asn1print_ref(wc->content.ref, flags);
-			break;
 		  case WC_OPTIONALGROUP:
 			printf("[");
 			asn1print_with_syntax(wc->content.syntax,flags);
@@ -690,7 +688,7 @@
 	/*
 	 * The following section exists entirely for debugging.
 	 */
-	if(flags & APF_DEBUG_CONSTRAINTS
+	if(flags & APF_PRINT_CONSTRAINTS
 	&& tc->expr_type != A1TC_EXTENSIBLE) {
 		asn1p_expr_t *top_parent;
 
@@ -713,6 +711,41 @@
 		printf("\n");
 	}
 
+	if(flags & APF_PRINT_CLASS_MATRIX
+	&& tc->expr_type == A1TC_CLASSDEF) do {
+		int r, col, maxidlen;
+		if(tc->object_class_matrix.rows == 0) {
+			printf("\n-- Class matrix is empty");
+			break;
+		}
+		printf("\n-- Class matrix has %d entr%s:\n",
+				tc->object_class_matrix.rows,
+				tc->object_class_matrix.rows==1 ? "y" : "ies");
+		maxidlen = tc->object_class_matrix.max_identifier_length;
+		for(r = -1; r < tc->object_class_matrix.rows; r++) {
+			struct asn1p_ioc_row_s *row;
+			row = tc->object_class_matrix.row[r<0?0:r];
+			if(r < 0) printf("--    %s", r > 9 ? " " : "");
+			else printf("-- [%*d]", r > 9 ? 2 : 1, r+1);
+			for(col = 0; col < row->columns; col++) {
+				struct asn1p_ioc_cell_s *cell;
+				cell = &row->column[col];
+				if(r < 0) {
+					printf("[%*s]", maxidlen,
+						cell->field->Identifier);
+					continue;
+				}
+				if(!cell->value) {
+					printf(" %*s ", maxidlen, "<no entry>");
+					continue;
+				}
+				printf(" %*s ", maxidlen,
+					cell->value->Identifier);
+			}
+			printf("\n");
+		}
+	} while(0);
+
 	return 0;
 }