diff options
Diffstat (limited to 'tex/context/base/typo-lan.lua')
-rw-r--r-- | tex/context/base/typo-lan.lua | 144 |
1 files changed, 72 insertions, 72 deletions
diff --git a/tex/context/base/typo-lan.lua b/tex/context/base/typo-lan.lua index 50927f744..a17732900 100644 --- a/tex/context/base/typo-lan.lua +++ b/tex/context/base/typo-lan.lua @@ -1,72 +1,72 @@ -if not modules then modules = { } end modules ['typo-lan'] = { - version = 1.001, - comment = "companion to typo-lan.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -local type, next = type, next - -local currentfont = font.current -local setmetatableindex = table.setmetatableindex -local utfbyte = utf.byte - -local hashes = fonts.hashes -local fontdata = hashes.characters -local emwidths = hashes.emwidths - -local frequencies = languages.frequencies or { } -languages.frequencies = frequencies - -local frequencydata = { } -local frequencyfile = string.formatters["lang-frq-%s.lua"] -local frequencycache = { } - -setmetatableindex(frequencydata, function(t,language) - local fullname = resolvers.findfile(frequencyfile(language)) - local v = fullname ~= "" and dofile(fullname) - if not v or not v.frequencies then - v = t.en - end - t[language] = v - return v -end) - -setmetatableindex(frequencycache, function(t,language) - local dataset = frequencydata[language] - local frequencies = dataset.frequencies - if not frequencies then - return t.en - end - local v = { } - setmetatableindex(v, function(t,font) - local average = emwidths[font] / 2 - if frequencies then - local characters = fontdata[font] - local sum, tot = 0, 0 - for k, v in next, frequencies do - local character = characters[k] -- characters[type(k) == "number" and k or utfbyte(k)] - tot = tot + v - sum = sum + v * (character and character.width or average) - end - average = sum / tot -- widths - end - t[font] = average - return average - end) - t[language] = v - return v -end) - -function frequencies.getdata(language) - return frequencydata[language] -end - -function frequencies.averagecharwidth(language,font) - return frequencycache[language or "en"][font or currentfont()] -end - -function commands.averagecharwidth(language,font) - context(frequencycache[language or "en"][font or currentfont()]) -end +if not modules then modules = { } end modules ['typo-lan'] = {
+ version = 1.001,
+ comment = "companion to typo-lan.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local type, next = type, next
+
+local currentfont = font.current
+local setmetatableindex = table.setmetatableindex
+local utfbyte = utf.byte
+
+local hashes = fonts.hashes
+local fontdata = hashes.characters
+local emwidths = hashes.emwidths
+
+local frequencies = languages.frequencies or { }
+languages.frequencies = frequencies
+
+local frequencydata = { }
+local frequencyfile = string.formatters["lang-frq-%s.lua"]
+local frequencycache = { }
+
+setmetatableindex(frequencydata, function(t,language)
+ local fullname = resolvers.findfile(frequencyfile(language))
+ local v = fullname ~= "" and dofile(fullname)
+ if not v or not v.frequencies then
+ v = t.en
+ end
+ t[language] = v
+ return v
+end)
+
+setmetatableindex(frequencycache, function(t,language)
+ local dataset = frequencydata[language]
+ local frequencies = dataset.frequencies
+ if not frequencies then
+ return t.en
+ end
+ local v = { }
+ setmetatableindex(v, function(t,font)
+ local average = emwidths[font] / 2
+ if frequencies then
+ local characters = fontdata[font]
+ local sum, tot = 0, 0
+ for k, v in next, frequencies do
+ local character = characters[k] -- characters[type(k) == "number" and k or utfbyte(k)]
+ tot = tot + v
+ sum = sum + v * (character and character.width or average)
+ end
+ average = sum / tot -- widths
+ end
+ t[font] = average
+ return average
+ end)
+ t[language] = v
+ return v
+end)
+
+function frequencies.getdata(language)
+ return frequencydata[language]
+end
+
+function frequencies.averagecharwidth(language,font)
+ return frequencycache[language or "en"][font or currentfont()]
+end
+
+function commands.averagecharwidth(language,font)
+ context(frequencycache[language or "en"][font or currentfont()])
+end
|