]> git.donarmstrong.com Git - lilypond.git/blobdiff - guile18/lang/elisp/primitives/strings.scm
Import guile-1.8 as multiple upstream tarball component
[lilypond.git] / guile18 / lang / elisp / primitives / strings.scm
diff --git a/guile18/lang/elisp/primitives/strings.scm b/guile18/lang/elisp/primitives/strings.scm
new file mode 100644 (file)
index 0000000..85e462f
--- /dev/null
@@ -0,0 +1,40 @@
+(define-module (lang elisp primitives strings)
+  #:use-module (lang elisp internals fset)
+  #:use-module (lang elisp internals null)
+  #:use-module (lang elisp internals signal))
+
+(fset 'substring substring)
+
+(fset 'concat
+      (lambda args
+       (apply string-append
+              (map (lambda (arg)
+                     (cond
+                      ((string? arg) arg)
+                      ((list? arg) (list->string arg))
+                      ((vector? arg) (list->string (vector->list arg)))
+                      (else (error "Wrong type argument for concat"))))
+                   args))))
+
+(fset 'string-to-number string->number)
+
+(fset 'number-to-string number->string)
+
+(fset 'string-lessp (lambda->nil string<?))
+(fset 'string< 'string-lessp)
+
+(fset 'aref
+      (lambda (array idx)
+       (cond ((vector? array) (vector-ref array idx))
+             ((string? array) (char->integer (string-ref array idx)))
+             (else (wta 'arrayp array 1)))))
+
+(fset 'aset
+      (lambda (array idx newelt)
+       (cond ((vector? array) (vector-set! array idx newelt))
+             ((string? array) (string-set! array idx (integer->char newelt)))
+             (else (wta 'arrayp array 1)))))
+
+(fset 'stringp (lambda->nil string?))
+
+(fset 'vector vector)