init
This commit is contained in:
commit
383687eb28
23
Makefile
Normal file
23
Makefile
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# dmenu_charinput - a unicode character selection menu with dmenu
|
||||||
|
|
||||||
|
all: dmenu_charinput unicodedata
|
||||||
|
|
||||||
|
unicodedata: UnicodeData.txt
|
||||||
|
go build unicodedata.go
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f unicodedata
|
||||||
|
|
||||||
|
install: all
|
||||||
|
@echo -n "Checking for dmenu... " && which dmenu || echo "not found"
|
||||||
|
@echo -n "Checking for xclip... " && which xclip || echo "not found"
|
||||||
|
mkdir -p /usr/local/bin
|
||||||
|
cp -f unicodedata dmenu_charinput /usr/local/bin
|
||||||
|
chmod 755 /usr/local/bin/unicodedata
|
||||||
|
chmod 755 /usr/local/bin/dmenu_charinput
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -f /usr/local/bin/unicodedata\
|
||||||
|
/usr/local/bin/dmenu_charinput
|
||||||
|
|
||||||
|
.PHONY: all clean install uninstall
|
27
README
Normal file
27
README
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
dmenu_charinput - unicode character selection menu
|
||||||
|
==================================================
|
||||||
|
dmenu_charinput is a unicode character selection menu
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
- dmenu
|
||||||
|
- xclip
|
||||||
|
- go 1.16+
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
Enter the following command to build and install
|
||||||
|
(if necessary as root):
|
||||||
|
|
||||||
|
make clean install
|
||||||
|
|
||||||
|
|
||||||
|
Key binding in dwm
|
||||||
|
------------------
|
||||||
|
Add something like this to your config.h
|
||||||
|
|
||||||
|
static const char *charsearchcmd[] = { "dmenu_charinput", dmenumon, NULL };
|
||||||
|
|
||||||
|
{ MODKEY, XK_e, spawn, {.v = charsearchcmd } },
|
34627
UnicodeData.txt
Normal file
34627
UnicodeData.txt
Normal file
File diff suppressed because it is too large
Load Diff
337
dmenu_charinput
Executable file
337
dmenu_charinput
Executable file
|
@ -0,0 +1,337 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# call this with the dmenu monitor as $1
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 MONITOR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
range=$(echo '
|
||||||
|
0000..007F; Basic Latin
|
||||||
|
0080..00FF; Latin-1 Supplement
|
||||||
|
0100..017F; Latin Extended-A
|
||||||
|
0180..024F; Latin Extended-B
|
||||||
|
0250..02AF; IPA Extensions
|
||||||
|
02B0..02FF; Spacing Modifier Letters
|
||||||
|
0300..036F; Combining Diacritical Marks
|
||||||
|
0370..03FF; Greek and Coptic
|
||||||
|
0400..04FF; Cyrillic
|
||||||
|
0500..052F; Cyrillic Supplement
|
||||||
|
0530..058F; Armenian
|
||||||
|
0590..05FF; Hebrew
|
||||||
|
0600..06FF; Arabic
|
||||||
|
0700..074F; Syriac
|
||||||
|
0750..077F; Arabic Supplement
|
||||||
|
0780..07BF; Thaana
|
||||||
|
07C0..07FF; NKo
|
||||||
|
0800..083F; Samaritan
|
||||||
|
0840..085F; Mandaic
|
||||||
|
0860..086F; Syriac Supplement
|
||||||
|
0870..089F; Arabic Extended-B
|
||||||
|
08A0..08FF; Arabic Extended-A
|
||||||
|
0900..097F; Devanagari
|
||||||
|
0980..09FF; Bengali
|
||||||
|
0A00..0A7F; Gurmukhi
|
||||||
|
0A80..0AFF; Gujarati
|
||||||
|
0B00..0B7F; Oriya
|
||||||
|
0B80..0BFF; Tamil
|
||||||
|
0C00..0C7F; Telugu
|
||||||
|
0C80..0CFF; Kannada
|
||||||
|
0D00..0D7F; Malayalam
|
||||||
|
0D80..0DFF; Sinhala
|
||||||
|
0E00..0E7F; Thai
|
||||||
|
0E80..0EFF; Lao
|
||||||
|
0F00..0FFF; Tibetan
|
||||||
|
1000..109F; Myanmar
|
||||||
|
10A0..10FF; Georgian
|
||||||
|
1100..11FF; Hangul Jamo
|
||||||
|
1200..137F; Ethiopic
|
||||||
|
1380..139F; Ethiopic Supplement
|
||||||
|
13A0..13FF; Cherokee
|
||||||
|
1400..167F; Unified Canadian Aboriginal Syllabics
|
||||||
|
1680..169F; Ogham
|
||||||
|
16A0..16FF; Runic
|
||||||
|
1700..171F; Tagalog
|
||||||
|
1720..173F; Hanunoo
|
||||||
|
1740..175F; Buhid
|
||||||
|
1760..177F; Tagbanwa
|
||||||
|
1780..17FF; Khmer
|
||||||
|
1800..18AF; Mongolian
|
||||||
|
18B0..18FF; Unified Canadian Aboriginal Syllabics Extended
|
||||||
|
1900..194F; Limbu
|
||||||
|
1950..197F; Tai Le
|
||||||
|
1980..19DF; New Tai Lue
|
||||||
|
19E0..19FF; Khmer Symbols
|
||||||
|
1A00..1A1F; Buginese
|
||||||
|
1A20..1AAF; Tai Tham
|
||||||
|
1AB0..1AFF; Combining Diacritical Marks Extended
|
||||||
|
1B00..1B7F; Balinese
|
||||||
|
1B80..1BBF; Sundanese
|
||||||
|
1BC0..1BFF; Batak
|
||||||
|
1C00..1C4F; Lepcha
|
||||||
|
1C50..1C7F; Ol Chiki
|
||||||
|
1C80..1C8F; Cyrillic Extended-C
|
||||||
|
1C90..1CBF; Georgian Extended
|
||||||
|
1CC0..1CCF; Sundanese Supplement
|
||||||
|
1CD0..1CFF; Vedic Extensions
|
||||||
|
1D00..1D7F; Phonetic Extensions
|
||||||
|
1D80..1DBF; Phonetic Extensions Supplement
|
||||||
|
1DC0..1DFF; Combining Diacritical Marks Supplement
|
||||||
|
1E00..1EFF; Latin Extended Additional
|
||||||
|
1F00..1FFF; Greek Extended
|
||||||
|
2000..206F; General Punctuation
|
||||||
|
2070..209F; Superscripts and Subscripts
|
||||||
|
20A0..20CF; Currency Symbols
|
||||||
|
20D0..20FF; Combining Diacritical Marks for Symbols
|
||||||
|
2100..214F; Letterlike Symbols
|
||||||
|
2150..218F; Number Forms
|
||||||
|
2190..21FF; Arrows
|
||||||
|
2200..22FF; Mathematical Operators
|
||||||
|
2300..23FF; Miscellaneous Technical
|
||||||
|
2400..243F; Control Pictures
|
||||||
|
2440..245F; Optical Character Recognition
|
||||||
|
2460..24FF; Enclosed Alphanumerics
|
||||||
|
2500..257F; Box Drawing
|
||||||
|
2580..259F; Block Elements
|
||||||
|
25A0..25FF; Geometric Shapes
|
||||||
|
2600..26FF; Miscellaneous Symbols
|
||||||
|
2700..27BF; Dingbats
|
||||||
|
27C0..27EF; Miscellaneous Mathematical Symbols-A
|
||||||
|
27F0..27FF; Supplemental Arrows-A
|
||||||
|
2800..28FF; Braille Patterns
|
||||||
|
2900..297F; Supplemental Arrows-B
|
||||||
|
2980..29FF; Miscellaneous Mathematical Symbols-B
|
||||||
|
2A00..2AFF; Supplemental Mathematical Operators
|
||||||
|
2B00..2BFF; Miscellaneous Symbols and Arrows
|
||||||
|
2C00..2C5F; Glagolitic
|
||||||
|
2C60..2C7F; Latin Extended-C
|
||||||
|
2C80..2CFF; Coptic
|
||||||
|
2D00..2D2F; Georgian Supplement
|
||||||
|
2D30..2D7F; Tifinagh
|
||||||
|
2D80..2DDF; Ethiopic Extended
|
||||||
|
2DE0..2DFF; Cyrillic Extended-A
|
||||||
|
2E00..2E7F; Supplemental Punctuation
|
||||||
|
2E80..2EFF; CJK Radicals Supplement
|
||||||
|
2F00..2FDF; Kangxi Radicals
|
||||||
|
2FF0..2FFF; Ideographic Description Characters
|
||||||
|
3000..303F; CJK Symbols and Punctuation
|
||||||
|
3040..309F; Hiragana
|
||||||
|
30A0..30FF; Katakana
|
||||||
|
3100..312F; Bopomofo
|
||||||
|
3130..318F; Hangul Compatibility Jamo
|
||||||
|
3190..319F; Kanbun
|
||||||
|
31A0..31BF; Bopomofo Extended
|
||||||
|
31C0..31EF; CJK Strokes
|
||||||
|
31F0..31FF; Katakana Phonetic Extensions
|
||||||
|
3200..32FF; Enclosed CJK Letters and Months
|
||||||
|
3300..33FF; CJK Compatibility
|
||||||
|
3400..4DBF; CJK Unified Ideographs Extension A
|
||||||
|
4DC0..4DFF; Yijing Hexagram Symbols
|
||||||
|
4E00..9FFF; CJK Unified Ideographs
|
||||||
|
A000..A48F; Yi Syllables
|
||||||
|
A490..A4CF; Yi Radicals
|
||||||
|
A4D0..A4FF; Lisu
|
||||||
|
A500..A63F; Vai
|
||||||
|
A640..A69F; Cyrillic Extended-B
|
||||||
|
A6A0..A6FF; Bamum
|
||||||
|
A700..A71F; Modifier Tone Letters
|
||||||
|
A720..A7FF; Latin Extended-D
|
||||||
|
A800..A82F; Syloti Nagri
|
||||||
|
A830..A83F; Common Indic Number Forms
|
||||||
|
A840..A87F; Phags-pa
|
||||||
|
A880..A8DF; Saurashtra
|
||||||
|
A8E0..A8FF; Devanagari Extended
|
||||||
|
A900..A92F; Kayah Li
|
||||||
|
A930..A95F; Rejang
|
||||||
|
A960..A97F; Hangul Jamo Extended-A
|
||||||
|
A980..A9DF; Javanese
|
||||||
|
A9E0..A9FF; Myanmar Extended-B
|
||||||
|
AA00..AA5F; Cham
|
||||||
|
AA60..AA7F; Myanmar Extended-A
|
||||||
|
AA80..AADF; Tai Viet
|
||||||
|
AAE0..AAFF; Meetei Mayek Extensions
|
||||||
|
AB00..AB2F; Ethiopic Extended-A
|
||||||
|
AB30..AB6F; Latin Extended-E
|
||||||
|
AB70..ABBF; Cherokee Supplement
|
||||||
|
ABC0..ABFF; Meetei Mayek
|
||||||
|
AC00..D7AF; Hangul Syllables
|
||||||
|
D7B0..D7FF; Hangul Jamo Extended-B
|
||||||
|
D800..DB7F; High Surrogates
|
||||||
|
DB80..DBFF; High Private Use Surrogates
|
||||||
|
DC00..DFFF; Low Surrogates
|
||||||
|
E000..F8FF; Private Use Area
|
||||||
|
F900..FAFF; CJK Compatibility Ideographs
|
||||||
|
FB00..FB4F; Alphabetic Presentation Forms
|
||||||
|
FB50..FDFF; Arabic Presentation Forms-A
|
||||||
|
FE00..FE0F; Variation Selectors
|
||||||
|
FE10..FE1F; Vertical Forms
|
||||||
|
FE20..FE2F; Combining Half Marks
|
||||||
|
FE30..FE4F; CJK Compatibility Forms
|
||||||
|
FE50..FE6F; Small Form Variants
|
||||||
|
FE70..FEFF; Arabic Presentation Forms-B
|
||||||
|
FF00..FFEF; Halfwidth and Fullwidth Forms
|
||||||
|
FFF0..FFFF; Specials
|
||||||
|
10000..1007F; Linear B Syllabary
|
||||||
|
10080..100FF; Linear B Ideograms
|
||||||
|
10100..1013F; Aegean Numbers
|
||||||
|
10140..1018F; Ancient Greek Numbers
|
||||||
|
10190..101CF; Ancient Symbols
|
||||||
|
101D0..101FF; Phaistos Disc
|
||||||
|
10280..1029F; Lycian
|
||||||
|
102A0..102DF; Carian
|
||||||
|
102E0..102FF; Coptic Epact Numbers
|
||||||
|
10300..1032F; Old Italic
|
||||||
|
10330..1034F; Gothic
|
||||||
|
10350..1037F; Old Permic
|
||||||
|
10380..1039F; Ugaritic
|
||||||
|
103A0..103DF; Old Persian
|
||||||
|
10400..1044F; Deseret
|
||||||
|
10450..1047F; Shavian
|
||||||
|
10480..104AF; Osmanya
|
||||||
|
104B0..104FF; Osage
|
||||||
|
10500..1052F; Elbasan
|
||||||
|
10530..1056F; Caucasian Albanian
|
||||||
|
10570..105BF; Vithkuqi
|
||||||
|
10600..1077F; Linear A
|
||||||
|
10780..107BF; Latin Extended-F
|
||||||
|
10800..1083F; Cypriot Syllabary
|
||||||
|
10840..1085F; Imperial Aramaic
|
||||||
|
10860..1087F; Palmyrene
|
||||||
|
10880..108AF; Nabataean
|
||||||
|
108E0..108FF; Hatran
|
||||||
|
10900..1091F; Phoenician
|
||||||
|
10920..1093F; Lydian
|
||||||
|
10980..1099F; Meroitic Hieroglyphs
|
||||||
|
109A0..109FF; Meroitic Cursive
|
||||||
|
10A00..10A5F; Kharoshthi
|
||||||
|
10A60..10A7F; Old South Arabian
|
||||||
|
10A80..10A9F; Old North Arabian
|
||||||
|
10AC0..10AFF; Manichaean
|
||||||
|
10B00..10B3F; Avestan
|
||||||
|
10B40..10B5F; Inscriptional Parthian
|
||||||
|
10B60..10B7F; Inscriptional Pahlavi
|
||||||
|
10B80..10BAF; Psalter Pahlavi
|
||||||
|
10C00..10C4F; Old Turkic
|
||||||
|
10C80..10CFF; Old Hungarian
|
||||||
|
10D00..10D3F; Hanifi Rohingya
|
||||||
|
10E60..10E7F; Rumi Numeral Symbols
|
||||||
|
10E80..10EBF; Yezidi
|
||||||
|
10F00..10F2F; Old Sogdian
|
||||||
|
10F30..10F6F; Sogdian
|
||||||
|
10F70..10FAF; Old Uyghur
|
||||||
|
10FB0..10FDF; Chorasmian
|
||||||
|
10FE0..10FFF; Elymaic
|
||||||
|
11000..1107F; Brahmi
|
||||||
|
11080..110CF; Kaithi
|
||||||
|
110D0..110FF; Sora Sompeng
|
||||||
|
11100..1114F; Chakma
|
||||||
|
11150..1117F; Mahajani
|
||||||
|
11180..111DF; Sharada
|
||||||
|
111E0..111FF; Sinhala Archaic Numbers
|
||||||
|
11200..1124F; Khojki
|
||||||
|
11280..112AF; Multani
|
||||||
|
112B0..112FF; Khudawadi
|
||||||
|
11300..1137F; Grantha
|
||||||
|
11400..1147F; Newa
|
||||||
|
11480..114DF; Tirhuta
|
||||||
|
11580..115FF; Siddham
|
||||||
|
11600..1165F; Modi
|
||||||
|
11660..1167F; Mongolian Supplement
|
||||||
|
11680..116CF; Takri
|
||||||
|
11700..1174F; Ahom
|
||||||
|
11800..1184F; Dogra
|
||||||
|
118A0..118FF; Warang Citi
|
||||||
|
11900..1195F; Dives Akuru
|
||||||
|
119A0..119FF; Nandinagari
|
||||||
|
11A00..11A4F; Zanabazar Square
|
||||||
|
11A50..11AAF; Soyombo
|
||||||
|
11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
|
||||||
|
11AC0..11AFF; Pau Cin Hau
|
||||||
|
11C00..11C6F; Bhaiksuki
|
||||||
|
11C70..11CBF; Marchen
|
||||||
|
11D00..11D5F; Masaram Gondi
|
||||||
|
11D60..11DAF; Gunjala Gondi
|
||||||
|
11EE0..11EFF; Makasar
|
||||||
|
11FB0..11FBF; Lisu Supplement
|
||||||
|
11FC0..11FFF; Tamil Supplement
|
||||||
|
12000..123FF; Cuneiform
|
||||||
|
12400..1247F; Cuneiform Numbers and Punctuation
|
||||||
|
12480..1254F; Early Dynastic Cuneiform
|
||||||
|
12F90..12FFF; Cypro-Minoan
|
||||||
|
13000..1342F; Egyptian Hieroglyphs
|
||||||
|
13430..1343F; Egyptian Hieroglyph Format Controls
|
||||||
|
14400..1467F; Anatolian Hieroglyphs
|
||||||
|
16800..16A3F; Bamum Supplement
|
||||||
|
16A40..16A6F; Mro
|
||||||
|
16A70..16ACF; Tangsa
|
||||||
|
16AD0..16AFF; Bassa Vah
|
||||||
|
16B00..16B8F; Pahawh Hmong
|
||||||
|
16E40..16E9F; Medefaidrin
|
||||||
|
16F00..16F9F; Miao
|
||||||
|
16FE0..16FFF; Ideographic Symbols and Punctuation
|
||||||
|
17000..187FF; Tangut
|
||||||
|
18800..18AFF; Tangut Components
|
||||||
|
18B00..18CFF; Khitan Small Script
|
||||||
|
18D00..18D7F; Tangut Supplement
|
||||||
|
1AFF0..1AFFF; Kana Extended-B
|
||||||
|
1B000..1B0FF; Kana Supplement
|
||||||
|
1B100..1B12F; Kana Extended-A
|
||||||
|
1B130..1B16F; Small Kana Extension
|
||||||
|
1B170..1B2FF; Nushu
|
||||||
|
1BC00..1BC9F; Duployan
|
||||||
|
1BCA0..1BCAF; Shorthand Format Controls
|
||||||
|
1CF00..1CFCF; Znamenny Musical Notation
|
||||||
|
1D000..1D0FF; Byzantine Musical Symbols
|
||||||
|
1D100..1D1FF; Musical Symbols
|
||||||
|
1D200..1D24F; Ancient Greek Musical Notation
|
||||||
|
1D2E0..1D2FF; Mayan Numerals
|
||||||
|
1D300..1D35F; Tai Xuan Jing Symbols
|
||||||
|
1D360..1D37F; Counting Rod Numerals
|
||||||
|
1D400..1D7FF; Mathematical Alphanumeric Symbols
|
||||||
|
1D800..1DAAF; Sutton SignWriting
|
||||||
|
1DF00..1DFFF; Latin Extended-G
|
||||||
|
1E000..1E02F; Glagolitic Supplement
|
||||||
|
1E100..1E14F; Nyiakeng Puachue Hmong
|
||||||
|
1E290..1E2BF; Toto
|
||||||
|
1E2C0..1E2FF; Wancho
|
||||||
|
1E7E0..1E7FF; Ethiopic Extended-B
|
||||||
|
1E800..1E8DF; Mende Kikakui
|
||||||
|
1E900..1E95F; Adlam
|
||||||
|
1EC70..1ECBF; Indic Siyaq Numbers
|
||||||
|
1ED00..1ED4F; Ottoman Siyaq Numbers
|
||||||
|
1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
|
||||||
|
1F000..1F02F; Mahjong Tiles
|
||||||
|
1F030..1F09F; Domino Tiles
|
||||||
|
1F0A0..1F0FF; Playing Cards
|
||||||
|
1F100..1F1FF; Enclosed Alphanumeric Supplement
|
||||||
|
1F200..1F2FF; Enclosed Ideographic Supplement
|
||||||
|
1F300..1F5FF; Miscellaneous Symbols and Pictographs
|
||||||
|
1F600..1F64F; Emoticons
|
||||||
|
1F650..1F67F; Ornamental Dingbats
|
||||||
|
1F680..1F6FF; Transport and Map Symbols
|
||||||
|
1F700..1F77F; Alchemical Symbols
|
||||||
|
1F780..1F7FF; Geometric Shapes Extended
|
||||||
|
1F800..1F8FF; Supplemental Arrows-C
|
||||||
|
1F900..1F9FF; Supplemental Symbols and Pictographs
|
||||||
|
1FA00..1FA6F; Chess Symbols
|
||||||
|
1FA70..1FAFF; Symbols and Pictographs Extended-A
|
||||||
|
1FB00..1FBFF; Symbols for Legacy Computing
|
||||||
|
20000..2A6DF; CJK Unified Ideographs Extension B
|
||||||
|
2A700..2B73F; CJK Unified Ideographs Extension C
|
||||||
|
2B740..2B81F; CJK Unified Ideographs Extension D
|
||||||
|
2B820..2CEAF; CJK Unified Ideographs Extension E
|
||||||
|
2CEB0..2EBEF; CJK Unified Ideographs Extension F
|
||||||
|
2F800..2FA1F; CJK Compatibility Ideographs Supplement
|
||||||
|
30000..3134F; CJK Unified Ideographs Extension G
|
||||||
|
E0000..E007F; Tags
|
||||||
|
E0100..E01EF; Variation Selectors Supplement
|
||||||
|
F0000..FFFFF; Supplementary Private Use Area-A
|
||||||
|
100000..10FFFF; Supplementary Private Use Area-B
|
||||||
|
'| dmenu -m "$1" -i -l 10| awk '{print $1}' | tr -d ";\n")
|
||||||
|
|
||||||
|
unicodedata -ranges "$range" |
|
||||||
|
dmenu -m "$1" -i -l 10 |
|
||||||
|
awk '{print $1}' |
|
||||||
|
tr -d "\n" |
|
||||||
|
xclip -selection clipboard
|
98
unicodedata.go
Normal file
98
unicodedata.go
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
_ "embed"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed UnicodeData.txt
|
||||||
|
var unicodedata []byte
|
||||||
|
|
||||||
|
func die(msg string) {
|
||||||
|
fmt.Fprintln(os.Stderr, msg)
|
||||||
|
fmt.Fprintln(os.Stderr, "USAGE:", os.Args[0], "[-ranges RANGES]")
|
||||||
|
flag.PrintDefaults()
|
||||||
|
os.Exit(-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
type rangeInterval struct {
|
||||||
|
from int64
|
||||||
|
to int64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rangeInterval) contains(i int64) bool {
|
||||||
|
return r.from <= i && i <= r.to
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseHex(s string) (int64, error) {
|
||||||
|
return strconv.ParseInt(s, 16, 32)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseRanges(ranges string) []rangeInterval {
|
||||||
|
intervals := []rangeInterval{}
|
||||||
|
if strings.TrimSpace(ranges) != "" {
|
||||||
|
splitranges := strings.Split(ranges, " ")
|
||||||
|
for _, r := range splitranges {
|
||||||
|
fromto := strings.Split(r, "..")
|
||||||
|
if len(fromto) != 2 {
|
||||||
|
die("invalid ranges")
|
||||||
|
}
|
||||||
|
from, err := parseHex(fromto[0])
|
||||||
|
if err != nil {
|
||||||
|
die("invalid ranges")
|
||||||
|
}
|
||||||
|
to, err := parseHex(fromto[1])
|
||||||
|
if err != nil {
|
||||||
|
die("invalid ranges")
|
||||||
|
}
|
||||||
|
intervals = append(intervals, rangeInterval{from, to})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return intervals
|
||||||
|
}
|
||||||
|
|
||||||
|
func printCodepoint(i int64, description string) {
|
||||||
|
var ch rune = rune(i)
|
||||||
|
var s string = string([]rune{ch})
|
||||||
|
fmt.Println(s, description)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var ranges string
|
||||||
|
flag.StringVar(&ranges, "ranges", "", "define multiple codepoint ranges with \"N1..N2 N3..N4\"")
|
||||||
|
flag.Parse()
|
||||||
|
rangeIntervals := parseRanges(ranges)
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(bytes.NewReader(unicodedata))
|
||||||
|
for scanner.Scan() {
|
||||||
|
line := scanner.Text()
|
||||||
|
splitline := strings.Split(line, ";")
|
||||||
|
if len(splitline) < 2 || len(splitline[1]) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
codepoint, description := splitline[0], splitline[1]
|
||||||
|
if (description[0] == '<' && description[len(description)-1] == '>') || strings.Contains(description, "MODIFIER") || strings.Contains(description, "VARIATION SELECTOR") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
i, err := parseHex(codepoint)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if len(rangeIntervals) == 0 {
|
||||||
|
printCodepoint(i, description)
|
||||||
|
}
|
||||||
|
for _, r := range rangeIntervals {
|
||||||
|
if r.contains(i) {
|
||||||
|
printCodepoint(i, description)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user