summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua')
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua96
1 files changed, 96 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua b/Master/texmf-dist/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua
new file mode 100644
index 00000000000..a5fa334f22c
--- /dev/null
+++ b/Master/texmf-dist/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua
@@ -0,0 +1,96 @@
+#!/usr/bin/env texlua
+
+-- Extract Ethiopic syllables from the Unicode Character Database.
+-- Arthur Reutenauer, London, 2011-01-09 & 10, for the hyph-utf8 project
+-- http://tug.org/tex-hyphen
+-- Copyright (c) TeX Users Group, 2011.
+-- You may freely use, modify and / or redistribute this file.
+
+-- Use with TeXLua.
+
+-- Small library to convert a hexadecimal string to a number
+local function hex_digit_to_num(h)
+ local c = string.byte(h)
+ if c >= 48 and c < 58
+ then return c - 48
+ elseif c >= 65 and c < 71
+ then return c - 55
+ elseif c >= 97 and c < 103
+ then return c - 87
+ end
+ return 0
+end
+
+local function hex_string_to_num(hex)
+ local n = 0
+ for i = 1, string.len(hex) do
+ n = 16 * n + hex_digit_to_num(string.sub(hex, i, i + 1))
+ end
+ return n
+end
+
+local ucd_file = "UnicodeData.txt"
+
+local error_install_ucd = [[
+Error: the Unicode Character Database could not be found.
+Please download it from http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
+and install it in the current directory.]]
+
+if not lfs.attributes(ucd_file) then
+ print(error_install_ucd)
+ return -1
+end
+
+local P, R, C, match = lpeg.P, lpeg.R, lpeg.C, lpeg.match
+
+local digit = R"09" + R"AF"
+local colon = P";"
+local field = (1 - colon)^0
+local eth_syll = P"ETHIOPIC SYLLABLE " * C(field)
+local ucd_entry = C(digit^4) * colon * eth_syll
+
+local pattfile = assert(io.open("hyph-mul-ethi.tex", "w"))
+
+pattfile:write[[
+% Experimental pattern file for languages written using the Ethiopic script.
+% Arthur Reutenauer, London, 2011-01-09 & 10, for the hyph-utf8 project.
+% Copyright (c) TeX Users Group, 2011.
+% You may freely use, modify and / or redistribute this file.
+%
+% The BCP 47 language tag for that file is "mul-ethi" to reflect the fact that
+% it can be used by multiple languages (and a single script, Ethiopic). It is,
+% though, not supposed to be linguistically relevant and should, for proper
+% typography, be replaced by files tailored to individual languages. What we
+% do for the moment is to simply allow break on either sides of Ethiopic
+% syllables, and to forbid it before some punctuation marks particular to
+% the Ethiopic script (which we thus make letters for this purpose).
+%
+% This is a generated file. If you wish to edit it, consider adapting the
+% generating programme
+% (svn://tug.org/texhyphen/trunk/hyph-utf8/source/generic/hyph-utf8/languages/ethiopic/make-patterns.lua.
+
+]]
+
+pattfile:write"\\patterns{%\n"
+for ucd_line in io.lines(ucd_file) do
+ local usv, char_name = match(ucd_entry, ucd_line)
+ -- print(string.format("%04X", usv))
+ -- if usv then print(usv, char_name) end
+ if usv then
+ -- arbitrarily excluding Ethiopic Extended-A
+ -- because they're not in unicode-letters.tex
+ local hex = hex_string_to_num(usv)
+ if hex < 0xAB00 then
+ local hex = hex_string_to_num
+ pattfile:write("1", unicode.utf8.char(hex_string_to_num(usv)), "1 ")
+ pattfile:write("% U+", usv, " ", char_name:lower(), "\n")
+ end
+ end
+end
+
+pattfile:write("2", unicode.utf8.char(0x1361), "1 % U+1361 ETHIOPIC WORDSPACE\n")
+pattfile:write("2", unicode.utf8.char(0x1362), "1 % U+1362 ETHIOPIC FULL STOP\n")
+
+pattfile:write"}"
+
+assert(io.close(pattfile))