diff options
author | Louie S <louie@example.com> | 2022-07-10 22:28:59 -0700 |
---|---|---|
committer | Louie S <louie@example.com> | 2022-07-10 22:28:59 -0700 |
commit | f4c51e836c9bfaec97b954bee72ab96c8e127d2e (patch) | |
tree | 2b7d9f629aa5cc2900e9fcccfef28f4fb02c1b25 |
First commit
-rwxr-xr-x | docset_xml_gen.scm | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/docset_xml_gen.scm b/docset_xml_gen.scm new file mode 100755 index 0000000..3de3a53 --- /dev/null +++ b/docset_xml_gen.scm @@ -0,0 +1,97 @@ +#!/usr/bin/env guile +!# + +(define title (car (command-line))) +(define args (cdr (command-line))) + +; Initialize globals +(define docset-path "") +(define plist-path "") +(define out-path "") +(define doc-name "") +(define doc-other-versions "") +(define doc-url "") +(define doc-version "") + +; Define help message +(define (print-help) + (display (string-append "Usage: " title " [OPTION]... DOCSET\n")) + (display "Generate XML file for importing docsets into Dash or Zeal\n") + (display (string-append "Example: " title " -o Ncurses.xml Ncurses.docset\n")) + (display "\n") + (display "Options:\n") + (display " -h, --help Print this help message and exit\n") + (display " -n, --name NAME Set the value of the \"name\" tag.\n") + (display " Automatically determined if not set manually\n") + (display " -o, --out FILE Output to FILE instead of stdout\n") + (display " --other-versions VERSION Add additional versions under the \"other-versions\" tag.\n") + (display " Multiple values may be set using comma-separation\n") + (display " -u, --url URL Set the value of the \"url\" tag.\n") + (display " Multiple values may be set using comma-separation.\n") + (display " Set to the local path if not set manually\n") + (display " -v, --version VERSION Set the value of the \"version\" tag.\n") + (display " Automatically determined if not set manually\n")) + +; Check for option +(define (check-options arg option-list) + (cond + ((null? option-list) #f) + ((equal? arg (car option-list)) #t) + (else + (check-options arg (cdr option-list))))) + +; Read through options +; TODO split args for certain flags on ',' +(define (read-options args) + (cond + ((null? args) + (begin + (display "Error: missing DOCSET argument\n") + (exit))) + ((check-options (car args) '("-h" "--help")) + (begin + (print-help) + (exit))) + ((check-options (car args) '("-n" "--name")) + (begin + (set! doc-name (cadr args)) + (read-options (cddr args)))) + ((check-options (car args) '("--other-versions")) + (begin + (set! doc-other-versions (cadr args)) + (read-options (cddr args)))) + ((check-options (car args) '("-o" "--out")) + (begin + (set! out-path (cadr args)) + (read-options (cddr args)))) + ((check-options (car args) '("-u" "--url")) + (begin + (set! doc-url (cadr args)) + (read-options (cddr args)))) + ((check-options (car args) '("-v" "--version")) + (begin + (set! doc-version (cadr args)) + (read-options (cddr args)))) + ((check-options (car args) '("--")) + (set! docset-path (cadr args))) + (else + (set! docset-path (car args))))) + +(read-options args) + +; Check validity of docset-path +(if (not (access? docset-path R_OK)) + (begin + (display (string-append "Error: " docset-path " is not a valid path\n")) + (exit))) +(if (not (equal? (stat:type (stat docset-path)) (string->symbol "directory"))) + (begin + (display (string-append "Error: " docset-path " must be a directory\n")) + (exit))) + +; Attempt to locate plist-path +(set! plist-path (string-append docset-path "/Contents/Info.plist")) +(if (or (not (access? plist-path F_OK)) (not (equal? (stat:type (stat plist-path)) (string->symbol "regular")))) + (begin + (display (string-append "Error: " docset-path " is not a valid docset (could not find " plist-path ")\n")) + (exit))) |