mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-06 04:46:20 +00:00
364 lines
14 KiB
Ruby
Executable file
364 lines
14 KiB
Ruby
Executable file
#!/usr/bin/ruby
|
||
# coding: utf-8
|
||
# Copyright (c) 2022 Sam Blenny
|
||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||
#
|
||
# Generate json config, index, and alias files for codegen. Resorting to this
|
||
# depth of meta-config feels a bit silly. But, working from ruby dictionaries
|
||
# allows for better commenting and the chance to avoid json syntax errors in
|
||
# manual edits. Ruby also has good library support for translating between
|
||
# Unicode Normalization Forms, which is useful for making alias lists.
|
||
#
|
||
# Usage:
|
||
#
|
||
# ruby config_editor.rb
|
||
#
|
||
require 'json'
|
||
|
||
config_outfile = "config.json"
|
||
latin_index_outfile = "src_data/latin_index.json"
|
||
|
||
config = {
|
||
comment: [
|
||
"Config for use with main.go. Before making changes here, see config_editor.rb.",
|
||
],
|
||
loadermod: [
|
||
"../../../../../loader/src/fonts.rs",
|
||
],
|
||
fontmap: [
|
||
"../../fontmap.rs",
|
||
],
|
||
glyphSets: [
|
||
{
|
||
name: "Emoji",
|
||
sprites: "src_data/basic_emoji.png", size: 16, cols: 30, gutter: 2, border: 2,
|
||
legal: "src_data/basic_emoji_legal.txt",
|
||
index: "src_data/basic_emoji.codepoints",
|
||
indexType: "txt-row-major",
|
||
glyphTrim: "CJK",
|
||
rustout: "../fonts/emoji.rs",
|
||
loaderout: "../../../../../loader/src/fonts/emoji.rs",
|
||
},
|
||
{
|
||
name: "zh",
|
||
sprites: "src_data/hanzi.png", size: 16, cols: 30, gutter: 2, border: 2,
|
||
legal: "src_data/hanzi_legal.txt",
|
||
index: "src_data/hanzi.codepoints",
|
||
indexType: "txt-row-major",
|
||
glyphTrim: "CJK",
|
||
rustout: "../fonts/zh.rs",
|
||
loaderout: "../../../../../loader/src/fonts/zh.rs",
|
||
},
|
||
{
|
||
name: "ja",
|
||
sprites: "src_data/Izumi16.png", size: 16, cols: 30, gutter: 2, border: 2,
|
||
legal: "src_data/izumi_legal.txt",
|
||
index: "src_data/Izumi16.codepoints",
|
||
indexType: "txt-row-major",
|
||
glyphTrim: "CJK",
|
||
rustout: "../fonts/ja.rs",
|
||
loaderout: "../../../../../loader/src/fonts/ja.rs",
|
||
},
|
||
{
|
||
name: "kr",
|
||
sprites: "src_data/neodgm.png", size: 16, cols: 30, gutter: 2, border: 2,
|
||
legal: "src_data/neodgm_legal.txt",
|
||
index: "src_data/neodgm.codepoints",
|
||
indexType: "txt-row-major",
|
||
glyphTrim: "CJK",
|
||
rustout: "../fonts/kr.rs",
|
||
loaderout: "../../../../../loader/src/fonts/kr.rs",
|
||
},
|
||
{
|
||
name: "Bold",
|
||
sprites: "src_data/latin_bold.png", size: 15, cols: 16, gutter: 1, border: 1,
|
||
legal: "src_data/chicago_legal.txt",
|
||
index: latin_index_outfile,
|
||
indexType: "json-grid-coord",
|
||
glyphTrim: "proportional",
|
||
rustout: "../fonts/bold.rs",
|
||
loaderout: "../../../../../loader/src/fonts/bold.rs",
|
||
},
|
||
{
|
||
name: "Mono",
|
||
sprites: "src_data/latin_mono.png", size: 15, cols: 16, gutter: 1, border: 1,
|
||
legal: "src_data/courier_legal.txt",
|
||
index: latin_index_outfile,
|
||
indexType: "json-grid-coord",
|
||
glyphTrim: "monospace",
|
||
rustout: "../fonts/mono.rs",
|
||
loaderout: "../../../../../loader/src/fonts/mono.rs",
|
||
},
|
||
{
|
||
name: "Regular",
|
||
sprites: "src_data/latin_regular.png", size: 15, cols: 16, gutter: 1, border: 1,
|
||
legal: "src_data/geneva_legal.txt",
|
||
index: latin_index_outfile,
|
||
indexType: "json-grid-coord",
|
||
glyphTrim: "proportional",
|
||
rustout: "../fonts/regular.rs",
|
||
loaderout: "../../../../../loader/src/fonts/regular.rs",
|
||
},
|
||
{
|
||
name: "Tall",
|
||
sprites: "src_data/latin_tall.png", size: 19, cols: 30, gutter: 1, border: 1,
|
||
legal: "src_data/helvetica_legal.txt",
|
||
index: latin_index_outfile,
|
||
indexType: "json-grid-coord",
|
||
glyphTrim: "proportional",
|
||
rustout: "../fonts/tall.rs",
|
||
loaderout: "../../../../../loader/src/fonts/tall.rs",
|
||
},
|
||
{
|
||
name: "Small",
|
||
sprites: "src_data/latin_small.png", size: 12, cols: 16, gutter: 1, border: 1,
|
||
legal: "src_data/geneva_legal.txt",
|
||
index: latin_index_outfile,
|
||
indexType: "json-grid-coord",
|
||
glyphTrim: "proportional",
|
||
rustout: "../fonts/small.rs",
|
||
loaderout: "../../../../../loader/src/fonts/small.rs",
|
||
}
|
||
]
|
||
}
|
||
|
||
latin_index = {
|
||
comment: [
|
||
"Before making changes here, see ../config_editor.rb.",
|
||
],
|
||
map: [
|
||
# Unicode Basic Latin block
|
||
{hex: "20", row: 0, col: 2, label: " "},
|
||
{hex: "21", row: 1, col: 2, label: "!"},
|
||
{hex: "22", row: 2, col: 2, label: "\""},
|
||
{hex: "23", row: 3, col: 2, label: "#"},
|
||
{hex: "24", row: 4, col: 2, label: "$"},
|
||
{hex: "25", row: 5, col: 2, label: "%"},
|
||
{hex: "26", row: 6, col: 2, label: "&"},
|
||
{hex: "27", row: 7, col: 2, label: "'"},
|
||
{hex: "28", row: 8, col: 2, label: "("},
|
||
{hex: "29", row: 9, col: 2, label: ")"},
|
||
{hex: "2A", row: 10, col: 2, label: "*"},
|
||
{hex: "2B", row: 11, col: 2, label: "+"},
|
||
{hex: "2C", row: 12, col: 2, label: ","},
|
||
{hex: "2D", row: 13, col: 2, label: "-"},
|
||
{hex: "2E", row: 14, col: 2, label: "."},
|
||
{hex: "2F", row: 15, col: 2, label: "/"},
|
||
{hex: "30", row: 0, col: 3, label: "0"},
|
||
{hex: "31", row: 1, col: 3, label: "1"},
|
||
{hex: "32", row: 2, col: 3, label: "2"},
|
||
{hex: "33", row: 3, col: 3, label: "3"},
|
||
{hex: "34", row: 4, col: 3, label: "4"},
|
||
{hex: "35", row: 5, col: 3, label: "5"},
|
||
{hex: "36", row: 6, col: 3, label: "6"},
|
||
{hex: "37", row: 7, col: 3, label: "7"},
|
||
{hex: "38", row: 8, col: 3, label: "8"},
|
||
{hex: "39", row: 9, col: 3, label: "9"},
|
||
{hex: "3A", row: 10, col: 3, label: ":"},
|
||
{hex: "3B", row: 11, col: 3, label: ";"},
|
||
{hex: "3C", row: 12, col: 3, label: "<"},
|
||
{hex: "3D", row: 13, col: 3, label: "="},
|
||
{hex: "3E", row: 14, col: 3, label: ">"},
|
||
{hex: "3F", row: 15, col: 3, label: "?"},
|
||
{hex: "40", row: 0, col: 4, label: "@"},
|
||
{hex: "41", row: 1, col: 4, label: "A"},
|
||
{hex: "42", row: 2, col: 4, label: "B"},
|
||
{hex: "43", row: 3, col: 4, label: "C"},
|
||
{hex: "44", row: 4, col: 4, label: "D"},
|
||
{hex: "45", row: 5, col: 4, label: "E"},
|
||
{hex: "46", row: 6, col: 4, label: "F"},
|
||
{hex: "47", row: 7, col: 4, label: "G"},
|
||
{hex: "48", row: 8, col: 4, label: "H"},
|
||
{hex: "49", row: 9, col: 4, label: "I"},
|
||
{hex: "4A", row: 10, col: 4, label: "J"},
|
||
{hex: "4B", row: 11, col: 4, label: "K"},
|
||
{hex: "4C", row: 12, col: 4, label: "L"},
|
||
{hex: "4D", row: 13, col: 4, label: "M"},
|
||
{hex: "4E", row: 14, col: 4, label: "N"},
|
||
{hex: "4F", row: 15, col: 4, label: "O"},
|
||
{hex: "50", row: 0, col: 5, label: "P"},
|
||
{hex: "51", row: 1, col: 5, label: "Q"},
|
||
{hex: "52", row: 2, col: 5, label: "R"},
|
||
{hex: "53", row: 3, col: 5, label: "S"},
|
||
{hex: "54", row: 4, col: 5, label: "T"},
|
||
{hex: "55", row: 5, col: 5, label: "U"},
|
||
{hex: "56", row: 6, col: 5, label: "V"},
|
||
{hex: "57", row: 7, col: 5, label: "W"},
|
||
{hex: "58", row: 8, col: 5, label: "X"},
|
||
{hex: "59", row: 9, col: 5, label: "Y"},
|
||
{hex: "5A", row: 10, col: 5, label: "Z"},
|
||
{hex: "5B", row: 11, col: 5, label: "["},
|
||
{hex: "5C", row: 12, col: 5, label: "\\"},
|
||
{hex: "5D", row: 13, col: 5, label: "]"},
|
||
{hex: "5E", row: 14, col: 5, label: "^"},
|
||
{hex: "5F", row: 15, col: 5, label: "_"},
|
||
{hex: "60", row: 0, col: 6, label: "`"},
|
||
{hex: "61", row: 1, col: 6, label: "a"},
|
||
{hex: "62", row: 2, col: 6, label: "b"},
|
||
{hex: "63", row: 3, col: 6, label: "c"},
|
||
{hex: "64", row: 4, col: 6, label: "d"},
|
||
{hex: "65", row: 5, col: 6, label: "e"},
|
||
{hex: "66", row: 6, col: 6, label: "f"},
|
||
{hex: "67", row: 7, col: 6, label: "g"},
|
||
{hex: "68", row: 8, col: 6, label: "h"},
|
||
{hex: "69", row: 9, col: 6, label: "i"},
|
||
{hex: "6A", row: 10, col: 6, label: "j"},
|
||
{hex: "6B", row: 11, col: 6, label: "k"},
|
||
{hex: "6C", row: 12, col: 6, label: "l"},
|
||
{hex: "6D", row: 13, col: 6, label: "m"},
|
||
{hex: "6E", row: 14, col: 6, label: "n"},
|
||
{hex: "6F", row: 15, col: 6, label: "o"},
|
||
{hex: "70", row: 0, col: 7, label: "p"},
|
||
{hex: "71", row: 1, col: 7, label: "q"},
|
||
{hex: "72", row: 2, col: 7, label: "r"},
|
||
{hex: "73", row: 3, col: 7, label: "s"},
|
||
{hex: "74", row: 4, col: 7, label: "t"},
|
||
{hex: "75", row: 5, col: 7, label: "u"},
|
||
{hex: "76", row: 6, col: 7, label: "v"},
|
||
{hex: "77", row: 7, col: 7, label: "w"},
|
||
{hex: "78", row: 8, col: 7, label: "x"},
|
||
{hex: "79", row: 9, col: 7, label: "y"},
|
||
{hex: "7A", row: 10, col: 7, label: "z"},
|
||
{hex: "7B", row: 11, col: 7, label: "{"},
|
||
{hex: "7C", row: 12, col: 7, label: "|"},
|
||
{hex: "7D", row: 13, col: 7, label: "}"},
|
||
{hex: "7E", row: 14, col: 7, label: "~"},
|
||
|
||
# Unicode Latin 1 block
|
||
{hex: "A0", row: 0, col: 2, label: "No-Break Space"},
|
||
{hex: "A1", row: 1, col: 12, label: "¡"},
|
||
{hex: "A2", row: 2, col: 10, label: "¢"},
|
||
{hex: "A3", row: 3, col: 10, label: "£"},
|
||
{hex: "A4", row: 15, col: 1, label: "¤"},
|
||
{hex: "A5", row: 4, col: 11, label: "¥"},
|
||
{hex: "A6", row: 15, col: 7, label: "¦"},
|
||
{hex: "A7", row: 4, col: 10, label: "§"},
|
||
{hex: "A8", row: 12, col: 10, label: "¨"},
|
||
{hex: "A9", row: 9, col: 10, label: "©"},
|
||
{hex: "AA", row: 11, col: 11, label: "ª"},
|
||
{hex: "AB", row: 7, col: 12, label: "«"},
|
||
{hex: "AC", row: 2, col: 12, label: "¬"},
|
||
{hex: "AD", row: 13, col: 2, label: "Soft Hyphen"},
|
||
{hex: "AE", row: 8, col: 10, label: "®"},
|
||
{hex: "AF", row: 8, col: 15, label: "¯ Macron"},
|
||
{hex: "B0", row: 1, col: 10, label: "° Degree Sign"},
|
||
{hex: "B1", row: 1, col: 11, label: "±"},
|
||
{hex: "B2", row: 3, col: 1, label: "²"},
|
||
{hex: "B3", row: 4, col: 1, label: "³"},
|
||
{hex: "B4", row: 11, col: 10, label: "´"},
|
||
{hex: "B5", row: 5, col: 11, label: "µ"},
|
||
{hex: "B6", row: 6, col: 10, label: "¶"},
|
||
{hex: "B7", row: 1, col: 14, label: "·"},
|
||
{hex: "B8", row: 12, col: 15, label: "¸ Cedillia"},
|
||
{hex: "B9", row: 2, col: 1, label: "¹"},
|
||
{hex: "BA", row: 12, col: 11, label: "º"},
|
||
{hex: "BB", row: 8, col: 12, label: "»"},
|
||
{hex: "BC", row: 5, col: 1, label: "¼"},
|
||
{hex: "BD", row: 6, col: 1, label: "½"},
|
||
{hex: "BE", row: 7, col: 1, label: "¾"},
|
||
{hex: "BF", row: 0, col: 12, label: "¿"},
|
||
{hex: "C0", row: 11, col: 12, label: "À"},
|
||
{hex: "C1", row: 7, col: 14, label: "Á"},
|
||
{hex: "C2", row: 5, col: 14, label: "Â"},
|
||
{hex: "C3", row: 12, col: 12, label: "Ã"},
|
||
{hex: "C4", row: 0, col: 8, label: "Ä"},
|
||
{hex: "C5", row: 1, col: 8, label: "Å"},
|
||
{hex: "C6", row: 14, col: 10, label: "Æ"},
|
||
{hex: "C7", row: 2, col: 8, label: "Ç"},
|
||
{hex: "C8", row: 9, col: 14, label: "È"},
|
||
{hex: "C9", row: 3, col: 8, label: "É"},
|
||
{hex: "CA", row: 6, col: 14, label: "Ê"},
|
||
{hex: "CB", row: 8, col: 14, label: "Ë"},
|
||
{hex: "CC", row: 13, col: 14, label: "Ì"},
|
||
{hex: "CD", row: 10, col: 14, label: "Í"},
|
||
{hex: "CE", row: 11, col: 14, label: "Î"},
|
||
{hex: "CF", row: 12, col: 14, label: "Ï"},
|
||
{hex: "D0", row: 8, col: 1, label: "Ð"},
|
||
{hex: "D1", row: 4, col: 8, label: "Ñ"},
|
||
{hex: "D2", row: 1, col: 15, label: "Ò"},
|
||
{hex: "D3", row: 14, col: 14, label: "Ó"},
|
||
{hex: "D4", row: 15, col: 14, label: "Ô"},
|
||
{hex: "D5", row: 13, col: 12, label: "Õ"},
|
||
{hex: "D6", row: 5, col: 8, label: "Ö"},
|
||
{hex: "D7", row: 9, col: 1, label: "× Multiplication Sign"},
|
||
{hex: "D8", row: 15, col: 10, label: "Ø"},
|
||
{hex: "D9", row: 4, col: 15, label: "Ù"},
|
||
{hex: "DA", row: 2, col: 15, label: "Ú"},
|
||
{hex: "DB", row: 3, col: 15, label: "Û"},
|
||
{hex: "DC", row: 6, col: 8, label: "Ü"},
|
||
{hex: "DD", row: 10, col: 1, label: "Ý"},
|
||
{hex: "DE", row: 11, col: 1, label: "Þ"},
|
||
{hex: "DF", row: 7, col: 10, label: "ß"},
|
||
{hex: "E0", row: 8, col: 8, label: "à"},
|
||
{hex: "E1", row: 7, col: 8, label: "á"},
|
||
{hex: "E2", row: 9, col: 8, label: "â"},
|
||
{hex: "E3", row: 11, col: 8, label: "ã"},
|
||
{hex: "E4", row: 10, col: 8, label: "ä"},
|
||
{hex: "E5", row: 12, col: 8, label: "å"},
|
||
{hex: "E6", row: 14, col: 11, label: "æ"},
|
||
{hex: "E7", row: 13, col: 8, label: "ç"},
|
||
{hex: "E8", row: 15, col: 8, label: "è"},
|
||
{hex: "E9", row: 14, col: 8, label: "é"},
|
||
{hex: "EA", row: 0, col: 9, label: "ê"},
|
||
{hex: "EB", row: 1, col: 9, label: "ë"},
|
||
{hex: "EC", row: 3, col: 9, label: "ì"},
|
||
{hex: "ED", row: 2, col: 9, label: "í"},
|
||
{hex: "EE", row: 4, col: 9, label: "î"},
|
||
{hex: "EF", row: 5, col: 9, label: "ï"},
|
||
{hex: "F0", row: 12, col: 1, label: "ð"},
|
||
{hex: "F1", row: 6, col: 9, label: "ñ"},
|
||
{hex: "F2", row: 8, col: 9, label: "ò"},
|
||
{hex: "F3", row: 7, col: 9, label: "ó"},
|
||
{hex: "F4", row: 9, col: 9, label: "ô"},
|
||
{hex: "F5", row: 11, col: 9, label: "õ"},
|
||
{hex: "F6", row: 10, col: 9, label: "ö"},
|
||
{hex: "F7", row: 6, col: 13, label: "÷"},
|
||
{hex: "F8", row: 15, col: 11, label: "ø"},
|
||
{hex: "F9", row: 13, col: 9, label: "ù"},
|
||
{hex: "FA", row: 12, col: 9, label: "ú"},
|
||
{hex: "FB", row: 14, col: 9, label: "û"},
|
||
{hex: "FC", row: 15, col: 9, label: "ü"},
|
||
{hex: "FD", row: 13, col: 1, label: "ý"},
|
||
{hex: "FE", row: 14, col: 1, label: "þ"},
|
||
{hex: "FF", row: 8, col: 13, label: "ÿ"},
|
||
|
||
# Unicode Latin Extended A block
|
||
{hex: "152", row: 14, col: 12, label: "Œ"},
|
||
{hex: "153", row: 15, col: 12, label: "œ"},
|
||
|
||
# Unicode General Punctuation block
|
||
{hex: "2018", row: 4, col: 13, label: "‘ Left Single Quotation Mark"},
|
||
{hex: "2019", row: 5, col: 13, label: "’ Right Single Quotation Mark"},
|
||
{hex: "201A", row: 2, col: 14, label: "‚ Single Low-9 Quotation Mark"},
|
||
{hex: "201B", row: 7, col: 11, label: "‛ Single High-Reversed-9 Quotation Mark"},
|
||
{hex: "201C", row: 2, col: 13, label: "“ Left Double Quotation Mark"},
|
||
{hex: "201D", row: 3, col: 13, label: "” Right Double Quotation Mark"},
|
||
{hex: "201E", row: 3, col: 14, label: "„ Double Low-9 Quotation Mark"},
|
||
{hex: "201F", row: 8, col: 11, label: "‟ Double High-Reversed-9 Quotation Mark"},
|
||
{hex: "2020", row: 0, col: 10, label: "†"},
|
||
{hex: "2021", row: 0, col: 14, label: "‡"},
|
||
{hex: "2022", row: 5, col: 10, label: "•"},
|
||
{hex: "2026", row: 9, col: 12, label: "…"},
|
||
|
||
# Unicode Currency Symbols block
|
||
{hex: "20AC", row: 11, col: 13, label: "€"},
|
||
|
||
# Unicode Specials Block
|
||
{hex: "FFFD", row: 0, col: 15, label: "<EFBFBD>"},
|
||
]
|
||
}
|
||
|
||
puts "Preparing to overwrite files..."
|
||
puts " #{config_outfile}"
|
||
puts " #{latin_index_outfile}"
|
||
print "Do you want to proceed? [y/N]: "
|
||
abort "Operation canceled" if !["y", "Y"].include? gets.chomp
|
||
|
||
puts "writing #{latin_index_outfile}"
|
||
File.open(latin_index_outfile, "w") {|f|
|
||
f.write JSON.generate(latin_index, {space: " ", object_nl: " ", array_nl: "\n"})
|
||
}
|
||
puts "writing #{config_outfile}"
|
||
File.open(config_outfile, "w") {|f|
|
||
f.puts JSON.pretty_generate(config)
|
||
}
|