changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/cli/clap/util.lisp

changeset 643: f901de70a80e
parent: 3e721a3349a0
child: 3e6a17fb5712
author: Richard Westhaver <ellis@rwest.io>
date: Tue, 10 Sep 2024 21:26:30 -0400
permissions: -rw-r--r--
description: opt fixes and test updates
426
3e721a3349a0 completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents: 419
diff changeset
1
 ;;; cli/clap/util.lisp --- Clap Utilities
419
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;; 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
426
3e721a3349a0 completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents: 419
diff changeset
6
 (in-package :cli/clap/util)
419
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
 (defun arg0 () (car sb-ext:*posix-argv*))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 (defun args () (cdr sb-ext:*posix-argv*))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
 
643
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
11
 (declaim (inline long-opt-p long-opt-has-eq-p
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
12
                  short-opt-p opt-group-p
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
13
                  opt-string-prefix-eq))
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
14
 
419
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 (defun long-opt-p (str)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
   (declare (simple-string str))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
   (and (char= (aref str 0) (aref str 1) #\-)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
18
        (> (length str) 2)))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
 
643
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
20
 (defun long-opt-has-eq-p (str)
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
21
   "Return non-nil if STR is a long-opt which has an '=' somewhere,
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
22
 indicating a key/val pair without whitespace."
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
23
   (declare (simple-string str))
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
24
   (when-let ((pos (position #\= str :test 'char=)))
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
25
     (cons (subseq str 2 pos) (subseq str (1+ pos)))))
f901de70a80e opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents: 426
diff changeset
26
   
419
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
27
 (defun short-opt-p (str)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
28
   (declare (simple-string str))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
29
   (and (char= (aref str 0) #\-)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
30
        (not (char= (aref str 1) #\-))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
31
        (> (length str) 1)))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
32
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
33
 (defun opt-group-p (str)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
34
   (declare (simple-string str))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
35
   (equalp str *cli-group-separator*))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
36
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
37
 (defun opt-string-prefix-eq (ch str)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
38
   (declare (simple-string str) (character ch))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
39
   (char= ch (aref str 0)))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
40
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
41
 ;; currently not in use
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
42
 (defun gen-thunk-ll (origin args)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
43
   (let ((a0 (list (symbolicate '$a 0) origin)))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
44
     (group 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
45
      (nconc (loop for i from 1 for a in args nconc (list (symbolicate '$a (the fixnum i)) a)) a0)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
      2)))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
47
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
48
 (defun default-thunk (args opts)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
49
   (declare (ignore args opts))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
50
   (values))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
51
 
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
52
 (defun cli-opt-kind-p (s)
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
53
   (declare (type symbol s))
0f0e5f9b5c55 add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
54
   (find s *cli-opt-kinds* :test 'string-equal))