diff options
Diffstat (limited to 'Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb')
-rw-r--r-- | Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb | 261 |
1 files changed, 73 insertions, 188 deletions
diff --git a/Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb b/Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb index 4b9d8a62c3b..c0781932a38 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb +++ b/Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb @@ -1,24 +1,28 @@ #!/usr/bin/env ruby # encoding: utf-8 -# this file auto-generates loaders for hyphenation patterns - to be improved +# this file auto-generates loaders for hyphenation patterns - to be improved # No shit, Sherlock -- AR 2018-11-27 -require_relative 'languages.rb' - -$package_name="hyph-utf8" - -# TODO - make this a bit less hard-coded -$path_tex_generic=File.expand_path("../../../../tex/generic", __FILE__) -$path_loadhyph="#{$path_tex_generic}/#{$package_name}/loadhyph" - -# TODO: should be singleton -languages = Language.all +require_relative 'lib/tex/hyphen' +require_relative 'lib/tex/hyphen/texlive' +include TeX::Hyphen +include TeXLive #text_if_native_utf = "\input pattern-loader.tex\n\\ifNativeUtfEightPatterns" -languages.each do |language| +def output(file, string, indent = 0) + if string.is_a? Enumerable + string.each { |line| output(file, line, indent) } + else + file.print ' ' * indent + file.puts(string) + end +end -string_enc = (language.encoding == nil) ? "" : language.encoding.upcase + " " +print 'Generating loaders for ' +Language.all.each do |language| + +# puts language.bcp47 ################ # Header texts # @@ -26,212 +30,93 @@ string_enc = (language.encoding == nil) ? "" : language.encoding.upcase + " " # a message about auto-generation # TODO: write a more comprehensive one -text_header = -"% filename: loadhyph-#{language.code}.tex -% language: #{language.name.safe} + text_header = <<-EOHEADER +% filename: loadhyph-#{language.bcp47}.tex +% language: #{language.babelname} % % Loader for hyphenation patterns, generated by % source/generic/hyph-utf8/generate-pattern-loaders.rb % See also http://tug.org/tex-hyphen % -% Copyright 2008-2016 TeX Users Group. +% Copyright 2008-#{Time.now.year} TeX Users Group. % You may freely use, modify and/or distribute this file. % (But consider adapting the scripts if you need modifications.) % % Once it turns out that more than a simple definition is needed, % these lines may be moved to a separate file. -%" +% + EOHEADER -text_if_native_utf = -'% Test for pTeX +########### +# lccodes # +########### + + lccodes_common = [] + if language.has_apostrophes? then + lccodes_common.push("\\lccode`\\'=`\\'") + end + if language.has_hyphens? then + lccodes_common.push("\\lccode`\\-=`\\-") + end + + next if language.use_old_loader + print language.bcp47, ' ' + + filename = File.join(PATH::LOADER, language.loadhyph) + File.open(filename, "w") do |file| + # puts language.bcp47 + file.puts text_header + file.puts('\begingroup') + + if lccodes_common.length > 0 then + file.puts lccodes_common.join("\n") + end + + # for ASCII encoding, we don't load any special support files, but simply load everything + if language.encoding == 'ascii' && !language.italic? + file.puts "% ASCII patterns - no additional support is needed" + file.puts "\\message{ASCII #{language.message}}" + file.puts "\\input hyph-#{language.bcp47}.tex" + else + file.puts '% Test for pTeX \\ifx\\kanjiskip\\undefined % Test for native UTF-8 (which gets only a single argument) % That\'s Tau (as in Taco or ΤΕΧ, Tau-Epsilon-Chi), a 2-byte UTF-8 character \\def\\testengine#1#2!{\\def\\secondarg{#2}}\\testengine Τ!\\relax \\ifx\\secondarg\\empty' - -comment_engine_utf8 = "% Unicode-aware engine (such as XeTeX or LuaTeX) only sees a single (2-byte) argument" -comment_engine_8bit = "% 8-bit engine (such as TeX or pdfTeX)" -comment_engine_ptex = "% pTeX" - -text_engine_ascii = ["% ASCII patterns - no additional support is needed", - "\\message{ASCII #{language.message}}", - "\\input hyph-#{language.code}.tex"] -text_engine_utf8 = [" #{comment_engine_utf8}", - " \\message{UTF-8 #{language.message}}"] -text_engine_8bit = [" #{comment_engine_8bit}", - " \\message{#{string_enc}#{language.message}}"] -text_engine_ptex = [" #{comment_engine_ptex}", - " \\message{#{string_enc}#{language.message}}"] -text_engine_8bit_no = [" #{comment_engine_8bit}", - " \\message{No #{language.message} - only for Unicode engines}", - " %\\input zerohyph.tex"] -text_engine_ptex_no = [" #{comment_engine_ptex}", - " \\message{No #{language.message} - only for Unicode engines}", - " %\\input zerohyph.tex"] -text_patterns = " \\input hyph-#{language.code}.tex" -text_patterns_ptex = " \\input hyph-#{language.code}.#{language.encoding}.tex" -text_patterns_old = " \\input #{language.filename_old_patterns}" -text_patterns_conv = " \\input conv-utf8-#{language.encoding}.tex" -text_patterns_utf8 = text_patterns - -text_patterns_quote = " \\input hyph-quote-#{language.code}.tex" - -########### -# lccodes # -########### - -lccodes_common = [] -if language.has_apostrophes then - lccodes_common.push("\\lccode`\\'=`\\'") -end -if language.has_dashes then - lccodes_common.push("\\lccode`\\-=`\\-") -end - -if ['sh-latn', 'sh-cyrl'].include?(language.code) then - text_patterns_utf8 = [" \\input hyph-sh-latn.tex", - " \\input hyph-sh-cyrl.tex"] - text_engine_utf8 = [" #{comment_engine_utf8}", - " \\message{UTF-8 Serbian hyphenation patterns}", - " % We load both scripts at the same time to simplify usage"] -end - - next if language.use_old_loader - - if language.code == 'sh-latn' then - filename = "#{$path_loadhyph}/loadhyph-sr-latn.tex" - elsif language.code == 'sh-cyrl' then - filename = "#{$path_loadhyph}/loadhyph-sr-cyrl.tex" - else - filename = "#{$path_loadhyph}/loadhyph-#{language.code}.tex" - end - puts "generating '#{filename}'" - - File.open(filename, "w") do |file| - file.puts text_header - file.puts('\begingroup') - - if lccodes_common.length > 0 then - file.puts lccodes_common.join("\n") - end + output(file, language.format_inputs(language.utf8_chunk), 2) + file.puts("\\else\n") + output(file, language.format_inputs(language.nonutf8_chunk('8-bit')), 2) + file.puts("\\fi\\else\n") + output(file, language.format_inputs(language.nonutf8_chunk('pTeX')), 2) + file.puts("\\fi\n") + end ######################################## # GROUP nr. 1 - ONLY USABLE WITH UTF-8 # ######################################## - # some special cases first - # - # some languages (sanskrit) are useless in 8-bit engines; we only want to load them for UTF engines - # TODO - maybe consider doing something similar for ibycus - if ['cu', 'sa','as','bn','gu','hi','hy','kn','lo','mul-ethi','ml','mr','or','pa','ta','te', 'pi'].include?(language.code) then - file.puts(text_if_native_utf) - file.puts(text_engine_utf8) - # lccodes - if language.code == 'mul-ethi' then - file.puts(' % Set \lccode for Ethiopian word space.') - file.puts(' \lccode"1361="1361') - file.puts(' \lccode"1362="1362') - elsif language.code == "cu" then - file.puts(' % fix lccodes for some characters (they were recently included in Unicode)') - file.puts(' \lccode"1C82="1C82 % sharp o in lowercase "uk"') - ['1DF6', '1DF7', '1DF8', '1DF9', 'A69E', '1C86', 'A67E', 'FE2E', 'FE2F'].each do |l| - file.puts(" \\lccode\"#{l}=\"#{l}") - end - elsif language.code != 'lo' then - file.puts(' % Set \lccode for ZWNJ and ZWJ.') - file.puts(' \lccode"200C="200C') - file.puts(' \lccode"200D="200D') - if language.code == 'sa' then - file.puts(' % Set \lccode for KANNADA SIGN JIHVAMULIYA and KANNADA SIGN UPADHMANIYA.') - file.puts(' \lccode"0CF1="0CF1') - file.puts(' \lccode"0CF2="0CF2') - end - end - file.puts(text_patterns) - file.puts('\else') - file.puts(text_engine_8bit_no) - file.puts('\fi\else') - file.puts(text_engine_ptex_no) - file.puts('\fi') + # some special cases first + # + # some languages (sanskrit) are useless in 8-bit engines; we only want to load them for UTF engines + # TODO - maybe consider doing something similar for ibycus ####################### # GROUP nr. 2 - ASCII # ####################### - elsif ['it', 'pms', 'rm'].include?(language.code) - file.puts(text_if_native_utf) - file.puts(text_engine_utf8) - file.puts(text_patterns) - file.puts(text_patterns_quote) - file.puts('\else') - file.puts(text_engine_8bit) - file.puts(text_patterns) - file.puts('\fi\else') - file.puts(text_engine_ptex) - file.puts(text_patterns) - file.puts('\fi') - # for ASCII encoding, we don't load any special support files, but simply load everything - elsif language.encoding == 'ascii' then - file.puts(text_engine_ascii) + #################################### # GROUP nr. 3 - different patterns # #################################### - # when lanugage uses old patterns for 8-bit engines, load two different patterns rather than using the converter - elsif language.use_old_patterns then - file.puts(text_if_native_utf) - file.puts(text_engine_utf8) - # some catcodes for XeTeX - if language.code == 'grc' or language.code.slice(0,2) == 'el' then - file.puts(" \\lccode`'=`'\\lccode`’=`’\\lccode`ʼ=`ʼ\\lccode`᾽=`᾽\\lccode`᾿=`᾿") - end - file.puts(text_patterns) - if language.code == 'uk' then - file.puts(text_patterns_quote) - end - file.puts('\else') - file.puts(text_engine_8bit) - # explain why we are still using the old patterns - if language.use_old_patterns_comment != nil then - file.puts(" % #{language.use_old_patterns_comment}") - else - puts "Missing comment for #{language.name}" - file.puts(' % we still load old patterns for 8-bit TeX') - end - file.puts(text_patterns_old) - file.puts('\fi\else') - file.puts(text_engine_ptex) - # greek, coptic - if language.encoding == nil then - file.puts(text_patterns_old) - else - file.puts(text_patterns_ptex) - end - file.puts('\fi') + # when lanugage uses old patterns for 8-bit engines, load two different patterns rather than using the converter + # greek, coptic ######################### # GROUP nr. 4 - regular # ######################### - else - file.puts(text_if_native_utf) - file.puts(text_engine_utf8) - file.puts(text_patterns_utf8) - if language.has_apostrophes - file.puts(text_patterns_quote) - end - file.puts('\else') - file.puts(text_engine_8bit) - if ['la-x-liturgic'].include?(language.code) then - file.puts(text_patterns_ptex) - else - file.puts(text_patterns_conv) - file.puts(text_patterns) - end - file.puts('\fi\else') - file.puts(text_engine_ptex) - file.puts(text_patterns_ptex) - file.puts('\fi') - end ####### # end # ####### - file.puts('\endgroup') - end + file.puts('\endgroup') + end end + +puts |