Add complete example showcasing Unicode support

This commit is contained in:
Feoramund
2024-06-24 14:50:49 -04:00
parent f325a08e57
commit fbd609fa37

View File

@@ -142,5 +142,86 @@ is structured than what we can assume.
This procedure will output 2 times the number of UTF-8 runes in a string, a
simple heuristic for CJK-only wide text.
**Unicode Support:**
This package makes use of the `grapheme_count` procedure from the
`core:unicode/utf8` package. It is a complete, standards-compliant
implementation for counting graphemes and calculating visual width of a Unicode
grapheme cluster in monospace cells.
Here is a full example of how well-supported Unicode is with this package:
package main
import "core:fmt"
import "core:io"
import "core:os"
import "core:text/table"
scripts :: proc(w: io.Writer) {
t: table.Table
table.init(&t)
table.caption(&t, "Tést Suite")
table.padding(&t, 1, 3)
table.header_of_aligned_values(&t, {{.Left, "Script"}, {.Center, "Sample"}})
table.row(&t, "Latin", "At vero eos et accusamus et iusto odio dignissimos ducimus,")
table.row(&t, "Cyrillic", "Ру́сский язы́к язык восточнославянской группы славянской")
table.row(&t, "Greek", "Η ελληνική γλώσσα ανήκει στην ινδοευρωπαϊκή οικογένεια")
table.row(&t, "Younger Futhark", " ")
table.row(&t, "Chinese hanzi", "西")
table.row(&t, "Japanese kana", "")
table.row(&t, "Korean hangul", ", , ")
table.row(&t, "Thai", " -")
table.row(&t, "Georgian", " . ,")
table.row(&t, "Armenian", "Իր շուրջ հինգհազարամյա գոյության ընթացքում հայերենը շփվել է տարբեր")
table.row(&t)
table.row_of_aligned_values(&t, {{.Left, "Arabic"}, {.Right, "ٱللُّغَةُ ٱلْعَرَبِيَّة هي أكثر اللغات السامية تحدثًا، وإحدى أكثر"}})
table.row_of_aligned_values(&t, {{.Left, "Hebrew"}, {.Right, "עִבְרִית היא שפה שמית, ממשפחת השפות האפרו-אסייתיות, הידועה"}})
table.row(&t)
table.row(&t, "Swedish", "Växjö [ˈvɛkːˌɧøː] är en tätort i södra Smålands inland samt centralort i Växjö kommun")
table.row(&t, "Saxon", "Hwæt! We Gardena in geardagum, þeodcyninga, þrym gefrunon, hu ða æþelingas ellen fremedon.")
table.row(&t)
table.aligned_row_of_values(&t, .Center, "Emoji (Single codepoints)", "\U0001f4ae \U0001F600 \U0001F201 \U0001F21A")
table.row(&t, "Excessive Diacritics", "H̷e̶l̵l̸o̴p̵e̷ ̸w̶o̸r̵l̶d̵!̴")
table.write_plain_table(w, &t)
fmt.println()
}
main :: proc() {
stdout := os.stream_from_handle(os.stdout)
scripts(stdout)
}
This will print out:
+----------------------------------------------------------------------------------------------------------------------------+
| Tést Suite |
+-----------------------------+----------------------------------------------------------------------------------------------+
| Script | Sample |
+-----------------------------+----------------------------------------------------------------------------------------------+
| Latin | At vero eos et accusamus et iusto odio dignissimos ducimus, |
| Cyrillic | Ру́сский язы́к язык восточнославянской группы славянской |
| Greek | Η ελληνική γλώσσα ανήκει στην ινδοευρωπαϊκή οικογένεια |
| Younger Futhark | |
| Chinese hanzi | 西 |
| Japanese kana | |
| Korean hangul | , , |
| Thai | - |
| Georgian | . , |
| Armenian | Իր շուրջ հինգհազարամյա գոյության ընթացքում հայերենը շփվել է տարբեր |
| | |
| Arabic | ٱللُّغَةُ ٱلْعَرَبِيَّة هي أكثر اللغات السامية تحدثًا، وإحدى أكثر |
| Hebrew | עִבְרִית היא שפה שמית, ממשפחת השפות האפרו-אסייתיות, הידועה |
| | |
| Swedish | Växjö [ˈvɛkːˌɧøː] är en tätort i södra Smålands inland samt centralort i Växjö kommun |
| Saxon | Hwæt! We Gardena in geardagum, þeodcyninga, þrym gefrunon, hu ða æþelingas ellen fremedon. |
| | |
| Emoji (Single codepoints) | 💮 😀 🈁 🈚 |
| Excessive Diacritics | H̷e̶l̵l̸o̴p̵e̷ ̸w̶o̸r̵l̶d̵!̴ |
+-----------------------------+----------------------------------------------------------------------------------------------+
*/
package text_table