Skip to content

Commit

Permalink
6703 - new types: code-point and grapheme
Browse files Browse the repository at this point in the history
Both have the same size: 4 bytes.

So far I've just renamed print-byte to print-grapheme, but it still behaves
the same.

I'm going to support printing code-points next, but grapheme 'clusters'
spanning multiple code-points won't be supported for some time.
  • Loading branch information
akkartik committed Aug 2, 2020
1 parent 1b79f70 commit 0452b05
Show file tree
Hide file tree
Showing 51 changed files with 144 additions and 75 deletions.
5 changes: 3 additions & 2 deletions 304screen.subx
Expand Up @@ -131,7 +131,8 @@ $print-string-to-real-screen:end:
5d/pop-to-ebp
c3/return

print-byte-to-real-screen: # c: byte
# currently only supports ascii
print-grapheme-to-real-screen: # c: grapheme
# . prologue
55/push-ebp
89/<- %ebp 4/r32/esp
Expand All @@ -142,7 +143,7 @@ print-byte-to-real-screen: # c: byte
68/push 4/imm32/size
89/<- %ecx 4/r32/esp
(write 2 %ecx)
$print-byte-to-real-screen:end:
$print-grapheme-to-real-screen:end:
# . reclaim locals
81 0/subop/add %esp 8/imm32
# . restore registers
Expand Down
2 changes: 1 addition & 1 deletion 400.mu
Expand Up @@ -142,7 +142,7 @@ sig real-screen-size -> nrows/eax: int, ncols/ecx: int
sig clear-real-screen
sig move-cursor-on-real-screen row: int, column: int
sig print-string-to-real-screen s: (addr array byte)
sig print-byte-to-real-screen c: byte
sig print-grapheme-to-real-screen c: grapheme
sig print-int32-hex-to-real-screen n: int
sig reset-formatting-on-real-screen
sig start-color-on-real-screen fg: int, bg: int
Expand Down
11 changes: 6 additions & 5 deletions 404screen.mu
Expand Up @@ -82,6 +82,7 @@ $clear-screen:body: {
{
break-if-=
# fake screen
var space/edi: grapheme <- copy 0x20
move-cursor screen, 1, 1
var screen-addr/esi: (addr screen) <- copy screen
var i/eax: int <- copy 1
Expand All @@ -94,7 +95,7 @@ $clear-screen:body: {
{
compare j, *ncols
break-if->
print-byte screen, 0x20 # space
print-grapheme screen, space
j <- increment
loop
}
Expand Down Expand Up @@ -136,13 +137,13 @@ $print-string:body: {
}
}

fn print-byte screen: (addr screen), c: byte {
$print-byte:body: {
fn print-grapheme screen: (addr screen), c: grapheme {
$print-grapheme:body: {
compare screen, 0
{
break-if-!=
print-byte-to-real-screen c
break $print-byte:body
print-grapheme-to-real-screen c
break $print-grapheme:body
}
{
break-if-=
Expand Down
6 changes: 4 additions & 2 deletions apps/browse.mu
Expand Up @@ -96,7 +96,8 @@ $line-loop: {
update-attributes c, r
compare c, 0xa # newline
break-if-= # no need to print newlines
print-byte 0, c
var g/eax: grapheme <- copy c
print-grapheme 0, g
col <- increment
loop
}
Expand Down Expand Up @@ -176,6 +177,7 @@ fn dump in: (addr buffered-file) {
var c/eax: byte <- read-byte-buffered in
compare c, 0xffffffff # EOF marker
break-if-=
print-byte 0, c
var g/eax: grapheme <- copy c
print-grapheme 0, g
loop
}
Binary file modified apps/mu
Binary file not shown.
4 changes: 3 additions & 1 deletion apps/mu.subx
Expand Up @@ -412,8 +412,10 @@ Type-id: # (stream (addr array byte))
# some SubX types deliberately left undefined in Mu; they can only be operated on using SubX primitives
"stream"/imm32 # 11
"slice"/imm32 # 12
"code-point"/imm32 # 13; smallest scannable unit from a text stream
"grapheme"/imm32 # 14; smallest printable unit; will eventually be composed of multiple code-points, but currently corresponds 1:1
# Keep Primitive-type-ids in sync if you add types here.
0/imm32 0/imm32 0/imm32
0/imm32
0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32
0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32
0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32
Expand Down
2 changes: 1 addition & 1 deletion apps/print-file.mu
Expand Up @@ -31,7 +31,7 @@ $main-body: {
var c/eax: byte <- read-byte-buffered in-addr
compare c, 0xffffffff # EOF marker
break-if-=
print-byte 0, c
print-grapheme 0, c
loop
}
}
Expand Down
Binary file modified apps/random
Binary file not shown.
3 changes: 2 additions & 1 deletion prototypes/browse/1-print-file.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions prototypes/browse/10.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions prototypes/browse/11.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions prototypes/browse/12.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions prototypes/browse/13.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions prototypes/browse/14.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions prototypes/browse/15-headers-broken.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/16-screen-state-broken.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/17-file-state-broken/file-state.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/18/file-state.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/18/main.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/19/file-state.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/19/screen-position-state.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/2.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/20/file-state.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion prototypes/browse/20/screen-position-state.mu

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0452b05

Please sign in to comment.