1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-07 07:57:43 +02:00
audacity/nyquist/init.lsp
Steve Daulton 367d15a0b0 Add a couple of helpers for parsing string
Provides a convenient function and macro, intended specifically for
parsing strings returned by (aud-do "GetInfo: ...
2018-08-26 20:07:47 +01:00

58 lines
2.4 KiB
Common Lisp

; init.lsp -- default Nyquist startup file
(load "nyinit.lsp" :verbose nil)
; add your customizations here:
; e.g. (setf *default-sf-dir* "...")
; (load "test.lsp")
;; "_" (UNDERSCORE) - translation function
;;
;; Third party plug-ins are not translated by gettext in Audacity, but may include a
;; list of translations named *local*. The format of *locale* must be:
;; (LIST (language-list) [(language-list) ...])
;; Each language-list is an a-list in the form:
;; ("cc" ((list "string" "translated-string") [(list "string" "translated-string") ...]))
;; where "cc" is the quoted country code.
;;
(setf underscore (function _))
;;
(defun _(txt)
(setf translated nil)
(when (boundp '*locale*)
(if (not (listp *locale*))
(format t "Warning: Invalid *locale* (not a list).~%")
(let ((locale (get '*audacity* 'language)))
(if (not (setf language-list (assoc locale *locale* :test 'string-equal)))
(format t "Warning: No language-list for \"~a\" in *locale*.~%" locale)
(if (/= (length language-list) 2)
(format t "Error: Invalid \"~a\" language list in *locale*.~%" locale)
; Get just the list of substitution pairs
(let ((language-list (second language-list)))
(if (not (listp language-list))
(format t "Warning: No translations for \"~a\" in *locale*.~%" locale)
(let ((translation (assoc txt language-list :test 'string=)))
(if (not translation)
(format t "Warning: No ~a translations for \"~a\".~%" locale txt)
(if (not (and (listp translation)
(= (length translation) 2)))
(format t "Error: Invalid translation for ~a in *locale*.~%" txt)
(setf translated (second translation))))))))))))
(if translated
translated
(funcall underscore txt)))
;;; A couple of helpers for parsing strings returned by (aud-do "GetInfo: ...
(defun eval-string (string)
;;; Evaluate a string as a LISP expression.
;;; If 'string' is not a valid LISP expression, the behaviour is undefined.
(eval (read (make-string-input-stream string))))
(defmacro quote-string (string)
;;; Prepend a single quote to a string
`(setf ,string (format nil "\'~a" ,string)))