about summary refs log tree commit diff stats
path: root/060string.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-05-23 12:30:58 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-05-23 12:35:05 -0700
commit047296d811b062477715e3435e1b49ae63d54501 (patch)
treee271c65abd0adafd43f75ad766834e238c7eb89b /060string.mu
parenta95c44f6981946d87e05d0929c0dd3a4894e953e (diff)
downloadmu-047296d811b062477715e3435e1b49ae63d54501.tar.gz
1434 - support all unicode spaces
Diffstat (limited to '060string.mu')
-rw-r--r--060string.mu79
1 files changed, 77 insertions, 2 deletions
diff --git a/060string.mu b/060string.mu
index f0b3ad18..338748fc 100644
--- a/060string.mu
+++ b/060string.mu
@@ -494,6 +494,69 @@ scenario interpolate-at-end [
   ]
 ]
 
+recipe space? [
+  default-space:array:address:location <- new location:type, 30:literal
+  c:character <- next-ingredient
+  result:boolean <- equal c:character, 32:literal/space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 10:literal/newline
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 9:literal/tab
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 13:literal/carriage-return
+  # remaining uncommon cases in sorted order
+  # http://unicode.org code-points in unicode-set Z and Pattern_White_Space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 11:literal/ctrl-k
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 12:literal/ctrl-l
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 133:literal/ctrl-0085
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 160:literal/no-break-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 5760:literal/ogham-space-mark
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8192:literal/en-quad
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8193:literal/em-quad
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8194:literal/en-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8195:literal/em-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8196:literal/three-per-em-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8197:literal/four-per-em-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8198:literal/six-per-em-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8199:literal/figure-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8200:literal/punctuation-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8201:literal/thin-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8202:literal/hair-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8206:literal/left-to-right
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8207:literal/right-to-left
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8232:literal/line-separator
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8233:literal/paragraph-separator
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8239:literal/narrow-no-break-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 8287:literal/medium-mathematical-space
+  jump-if result:boolean, +reply:label
+  result:boolean <- equal c:character, 12288:literal/ideographic-space
+  jump-if result:boolean, +reply:label
+  +reply
+  reply result:boolean
+]
+
 recipe trim [
   default-space:array:address:location <- new location:type, 30:literal
   s:address:array:character <- next-ingredient
@@ -508,7 +571,7 @@ recipe trim [
       reply result:address:array:character
     }
     curr:character <- index s:address:array:character/deref, start:number
-    whitespace?:boolean <- equal curr:character, 32:literal/space
+    whitespace?:boolean <- space? curr:character
     break-unless whitespace?:boolean
     start:number <- add start:number, 1:literal
     loop
@@ -519,7 +582,7 @@ recipe trim [
     not-at-start?:boolean <- greater-than end:number, start:number
     assert not-at-start?:boolean [end ran up against start]
     curr:character <- index s:address:array:character/deref, end:number
-    whitespace?:boolean <- equal curr:character, 32:literal/space
+    whitespace?:boolean <- space? curr:character
     break-unless whitespace?:boolean
     end:number <- subtract end:number, 1:literal
     loop
@@ -589,3 +652,15 @@ scenario trim-left-right [
     3:string <- [abc]
   ]
 ]
+
+scenario trim-newline-tab [
+  run [
+    1:address:array:character <- new [	abc
+]
+    2:address:array:character <- trim 1:address:array:character
+    3:array:character <- copy 2:address:array:character/deref
+  ]
+  memory-should-contain [
+    3:string <- [abc]
+  ]
+]