// SPDX-License-Identifier: Unlicense OR BSD-3-Clausepackage fontimport ()const numBuiltInPostNames = len(builtInPostNames)// names is the built-in post table names listed at// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.htmlvar builtInPostNames = [...]string{".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat",}type post struct {// suggested distance of the top of the // underline from the baseline (negative values indicate below baseline). underlinePosition float32// suggested values for the underline thickness. underlineThickness float32 names postGlyphNames isFixedPitch bool}func newPost( tables.Post) (post, error) { := post{underlinePosition: float32(.UnderlinePosition),underlineThickness: float32(.UnderlineThickness),isFixedPitch: .IsFixedPitch != 0, }switch names := .Names.(type) {casetables.PostNames10: .names = postNames10or30{}casetables.PostNames20: := postNames20()if := .sanitize(); != nil {return , } .names = casetables.PostNames30:// no-op, do not use the post name tables }return , nil}// postGlyphNames stores the names of a 'post' table.type postGlyphNames interface {// GlyphName return the postscript name of a // glyph, or an empty string if it not found glyphName(x GID) string}type postNames10or30 struct{}func ( postNames10or30) ( GID) string {ifint() >= numBuiltInPostNames {return"" }// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.htmlreturnbuiltInPostNames[]}type postNames20 tables.PostNames20func ( postNames20) ( GID) string {ifint() >= len(.GlyphNameIndexes) {return"" } := int(.GlyphNameIndexes[])if < numBuiltInPostNames {returnbuiltInPostNames[] } -= numBuiltInPostNamesreturn .Strings[]}// check that all the indexes are validfunc ( postNames20) () error {varuint16// find the maximumfor , := range .GlyphNameIndexes {// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html // says that "32768 through 65535 are reserved for future use".if > 32767 {returnerrors.New("invalid index in Postscript names table format 20") }if > { = } }ifint() >= numBuiltInPostNames && len(.Strings) < (int()-numBuiltInPostNames) {returnerrors.New("invalid index in Postscript names table format 20") }returnnil}
The pages are generated with Goldsv0.8.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.