diff options
Diffstat (limited to 'Master/texmf-dist/source/generic/hyph-utf8/languages.rb')
-rw-r--r-- | Master/texmf-dist/source/generic/hyph-utf8/languages.rb | 2550 |
1 files changed, 427 insertions, 2123 deletions
diff --git a/Master/texmf-dist/source/generic/hyph-utf8/languages.rb b/Master/texmf-dist/source/generic/hyph-utf8/languages.rb index e59b1f8b398..46ae947460f 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/languages.rb +++ b/Master/texmf-dist/source/generic/hyph-utf8/languages.rb @@ -1,4 +1,42 @@ # -*- coding: utf-8 -*- +require_relative 'author-data' +require_relative 'language-data' + +module PATH + ROOT = File.expand_path('../../../../..', __FILE__) + + TeXROOT = File.join(ROOT, 'hyph-utf8') + TeX_GENERIC = File.join(TeXROOT, 'tex', 'generic') + TXT = File.join(TeX_GENERIC, 'hyph-utf8', 'patterns', 'txt') + TEX = File.join(TeX_GENERIC, 'hyph-utf8', 'patterns', 'tex') + PTEX = File.join(TeX_GENERIC, 'hyph-utf8', 'patterns', 'ptex') + QUOTE = File.join(TeX_GENERIC, 'hyph-utf8', 'patterns', 'quote') + + HYPHU8 = File.join('tex', 'generic', 'hyph-utf8') + + TL = File.join(ROOT, 'TL') + LANGUAGE_DAT = File.join(PATH::TL, 'texmf-dist', 'tex', 'generic', 'config') + # hyphen-foo.tlpsrc for TeX Live + TLPSRC = File.join(PATH::TL, 'tlpkg', 'tlpsrc') +end + +class String + def superstrip + strip.gsub /%.*$/, '' + end + + def supersplit + strip.gsub(/\s+/m,"\n").split("\n") + end + + def safe + gsub /[\s-]/, '' + end + + def titlecase + split.map(&:capitalize).join(' ') + end +end class Author def initialize(name,surname,email,contacted1,contacted2) @@ -13,13 +51,28 @@ class Author end attr_reader :name, :surname, :email + + def self.authors + @@authors ||= @@author_data.map do |id, details| + author = Author.new(details[0], details[1], details[2], details[3], details[4]) + [id, author] + end.to_h + end + + def self.all + authors.values + end + + def self.[] a + authors[a] + end end class Language def initialize(language_hash) - @use_new_loader = language_hash["use_new_loader"] @use_old_patterns = language_hash["use_old_patterns"] @use_old_patterns_comment = language_hash["use_old_patterns_comment"] + @use_old_loader = language_hash["use_old_loader"] @filename_old_patterns = language_hash["filename_old_patterns"] @filename_old_patterns_other = language_hash["filename_old_patterns_other"] @code = language_hash["code"] @@ -27,87 +80,61 @@ class Language @synonyms = language_hash["synonyms"] @hyphenmin = language_hash["hyphenmin"] @encoding = language_hash["encoding"] - @exceptions = language_hash["exceptions"] @message = language_hash["message"] - @description_s = language_hash["description_s"] @description_l = language_hash["description_l"] @version = language_hash["version"] @licence = language_hash["licence"] @authors = language_hash["authors"] - @has_quotes = false - @has_dashes = false + @synonyms = [] unless @synonyms + end - if @synonyms==nil then @synonyms = [] end + def <=>(other) + code <=> other.code end - def set_quotes - @has_quotes = true + def self.all + @@languages ||= @@language_data.map do |language_data| + new language_data + end end - def set_dashes - @has_dashes = true + # TODO self.find + + @@texfile = Hash.new + def readtexfile(code = @code) + @@texfile[code] ||= File.read(File.join(PATH::TEX, sprintf('hyph-%s.tex', code))) end - # TODO: simplify this (reduce duplication) - - def get_exceptions - if @exceptions1 == nil - filename = File.expand_path("../../../../tex/generic/hyph-utf8/patterns/tex/hyph-#{@code}.tex", __FILE__); - lines = IO.readlines(filename, '.').join("") - exceptions = lines.gsub(/%.*/,''); - if (exceptions.index('\hyphenation') != nil) - @exceptions1 = exceptions.gsub(/.*\\hyphenation\s*\{(.*?)\}.*/m,'\1'). - gsub(/\s+/m,"\n"). - gsub(/^\s*/m,''). - gsub(/\s*$/m,''). - split("\n") - else - @exceptions1 = "" - end + def exceptions + @exceptions ||= if readtexfile.superstrip.index('\hyphenation') + readtexfile.superstrip.gsub(/.*\\hyphenation\s*\{(.*?)\}.*/m,'\1').supersplit + else + "" end - - return @exceptions1 end - def get_patterns - if @patterns == nil - filename = File.expand_path("../../../../tex/generic/hyph-utf8/patterns/tex/hyph-#{@code}.tex", __FILE__) - lines = IO.readlines(filename, '.').join("") - @patterns = lines.gsub(/%.*/,''). + def patterns + @patterns ||= if @code == 'eo' then + readtexfile.superstrip. + gsub(/.*\\patterns\s*\{(.*)\}.*/m,'\1'). + # + gsub(/\\adj\{(.*?)\}/m,'\1a. \1aj. \1ajn. \1an. \1e.'). + gsub(/\\nom\{(.*?)\}/m,'\1a. \1aj. \1ajn. \1an. \1e. \1o. \1oj. \1ojn. \1on.'). + gsub(/\\ver\{(.*?)\}/m,'\1as. \1i. \1is. \1os. \1u. \1us.'). + # + supersplit + else + readtexfile(if ['nb', 'nn'].include? @code then 'no' else @code end).superstrip. gsub(/.*\\patterns\s*\{(.*?)\}.*/m,'\1'). - gsub(/\s+/m,"\n"). - gsub(/^\s*/m,''). - gsub(/\s*$/m,''). - split("\n") - - if @code == 'eo' then - @patterns = lines.gsub(/%.*/,''). - gsub(/.*\\patterns\s*\{(.*)\}.*/m,'\1'). - # - gsub(/\\adj\{(.*?)\}/m,'\1a. \1aj. \1ajn. \1an. \1e.'). - gsub(/\\nom\{(.*?)\}/m,'\1a. \1aj. \1ajn. \1an. \1e. \1o. \1oj. \1ojn. \1on.'). - gsub(/\\ver\{(.*?)\}/m,'\1as. \1i. \1is. \1os. \1u. \1us.'). - # - gsub(/\s+/m,"\n"). - gsub(/^\s*/m,''). - gsub(/\s*$/m,''). - split("\n") - end + supersplit end - return @patterns end def get_comments_and_licence - if @comments_and_licence == nil then - filename = File.expand_path("../../../../tex/generic/hyph-utf8/patterns/tex/hyph-#{@code}.tex", __FILE__); - lines = IO.readlines(filename, '.').join("") - @comments_and_licence = lines. - gsub(/(.*)\\patterns.*/m,'\1') - end - return @comments_and_licence + @comments_and_licence ||= readtexfile.gsub(/(.*)\\patterns.*/m,'\1') end # def lc_characters @@ -120,2080 +147,357 @@ class Language # return @lc_characters # end - attr_reader :use_new_loader, :use_old_patterns, :use_old_patterns_comment, :filename_old_patterns - attr_reader :code, :name, :synonyms, :hyphenmin, :encoding, :exceptions, :message - attr_reader :description_s, :description_l, :version + attr_reader :use_old_loader, :use_old_patterns, :use_old_patterns_comment, :filename_old_patterns + attr_reader :code, :name, :synonyms, :hyphenmin, :encoding, :message + attr_reader :description_l, :version attr_reader :licence, :authors - attr_reader :has_quotes, :has_dashes - # this hack is needed for Serbian - attr_writer :code -end -class Authors < Hash - @@list = [] - - def initialize - authors = { -#authors = { - "donald_knuth" => ["Donald", "Knuth", nil, false, false], - "peter_heslin" => ["Peter", "Heslin", nil, false, false], - "dimitrios_filippou" => ["Dimitrios", "Filippou", "dimitrios{dot}filippou{at}riotinto{dot}com", true, true], - "claudio_beccari" => ["Claudio", "Beccari","claudio{dot}beccari{at}gmail{dot}com", true, true], - "juan_aguirregabiria" => ["Juan M.", "Aguirregabiria", "juanmari{dot}aguirregabiria{at}ehu.es", true, true], - "igor_marinovic" => ["Igor", "Marinović", "marinowski{at}gmail.com", true, true], - "tilla_fick" => ["Tilla", "Fick", "fick{dot}tilla{at}gmail{dot}com", true, true], - "chris_swanepoel" => ["Chris", "Swanepoel", "cj{at}swanepoel{dot}net", true, true], - "matjaz_vrecko" => ["Matjaž", "Vrečko", "matjaz{at}mg-soft{dot}si", true, true], - "goncal_badenes" => ["Gonçal", "Badenes", "g{dot}badenes{at}ieee.org", false, false], - "pavel_sevecek" => ["Pavel", "Ševeček", "pavel{at}lingea{dot}cz", false, false], - # email doesn't work - "jana_chlebikova" => ["Jana", "Chlebíková", "chlebikj{at}dcs{dot}fmph{dot}uniba{dot}sk", false, false], - "yannis_haralambous" => ["Yannis", "Haralambous", "yannis{dot}haralambous{at}telecom-bretagne{dot}eu", true, false], - "frank_jensen" => ["Frank", "Jensen", "frank{dot}jensen{at}hugin{dot}com", true, true], - "sergei_pokrovsky" => ["Sergei", "Pokrovsky", "sergio{dot}pokrovskij{at}gmail{dot}com", true, true], - "javier_bezos" => ["Javier", "Bezos", "jbezos{at}tex-tipografia{dot}com", true, true], - "een_saar" => ["Enn", "Saar", "saar{at}aai{dot}ee", false, false], - "dejan_muhamedagic" => ["Dejan", "Muhamedagić", "dejan{at}hello-penguin{dot}com", true, true], - "brian_wilson" => ["Brian", "Wilson", "bountonw{at}gmail{dot}com", true, true], - "arthur_reutenauer" => ["Arthur", "Reutenauer", "arthur{dot}reutenauer{at}normalesup{dot}org", true, true], - "mojca_miklavec" => ["Mojca", "Miklavec", "mojca{dot}miklavec{dot}lists{at}gmail{dot}com", true, true], - "santhosh_thottingal" => ["Santhosh", "Thottingal", "santhosh{dot}thottingal{at}gmail{dot}com>", true, true], - # email doesn't work - "yves_codet" => ["Yves", "Codet", "ycodet{at}club-internet{dot}fr", true, true], - "rune_kleveland" => ["Rune", "Kleveland", nil, false, false], - # email doesn't work - "ole_michael_selberg" => ["Ole Michael", "Selberg", "o{dot}m{dot}selberg{at}c2i{dot}net", true, true], - "dorjgotov_batmunkh" => ["Dorjgotov", "Batmunkh", "bataak{at}gmail{dot}com", true, true], - "nazar_annagurban" => ["Nazar", "Annagurban", "nazartm{at}gmail{dot}com", false, false], - "jan_michael_rynning" => ["Jan Michael", "Rynning", nil, false, false], - "eduard_werner" => ["Eduard", "Werner", "edi{dot}werner{at}gmx{dot}de", false, false], - "werner_lemberg" => ["Werner", "Lemberg", "wl{at}gnu{dot}org", true, true], - # email doesn't work - "pedro_j_de_rezende" => ["Pedro J.", "de Rezende", "rezende{at}ddc{dot}unicamp{dot}br", false, false], - "j_joao_dias_almeida" => ["J. Joao", "Dias Almeida", "jj{at}di{dot}uminho{dot}pt"], - # email doesn't work - "piet_tutelaers" => ["Piet", "Tutelaers", "p{dot}t{dot}h{dot}tutelaers{at}tue{dot}nl", false, false], - "vytas_statulevicius" => ["Vytas", "Statulevičius", "vytas{at}vtex{dot}nl", false, false], - "sigitas_tolusis" => ["Sigitas", "Tolušis", "sigitas{at}vtex{dot}lt", false, false], - "janis_vilims" => ["Janis", "Vilims", "jvilims{at}apollo{dot}lv", false, false], - "joerg_knappen" => ["Jörg", "Knappen", "jknappen{at}web{dot}de", true, true], - "medeni_shemde" => ["Medeni", "Shemdê", nil, false, false], - "terry_mart" => ["Terry", "Mart", "mart{at}kph{dot}uni-mainz{dot}de", false, false], - # email doesn't work - "jorgen_pind" => ["Jorgen", "Pind", "jorgen{at}lexis{dot}hi{dot}is", false, false], - "marteinn_sverrisson" => ["Marteinn", "Sverrisson", nil, false, false], - # email doesn't work - "kristinn_gylfason" => ["Kristinn", "Gylfason", "kristgy{at}ieee{dot}org", false, false], - # email doesn't work - "kevin_p_scannell" => ["Kevin P.", "Scannell", "scanell{at}slu{dot}edu", false, false], - # email doesn't work - "peter_kleiweg" => ["Peter", "Kleiweg", "p{dot}c{dot}c{dot}kleiweg{at}rug{dot}nl", false, false], - "hanna_kolodziejska" => ["Hanna", "Kołodziejska", nil, false, false], - "boguslaw_jackowski" => ["Bogusław", "Jackowski", nil, true, true], - "marek_rycko" => ["Marek", "Ryćko", nil, false, false], - "vladimir_volovich" => ["Vladimir", "Volovich", nil, true, true], # TODO add e-mail address - "alexander_i_lebedev" => ["Alexander I.", "Lebedev", "swan{at}scon155{dot}phys{dot}msu{dot}su", false, false], # Not sure were 'I' belongs - # first email doesn't work - "maksym_polyakov" => ["Maksym", "Polyakov", "polyama{at}auburn{dot}edu", false, false], # Second e-mail address in ukrhypmp.tex: mpoliak@i.com.ua - "adrian_rezus" => ["Adrian", "Rezus", "adriaan{at}\{sci,cs\}{dot}kun{dot}nl", false, false], - # email doesn't work - "sahak_petrosyan" => ["Sahak", "Petrosyan", "sahak{at}mit{dot}edu", true, true], # I think "true, true" is right. Arthur - "dominik_wujastyk" => ["Dominik", "Wujastyk", "wujastyk{at}gmail{dot}com", false, false], - "graham_toal" => ["Graham", "Toal", nil, false, false], - "donald_e_knuth" => ["Donald E.", "Knuth", nil, false, false], # Don doesn't use e-mail ;-) - "gerard_d_c_kuiken" => ["Gerard D.C.", "Kuiken", nil, false, false], - "pierre_mackay" => ["P. A.", "MacKay", nil, true, true], - "h_turgut_uyar" => ["H. Turgut", "Uyar", "uyar{at}itu{dot}edu{tr}", true, true], - # email doesn't work - "s_ekin_kocabas" => ["S. Ekin", "Kocabas", "kocabas{at}stanford{dot}edu", true, true], - "bence_nagy" => ["Bence", "Nagy", "nagybence{at}tipogral{dot}hu", true, true], - "kauko_saarinen" => ["Kauko", "Saarinen", nil, false, false], - "fred_karlsson" => ["Fred", "Karlsson", nil, false, false], - "rene_bastian" => ["René", "Bastian", nil, false, false], # TODO make contact - "daniel_flipo" => ["Daniel", "Flipo", nil, false, false], # TODO make contact - "bernard_gaulle" => ["Bernard", "Gaulle", nil, false, false], # Deceased... - "theppitak_karoonboonyanan" => ["Theppitak", "Karoonboonyanan", "theppitak{at}gmail{dot}com", true, true], - "levan_shoshiashvili" => ["Levan", "Shoshiashvili", "shoshia{at}hotmail{dot}com", true, true], - # email doesn't work - "javier_mugica" => ["Javier", "Múgica", "javier{at}digi21{dot}eu", true, true], - "georgi_boshnakov" => ["Georgi", "Boshnakov", "georgi{dot}boshnakov{at}manchester{dot}ac{dot}uk", true, true], - "mike_kroutikov" => ["Mike", "Kroutikov", "pgmmpk{at}gmail{dot}com", true, true], - "aleksandr_andreev" => ["Aleksandr", "Andreev", "", true, true], - "maksim_salau" => ["Maksim", "Salau", "maksim{dot}salau{at}gmail{dot}com", true, false], - "wie_ming_ang" => ["Wie-Ming", "Cittānurakkho Bhikkhu", "wiemingang{at}gmail{dot}com", true, true] -} -# - authors.each do |a| - author = Author.new(a[1][0], a[1][1], a[1][2], a[1][3], a[1][4]) - @@list.push(author) - self[a[0]] = author + # def message + # @name.titlecase + ' hyphenation patterns' + # end + + def description_s + @message + end + + # Strictly speaking a misnomer, because grc-x-ibycus should also return true. + # But useful for a number of apostrophe-related routines + def isgreek? + ['grc', 'el-polyton', 'el-monoton'].include? @code + end + + def has_apostrophes + begin + !isgreek? && patterns.any? { |p| p =~ /'/ } + rescue Errno::ENOENT + false end end -end + def has_dashes + begin + patterns.any? { |p| p =~ /-/ } + rescue Errno::ENOENT + false + end + end + + # Convenience methods related to TeX Live and the .tlpsrc files + module TeXLive + def loadhyph + return filename_old_patterns if use_old_loader + + code = @code + code = @code.gsub 'sh-', 'sr-' if @code =~ /^sh-/ + sprintf 'loadhyph-%s.tex', code + end + + # ext: 'pat' or 'hyp' + # filetype: 'patterns' or 'exceptions' + def plain_text_line(ext, filetype) + return "" if ['ar', 'fa', 'grc-x-ibycus', 'mn-cyrl-x-lmc'].include? @code + + if @code =~ /^sh-/ + # TODO Warning AR 2018-09-12 + filename = sprintf 'hyph-sh-latn.%s.txt,hyph-sh-cyrl.%s.txt', ext, ext + else + filename = sprintf 'hyph-%s.%s.txt', @code, ext + filepath = File.join(PATH::TXT, filename) + # check for existence of file and that it’s not empty + unless File.file?(filepath) && File.read(filepath).length > 0 + # if the file we were looking for was a pattern file, something’s wrong + if ext == 'pat' + raise sprintf("There is some problem with plain patterns for language [%s]!!!", @code) + else # the file is simply an exception file and we’re happy + filename = '' # And we return and empty file name after all + end + end + end + + sprintf "file_%s=%s", filetype, filename + end + + def exceptions_line + plain_text_line('hyp', 'exceptions') + end + + def patterns_line + plain_text_line('pat', 'patterns') + end + + def extract_apostrophes + plain, with_apostrophe = Array.new, nil + + patterns.each do |pattern| + plain << pattern + if pattern =~ /'/ && !isgreek? + pattern_with_apostrophe = pattern.gsub(/'/,"’") + plain << pattern_with_apostrophe + (with_apostrophe ||= []) << pattern_with_apostrophe + end + end + + { plain: plain, with_apostrophe: with_apostrophe } + end -# "use_new_loader" -# => true - create a new file and use that one -# => false - use "filename_old_patterns" in language.dat -# "filename_old_patterns" -# => [string] - the name used in language.dat if "use_new_loader" is false -# "eightbitfilename" -# => [string] - if set, load another file for 8-bit engines -# "code" -# => [string] - used in filenames, needs to conform to the standard -# "name" -# => [string] - -# "synonyms" => [], -# "hyphenmin" => [], -# "encoding" => nil, -# "exceptions" => false, -# "message" => nil, - -class Languages < Hash - @@list = [] - - def initialize - languages = [ -# -------------------------------------- -# languages with no hyphenation patterns -# -------------------------------------- -# arabic -{ - "code" => "ar", - "name" => "arabic", - "use_new_loader" => false, - "use_old_patterns" => false, - "filename_old_patterns" => "zerohyph.tex", -# "hyphenmin" => [], # not needed - "encoding" => nil, - "exceptions" => false, - "message" => nil, - - # TODO - "description_s" => "(No) Arabic hyphenation patterns", - "description_l" => [ - #......................................................................# - "Prevent hyphenation in Arabic.", - ], -}, -# farsi -# =persian -{ - "code" => "fa", - "name" => "farsi", "synonyms" => ["persian"], - "use_new_loader" => false, - "use_old_patterns" => false, - "filename_old_patterns" => "zerohyph.tex", -# "hyphenmin" => [], # not needed - "encoding" => nil, - "exceptions" => false, - "message" => nil, - - # TODO - "description_s" => "(No) Persian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Prevent hyphenation in Persian.", - ], -}, -# ------------------------------- -# special patterns, not converted -# ------------------------------- -# ibycus ibyhyph.tex -{ - "code" => "grc-x-ibycus", - "name" => "ibycus", - "use_new_loader" => false, - "use_old_patterns" => true, - "filename_old_patterns" => "ibyhyph.tex", - "hyphenmin" => [2,2], - "encoding" => nil, - "exceptions" => false, - "message" => "Ancient Greek hyphenation patterns for Ibycus encoding (v3.0)", - - # "authors" => ["peter_heslin"], - "version" => 3.0, -}, -# ---------------------------- -# languages using old patterns -# ---------------------------- -# greek -# =polygreek -{ - "code" => "el-polyton", - "name" => "greek", "synonyms" => ["polygreek"], - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible.", - "filename_old_patterns" => "grphyph5.tex", - # left/right hyphen min for Greek can be as low as one (1), - # but for aesthetic reasons keep them at 2/2. - # Dimitrios Filippou - "hyphenmin" => [1,1], # polyglossia - "encoding" => nil, - "exceptions" => true, - "message" => "Hyphenation patterns for multi-accent (polytonic) Modern Greek", - - "version" => "5.0", - "last_modified" => "2008-06-06", - "type" => "rules", - "authors" => ["dimitrios_filippou"], - "licence" => "LPPL", - # "description_s" => "Polytonic Modern Greek hyphenation patterns", - # # #.....................................................................# - # "description_l" => [ - # #......................................................................# - # "Hyphenation patterns for Modern Greek in polytonic spelling.", - # "The pattern file used for 8-bit engines is grphyph5.tex that is", - # "not part of hyph-utf8. Patterns in UTF-8 use two code positions for", - # "each of the vowels with acute accent (a.k.a tonos, oxia), e.g.,", - # "U+03AC, U+1F71 for alpha.", - # ], -}, -# monogreek -{ - "code" => "el-monoton", - "name" => "monogreek", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible.", - "filename_old_patterns" => "grmhyph5.tex", - "hyphenmin" => [1,1], # polyglossia - "encoding" => nil, - "exceptions" => true, - "message" => "Hyphenation patterns for uni-accent (monotonic) Modern Greek", - - "version" => "5.0", - "last_modified" => "2008-06-06", - "type" => "rules", - "authors" => ["dimitrios_filippou"], - "licence" => "LPPL", - # "description_s" => "Monotonic Modern Greek hyphenation patterns", - # "description_l" => [ - # #......................................................................# - # "Hyphenation patterns for Modern Greek in monotonic spelling.", - # "The pattern file used for 8-bit engines is grmhyph5.tex, in Babel's LGR encoding,", - # "that is not part of hyph-utf8.", - # "Patterns in UTF-8 use two code positions for each of the vowels with acute accent", - # "(a.k.a tonos, oxia), e.g., U+03AD, U+1F73 for epsilon.", - # ], - "description_s" => "Modern Greek hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Modern Greek in monotonic and polytonic", - "spelling in LGR and UTF-8 encodings. Patterns in UTF-8 use two code", - "positions for each of the vowels with acute accent (a.k.a tonos,", - "oxia), e.g., U+03AC, U+1F71 for alpha.", - ], -}, -# ancientgreek -{ - "code" => "grc", - "name" => "ancientgreek", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible.", - "filename_old_patterns" => "grahyph5.tex", - "hyphenmin" => [1,1], # polyglossia - "encoding" => nil, - "exceptions" => false, - "message" => "Hyphenation patterns for Ancient Greek", - - "version" => "5.0", - "last_modified" => "2016-05-12", - "type" => "rules", - "authors" => ["dimitrios_filippou"], - "licence" => "LPPL", - # "description_s" => "Ancient Greek hyphenation patterns", - # "description_l" => [ - # #......................................................................# - # "Hyphenation patterns for Ancient Greek.", - # "The pattern file used for 8-bit engines is grahyph5.tex, in Babel's LGR encoding,", - # "that is not part of hyph-utf8.", - # "Patterns in UTF-8 use two code positions for each of the vowels with acute accent", - # "(a.k.a tonos, oxia), e.g., U+03AE, U+1F75 for eta.", - # ], - "description_s" => "Ancient Greek hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Ancient Greek in LGR and UTF-8 encodings,", - "including support for (obsolete) Ibycus font encoding.", - "Patterns in UTF-8 use two code positions for each of the vowels with", - "acute accent (a.k.a tonos, oxia), e.g., U+03AE, U+1F75 for eta.", - ], -}, -# coptic -{ - "code" => "cop", - "name" => "coptic", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "TODO: automatic conversion could be done, but was too complicated; leave for later.", - "filename_old_patterns" => "copthyph.tex", - "hyphenmin" => [1,1], # polyglossia TODO: no documentation found - "encoding" => nil, - "exceptions" => false, - "message" => "Coptic hyphenation patterns", - - "version" => nil, - "last_modified" => "2004-10-03", - "type" => "rules", - "authors" => [ "claudio_beccari" ], - "licence" => "LPPL", - "description_s" => "Coptic hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Coptic in UTF-8 encoding", - "as well as in ASCII-based encoding for 8-bit engines.", - "The latter can only be used with special Coptic fonts (like CBcoptic).", - "The patterns are considered experimental.", - ], -}, -# german -{ - "code" => "de-1901", - "name" => "german", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "Kept for the sake of backward compatibility, but newer and better patterns by WL are available.", - "filename_old_patterns" => "dehypht.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "German hyphenation patterns (traditional orthography)", - - "version" => "0.40", - "last_modified" => "2014-05-21", # For the active project - "type" => "dictionary", - "authors" => ["werner_lemberg"], - "licence" => "LPPL", - # "description_s" => "German hyphenation patterns in traditional spelling", - # "description_l" => [ - # "Hyphenation patterns for German in traditional spelling, in T1/EC and UTF-8 encoding.", - # "Patterns encoded in UTF-8 are provided by a separate package.", - # ], - - "description_s" => "German hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for German in T1/EC and UTF-8 encodings,", - "for traditional and reformed spelling, including Swiss German.", - "The package includes the latest patterns from dehyph-exptl", - "(known to TeX under names 'german', 'ngerman' and 'swissgerman'),", - "however 8-bit engines still load old versions of patterns", - "for 'german' and 'ngerman' for backward-compatibility reasons.", - "Swiss German patterns are suitable for Swiss Standard German", - "(Hochdeutsch) not the Alemannic dialects spoken in Switzerland", - "(Schwyzerduetsch).", - "There are no known patterns for written Schwyzerduetsch.", - ] -}, -# ngerman -{ - "code" => "de-1996", - "name" => "ngerman", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "Kept for the sake of backward compatibility, but newer and better patterns by WL are available.", - "filename_old_patterns" => "dehyphn.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "German hyphenation patterns (reformed orthography)", - - "version" => "0.40", - "last_modified" => "2014-05-21", # For the active project - "type" => "dictionary", - "authors" => ["werner_lemberg"], - "licence" => "LPPL", - # "description_s" => "German hyphenation patterns in reformed spelling", - # "description_l" => [ - # "Hyphenation patterns for German in reformed spelling, in T1/EC and UTF-8 encoding.", - # "Patterns encoded in UTF-8 are provided by a separate package.", - # ], -}, -# swissgerman -{ - "code" => "de-ch-1901", - "name" => "swissgerman", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Swiss-German hyphenation patterns (traditional orthography)", - - "version" => "0.40", - "last_modified" => "2014-05-21", # For the active project - "type" => "dictionary", - "authors" => ["werner_lemberg"], - "licence" => "LPPL", - # "description_l" => "German hyphenation patterns, traditional spelling in Switzerland.", - # "description_s" => [ - # "Hyphenation patterns for German in traditional spelling as used in Switzerland, in T1/EC and UTF-8.", - # "These patterns are suitable for Standard German (Hochdeutsch), not the Alemannic dialects", - # "spoken in Switzerland (Schwyzerdütsch). There are no patterns for written Schwyzerdütsch", - # "we know of.", - # ], -}, -# russian -{ - "code" => "ru", - "name" => "russian", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "The old system allows choosing patterns and encodings manually. That mechanism needs to be implemented first in this package, so we still fall back on old system.", - "filename_old_patterns" => "ruhyphen.tex", - "hyphenmin" => [2,2], - "encoding" => "t2a", - "exceptions" => false, - "message" => "Russian hyphenation patterns", - - "version" => nil, - "last_modified" => "2003-03-10", # Date of the patterns proper, not the support files - "type" => "dictionary", - "authors" => ["alexander_i_lebedev", "werner_lemberg", "vladimir_volovich"], - "licence" => "LPPL", - "description_s" => "Russian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Russian in T2A and UTF-8 encodings.", - "For 8-bit engines, the 'ruhyphen' package provides a number of", - "different pattern sets, as well as different (8-bit) encodings, that", - "can be chosen at format-generation time. The UTF-8 version only", - "provides the default pattern set. A mechanism similar to the one used", - "for 8-bit patterns may be implemented in the future.", - ], -}, -# ukrainian -{ - "code" => "uk", - "name" => "ukrainian", - "use_new_loader" => true, - "use_old_patterns" => true, - "use_old_patterns_comment" => "The old system allows choosing patterns and encodings manually. That mechanism needs to be implemented first in this package, so we still fall back on old system.", - "filename_old_patterns" => "ukrhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "t2a", - "exceptions" => false, - "message" => "Ukrainian hyphenation patterns", - - "version" => nil, - "last_modified" => "2001-05-10", # Date of the patterns proper - # "type" => "rules", # TODO: it is not really clear - "authors" => ["maksym_polyakov", "werner_lemberg", "vladimir_volovich"], - "licence" => "LPPL", - "description_s" => "Ukrainian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Ukrainian in T2A and UTF-8 encodings.", - "For 8-bit engines, the 'ukrhyph' package provides a number of", - "different pattern sets, as well as different (8-bit) encodings, that", - "can be chosen at format-generation time. The UTF-8 version only", - "provides the default pattern set. A mechanism similar to the one used", - "for 8-bit patterns may be implemented in the future.", - ], -}, -# ---------------------------- -# languages using new patterns -# ---------------------------- -# afrikaans -{ - "code" => "af", - "name" => "afrikaans", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [1,2], # in babel: 2,2 - "encoding" => "ec", - "exceptions" => true, - "message" => "Afrikaans hyphenation patterns", - - "version" => "1.0", - "last_modified" => "2013-10-08", - "type" => "dictionary", - "authors" => [ "tilla_fick", "chris_swanepoel" ], - "email" => [ "hyphen{at}rekenaar{dot}net" ], - "licence" => "LPPL", - "description_s" => "Afrikaans hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Afrikaans in T1/EC and UTF-8 encodings.", - "OpenOffice includes older patterns created by a different author,", - "but the patterns packaged with TeX are considered superior in quality.", - # "Word list used to generate patterns with opatgen might be released in future.", - ], -}, -# catalan -{ - "code" => "ca", - "name" => "catalan", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "cahyph.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => true, - "message" => "Catalan hyphenation patterns", - - "version" => "1.11", - "last_modified" => "2003-07-15", - "type" => "rules", # not only rules, also patgen, but it is a good approximation - "authors" => [ "goncal_badenes" ], - "licence" => "LPPL", - "description_s" => "Catalan hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Catalan in T1/EC and UTF-8 encodings.", - ], -}, -# czech -{ - "code" => "cs", - "name" => "czech", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "czhyph.tex", - "filename_old_patterns_other" => ["czhyphen.tex","czhyphen.ex"], - # Both Czech and Slovak: \lefthyphenmin=2, \righthyphenmin=3 - # Typographical rules allow \righthyphenmin=2 when typesetting in a - # narrow column (newspapers etc.). - # (used to be 2,2) - "hyphenmin" => [2,3], - "encoding" => "ec", - "exceptions" => true, - "message" => "Czech hyphenation patterns (Pavel Sevecek, v3, 1995)", - - "version" => "3", - # guessing based on CTAN/macros/cstex/base/csplain.tar.gz: - # 1998-12-17 (patterns) - # 1995-08-23 (exceptions) - # but patterns claim 1995 - "last_modified" => "1995", # todo: no date - "type" => "dictionary", - "authors" => [ "pavel_sevecek" ], - "licence" => "GPL", - "description_s" => "Czech hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Czech in T1/EC and UTF-8 encodings.", - "Original patterns 'czhyphen' are still distributed in the 'csplain'", - "package and loaded with ISO Latin 2 encoding (IL2).", - # however hyph-utf8 could also be used for that - ], -}, -# slovak -{ - "code" => "sk", - "name" => "slovak", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "skhyph.tex", - "filename_old_patterns_other" => ["skhyphen.tex","skhyphen.ex"], - # see czech - "hyphenmin" => [2,3], - "encoding" => "ec", - "exceptions" => true, - "message" => "Slovak hyphenation patterns (Jana Chlebikova, 1992)", - - "version" => "2", - "last_modified" => "1992-04-24", - "type" => "dictionary", - "authors" => [ "jana_chlebikova" ], - "licence" => "GPL", - "description_s" => "Slovak hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Slovak in T1/EC and UTF-8 encodings.", - "Original patterns 'skhyphen' are still distributed in the 'csplain'", - "package and loaded with ISO Latin 2 encoding (IL2).", - # however hyph-utf8 could also be used for that - ], -}, -# welsh -{ - "code" => "cy", - "name" => "welsh", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "cyhyph.tex", - "hyphenmin" => [2,3], - "encoding" => "ec", - "exceptions" => false, - "message" => "Welsh hyphenation patterns", - - "version" => nil, - "last_modified" => "1996", - "type" => "dictionary", - "authors" => [ "yannis_haralambous" ], - "licence" => "LPPL", - "description_s" => "Welsh hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Welsh in T1/EC and UTF-8 encodings.", - ], -}, -# danish -{ - "code" => "da", - "name" => "danish", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "dkhyph.tex", - "filename_old_patterns_other" => ["dkcommon.tex", "dkspecial.tex"], - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Danish hyphenation patterns", - - "version" => nil, - "last_modified" => "2011-01-11", - "type" => "dictionary", - "authors" => [ "frank_jensen" ], - "licence" => "LPPL", - "description_s" => "Danish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Danish in T1/EC and UTF-8 encodings.", - ], -}, -# esperanto -{ - "code" => "eo", - "name" => "esperanto", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "eohyph.tex", - "hyphenmin" => [2,2], - "encoding" => "il3", # TODO - "exceptions" => false, - "message" => "Esperanto hyphenation patterns", - - "version" => nil, - "last_modified" => "1999-08-10", - "type" => "rules", - "authors" => [ "sergei_pokrovsky" ], - "licence" => "LPPL", - "description_s" => "Esperanto hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Esperanto ISO Latin 3 and UTF-8 encodings.", - "Note that TeX distributions don't ship any suitable fonts in Latin 3", - "encoding, so unless you create your own font support or want to use", - "MlTeX, using native Unicode engines is highly recommended.", - # "Hyphenation patterns for Esperanto ISO Latin 3 and UTF-8 encodings.", - # "Note that TeX distributions usually don't ship any suitable fonts in", - # "Latin 3 encoding, so unless you create your own font support or want", - # "to use MlTeX, using native UTF-8 engines is highly recommended.", - ], -}, -# spanish -# =espanol -{ - "code" => "es", - "name" => "spanish", "synonyms" => ["espanol"], - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "eshyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Spanish hyphenation patterns", - - "version" => "4.7", - "last_modified" => "2015-11-12", - "type" => "dictionary", - "authors" => [ "javier_bezos" ], - "licence" => "MIT/X11", - "description_s" => "Spanish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Spanish in T1/EC and UTF-8 encodings.", - ], -}, -# basque -{ - "code" => "eu", - "name" => "basque", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "bahyph.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Basque hyphenation patterns", - - "version" => nil, - "last_modified" => "2008-06-26", - "type" => "rules", - "authors" => [ "juan_aguirregabiria" ], - "licence" => "other-free", # "public-check", - "description_s" => "Basque hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Basque in T1/EC and UTF-8 encodings.", - # "Generating scripts for these rule-based patterns is included in hyph-utf8." - ], -}, -# french -# =patois -# =francais -{ - "code" => "fr", - "name" => "french", "synonyms" => ["patois","francais"], - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "frhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "French hyphenation patterns", - - "version" => "2.13", - "last_modified" => "2016-05-12", - "type" => "rules", - "authors" => ["daniel_flipo", "bernard_gaulle", "arthur_reutenauer"], - "email" => ["cesure-l{at}gutenberg{dot}eu{dot}org"], - "licence" => "MIT", - "description_s" => "French hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for French in T1/EC and UTF-8 encodings.", - ] -}, -# galician -{ - "code" => "gl", - "name" => "galician", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "glhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Galician hyphenation patterns", - - "version" => "2.4", - "last_modified" => "2010-04-23", - "type" => "rules", - "authors" => ["javier_mugica"], - "licence" => "LPPL", # Status maintained - "description_s" => "Galician hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Galician in T1/EC and UTF-8 encodings.", - # "Generated automatically from the mkpattern utility.", - ] -}, -# estonian -{ - "code" => "et", - "name" => "estonian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "ethyph.tex", - "hyphenmin" => [2,3], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Estonian hyphenation patterns", - - "version" => nil, - "last_modified" => "2004-04-13", - "type" => "dictionary", - "authors" => [ "een_saar" ], - "licence" => "LPPL|MIT", # Dual MIT-LPPL - "description_s" => "Estonian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Estonian in T1/EC and UTF-8 encodings.", - ], -}, -# finnish -{ - "code" => "fi", - "name" => "finnish", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "fihyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Finnish hyphenation patterns", - - "version" => "2.2", - "last_modified" => "1989-03-08", - "type" => "rules", - "authors" => ["kauko_saarinen", "fred_karlsson"], - "licence" => "other-free", - "description_s" => "Finnish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Finnish in T1/EC and UTF-8 encodings.", - ], -}, -# croatian -{ - "code" => "hr", - "name" => "croatian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "hrhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Croatian hyphenation patterns", - - "version" => nil, - "last_modified" => "1996-03-19", - "type" => "dictionary", - "authors" => [ "igor_marinovic" ], - "licence" => "LPPL", - "description_s" => "Croatian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Croatian in T1/EC and UTF-8 encodings.", - ], -}, -# hungarian -{ - "code" => "hu", - "name" => "hungarian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "huhyphn.tex", - "hyphenmin" => [2,2], # polyglossia - "encoding" => "ec", - "exceptions" => false, - "message" => "Hungarian hyphenation patterns (v20110815)", - - # https://github.com/nagybence/huhyphn/ - "version" => "v20110815", - "last_modified" => "2011-08-15", # actually, it is "2009-06-12" or older for contents; we probably want to check/fix this - "type" => "dictionary", - "authors" => ["bence_nagy"], - "licence" => "MPL 1.1/GPL 2.0/LGPL 2.1", # TODO - "description_s" => "Hungarian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Hungarian in T1/EC and UTF-8 encodings.", - # TODO: same comment as for Irish: I'm slightly reluctant to put URL addresses here. - "From https://github.com/nagybence/huhyphn/." - ], -}, -# armenian -# Sahak Petrosyan <sahak at mit dot edu> -{ - "code" => "hy", - "name" => "armenian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [1,2], # taken from Hyphenator.js; check the value - "encoding" => nil, - "exceptions" => false, - "message" => "Armenian hyphenation patterns", - - "version" => nil, - "last_modified" => "2010-05", - "type" => "rules", - "authors" => ["sahak_petrosyan"], - "licence" => "LGPL", - "description_s" => "Armenian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Armenian for Unicode engines.", - # "Auto-generated from a script included in hyph-utf8.", - ], -}, -# interlingua -{ - "code" => "ia", - "name" => "interlingua", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "iahyphen.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ascii", - "exceptions" => true, - "message" => "Hyphenation patterns for Interlingua", - - "version" => "0.2c", - "last_modified" => "2005-06-28", - "type" => "dictionary", - "authors" => ["peter_kleiweg"], - "licence" => "LPPL", # TODO Status maintained - "description_s" => "Interlingua hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Interlingua in ASCII encoding.", - ], -}, -# indonesian -{ - "code" => "id", - "name" => "indonesian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "inhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ascii", - "exceptions" => true, - "message" => "Indonesian hyphenation patterns", - - "version" => "1.3", - "last_modified" => "1997-09-19", - "type" => "rules", - "authors" => ["joerg_knappen", "terry_mart"], - "licence" => "GPL", - "description_s" => "Indonesian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Indonesian (Bahasa Indonesia) in ASCII", - "encoding. They are probably also usable for Malay (Bahasa Melayu).", - ], -}, -# icelandic -{ - "code" => "is", - "name" => "icelandic", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "icehyph.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Icelandic hyphenation patterns", - - "version" => nil, - "last_modified" => "2004-03-02", - "type" => "dictionary", - # TODO: I'm not sure that the last two names are relevant, I don't find the source of Marteinn Sverrisson - "authors" => ["jorgen_pind", "marteinn_sverrisson", "kristinn_gylfason"], - "licence" => "LPPL", - "description_s" => "Icelandic hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Icelandic in T1/EC and UTF-8 encodings.", - ], -}, -# irish -{ - "code" => "ga", - "name" => "irish", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "gahyph.tex", - "hyphenmin" => [2,3], # babel - "encoding" => "ec", - "exceptions" => true, - "message" => "Irish hyphenation patterns", - - "version" => "1.0", - "last_modified" => "2004-01-22", - "type" => "dictionary", - "authors" => ["kevin_p_scannell"], - "licence" => "GPL", - "description_s" => "Irish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Irish (Gaeilge) in T1/EC and UTF-8 encodings.", - "Visit http://borel.slu.edu/fleiscin/index.html for more information.", - # TODO: I'm slightly reluctant to put URL here - ], -}, -# italian -{ - "code" => "it", - "name" => "italian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "ithyph.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ascii", - "exceptions" => false, - "message" => "Italian hyphenation patterns", - - "version" => "4.9", - "last_modified" => "2014-04-22", - "type" => "rules", # TODO: we might want to check that, but it seems unlikely that patgen was used - "authors" => ["claudio_beccari"], - "licence" => "LPPL", # Status: maintained! - "description_s" => "Italian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Italian in ASCII encoding.", - # supposed to be ... - "Compliant with the Recommendation UNI 6461 on hyphenation", - "issued by the Italian Standards Institution", - "(Ente Nazionale di Unificazione UNI).", - # "Implements Recommendation UNI 6461 issued by the Italian Standards Institution", - # "(Ente Nazionale di Unificazione UNI).", - ], -}, -# romansh -{ - "code" => "rm", - "name" => "romansh", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [2,2], # todo - "encoding" => "ascii", - "exceptions" => false, - "message" => "Romansh hyphenation patterns", - - "version" => "1.1", - "last_modified" => "2012-04-10", - "type" => "rules", - "authors" => ["claudio_beccari"], - "licence" => "LPPL", # Status: maintained! - "description_s" => "Romansh hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Romansh in ASCII encoding.", - "They are supposed to comply with the rules indicated by the Lia", - "Rumantscha (Romansh language society).", - ], -}, -# friulan -{ - "code" => "fur", - "name" => "friulan", "synonyms" => [], - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Friulan hyphenation patterns", - - "version" => "1.1", - "last_modified" => "2012-04-10", - "type" => "rules", - "authors" => ["claudio_beccari"], - "licence" => "LPPL", # Status: maintained! - "description_s" => "Friulan hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Friulan in ASCII encoding.", - "They are supposed to comply with the common spelling of the", - "Friulan (Furlan) language as fixed by the Regional Law N.15/96", - "dated November 6, 1996 and its following amendments.", - ], -}, -# piedmontese -{ - "code" => "pms", - "name" => "piedmontese", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [2,2], - "encoding" => "ascii", - "exceptions" => false, - "message" => "Piedmontese hyphenation patterns", - - "version" => "1.0", - "last_modified" => "2013-02-14", - "type" => "rules", - "authors" => ["claudio_beccari"], - "licence" => "LPPL", # Status: maintained! - "description_s" => "Piedmontese hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Piedmontese in ASCII encoding.", - "Compliant with 'Gramatica dla lengua piemonteisa' by Camillo Brero.", - ], -}, -# kurmanji -{ - "code" => "kmr", - "name" => "kurmanji", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "kmrhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Kurmanji hyphenation patterns (v. 1.0 2009/06/29 JKn and MSh)", - - "version" => "1.0", - "last_modified" => "2009-06-29", - "type" => "dictionary", - "authors" => ["joerg_knappen", "medeni_shemde"], - "licence" => "LPPL", # Status: maintained! - "description_s" => "Kurmanji hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Kurmanji (Northern Kurdish) as spoken in", - "Turkey and by the Kurdish diaspora in Europe, in T1/EC and UTF-8", - "encodings." - ], -}, -# latin -{ - "code" => "la", - "name" => "latin", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "lahyph.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Latin hyphenation patterns", - - "version" => "3.2a", - "last_modified" => "2014-06-04", # patterns (behaviour) last modified on 2010-06-01 - "type" => "rules", - "authors" => [ "claudio_beccari" ], - "licence" => "LPPL", - "description_s" => "Latin hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Latin in T1/EC and UTF-8 encodings,", - "mainly in modern spelling (u when u is needed and v when v is needed),", - "medieval spelling with the ligatures \\ae and \\oe and the (uncial)", - "lowercase 'v' written as a 'u' is also supported. Apparently", - "there is no conflict between the patterns of modern Latin and", - "those of medieval Latin.", - ], -}, -# classiclatin -{ - "code" => "la-x-classic", - "name" => "classiclatin", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [2,2], - "encoding" => "ascii", - "exceptions" => false, - "message" => "Classical Latin hyphenation patterns", - - "version" => "1.2", - "last_modified" => "2014-10-06", - "type" => "rules", - "authors" => [ "claudio_beccari" ], - "licence" => "LPPL", - "description_s" => "Classical Latin hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for the Classical Latin in T1/EC and UTF-8", - "encodings. Classical Latin hyphenation patterns are different from", - "those of 'plain' Latin, the latter being more adapted to modern Latin.", - ], -}, -# liturgicallatin -{ - "code" => "la-x-liturgic", - "name" => "liturgicallatin", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Liturgical Latin hyphenation patterns", - - "version" => "1.040", - "last_modified" => "2016-05-19", - "type" => "rules", - "authors" => [ "claudio_beccari" ], - "licence" => "MIT", - "description_s" => "Liturgical Latin hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for the Liturgical Latin in T1/EC and UTF-8", - "encodings.", - ], -}, -# lithuanian -{ - "code" => "lt", - "name" => "lithuanian", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], - "encoding" => "l7x", - "exceptions" => false, - "message" => "Lithuanian hyphenation patterns", - - "version" => nil, - "last_modified" => "2002-11-20", # 1992-03-04, for the content? - "authors" => ["vytas_statulevicius", "yannis_haralambous", "sigitas_tolusis"], - # "licence" => "LPPL", - "description_s" => "Lithuanian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Lithuanian in L7X and UTF-8 encodings.", - # "Designed for \\lefthyphenmin and \\righthyphenmin set to 2.", - "\\lefthyphenmin and \\righthyphenmin have to be at least 2.", - # "Changing them to 1 according to grammatical rules from 1997", - # "would require to review and maybe rebuild the patterns." - ], -}, -# latvian -{ - "code" => "lv", - "name" => "latvian", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], - "encoding" => "l7x", - "exceptions" => false, - "message" => "Latvian hyphenation patterns", - - "version" => "0.3", - "last_modified" => "2005-09-14", - "type" => "dictionary", - "authors" => ["janis_vilims"], - "licence" => "LGPL", - "description_s" => "Latvian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Latvian in L7X and UTF-8 encodings.", - ], -}, -# dutch -{ - "code" => "nl", - "name" => "dutch", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "nehyph96.tex", - # quoting Hans Hagen: - # patterns generated with 2,2 (so don't go less) but use prefered values 2,3 (educational publishers want 4,5 -) - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => true, - "message" => "Dutch hyphenation patterns", - - "version" => "1.1", - "last_modified" => "1996-11", - "type" => "dictionary", - "authors" => ["piet_tutelaers"], - "licence" => "LPPL", - "description_s" => "Dutch hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Dutch in T1/EC and UTF-8 encodings.", - # "\\lefthyphenmin and \\righthyphenmin must both be > 1.", - "These patterns don't handle cases like 'menuutje' > 'menu-tje',", - "and don't hyphenate words that have different hyphenations according", - "to their meaning." - ], -}, -# occitan -{ - "code" => "oc", - "name" => "occitan", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Occitan hyphenation patterns", - - "version" => "0.1", - "last_modified" => "2016-02-04", - "type" => "rules", - "authors" => [ "claudio_beccari" ], - "licence" => "LPPL", - "description_s" => "Occitan hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Occitan in T1/EC and UTF-8 encodings.", - "They are supposed to be valid for all the Occitan variants", - "spoken and written in the wide area called 'Occitanie' by the French.", - "It ranges from the Val d'Aran within Catalunya, to the South Western", - "Italian Alps encompassing the southern half of the French pentagon.", - ], -}, -# polish -{ - "code" => "pl", - "name" => "polish", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "plhyph.tex", - #{}"hyphenmin" => [1,1], - "hyphenmin" => [2,2], - "encoding" => "qx", - "exceptions" => true, - "message" => "Polish hyphenation patterns", - - "version" => "3.0a", - "last_modified" => "1995-06-17", - "type" => "dictionary", - "authors" => ["hanna_kolodziejska", "boguslaw_jackowski", "marek_rycko"], - "licence" => "public", # TODO Knuthian type - "description_s" => "Polish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Polish in QX and UTF-8 encodings.", - "These patterns are also used by Polish TeX formats MeX and LaMeX.", - ], -}, -# portuguese -# =portuges -{ - "code" => "pt", - "name" => "portuguese", "synonyms" => ["portuges"], - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "pthyph.tex", - "hyphenmin" => [2,3], # babel - "encoding" => "ec", - "exceptions" => true, - "message" => "Portuguese hyphenation patterns", - - "version" => "1.0", - "last_modified" => "1996-07-21", - "type" => "rules", # TODO: we could create a generating script - "authors" => ["pedro_j_de_rezende", "j_joao_dias_almeida"], - "licence" => "BSD-3", - "description_s" => "Portuguese hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Portuguese in T1/EC and UTF-8 encodings.", - ], -}, -# pinyin -{ - "code" => "zh-latn-pinyin", - "name" => "pinyin", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "pyhyph.tex", - "hyphenmin" => [1,1], - "encoding" => "ec", - "exceptions" => false, - "message" => "Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0)", - - "version" => "4.8.0", - "last_modified" => "2008-05-22", - "type" => "rules", # TODO: we could create a generating script - "authors" => ["werner_lemberg"], - "licence" => "GPL", - "description_s" => "Chinese pinyin hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for unaccented transliterated Mandarin Chinese", - "(pinyin) in T1/EC and UTF-8 encodings.", - ], -}, -# romanian -{ - "code" => "ro", - "name" => "romanian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "rohyphen.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Romanian hyphenation patterns", # : `rohyphen' 1.1 <29.10.1996> - - "version" => "1.1R", - "last_modified" => "1996-11-07", - "type" => "dictionary", - "authors" => ["adrian_rezus"], - "description_s" => "Romanian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Romanian in T1/EC and UTF-8 encodings.", - "The UTF-8 patterns use U+0219 for the character 's with comma accent'", - "and U+021B for 't with comma accent', but we may consider using U+015F", - "and U+0163 as well in the future.", - # "Generated by PatGen2-output hyphen-level 9.", - ], -}, -# slovenian -# =slovene -{ - "code" => "sl", - "name" => "slovenian", "synonyms" => ["slovene"], - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "sihyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Slovenian hyphenation patterns", - - "version" => "2.3", - "last_modified" => "1997-15-04", - "type" => "dictionary", - "authors" => [ "matjaz_vrecko" ], - "licence" => "LPPL", - "description_s" => "Slovenian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Slovenian in T1/EC and UTF-8 encodings.", - ], -}, -# uppersorbian -{ - "code" => "hsb", - "name" => "uppersorbian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "sorhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => true, - "message" => "Upper Sorbian hyphenation patterns (E. Werner)", -# \message{Hyphenation patterns for Upper Sorbian, E. Werner} -# \message{Completely new revision 1997, March 22} - - "version" => nil, - "last_modified" => "1997-03-22", - "authors" => ["eduard_werner"], - "type" => "dictionary", - "licence" => "LPPL", - "description_s" => "Upper Sorbian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Upper Sorbian in T1/EC and UTF-8 encodings.", - ], -}, -# swedish -{ - "code" => "sv", - "name" => "swedish", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "svhyph.tex", - "hyphenmin" => [2,2], # patters say it could be 1,2; babel says 2,2 - double check - "encoding" => "ec", - "exceptions" => false, - "message" => "Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03)", - - # "version" => "1994-03-03", # that is what author used in message - "version" => nil, - "last_modified" => "1994-03-03", - "type" => "dictionary", - "authors" => ["jan_michael_rynning"], - "licence" => "LPPL", - "description_s" => "Swedish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Swedish in T1/EC and UTF-8 encodings.", - ], -}, -# turkmen -{ - "code" => "tk", - "name" => "turkmen", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => nil, - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => false, - "message" => "Turkmen hyphenation patterns", - - "version" => "0.1", - "last_modified" => "2010-03-16", - "type" => "dictionary", - "authors" => [ "nazar_annagurban" ], - "licence" => "public", - "description_s" => "Turkmen hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Turkmen in T1/EC and UTF-8 encodings.", - ], -}, -# turkish -{ - "code" => "tr", - "name" => "turkish", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "tkhyph.tex", - "hyphenmin" => [2,2], # polyglossia - "encoding" => "ec", - "exceptions" => false, - "message" => "Turkish hyphenation patterns", - - "version" => nil, - "last_modified" => "2008-06-28", - "type" => "rules", - "authors" => ["pierre_mackay", "h_turgut_uyar", "s_ekin_kocabas", "mojca_miklavec"], - "licence" => "LPPL", - "description_s" => "Turkish hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Turkish in T1/EC and UTF-8 encodings.", - # "Auto-generated from a script included in the distribution.", - "The patterns for Turkish were first produced for the Ottoman Texts", - "Project in 1987 and were suitable for both Modern Turkish and Ottoman", - "Turkish in Latin script, however the required character set didn't fit", - "into EC encoding, so support for Ottoman Turkish had to be dropped to", - "keep compatibility with 8-bit engines.", - ] -}, - - - - -# ukenglish -{ - "code" => "en-gb", - "name" => "ukenglish", "synonyms" => ["british", "UKenglish"], - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "ukhyphen.tex", - "hyphenmin" => [2,3], # confirmed, same as what Knuth says - "encoding" => "ascii", - "exceptions" => true, - "message" => "Hyphenation patterns for British English", - - "version" => "1.0a", # FIXME a much older comment says 2.0? - "last_modified" => "2005-10-18", - "type" => "dictionary", - "authors" => ["dominik_wujastyk", "graham_toal"], - "licence" => "other-free", # TODO Knuth-like - # (This will be uncommented during reimplementation) - # "description_s" => "British English hyphenation patterns", - # "description_l" => [ - # "Hyphenation patterns for British English in ASCII encoding.", - # ], - - "description_s" => "English hyphenation patterns", - "description_l" => [ - #......................................................................# - "Additional hyphenation patterns for American and British", - "English in ASCII encoding. The American English patterns", - "(usenglishmax) greatly extend the standard patterns from Knuth", - "to find many additional hyphenation points. British English", - "hyphenation is completely different from US English, so has its", - "own set of patterns.", - ], -}, -# (US english) -# usenglishmax -{ - "code" => "en-us", - "name" => "usenglishmax", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "ushyphmax.tex", - "hyphenmin" => [2,3], # confirmed, same as what Knuth says - "encoding" => "ascii", - "exceptions" => true, - "message" => "Hyphenation patterns for American English", - - "version" => nil, - "last_modified" => "1990-03-01", # 8-bit file also has version 2005-05-30. - "type" => "dictionary", - "authors" => ["donald_e_knuth", "gerard_d_c_kuiken"], - "licence" => "other-free", - # (This will be uncommented during reimplementation) - # "description_s" => "American English hyphenation patterns", - # "description_l" => [ - # "Hyphenation patterns for American English in ASCII encoding.", - # ], -}, -# US english -# { -# "code" => "en-us-x-knuth", -# "name" => "english", -# "use_new_loader" => false, -# "use_old_patterns" => false, -# "filename_old_patterns" => "hyphen.tex", -# "hyphenmin" => [2,3], # confirmed, same as what Knuth says -# "encoding" => "ascii", -# "exceptions" => true, -# "message" => "Hyphenation patterns for American English", -# }, -# TODO: FIXME!!! -# serbian -{ - "code" => "sh-latn", - "name" => "serbian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "shhyphl.tex", - # It is allowed to leave one character at the end of the row. - # However, if you think that it is graphicaly not very - # pleasant these patterns will work well with \lefthyphenmin=2. - # \lefthyphenmin=1 \righthyphenmin=2 - "hyphenmin" => [2,2], - "encoding" => "ec", - "exceptions" => true, - "message" => "Serbian hyphenation patterns in Latin script", - - # only for serbian - "version" => "2.02", - "last_modified" => "2008-06-22", - "type" => "dictionary", - "authors" => [ "dejan_muhamedagic" ], - "licence" => "LPPL", - # for both scripts - "description_s" => "Serbian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Serbian in T1/EC, T2A and UTF-8 encodings.", - "For 8-bit engines the patterns are available separately as 'serbian'", - "in T1/EC encoding for Latin script and 'serbianc' in T2A encoding for", - "Cyrillic script. Unicode engines should only use 'serbian'", - "which has patterns in both scripts combined.", - ], -}, -# serbianc -{ - "code" => "sh-cyrl", - "name" => "serbianc", - "use_new_loader" => true, - "use_old_patterns" => false, - # "filename_old_patterns" => "srhyphc.tex", - "hyphenmin" => [2,2], - "encoding" => "t2a", - "exceptions" => true, - "message" => "Serbian hyphenation patterns in Cyrillic script", -}, -# mongolian (used to be mongolian2a) -{ - "code" => "mn-cyrl", - "name" => "mongolian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "mnhyphn.tex", - "hyphenmin" => [2,2], - "encoding" => "t2a", - "exceptions" => false, - "message" => "(New) Mongolian hyphenation patterns", - - # only for this one - "version" => "1.2", - "last_modified" => "2010-04-03", - "type" => "dictionary", - "authors" => [ "dorjgotov_batmunkh" ], - "licence" => "LPPL", - # for both - "description_s" => "Mongolian hyphenation patterns in Cyrillic script", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Mongolian in T2A, LMC and UTF-8 encodings.", - "LMC encoding is used in MonTeX. The package includes two sets of", - "patterns that will hopefully be merged in future.", - ], -}, -# mongolianlmc xu-mnhyph.tex (used to be mongolian) -{ - "code" => "mn-cyrl-x-lmc", - "name" => "mongolianlmc", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "mnhyph.tex", - "hyphenmin" => [2,2], - "encoding" => "lmc", - "exceptions" => false, - "message" => "Mongolian hyphenation patterns", -}, -# bulgarian -{ - "code" => "bg", - "name" => "bulgarian", - "use_new_loader" => true, - "use_old_patterns" => false, - "filename_old_patterns" => "bghyphen.tex", - "hyphenmin" => [2,2], # babel - "encoding" => "t2a", - "exceptions" => false, - "message" => "Bulgarian hyphenation patterns", - - "version" => "1.7", - "last_modified" => "2008-06", - "type" => "pattern", - "authors" => [ "georgi_boshnakov" ], - "licence" => "LPPL", - "description_s" => "Bulgarian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Bulgarian in T2A and UTF-8 encodings.", - ], -}, -# sanskrit -{ - "code" => "sa", - "name" => "sanskrit", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,3], # polyglossia - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Sanskrit hyphenation patterns (v0.6, 2011/09/14)", - - "version" => "0.6", - "last_modified" => "2011-09-14", - "type" => "rules", - "authors" => ["yves_codet"], - "licence" => "free", # You may freely use, copy, modify and/or distribute this file. - "description_s" => "Sanskrit hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Sanskrit and Prakrit in transliteration,", - "and in Devanagari, Bengali, Kannada, Malayalam and Telugu scripts", - "for Unicode engines.", - ], -}, -# norwegian -{ - "code" => "no", - "name" => "norwegian", # TODO: fixme - "use_new_loader" => false, - "use_old_patterns" => false, - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => false, - "message" => "Norwegian hyphenation patterns", -}, -# norsk -{ - "code" => "nb", - "name" => "bokmal", "synonyms" => ["norwegian", "norsk"], - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => true, - "message" => "Norwegian Bokmal hyphenation patterns", - - "version" => nil, - "last_modified" => "2012-05-18", - "type" => "dictionary", - "authors" => [ "rune_kleveland", "ole_michael_selberg" ], - "licence" => "free", # TODO - "description_s" => "Norwegian Bokmal and Nynorsk hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Norwegian Bokmal and Nynorsk in T1/EC and", - "UTF-8 encodings.", - ], -}, -# nynorsk -{ - "code" => "nn", - "name" => "nynorsk", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], # babel - "encoding" => "ec", - "exceptions" => true, - "message" => "Norwegian Nynorsk hyphenation patterns", -}, -##### -# assamese -{ - "code" => "as", - "name" => "assamese", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Assamese hyphenation patterns", - - # this is true for all Indic patterns - "version" => "0.9.0", - "last_modified" => "2016-01-16", - "type" => "rules", - "authors" => ["santhosh_thottingal"], - "licence" => "MIT", - "description_s" => "Indic hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Assamese, Bengali, Gujarati, Hindi, Kannada,", - "Malayalam, Marathi, Oriya, Panjabi, Tamil and Telugu for Unicode", - "engines.", - ], -}, -# bengali -{ - "code" => "bn", - "name" => "bengali", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Bengali hyphenation patterns", -}, -# gujarati -{ - "code" => "gu", - "name" => "gujarati", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Gujarati hyphenation patterns", -}, -# hindi -{ - "code" => "hi", - "name" => "hindi", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Hindi hyphenation patterns", -}, -# kannada -{ - "code" => "kn", - "name" => "kannada", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Kannada hyphenation patterns", -}, -# malayalam -{ - "code" => "ml", - "name" => "malayalam", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Malayalam hyphenation patterns", -}, -# marathi -{ - "code" => "mr", - "name" => "marathi", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Marathi hyphenation patterns", -}, -# oriya -{ - "code" => "or", - "name" => "oriya", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Oriya hyphenation patterns", -}, -# panjabi -{ - "code" => "pa", - "name" => "panjabi", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Panjabi hyphenation patterns", -}, -# tamil -{ - "code" => "ta", - "name" => "tamil", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Tamil hyphenation patterns", -}, -# telugu -{ - "code" => "te", - "name" => "telugu", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], # TODO - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Telugu hyphenation patterns", -}, -# thai -{ - "code" => "th", - "name" => "thai", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,3], - "encoding" => "lth", - "exceptions" => false, - "message" => "Thai hyphenation patterns", - - "version" => nil, - "last_modified" => "2015-05-07", - "type" => "dictionary", - "authors" => [ "theppitak_karoonboonyanan" ], - "licence" => "LPPL", - "description_s" => "Thai hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Thai in LTH and UTF-8 encodings.", - ], -}, -# lao -#{ -# "code" => "lo", -# "name" => "lao", -# "use_new_loader" => true, -# "use_old_patterns" => false, -# "hyphenmin" => [1,1], # TODO -# "encoding" => nil, # no patterns for 8-bit engines -# "exceptions" => false, -# "message" => "Lao hyphenation patterns", -# -# "version" => nil, -# "last_modified" => "2010-05-19", -# "type" => "rules", -# "authors" => [ "brian_wilson", "arthur_reutenauer", "mojca_miklavec" ], -# "licence" => "other-free", -# "description_s" => "Lao hyphenation patterns", -# "description_l" => [ -# #......................................................................# -# "Hyphenation patterns for Lao language for Unicode engines.", -# "Current version is experimental and gives bad results.", -# ], -#}, -# pan-Ethiopic -{ - "code" => "mul-ethi", - "name" => "ethiopic", "synonyms" => ["amharic", "geez"], - "version" => nil, - "last_modified" => "2011-01-10", - "authors" => ["arthur_reutenauer", "mojca_miklavec"], - "licence" => "public-ask", # TODO - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,1], - "encoding" => nil, # no patterns for 8-bit engines - "exceptions" => false, - "message" => "Pan-Ethiopic hyphenation patterns", - "description_s" => "Hyphenation patterns for Ethiopic scripts", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for languages written using the Ethiopic script", - "for Unicode engines. They are not supposed to be linguistically", - "relevant in all cases and should, for proper typography, be replaced", - "by files tailored to individual languages.", - ], -}, -# georgian -{ - "code" => "ka", - "name" => "georgian", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1,2], - "encoding" => "t8m", - "exceptions" => false, - "message" => "Georgian hyphenation patterns", - - "version" => "0.3", - "last_modified" => "2013-04-15", - "type" => "dictionary", - "authors" => [ "levan_shoshiashvili" ], - "licence" => "LPPL", - "description_s" => "Georgian hyphenation patterns", - "description_l" => [ - #......................................................................# - "Hyphenation patterns for Georgian in T8M, T8K and UTF-8 encodings.", - ], -}, -# Church Slavonic -{ - "code" => "cu", - "name" => "churchslavonic", - "use_new_loader" => true, - "hyphenmin" => [1, 2], - "encoding" => nil, - "exceptions" => true, - "message" => "Church Slavonic hyphenation patterns", - - "version" => nil, - "last_modified" => "2016-04-16", - "type" => "machine learning", - "authors" => ["mike_kroutikov", "aleksandr_andreev"], - "licence" => "MIT", - "description_s" => "Church Slavonic hyphenation patterns", - "description_l" => [ - "Hyphenation patterns for Church Slavonic in UTF-8 encoding", - ], -}, -# Belarusian -{ - "code" => "be", - "name" => "belarusian", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [2,2], - "encoding" => "t2a", - "message" => "Belarusian hyphenation patterns", - - "version" => nil, - "last_modified" => "2016-09-29", - "type" => "rules", - "authors" => ["maksim_salau"], - "licence" => "MIT", - "description_s" => "Belarusian hyphenation patterns", - "description_l" => [ - "Belarusian hyphenation patterns in T2A and UTF-8 encodings" - ], -}, -# Pali -{ - "code" => "pi", - "name" => "pali", - "use_new_loader" => true, - "use_old_patterns" => false, - "hyphenmin" => [1, 2], - # no encoding - "message" => "Pali hyphenation patterns", - # no version number - "last_modified" => "2018-06-29", - "type" => "rules", - "authors" => ["wie_ming_ang"], - "licence" => "MIT", - "description_s" => "Pali hyphenation patterns", - "description_l" => [ - "Pali hyphenation patterns in UTF-8 encoding", - ], -}, -# dumylang -> dumyhyph.tex -# nohyphenation -> zerohyph.tex -# arabic -> zerohyph.tex -# farsi zerohyph.tex -# =persian - ] - - # TODO: do not hardcode this list; auto-generate it instead - languages_with_quotes = ['af', 'be', 'fr', 'fur', 'it', 'oc', 'pms', 'rm', 'uk', 'zh-latn-pinyin'] - languages_with_dashes = ['af', 'be', 'pt', 'ru', 'tk', 'uk'] - - languages.each do |l| - language = Language.new(l) - if languages_with_quotes.include?(language.code) then - language.set_quotes() + def extract_characters + characters = Array.new + + characters_indexes = patterns.join.gsub(/[.0-9]/,'').unpack('U*').sort.uniq + characters_indexes.each do |c| + ch = [c].pack('U') + characters << ch + Unicode.upcase(ch) + characters << "’’" if ch == "'" && !isgreek? end - if languages_with_dashes.include?(language.code) then - language.set_dashes() + + characters + end + end + + def list_synonyms + # synonyms + if synonyms && synonyms.length > 0 + sprintf " synonyms=%s", synonyms.join(',') + else + '' + end + end + + def list_hyphenmins + # lefthyphenmin/righthyphenmin + lmin = (hyphenmin || [])[0] + rmin = (hyphenmin || [])[1] + sprintf "lefthyphenmin=%s \\\n\trighthyphenmin=%s", lmin, rmin + end + + def list_loader + # which loader to use + file = sprintf "file=%s", loadhyph + return file unless use_old_loader + + if ['ar', 'fa'].include? code + file = file + " \\\n\tfile_patterns=" + elsif code == 'grc-x-ibycus' + # TODO: fix this + file = file + " \\\n\tluaspecial=\"disabled:8-bit only\"" + end + end + + + def list_run_files + return [] if use_old_loader + + files = [] + + files << File.join(PATH::HYPHU8, 'loadhyph', loadhyph) + if has_apostrophes + files << File.join(PATH::HYPHU8, 'patterns', 'quote', sprintf("hyph-quote-%s.tex", code)) + end + + files << File.join(PATH::HYPHU8, 'patterns', 'tex', sprintf('hyph-%s.tex', code)) + if encoding && encoding != "ascii" then + files << File.join(PATH::HYPHU8, 'patterns', 'ptex', sprintf('hyph-%s.%s.tex', code, encoding)) + elsif code == "cop" + files << File.join(PATH::HYPHU8, 'patterns', 'tex-8bit', filename_old_patterns) + end + + # we skip the mongolian language for luatex files + return files if code == "mn-cyrl-x-lmc" + + ['chr', 'pat', 'hyp', 'lic'].each do |t| + files << File.join(PATH::HYPHU8, 'patterns', 'txt', sprintf('hyph-%s.%s.txt', code, t)) + end + + if code =~ /^sh-/ + # duplicate entries (will be removed later) + files << File.join(PATH::HYPHU8, 'patterns', 'tex', 'hyph-sr-cyrl.tex') + ['chr', 'pat', 'hyp', 'lic'].each do |t| + # duplicate entries (will be removed later) + files << File.join(PATH::HYPHU8, 'patterns', 'txt', sprintf('hyph-sr-cyrl.%s.txt', t)) end - @@list.push(language) - self[language.code] = language end + + files end +end + +module TeXLive + class Package + attr_reader :name + + def initialize(name) + @name = name + end + + @@package_mappings = { + "en-gb"=>"english", + "en-us"=>"english", + "nb"=>"norwegian", + "nn"=>"norwegian", + "de-1901"=>"german", + "de-1996"=>"german", + "de-ch-1901"=>"german", + "mn-cyrl"=>"mongolian", + "mn-cyrl-x-lmc"=>"mongolian", + "el-monoton"=>"greek", + "el-polyton"=>"greek", + "grc"=>"ancient greek", + "grc-x-ibycus"=>"ancient greek", + "zh-latn-pinyin"=>"chinese", + "as"=>"indic", + "bn"=>"indic", + "gu"=>"indic", + "hi"=>"indic", + "kn"=>"indic", + "ml"=>"indic", + "mr"=>"indic", + "or"=>"indic", + "pa"=>"indic", + "ta"=>"indic", + "te"=>"indic", + "sh-latn"=>"serbian", + "sh-cyrl"=>"serbian", + "la"=>"latin", + "la-x-classic"=>"latin", + "la-x-liturgic"=>"latin" + } + + def self.make_mappings + @@package_names = @@package_mappings.values.uniq.map do |package_name| + [package_name, new(package_name)] + end.to_h + + # a hash with the names of TeX Live packages, either individual language names, + # or an array of languages as the value + @@packages = Hash.new + Language.all.each do |language| + package_name = @@package_mappings[language.code] + next if !package_name && @@package_names.include?(language.name) + package_name ||= language.name + package = @@package_names[package_name] || new(package_name) + + (@@packages[package] ||= []) << language + end + + @@packages + end + + @@packages = make_mappings + def self.all + @@packages.keys + end + + # FIXME That’s oh-so-awful + def description_s + return 'Hyphenation patterns for Ethiopic scripts' if @name == 'ethiopic' + + if @name == 'arabic' + leader = '(No) Arabic' + elsif @name == 'farsi' + leader = '(No) Persian' + elsif @name == 'greek' + leader = 'Modern Greek' + elsif @name == 'chinese' + leader = 'Chinese pinyin' + elsif @name == 'norwegian' + leader = 'Norwegian Bokmal and Nynorsk' + else + leader = @name.titlecase + end + + shortdesc = sprintf '%s hyphenation patterns', leader + + shortdesc += ' in Cyrillic script' if @name == 'mongolian' - def list - return @@list + shortdesc + end + + # FIXME This should be at package level from the start + def description_l + languages.inject([]) do |description, language| + description + if language.description_l then language.description_l else [] end + end + end + + def languages + @languages ||= @@packages[self] + end + + def has_dependency? + { + "german" => "dehyph", + # for Russian and Ukrainian (until we implement the new functionality at least) + "russian" => "ruhyphen", + "ukrainian" => "ukrhyph", + }[name] + end + + def list_dependencies + dependencies = [ + "depend hyphen-base", + "depend hyph-utf8", + ] + + # external dependencies + if dependency = has_dependency? + dependencies << sprintf("depend %s", dependency) + end + + dependencies + end + + @@special_support = { + 'doc' => { + 'greek' => 'doc/generic/elhyphen', + 'hungarian' => 'doc/generic/huhyphen', + } + } + + def list_support_files(type) + # Cache directory contents + (@dirlist ||= { })[type] ||= Dir.glob(File.expand_path(sprintf('../../../../%s/generic/hyph-utf8/languages/*', type), __FILE__)).select do |file| + File.directory?(file) + end.map do |dir| + dir.gsub /^.*\//, '' + end + + files = (languages.map(&:code) & @dirlist[type]).map do |code| + sprintf("%s/generic/hyph-utf8/languages/%s", type, code) + end + + if special = @@special_support.dig(type, name) + files << special + end + + files + end + + def list_run_files + files = [] + files << "tex/generic/hyph-utf8/patterns/tex/hyph-no.tex" if name == "norwegian" + + files = languages.inject(files) do |files, language| + files + language.list_run_files + end + + unless has_dependency? + languages.each do |language| + if language.use_old_patterns and language.filename_old_patterns != "zerohyph.tex" and language.code != 'cop' + files << sprintf("tex/generic/hyphen/%s", language.filename_old_patterns) + end + end + end + + files + end + + def <=>(other) + name <=> other.name + end + + # FIXME Change later + def find(name) + @@package_names[self] + end end end |