From 4c9d4cde86495128201e05dfdcee37db69f23659 Mon Sep 17 00:00:00 2001 From: DarkFreedman Date: Fri, 4 Oct 2019 12:14:19 +0300 Subject: Update to latest version --- utf8fontfile.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'utf8fontfile.go') diff --git a/utf8fontfile.go b/utf8fontfile.go index 964e919..4d90f28 100644 --- a/utf8fontfile.go +++ b/utf8fontfile.go @@ -377,7 +377,7 @@ func (utf *utf8FontFile) parseHHEATable() int { } func (utf *utf8FontFile) parseOS2Table() int { - weightType := 0 + var weightType int scale := 1000.0 / float64(utf.fontElementSize) if _, OK := utf.tableDescriptions["OS/2"]; OK { utf.SeekTable("OS/2") @@ -831,9 +831,9 @@ func (utf *utf8FontFile) getSymbols(originalSymbolIdx int, start *int, symbolSet } func (utf *utf8FontFile) parseHMTXTable(numberOfHMetrics, numSymbols int, symbolToChar map[int][]int, scale float64) { + var widths int start := utf.SeekTable("hmtx") arrayWidths := 0 - widths := 0 var arr []int utf.CharWidths = make([]int, 256*256) charCount := 0 @@ -863,8 +863,6 @@ func (utf *utf8FontFile) parseHMTXTable(numberOfHMetrics, numSymbols int, symbol } } } - data := utf.getRange(start+numberOfHMetrics*4, numSymbols*2) - arr = unpackUint16Array(data) diff := numSymbols - numberOfHMetrics for pos := 0; pos < diff; pos++ { symbol := pos + numberOfHMetrics @@ -949,7 +947,7 @@ func (utf *utf8FontFile) generateSCCSDictionaries(runeCmapPosition int, symbolCh for i := 0; i < segmentSize; i++ { positions = append(positions, utf.readUint16()) } - symbol := 0 + var symbol int for n := 0; n < segmentSize; n++ { completePosition := completers[n] + 1 for char := beginners[n]; char < completePosition; char++ { @@ -1140,3 +1138,16 @@ func keySortArrayRangeMap(s map[int][]int) []int { sort.Ints(keys) return keys } + +// UTF8CutFont is a utility function that generates a TrueType font composed +// only of the runes included in cutset. The rune glyphs are copied from This +// function is demonstrated in ExampleUTF8CutFont(). +func UTF8CutFont(inBuf []byte, cutset string) (outBuf []byte) { + f := newUTF8Font(&fileReader{readerPosition: 0, array: inBuf}) + runes := map[int]int{} + for i, r := range cutset { + runes[i] = int(r) + } + outBuf = f.GenerateСutFont(runes) + return +} -- cgit v1.2.1-24-ge1ad From 40ff7316bd16354f5eee3d0fc1e55c8ac727c741 Mon Sep 17 00:00:00 2001 From: DarkFreedman Date: Fri, 4 Oct 2019 12:20:01 +0300 Subject: Unchangeable font byte array --- utf8fontfile.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'utf8fontfile.go') diff --git a/utf8fontfile.go b/utf8fontfile.go index 4d90f28..85b3ce4 100644 --- a/utf8fontfile.go +++ b/utf8fontfile.go @@ -75,6 +75,13 @@ func (fr *fileReader) Read(s int) []byte { return b } +func (fr *fileReader) ReadLikeCopy(s int) []byte { + b := make([]byte, 0, s) + b = append(b, fr.array[fr.readerPosition:fr.readerPosition+int64(s)]...) + fr.readerPosition += int64(s) + return b +} + func (fr *fileReader) seek(shift int64, flag int) (int64, error) { if flag == 0 { fr.readerPosition = shift @@ -225,7 +232,7 @@ func (utf *utf8FontFile) insertUint16(stream []byte, offset int, value int) []by } func (utf *utf8FontFile) getRange(pos, length int) []byte { - utf.fileReader.seek(int64(pos), 0) + _, _ = utf.fileReader.seek(int64(pos), 0) if length < 1 { return make([]byte, 0) } @@ -241,8 +248,8 @@ func (utf *utf8FontFile) getTableData(name string) []byte { if desckrip.size == 0 { return nil } - utf.fileReader.seek(int64(desckrip.position), 0) - s := utf.fileReader.Read(desckrip.size) + _, _ = utf.fileReader.seek(int64(desckrip.position), 0) + s := utf.fileReader.ReadLikeCopy(desckrip.size) return s } @@ -634,8 +641,8 @@ func (utf *utf8FontFile) generateCMAPTable(cidSymbolPairCollection map[int]int, return cmapstr } -//GenerateСutFont fill utf8FontFile from .utf file, only with runes from usedRunes -func (utf *utf8FontFile) GenerateСutFont(usedRunes map[int]int) []byte { +//GenerateCutFont fill utf8FontFile from .utf file, only with runes from usedRunes +func (utf *utf8FontFile) GenerateCutFont(usedRunes map[int]int) []byte { utf.fileReader.readerPosition = 0 utf.symbolPosition = make([]int, 0) utf.charSymbolDictionary = make(map[int]int) @@ -889,10 +896,10 @@ func (utf *utf8FontFile) getMetrics(metricCount, gid int) []byte { var metrics []byte if gid < metricCount { utf.seek(start + (gid * 4)) - metrics = utf.fileReader.Read(4) + metrics = utf.fileReader.ReadLikeCopy(4) } else { utf.seek(start + ((metricCount - 1) * 4)) - metrics = utf.fileReader.Read(2) + metrics = utf.fileReader.ReadLikeCopy(2) utf.seek(start + (metricCount * 2) + (gid * 2)) metrics = append(metrics, utf.fileReader.Read(2)...) } @@ -1148,6 +1155,6 @@ func UTF8CutFont(inBuf []byte, cutset string) (outBuf []byte) { for i, r := range cutset { runes[i] = int(r) } - outBuf = f.GenerateСutFont(runes) + outBuf = f.GenerateCutFont(runes) return } -- cgit v1.2.1-24-ge1ad From 2e803db13067e702208818c79d70bd0ad1b13370 Mon Sep 17 00:00:00 2001 From: DarkFreedman Date: Fri, 4 Oct 2019 13:24:05 +0300 Subject: Pre Merge --- utf8fontfile.go | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) (limited to 'utf8fontfile.go') diff --git a/utf8fontfile.go b/utf8fontfile.go index 85b3ce4..4d90f28 100644 --- a/utf8fontfile.go +++ b/utf8fontfile.go @@ -75,13 +75,6 @@ func (fr *fileReader) Read(s int) []byte { return b } -func (fr *fileReader) ReadLikeCopy(s int) []byte { - b := make([]byte, 0, s) - b = append(b, fr.array[fr.readerPosition:fr.readerPosition+int64(s)]...) - fr.readerPosition += int64(s) - return b -} - func (fr *fileReader) seek(shift int64, flag int) (int64, error) { if flag == 0 { fr.readerPosition = shift @@ -232,7 +225,7 @@ func (utf *utf8FontFile) insertUint16(stream []byte, offset int, value int) []by } func (utf *utf8FontFile) getRange(pos, length int) []byte { - _, _ = utf.fileReader.seek(int64(pos), 0) + utf.fileReader.seek(int64(pos), 0) if length < 1 { return make([]byte, 0) } @@ -248,8 +241,8 @@ func (utf *utf8FontFile) getTableData(name string) []byte { if desckrip.size == 0 { return nil } - _, _ = utf.fileReader.seek(int64(desckrip.position), 0) - s := utf.fileReader.ReadLikeCopy(desckrip.size) + utf.fileReader.seek(int64(desckrip.position), 0) + s := utf.fileReader.Read(desckrip.size) return s } @@ -641,8 +634,8 @@ func (utf *utf8FontFile) generateCMAPTable(cidSymbolPairCollection map[int]int, return cmapstr } -//GenerateCutFont fill utf8FontFile from .utf file, only with runes from usedRunes -func (utf *utf8FontFile) GenerateCutFont(usedRunes map[int]int) []byte { +//GenerateСutFont fill utf8FontFile from .utf file, only with runes from usedRunes +func (utf *utf8FontFile) GenerateСutFont(usedRunes map[int]int) []byte { utf.fileReader.readerPosition = 0 utf.symbolPosition = make([]int, 0) utf.charSymbolDictionary = make(map[int]int) @@ -896,10 +889,10 @@ func (utf *utf8FontFile) getMetrics(metricCount, gid int) []byte { var metrics []byte if gid < metricCount { utf.seek(start + (gid * 4)) - metrics = utf.fileReader.ReadLikeCopy(4) + metrics = utf.fileReader.Read(4) } else { utf.seek(start + ((metricCount - 1) * 4)) - metrics = utf.fileReader.ReadLikeCopy(2) + metrics = utf.fileReader.Read(2) utf.seek(start + (metricCount * 2) + (gid * 2)) metrics = append(metrics, utf.fileReader.Read(2)...) } @@ -1155,6 +1148,6 @@ func UTF8CutFont(inBuf []byte, cutset string) (outBuf []byte) { for i, r := range cutset { runes[i] = int(r) } - outBuf = f.GenerateCutFont(runes) + outBuf = f.GenerateСutFont(runes) return } -- cgit v1.2.1-24-ge1ad From e318fd80c1330e11155bfaa5ff5cfb809454b021 Mon Sep 17 00:00:00 2001 From: DarkFreedman Date: Fri, 4 Oct 2019 13:27:57 +0300 Subject: Fix Unedit font array --- utf8fontfile.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'utf8fontfile.go') diff --git a/utf8fontfile.go b/utf8fontfile.go index 4d90f28..85b3ce4 100644 --- a/utf8fontfile.go +++ b/utf8fontfile.go @@ -75,6 +75,13 @@ func (fr *fileReader) Read(s int) []byte { return b } +func (fr *fileReader) ReadLikeCopy(s int) []byte { + b := make([]byte, 0, s) + b = append(b, fr.array[fr.readerPosition:fr.readerPosition+int64(s)]...) + fr.readerPosition += int64(s) + return b +} + func (fr *fileReader) seek(shift int64, flag int) (int64, error) { if flag == 0 { fr.readerPosition = shift @@ -225,7 +232,7 @@ func (utf *utf8FontFile) insertUint16(stream []byte, offset int, value int) []by } func (utf *utf8FontFile) getRange(pos, length int) []byte { - utf.fileReader.seek(int64(pos), 0) + _, _ = utf.fileReader.seek(int64(pos), 0) if length < 1 { return make([]byte, 0) } @@ -241,8 +248,8 @@ func (utf *utf8FontFile) getTableData(name string) []byte { if desckrip.size == 0 { return nil } - utf.fileReader.seek(int64(desckrip.position), 0) - s := utf.fileReader.Read(desckrip.size) + _, _ = utf.fileReader.seek(int64(desckrip.position), 0) + s := utf.fileReader.ReadLikeCopy(desckrip.size) return s } @@ -634,8 +641,8 @@ func (utf *utf8FontFile) generateCMAPTable(cidSymbolPairCollection map[int]int, return cmapstr } -//GenerateСutFont fill utf8FontFile from .utf file, only with runes from usedRunes -func (utf *utf8FontFile) GenerateСutFont(usedRunes map[int]int) []byte { +//GenerateCutFont fill utf8FontFile from .utf file, only with runes from usedRunes +func (utf *utf8FontFile) GenerateCutFont(usedRunes map[int]int) []byte { utf.fileReader.readerPosition = 0 utf.symbolPosition = make([]int, 0) utf.charSymbolDictionary = make(map[int]int) @@ -889,10 +896,10 @@ func (utf *utf8FontFile) getMetrics(metricCount, gid int) []byte { var metrics []byte if gid < metricCount { utf.seek(start + (gid * 4)) - metrics = utf.fileReader.Read(4) + metrics = utf.fileReader.ReadLikeCopy(4) } else { utf.seek(start + ((metricCount - 1) * 4)) - metrics = utf.fileReader.Read(2) + metrics = utf.fileReader.ReadLikeCopy(2) utf.seek(start + (metricCount * 2) + (gid * 2)) metrics = append(metrics, utf.fileReader.Read(2)...) } @@ -1148,6 +1155,6 @@ func UTF8CutFont(inBuf []byte, cutset string) (outBuf []byte) { for i, r := range cutset { runes[i] = int(r) } - outBuf = f.GenerateСutFont(runes) + outBuf = f.GenerateCutFont(runes) return } -- cgit v1.2.1-24-ge1ad