summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouie S <louie@example.com>2022-07-10 22:28:59 -0700
committerLouie S <louie@example.com>2022-07-10 22:28:59 -0700
commitf4c51e836c9bfaec97b954bee72ab96c8e127d2e (patch)
tree2b7d9f629aa5cc2900e9fcccfef28f4fb02c1b25
First commit
-rwxr-xr-xdocset_xml_gen.scm97
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)))