Kaynağa Gözat

Revamp mkusage backend

 *  Added support for "options", "commands" and plain
    sections.

 *  Changed default for multi-line usage lines to use
    header rather than prefix.
Alois Mahdal 8 yıl önce
ebeveyn
işleme
571c4be131
33 değiştirilmiş dosya ile 249 ekleme ve 14 silme
  1. 55
    5
      src/include-bash/pretty.sh
  2. 10
    1
      tests/pretty_basic/TF_RUN
  3. 3
    2
      tests/pretty_basic/oracle/v0_d0/wrap_mkusage.stderr
  4. 3
    2
      tests/pretty_basic/oracle/v0_d1/wrap_mkusage.stderr
  5. 3
    2
      tests/pretty_basic/oracle/v1_d0/wrap_mkusage.stderr
  6. 3
    2
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage.stderr
  7. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_0.stderr
  8. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_0.stdout
  9. 1
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_1.stderr
  10. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_1.stdout
  11. 3
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_2.stderr
  12. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_2.stdout
  13. 19
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_all.stderr
  14. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_all.stdout
  15. 7
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_c.stderr
  16. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_c.stdout
  17. 4
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_conflict.stderr
  18. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_conflict.stdout
  19. 7
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_i.stderr
  20. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_i.stdout
  21. 7
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_o.stderr
  22. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_o.stdout
  23. 5
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_p.stderr
  24. 0
    0
      tests/pretty_basic/oracle/v1_d1/wrap_mkusage_p.stdout
  25. 11
    0
      tests/pretty_basic/test/wrap_mkusage_0
  26. 11
    0
      tests/pretty_basic/test/wrap_mkusage_1
  27. 12
    0
      tests/pretty_basic/test/wrap_mkusage_2
  28. 19
    0
      tests/pretty_basic/test/wrap_mkusage_all
  29. 14
    0
      tests/pretty_basic/test/wrap_mkusage_c
  30. 12
    0
      tests/pretty_basic/test/wrap_mkusage_conflict
  31. 13
    0
      tests/pretty_basic/test/wrap_mkusage_i
  32. 14
    0
      tests/pretty_basic/test/wrap_mkusage_o
  33. 13
    0
      tests/pretty_basic/test/wrap_mkusage_p

+ 55
- 5
src/include-bash/pretty.sh Dosyayı Görüntüle

@@ -413,16 +413,66 @@ _pretty__echo_help() {
413 413
 
414 414
 _pretty__echo_usage() {
415 415
     #
416
-    # Print each argument as usage pattern
416
+    # Compose conventional usage guide
417 417
     #
418
-    local self
418
+    # The default mode treats each argument as usage pattern
419
+    # (see below for details).  Additional formatting can be
420
+    # conveniently achieved by switching to other modes, which
421
+    # automatically brings necessary headers and indentations
422
+    # where needed.
423
+    #
424
+    #  *  option mode (`-o`) prints "options:" header and 
425
+    #     indents next arguments,
426
+    #
427
+    #  *  command mode (`-c`) prints "commands:" header and
428
+    #     indents next arguments,
429
+    #
430
+    #  *  plain mode (`--`) prints empty line (new paragraph)
431
+    #     and turns indentations off.
432
+    #
433
+    #  *  usage mode (`-u`, active by default), prints
434
+    #     "usage:" header, indents next arguments and prefixes
435
+    #     them with name of the script.
436
+    #
437
+    #     A special case of usage mode is when only single
438
+    #     argument is passed to this function; then instead
439
+    #     of "usage:" header, this usage pattern is prefixed
440
+    #     with the same string.
441
+    #
442
+    # In order to help avoid (rare) conflict between mkusage()
443
+    # switches and your usage patterns, the very first argument,
444
+    # and each argument that comes right after one of these
445
+    # switches are guarranteed not to be interpreted as switch.
446
+    #
447
+    local self          # the script name
448
+    local mode=usage    # mode
449
+    local esc=1         # escape (take next argument as literal)
450
+    local arg           # argument to iterate
419 451
     case "$SHELLFU_PRETTY_USAGE" in
420 452
         subcommand) self="${0##*/}"; self="${self/-/ }" ;;
421 453
         *)          self="$caller" ;;
422 454
     esac
423
-    local u
424
-    for u in "$@";
425
-    do echo "usage: $self $u"
455
+    case $# in
456
+        0)  return 0 ;;
457
+        1)  echo "usage: $self $1"; return 0 ;;
458
+    esac
459
+    echo usage:
460
+    for arg in "$@";
461
+    do
462
+        case $esc:$arg in
463
+            0:--) shift; mode=plain;  esc=1; echo                ;;
464
+            0:-c) shift; mode=indent; esc=1; echo; echo commands: ;;
465
+            0:-i) shift; mode=indent; esc=1; echo                ;;
466
+            0:-o) shift; mode=indent; esc=1; echo; echo options: ;;
467
+            0:-u) shift; mode=usage;  esc=1                      ;;
468
+            *)  esc=0
469
+                case $mode in
470
+                    usage)  echo  "  $self $arg" ;;
471
+                    indent) echo  "  $arg" ;;
472
+                    plain)  echos "$arg" ;;
473
+                esac
474
+                ;;
475
+        esac
426 476
     done
427 477
 }
428 478
 

+ 10
- 1
tests/pretty_basic/TF_RUN Dosyayı Görüntüle

@@ -42,6 +42,15 @@ tf_enum_subtests() {
42 42
     echo "v1_d1_wrap_debug_xmod"
43 43
     echo "v1_d1_wrap_die"
44 44
     echo "v1_d1_wrap_mkusage"
45
+    echo "v1_d1_wrap_mkusage_0"
46
+    echo "v1_d1_wrap_mkusage_1"
47
+    echo "v1_d1_wrap_mkusage_2"
48
+    echo "v1_d1_wrap_mkusage_o"
49
+    echo "v1_d1_wrap_mkusage_p"
50
+    echo "v1_d1_wrap_mkusage_i"
51
+    echo "v1_d1_wrap_mkusage_c"
52
+    echo "v1_d1_wrap_mkusage_all"
53
+    echo "v1_d1_wrap_mkusage_conflict"
45 54
 }
46 55
 
47 56
 tf_do_subtest() {
@@ -75,7 +84,7 @@ tf_do_subtest() {
75 84
         wrap_die)       cmd='bash test/wrap_die foo'; o_es=3 ;;
76 85
         wrap_debug)     cmd='bash test/wrap_debug' ;;
77 86
         wrap_debug_xmod)cmd='SHELLFU_DEBUG_EXCLUDE=barmod,process,foo,process_job,__do_process_task bash test/wrap_debug' ;;
78
-        wrap_mkusage)   cmd='bash test/wrap_mkusage'; o_es=2 ;;
87
+        wrap_mkusage*)  cmd="bash test/$tfun"; o_es=2 ;;
79 88
     esac
80 89
     tf_testflt -n "$name" -i "$t_in" -S "$o_es" -O "$o_out" -E "$o_err" "$cmd"
81 90
 }

+ 3
- 2
tests/pretty_basic/oracle/v0_d0/wrap_mkusage.stderr Dosyayı Görüntüle

@@ -1,2 +1,3 @@
1
-usage: wrap_mkusage [-d] load [-f file]
2
-usage: wrap_mkusage [-d] save [-f file]
1
+usage:
2
+  wrap_mkusage [-d] load [-f file]
3
+  wrap_mkusage [-d] save [-f file]

+ 3
- 2
tests/pretty_basic/oracle/v0_d1/wrap_mkusage.stderr Dosyayı Görüntüle

@@ -1,2 +1,3 @@
1
-usage: wrap_mkusage [-d] load [-f file]
2
-usage: wrap_mkusage [-d] save [-f file]
1
+usage:
2
+  wrap_mkusage [-d] load [-f file]
3
+  wrap_mkusage [-d] save [-f file]

+ 3
- 2
tests/pretty_basic/oracle/v1_d0/wrap_mkusage.stderr Dosyayı Görüntüle

@@ -1,2 +1,3 @@
1
-usage: wrap_mkusage [-d] load [-f file]
2
-usage: wrap_mkusage [-d] save [-f file]
1
+usage:
2
+  wrap_mkusage [-d] load [-f file]
3
+  wrap_mkusage [-d] save [-f file]

+ 3
- 2
tests/pretty_basic/oracle/v1_d1/wrap_mkusage.stderr Dosyayı Görüntüle

@@ -1,2 +1,3 @@
1
-usage: wrap_mkusage [-d] load [-f file]
2
-usage: wrap_mkusage [-d] save [-f file]
1
+usage:
2
+  wrap_mkusage [-d] load [-f file]
3
+  wrap_mkusage [-d] save [-f file]

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_0.stderr Dosyayı Görüntüle


+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_0.stdout Dosyayı Görüntüle


+ 1
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_1.stderr Dosyayı Görüntüle

@@ -0,0 +1 @@
1
+usage: wrap_mkusage_1 [-d] load [-f file]

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_1.stdout Dosyayı Görüntüle


+ 3
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_2.stderr Dosyayı Görüntüle

@@ -0,0 +1,3 @@
1
+usage:
2
+  wrap_mkusage_2 [-d] load [-f file]
3
+  wrap_mkusage_2 [-d] save [-f file]

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_2.stdout Dosyayı Görüntüle


+ 19
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_all.stderr Dosyayı Görüntüle

@@ -0,0 +1,19 @@
1
+usage:
2
+  wrap_mkusage_all [-d] load [-f file]
3
+  wrap_mkusage_all [-d] save [-f file]
4
+
5
+options:
6
+  -d         debug
7
+  -f file    some file
8
+
9
+commands:
10
+  load - load a file or something
11
+  save - save a file or something
12
+
13
+here is some data
14
+
15
+  data1
16
+  data2
17
+  data3
18
+
19
+and that's all folks!

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_all.stdout Dosyayı Görüntüle


+ 7
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_c.stderr Dosyayı Görüntüle

@@ -0,0 +1,7 @@
1
+usage:
2
+  wrap_mkusage_c [-d] load [-f file]
3
+  wrap_mkusage_c [-d] save [-f file]
4
+
5
+commands:
6
+  load - load a file or something
7
+  save - save a file or something

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_c.stdout Dosyayı Görüntüle


+ 4
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_conflict.stderr Dosyayı Görüntüle

@@ -0,0 +1,4 @@
1
+usage:
2
+  wrap_mkusage_conflict -o
3
+  wrap_mkusage_conflict [-d] load [-f file]
4
+  wrap_mkusage_conflict [-d] save [-f file]

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_conflict.stdout Dosyayı Görüntüle


+ 7
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_i.stderr Dosyayı Görüntüle

@@ -0,0 +1,7 @@
1
+usage:
2
+  wrap_mkusage_i [-d] load [-f file]
3
+  wrap_mkusage_i [-d] save [-f file]
4
+
5
+  data1
6
+  data2
7
+  data3

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_i.stdout Dosyayı Görüntüle


+ 7
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_o.stderr Dosyayı Görüntüle

@@ -0,0 +1,7 @@
1
+usage:
2
+  wrap_mkusage_o [-d] load [-f file]
3
+  wrap_mkusage_o [-d] save [-f file]
4
+
5
+options:
6
+  -d         debug
7
+  -f file    some file

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_o.stdout Dosyayı Görüntüle


+ 5
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_p.stderr Dosyayı Görüntüle

@@ -0,0 +1,5 @@
1
+usage:
2
+  wrap_mkusage_p [-d] load [-f file]
3
+  wrap_mkusage_p [-d] save [-f file]
4
+
5
+Author: chucky

+ 0
- 0
tests/pretty_basic/oracle/v1_d1/wrap_mkusage_p.stdout Dosyayı Görüntüle


+ 11
- 0
tests/pretty_basic/test/wrap_mkusage_0 Dosyayı Görüntüle

@@ -0,0 +1,11 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage
9
+}
10
+
11
+usage

+ 11
- 0
tests/pretty_basic/test/wrap_mkusage_1 Dosyayı Görüntüle

@@ -0,0 +1,11 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]"
9
+}
10
+
11
+usage

+ 12
- 0
tests/pretty_basic/test/wrap_mkusage_2 Dosyayı Görüntüle

@@ -0,0 +1,12 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]" \
9
+            "[-d] save [-f file]"
10
+}
11
+
12
+usage

+ 19
- 0
tests/pretty_basic/test/wrap_mkusage_all Dosyayı Görüntüle

@@ -0,0 +1,19 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]" \
9
+            "[-d] save [-f file]" \
10
+         -o "-d         debug" \
11
+            "-f file    some file" \
12
+         -c "load - load a file or something" \
13
+            "save - save a file or something" \
14
+         -- "here is some data" \
15
+         -i "data1" "data2" "data3" \
16
+         -- "and that's all folks!"
17
+}
18
+
19
+usage

+ 14
- 0
tests/pretty_basic/test/wrap_mkusage_c Dosyayı Görüntüle

@@ -0,0 +1,14 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]" \
9
+            "[-d] save [-f file]" \
10
+         -c "load - load a file or something" \
11
+            "save - save a file or something"
12
+}
13
+
14
+usage

+ 12
- 0
tests/pretty_basic/test/wrap_mkusage_conflict Dosyayı Görüntüle

@@ -0,0 +1,12 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage -o "[-d] load [-f file]" \
9
+            "[-d] save [-f file]"
10
+}
11
+
12
+usage

+ 13
- 0
tests/pretty_basic/test/wrap_mkusage_i Dosyayı Görüntüle

@@ -0,0 +1,13 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]" \
9
+            "[-d] save [-f file]" \
10
+         -i "data1" "data2" "data3"
11
+}
12
+
13
+usage

+ 14
- 0
tests/pretty_basic/test/wrap_mkusage_o Dosyayı Görüntüle

@@ -0,0 +1,14 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]" \
9
+            "[-d] save [-f file]" \
10
+         -o "-d         debug" \
11
+            "-f file    some file"
12
+}
13
+
14
+usage

+ 13
- 0
tests/pretty_basic/test/wrap_mkusage_p Dosyayı Görüntüle

@@ -0,0 +1,13 @@
1
+#!/bin/bash
2
+
3
+. "$(shellfu-get path)"
4
+
5
+shellfu import pretty
6
+
7
+usage() {
8
+    mkusage "[-d] load [-f file]" \
9
+            "[-d] save [-f file]" \
10
+         -- "Author: chucky"
11
+}
12
+
13
+usage