Commit Graph

8970 Commits

Author SHA1 Message Date
Kartik K. Agaram 834377d6e3 . 2021-10-03 08:03:15 -07:00
Kartik K. Agaram aad64de236 . 2021-09-21 15:36:14 -07:00
Kartik K. Agaram 77207192ea . 2021-09-13 04:53:38 -07:00
Kartik K. Agaram 35c8c8edba support arrow keys in apps/ex7.mu 2021-09-04 14:00:38 -07:00
Kartik K. Agaram cfdee0a6fa fix apps/ex7.mu
I'm increasingly missing CI.
2021-09-04 13:57:20 -07:00
Kartik K. Agaram 66d5a8735c . 2021-09-03 20:52:57 -07:00
Kartik K. Agaram 9bb19e03c6 a tamil example (that I can't read) 2021-09-03 10:55:34 -07:00
Kartik K. Agaram 50d8f9c852 audit remaining calls to render-code-point
By definition that function can't support combining characters.
2021-09-02 16:02:52 -07:00
Kartik K. Agaram 60a50c9245 support combining characters in streams of text
Fake screens can't handle them yet.
2021-09-02 15:38:45 -07:00
Kartik K. Agaram 3f953ea5c8 . 2021-09-02 13:19:43 -07:00
Kartik K. Agaram 6c3e541be1 . 2021-09-02 13:07:59 -07:00
Kartik K. Agaram a4bac41133 .
A more common hindi vowel.
2021-09-02 13:06:27 -07:00
Kartik K. Agaram 80378db26b .
Inline render-code-point in one of its call-sites before we add support
for combining characters.
2021-09-02 12:44:56 -07:00
Kartik K. Agaram 1e1dd6b4d5 . 2021-09-02 12:44:18 -07:00
Kartik K. Agaram 38909fbce0 . 2021-09-01 14:21:04 -07:00
Kartik K. Agaram cd9f0bb076 a few more examples of combining characters 2021-09-01 14:19:21 -07:00
Kartik Agaram 207c6ef945 . 2021-09-01 13:22:16 -07:00
Kartik K. Agaram d2f96cb0b6 rendering code-points with combining characters
There's a new example app showing this ability.

Still to go: support for combining characters when rendering text and
streams.
2021-09-01 12:46:25 -07:00
Kartik K. Agaram dca845877b tag combining character code-points
Unfortunately the Unicode database doesn't actually provide obvious
metadata for combining characters. The process I followed is as follows.
I noticed that GNU Unifont provides the following files for download:

  - unifont-13.0.06.hex: All Plane 0 glyphs
  - unifont_sample-13.0.06.hex: The above .hex file with combining circles added

Downloading and diffing the two yields all code-points with combining
circles. I assume they are exactly the combining characters I care
about.

One mechanical difficulty is cross-correlating the above files that
include the code-point in each line with font.subx which does not. I got
things to work by modifying the above files in place until they have the
same format as font.subx, using the following Vim commands on each file:

  :%s|.\{64\}|10/size^M00/is-combine^M&|
  :%s|^.\{32\}$|08/size^M00/is-combine^M&00000000000000000000000000000000|
  :%s|..|& |g
  :%s|10 /s iz e|10/size|
  :%s|08 /s iz e|08/size|
  :%s|00 /i s- co mb in e|00/is-combine|

Now I can update the metadata with a Vim macro which jumps to the next
hunk and increments /is-combine on the previous line.
2021-08-31 23:03:34 -07:00
Kartik K. Agaram b8afd4becf start hacky experiment to support combining chars
https://en.wikipedia.org/wiki/Combining_character

The plan: just draw the combining character in the same space as the
previous character. This will almost certainly not work for some Unicode
blocks (tibetan?)

This commit only changes the data/memory/disk model to make some space.
As always in Mu, we avoid bit-mask tricks even if that wastes memory.
2021-08-31 23:03:34 -07:00
Kartik K. Agaram 281f38a7c2 . 2021-08-31 22:43:08 -07:00
Kartik K. Agaram b6ba4c30cc fix a typo from commit a479f0d083
Yet another gnarly reason to start checking all arg metadata in
linux/pack.subx or something like that. With this bug most of my
programs (including browser-slack!) were working even though the
instruction stream was almost certainly misdecoded halfway through every
attempt to draw glyphs.
2021-08-31 22:42:40 -07:00
Kartik K. Agaram 39a6e6f533 slack: start rendering unicode 2021-08-30 20:55:55 -07:00
Kartik Agaram 61ec86b719 . 2021-08-30 09:21:52 -07:00
Kartik K. Agaram a479f0d083 .
Open question fixed.
2021-08-30 00:41:11 -07:00
Kartik K. Agaram c970190021 first rendering of non-latin script
Open question: why does column 0 get cropped? The spacing also seems
excessive. Are we taking up 3 grid points?
2021-08-30 00:34:40 -07:00
Kartik K. Agaram 877fbf640a . 2021-08-30 00:06:51 -07:00
Kartik K. Agaram 6e05a8fa27 fix bad terminology: grapheme -> code point
Unix text-mode terminals transparently support utf-8 these days, and so
I treat utf-8 sequences (which I call graphemes in Mu) as fundamental.

I then blindly carried over this state of affairs to bare-metal Mu,
where it makes no sense. If you don't have a terminal handling
font-rendering for you, fonts are most often indexed by code points and
not utf-8 sequences.
2021-08-29 22:20:09 -07:00
Kartik K. Agaram 4b90a26d71 . 2021-08-29 20:54:05 -07:00
Kartik K. Agaram 0633e401f9 . 2021-08-29 20:43:57 -07:00
Kartik K. Agaram b1dcfb03d0 load Font in a non-contiguous area of memory 2021-08-29 20:34:53 -07:00
Kartik K. Agaram 354c72a637 . 2021-08-29 20:33:54 -07:00
Kartik K. Agaram 14cfa3e109 . 2021-08-29 19:13:23 -07:00
Kartik K. Agaram 8306c084ad . 2021-08-29 19:12:47 -07:00
Kartik K. Agaram bd226ccb3a improve translation scripts 2021-08-29 11:25:08 -07:00
Kartik K. Agaram efae02cf11 . 2021-08-29 11:21:09 -07:00
Kartik K. Agaram 899cdcc3f3 inline SubX translation
We can't really translate purely SubX code anyway at the top-level. Stop
exposing those scripts.
2021-08-29 11:21:09 -07:00
Kartik K. Agaram c5f8415e03 retreat to 640KB 2021-08-29 11:21:09 -07:00
Kartik K. Agaram 0e2a9ad93d build still broken
Now we load all the code, but it overwrites the extended BIOS area.
640KB is no longer enough. Need to rethink loading strategy.
2021-08-29 11:21:09 -07:00
Kartik K. Agaram 1b18ec6ee9 import a few more unicode blocks from Unifont
shell/ is currently broken; we've overflowed available contiguous space
for code.

Block names based on https://www.compart.com/en/unicode/block:
  0x0000 - 0x007f Basic Latin 128
  0x0080 - 0x00ff Latin-1 Supplement 128
  0x0100 - 0x017f Latin Extended-A 128
  0x0180 - 0x024f Latin Extended-B 208
  0x0250 - 0x02af IPA Extensions 96
  0x02b0 - 0x02ff Spacing Modifier Letters 80
  0x0300 - 0x036f Combining Diacritical Marks 112
  0x0370 - 0x03ff Greek and Coptic 135
  0x0400 - 0x04ff Cyrillic 256
  0x0500 - 0x052f Cyrillic Supplement 48
  0x0530 - 0x058f Armenian 91
  0x0590 - 0x05ff Hebrew 88
  0x0600 - 0x06ff Arabic 255
  0x0700 - 0x074f Syriac 77
  0x0750 - 0x077f Arabic Supplement 48
  0x0780 - 0x07bf Thaana 50
  0x07c0 - 0x07ff NKo 62
  0x0800 - 0x083f Samaritan 61
  0x0840 - 0x085f Mandaic 29
  0x0860 - 0x086f Syriac Supplement 11
  0x08a0 - 0x08ff Arabic Extended-A 84
  0x0900 - 0x097f Devanagari 128
  0x0980 - 0x09ff Bengali 96
  0x0a00 - 0x0a7f Gurmukhi 80
  0x0a80 - 0x0aff Gujarati 91
  0x0b00 - 0x0b7f Oriya 91
  0x0b80 - 0x0bff Tamil 72
  0x0c00 - 0x0c7f Telugu 98
  0x0c80 - 0x0cff Kannada 89
  0x0d00 - 0x0d7f Malayalam 118
  0x0d80 - 0x0dff Sinhala 91
  0x0e00 - 0x0e7f Thai 87
  0x0e80 - 0x0eff Lao 82
  0x0f00 - 0x0fff Tibetan 211
  0x1000 - 0x109f Myanmar 160
  0x10a0 - 0x10ff Georgian 88

But don't trust the block sizes above. Thanks to gdb[1] for this helper:

define z
  print 2 * (0x$arg1 - 0x$arg0 + 1)
end

e.g:
  (gdb) z 10a0 10ff
  192

[1] https://sourceware.org/gdb/current/onlinedocs/gdb/Define.html
2021-08-29 11:20:47 -07:00
Kartik K. Agaram 34c7221b84 render wide glyphs in the font 2021-08-29 01:04:26 -07:00
Kartik K. Agaram 7e70d3ac04 bugfix in commit 8e182e394
Any command in shell that rendered the screen resulted in an infinite
loop. But it took me forever to even realize it was an infinite loop.
2021-08-29 00:51:57 -07:00
Kartik K. Agaram bd34858c4e . 2021-08-29 00:29:57 -07:00
Kartik K. Agaram a46cb565ca . 2021-08-29 00:16:51 -07:00
Kartik K. Agaram 96f91f9b2d . 2021-08-29 00:10:19 -07:00
Kartik K. Agaram f5f91a5843 . 2021-08-29 00:06:30 -07:00
Kartik K. Agaram 8e182e394e width-aware drawing primitives
No support yet for drawing wide graphemes.
2021-08-29 00:01:08 -07:00
Kartik K. Agaram bc859a7ca4 . 2021-08-28 22:57:22 -07:00
Kartik K. Agaram 468927ee1c . 2021-08-28 22:22:04 -07:00
Kartik K. Agaram 3640f1dfe9 support unused screen-cells in fake screens
We'll need this when rendering 16-bit glyphs. They'll occupy two
8x16 display units on screen, but the grapheme is a single unit as far
as fake screens are concerned.
2021-08-28 22:01:26 -07:00