orbea / cross / slibtool

Forked from cross/slibtool 4 years ago
Clone

b51380 argv.h: usage screen generator: fix typesetting of spanning paradigms.

Authored and Committed by midipix 9 years ago
    argv.h: usage screen generator: fix typesetting of spanning paradigms.
    
        
file modified
+25 -6
src/internal/argv/argv.h CHANGED
@@ -910,6 +910,9 @@ static void argv_usage(
910
910
}
911
911
}
912
912
913
+ para = 0;
914
+ next_para = 0;
915
+
913
916
if (option->argname) {
914
917
if (option->optarg == ARGV_OPTARG_OPTIONAL)
915
918
fprintf(file,"[%s]%-*c",
@@ -919,7 +922,6 @@ static void argv_usage(
919
922
fprintf(file,"%s%-*c",
920
923
option->argname,
921
924
(int)(paralen-strlen(option->argname)),' ');
922
- para = (char *)0;
923
925
} else if (option->paradigm && (rparalen <= paralen)) {
924
926
if (option->optarg == ARGV_OPTARG_OPTIONAL)
925
927
fprintf(file,"[{%s}]%-*c",
@@ -929,7 +931,6 @@ static void argv_usage(
929
931
fprintf(file,"{%s}%-*c",
930
932
option->paradigm,
931
933
(int)(paralen-strlen(option->paradigm)-rbblen),' ');
932
- para = (char *)0;
933
934
} else if (option->paradigm) {
934
935
if (!paradigm && !(paradigm = calloc(1,mparalen))) {
935
936
fputc('\n',file);
@@ -944,10 +945,8 @@ static void argv_usage(
944
945
fputc('{',file);
945
946
rparalen = paralen - rblen;
946
947
}
947
- } else {
948
+ } else
948
949
fprintf(file,"%-*c",(int)paralen,' ');
949
- para = (char *)0;
950
- }
951
950
952
951
953
952
if (!para && option->description && rdesclen <= desclen) {
@@ -960,6 +959,24 @@ static void argv_usage(
960
959
desc = (char *)0;
961
960
962
961
while (para || desc) {
962
+ if (para && next_para) {
963
+ if (option->optarg == ARGV_OPTARG_OPTIONAL) {
964
+ if (rparalen+2*rbblen <= paralen) {
965
+ fprintf(file," %s}]%-*c",para,
966
+ (int)(paralen-rparalen)
967
+ - 2*rbblen,' ');
968
+ para = (char *)0;
969
+ }
970
+ } else {
971
+ if (rparalen+2*rblen <= paralen) {
972
+ fprintf(file," %s}%-*c",para,
973
+ (int)(paralen-rparalen)
974
+ - 2*rblen,' ');
975
+ para = (char *)0;
976
+ }
977
+ }
978
+ }
979
+
963
980
if (para) {
964
981
next_para = para+rparalen-1;
965
982
@@ -1001,7 +1018,9 @@ static void argv_usage(
1001
1018
(int)(paralen-strlen(para)-rblen),' ');
1002
1019
para = (char *)0;
1003
1020
}
1004
- } else if (desc > buf)
1021
+ } else if (next_para && (desc > buf))
1022
+ next_para = (char *)0;
1023
+ else if (desc > buf)
1005
1024
fprintf(file,"%-*c",(int)paralen,' ');
1006
1025
1007
1026
if (desc) {