From 35bbe74272e8a4e0e4bbc2398107ce5228c5b381 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Tue, 15 Mar 2016 13:33:03 -0400
Subject: argv.h: usage screen generator: fix typesetting of spanning
 paradigms.

---
 src/internal/argv/argv.h | 31 +++++++++++++++++++++++++------
 1 file changed, 25 insertions(+), 6 deletions(-)

(limited to 'src/internal')

diff --git a/src/internal/argv/argv.h b/src/internal/argv/argv.h
index cf24c56..90961b8 100644
--- a/src/internal/argv/argv.h
+++ b/src/internal/argv/argv.h
@@ -910,6 +910,9 @@ static void argv_usage(
 			}
 		}
 
+		para      = 0;
+		next_para = 0;
+
 		if (option->argname) {
 			if (option->optarg == ARGV_OPTARG_OPTIONAL)
 				fprintf(file,"[%s]%-*c",
@@ -919,7 +922,6 @@ static void argv_usage(
 				fprintf(file,"%s%-*c",
 					option->argname,
 					(int)(paralen-strlen(option->argname)),' ');
-			para = (char *)0;
 		} else if (option->paradigm && (rparalen <= paralen)) {
 			if (option->optarg == ARGV_OPTARG_OPTIONAL)
 				fprintf(file,"[{%s}]%-*c",
@@ -929,7 +931,6 @@ static void argv_usage(
 				fprintf(file,"{%s}%-*c",
 					option->paradigm,
 					(int)(paralen-strlen(option->paradigm)-rbblen),' ');
-			para = (char *)0;
 		} else if (option->paradigm) {
 			if (!paradigm && !(paradigm = calloc(1,mparalen))) {
 				fputc('\n',file);
@@ -944,10 +945,8 @@ static void argv_usage(
 				fputc('{',file);
 				rparalen = paralen - rblen;
 			}
-		} else {
+		} else
 			fprintf(file,"%-*c",(int)paralen,' ');
-			para = (char *)0;
-		}
 
 
 		if (!para && option->description && rdesclen <= desclen) {
@@ -960,6 +959,24 @@ static void argv_usage(
 			desc = (char *)0;
 
 		while (para || desc) {
+			if (para && next_para) {
+				if (option->optarg == ARGV_OPTARG_OPTIONAL) {
+					if (rparalen+2*rbblen <= paralen) {
+						fprintf(file,"  %s}]%-*c",para,
+							(int)(paralen-rparalen)
+								- 2*rbblen,' ');
+						para = (char *)0;
+					}
+				} else {
+					if (rparalen+2*rblen <= paralen) {
+						fprintf(file," %s}%-*c",para,
+							(int)(paralen-rparalen)
+								- 2*rblen,' ');
+						para = (char *)0;
+					}
+				}
+			}
+
 			if (para) {
 				next_para = para+rparalen-1;
 
@@ -1001,7 +1018,9 @@ static void argv_usage(
 							(int)(paralen-strlen(para)-rblen),' ');
 					para = (char *)0;
 				}
-			} else if (desc > buf)
+			} else if (next_para && (desc > buf))
+				next_para = (char *)0;
+			else if (desc > buf)
 				fprintf(file,"%-*c",(int)paralen,' ');
 
 			if (desc) {
-- 
cgit v1.2.3