Implement string<->iso8859-1 converters.
authorChris Hanson <org/chris-hanson/cph>
Sun, 30 Apr 2017 07:23:14 +0000 (00:23 -0700)
committerChris Hanson <org/chris-hanson/cph>
Sun, 30 Apr 2017 07:23:14 +0000 (00:23 -0700)
src/runtime/bytevector.scm
src/runtime/runtime.pkg

index 422f5ae3fcd21c8be0d5f11a8b2f958312e86bf2..28b792d83e88580c57f4ffaf3c65b6930c20970d 100644 (file)
@@ -397,6 +397,25 @@ USA.
         (bytes-decoder bytevector-u32le-ref initial-u32->utf32-char-length
                        decode-utf32le-char 1 "UTF-32LE" 'utf32le->string))
    unspecific))
+
+(define (string->iso8859-1 string #!optional start end)
+  (let* ((end (fix:end-index end (string-length string) 'string->iso8859-1))
+        (start (fix:start-index start end 'string->iso8859-1))
+        (result (allocate-bytevector (fix:- end start))))
+    (do ((i start (fix:+ i 1))
+        (j 0 (fix:+ j 1)))
+       ((not (fix:< i end)))
+      (bytevector-u8-set! result j (char->integer (string-ref string i))))
+    result))
+
+(define (iso8859-1->string bytes #!optional start end)
+  (let* ((end (fix:end-index end (bytevector-length bytes) 'iso8859-1->string))
+        (start (fix:start-index start end 'iso8859-1->string))
+        (builder (string-builder)))
+    (do ((i start (fix:+ i 1)))
+       ((not (fix:< i end)))
+      (builder (integer->char (bytevector-u8-ref bytes i))))
+    (builder)))
 \f
 (define (bytevector->hexadecimal bytes)
   (define-integrable (hex-char k)
index d5f210559124977c0c80b211288e87c9534eea8f..1c44a8add12821ad08c017ceb7e9bc0a4322e43f 100644 (file)
@@ -1104,8 +1104,10 @@ USA.
          bytevector?
          exact-nonnegative-integer->bytevector
          hexadecimal->bytevector
+         iso8859-1->string
          list->bytevector
          make-bytevector
+         string->iso8859-1
          string->utf16be
          string->utf16le
          string->utf32be