new WITH SYNTAX clause parsing

diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index 992a344..423a5fa 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -412,15 +412,21 @@
 asn1print_with_syntax(asn1p_wsyntx_t *wx, enum asn1print_flags flags) {
 	if(wx) {
 		asn1p_wsyntx_chunk_t *wc;
-		printf(" WITH SYNTAX {");
 		TQ_FOR(wc, &(wx->chunks), next) {
-			if(wc->ref) {
-				asn1print_ref(wc->ref, flags);
-			} else {
-				fwrite(wc->buf, 1, wc->len, stdout);
-			}
+		  switch(wc->type) {
+		  case WC_LITERAL:
+			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);
+			printf("]");
+			break;
+		  }
 		}
-		printf("}\n");
 	}
 
 	return 0;
@@ -651,8 +657,11 @@
 		}
 	}
 
-	if(tc->with_syntax)
+	if(tc->with_syntax) {
+		printf(" WITH SYNTAX {");
 		asn1print_with_syntax(tc->with_syntax, flags);
+		printf("}\n");
+	}
 
 	if(!SEQ_OF && tc->constraints) {
 		printf(" ");