From 3a5cf8de164c5d0f1fdb01999af33d77f59d526f Mon Sep 17 00:00:00 2001 From: Mojca Miklavec Date: Tue, 1 Jun 2010 01:39:02 +0000 Subject: update of hyph-utf8: add the forgotten ru and uk extra patterns, remove OT1 support from Latin, updates in luatex sources and docs, removed collaboration files git-svn-id: svn://tug.org/texlive/trunk@18661 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/generic/hyph-utf8/CHANGES | 32 +- .../doc/luatex/hyph-utf8/luatex-hyphen.pdf | Bin 393081 -> 392542 bytes Master/texmf-dist/source/generic/hyph-utf8/README | 6 +- .../collaboration/generate-js-Hyphenator.rb | 204 -- .../org/tug/texhyphen/ConvertLanguageData.java | 108 - .../org/tug/texhyphen/ConvertLanguageData.xsl | 38 - .../org/tug/texhyphen/ConvertTeXPattern.java | 385 ---- .../org/tug/texhyphen/ConvertTeXPattern.xsl | 128 -- .../org/tug/texhyphen/LanguageDataParser.java | 428 ---- .../conversion-to-xml/org/tug/texhyphen/README | 38 - .../org/tug/texhyphen/TeXPatternParser.java | 325 --- .../org/tug/texhyphen/codemapping.xml | 23 - .../org/tug/texhyphen/languages.xml | 434 ---- .../generic/hyph-utf8/generate-converters.rb | 55 +- .../generic/hyph-utf8/generate-pattern-loaders.rb | 2 +- .../generic/hyph-utf8/generate-ptex-patterns.rb | 108 + .../source/generic/hyph-utf8/generate-tl-files.rb | 11 +- .../source/generic/hyph-utf8/hyph-utf8.rb | 109 + .../source/generic/hyph-utf8/languages.rb | 15 +- .../source/generic/hyph-utf8/languages/gl/README | 50 +- .../source/luatex/hyph-utf8/luatex-hyphen.dtx | 22 +- .../tex/generic/hyph-utf8/loadhyph/loadhyph-la.tex | 4 - .../patterns/tex-special/spechyph-ot1-la.tex | 25 - .../tex/generic/hyph-utf8/patterns/tex/hyph-no.tex | 2 +- .../generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt | 1 + .../generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt | 2213 ++++++++++++++++++ .../generic/hyph-utf8/patterns/txt/hyph-uk.chr.txt | 1 + .../generic/hyph-utf8/patterns/txt/hyph-uk.pat.txt | 2348 ++++++++++++++++++++ .../tex/luatex/hyph-utf8/luatex-hyphen.lua | 10 +- 29 files changed, 4881 insertions(+), 2244 deletions(-) delete mode 100755 Master/texmf-dist/source/generic/hyph-utf8/collaboration/generate-js-Hyphenator.rb delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.java delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.xsl delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.java delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.xsl delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/LanguageDataParser.java delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/README delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/TeXPatternParser.java delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/codemapping.xml delete mode 100644 Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/languages.xml create mode 100755 Master/texmf-dist/source/generic/hyph-utf8/generate-ptex-patterns.rb create mode 100644 Master/texmf-dist/source/generic/hyph-utf8/hyph-utf8.rb delete mode 100644 Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex-special/spechyph-ot1-la.tex (limited to 'Master') diff --git a/Master/texmf-dist/doc/generic/hyph-utf8/CHANGES b/Master/texmf-dist/doc/generic/hyph-utf8/CHANGES index 74db58b096b..8e72045e749 100644 --- a/Master/texmf-dist/doc/generic/hyph-utf8/CHANGES +++ b/Master/texmf-dist/doc/generic/hyph-utf8/CHANGES @@ -1,3 +1,20 @@ +2010-05-31 (#421, #422) +- remove special OT1 support for Latin (with Claudio Beccari's approval) +- add the forgotten Russian and Ukrainian patterns with dashes to plain patterns + +2010-05-31 (#412-#414) +- luatex-hyphen: rm special='null' (now useless), bump version number, fill + the gaps in this changes file + +2010-05-30 (#409-#411) +- adjust tlpsrc's of special languages for luatex-hyphen, import corresponding + language.dat.lua from TeX Live, and adapt test files + +== CTAN release 2010.05.28 == + +2010-05-28 (#406) +- A non-empty PDF file that describes the package with at least two sentences :) + 2010-05-24 (#379) - updated Italian patterns (by Claudio Beccari) @@ -5,7 +22,7 @@ - add a loader for en-us 2010-05-20 (#393) -- TODO: mpg +- luatex-hyphen: minor adjustments for special languages 2010-05-19 (#358) - new Lao hyphenation patterns (by Brian Wilson; under development) @@ -20,13 +37,20 @@ - add source and documentation for Spanish patterns (by Javier Bezos) 2010-05-03 (#360-#363) -- TODO: mpg +- more documentation and tests for luatex-hyphen and associated etex.src +- update etex.src according to latest luatex-hyphen changes +- split 'code' key in language.dat.lua in 'hyphenation' and 'patterns' 2010-04-30 (#349-#355) -- TODO: mpg +- initial import of luatex-hyphen, a modified version of babel's hyphen.cfg + for use with LuaTeX (semi-dynamic loading of patterns), sharing code with +the version of etex.src mentioned below +- misc changes to luatex-hyphen +- test file for luatex-hyphen 2010-04-27 (#344) -- TODO: mpg +- initial import of a modified etex.src allowing semi-dynamic loading of + patterns with LuaTeX 2010-04-27 (#340) - fixing glitches in Galician patterns diff --git a/Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdf b/Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdf index 474174fbb6b..41bde6b2720 100644 Binary files a/Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdf and b/Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdf differ diff --git a/Master/texmf-dist/source/generic/hyph-utf8/README b/Master/texmf-dist/source/generic/hyph-utf8/README index 07ba26b49a4..97f87378761 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/README +++ b/Master/texmf-dist/source/generic/hyph-utf8/README @@ -9,11 +9,6 @@ Auto-generates conversions from UTF-8 to some particular encoding. Needs to be run only in case that a new encoding is added or an old encoding is fixed. -generate-offo.rb -================ -Temporary; another version maintaned by author in Java; this one will be improved or removed. -Will be rewritten to take raw patterns as input with no need to parse. - generate-pattern-loaders.rb =========================== INPUT: @@ -59,3 +54,4 @@ Author: See file, modified by Mojca Miklavec contributed/make-exhyph.pl ========================== Imported script for hack related to breaking compound words. + diff --git a/Master/texmf-dist/source/generic/hyph-utf8/collaboration/generate-js-Hyphenator.rb b/Master/texmf-dist/source/generic/hyph-utf8/collaboration/generate-js-Hyphenator.rb deleted file mode 100755 index 55a44f67f1b..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/collaboration/generate-js-Hyphenator.rb +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env ruby - -# This file generates patterns for Hyphenator.js -# http://code.google.com/p/hyphenator -# -# Collaboration with: -# Mathias Nater, - -load '../languages.rb' -# TODO: should be singleton -languages = Languages.new - -languages["de-CH-1901"] = languages["de-ch-1901"] -languages["en-GB"] = languages["en-gb"] -languages["en-US"] = languages["en-us"] -languages["en-US-x-knuth"] = languages["en-us"] -languages["mn"] = languages["mn-cyrl"] -languages["sr-Cyrl"] = languages["sr-cyrl"] -languages["sr-Latn"] = languages["sh-latn"] -languages["zh-Latn"] = languages["zh-latn"] - - -$path_root=File.expand_path(Dir.getwd + "/../../../..") -$path_plain="#{$path_root}/tex/generic/hyph-utf8/patterns/txt" -$path_js=File.expand_path("#{$path_root}/../collaboration/hyphenator/repo") - -# change to current folder and read all the files in it -Dir.chdir("#{$path_plain}") -files = Dir.glob("*.pat.txt") -# files = Dir.glob("*sl.pat.txt") - -# we need to escape some characters; for a complete list see -# http://www.jslint.com/lint.html -# but at the moment there are only two such characters present anyway -# -# this function encapsulates the string into single quotes and uses -def unescape_string_if_needed(str) - # unsafe characters - see above for complete list - unsafeCharacters = [0x200c, 0x200d] - # let's convert our string into array (to preserve proper unicode numbers) - str_array=str.unpack("U*") - # set this to false until the first replacement takes place - replacement_done = false - - # loop over all unsafe character and try to replace all occurencies - unsafeCharacters.each do |c| - # find the first occurence of that character - i = str_array.index(c) - while i != nil - # replaces a single character with '%uXXXX', where XXXX is hex code of character - # this only works with non-math characters, but it should not happen that any bigger number would occur - str_array[i,1] = sprintf("%%u%4X", c).unpack("U*") - i = str_array.index(c) - replacement_done = true - end - end - - # convert the array back to string - str = str_array.pack("U*") - - if replacement_done - return "unescape('#{str}')" - else - return "'#{str}'" - end -end - -class Pattern - # include Enumerable - - def initialize(pattern) - @pattern = pattern.strip - @pattern_array = @pattern.unpack("U*") - @length = @pattern_array.length - end - - def <=>(anOther) - # if @length == anOther.length - # 0.upto(@length-1) do |i| - # if @pattern_array[i] != anOther.pattern_array[i] - # return @pattern_array[i] <=> anOther.pattern_array[i] - # end - # end - # return 1 <=> 1 - # else - # @length <=> anOther.length - # end - @length <=> anOther.length - end - - def js_pattern - @pattern.gsub(/[.]/, "_") - end - - def to_s - @pattern - end - - def length_of_letters_only - return @pattern.gsub(/[0-9]/,'').unpack("U*").length - end - - # def sort_by_length - attr_reader :pattern, :length, :pattern_array -end - -# TODO: this should be an explicit array of patterns only -class Patterns < Array - def length_of_shortest_and_longest_pattern - # store the minimum and maximum length of pattern - a = [self.first.length_of_letters_only, self.first.length_of_letters_only] - # - # a = [0, 1] - self.each do |pat| - a[0] = [a[0], pat.length_of_letters_only].min - a[1] = [a[1], pat.length_of_letters_only].max - # a.first = [a.first, pat.length_of_letters_only].min - # a.last = [a.last, pat.length_of_letters_only].max - end - return a - end - # TODO: you need to make sure that patterns are sorted according to their length first - def each_length - current_length = 0 - first_pattern_with_some_size = Array.new - - self.each_index do |i| - pattern = self[i] - if pattern.length > current_length - current_length = pattern.length - first_pattern_with_some_size.push(i) - end - end - - first_pattern_with_some_size.each_index do |i| - i_first = first_pattern_with_some_size[i] - i_last = nil - if i < first_pattern_with_some_size.length-1 - i_last = first_pattern_with_some_size[i+1] - else - i_last = self.length - end - i_len = i_last-i_first - - yield self[i_first,i_len] - end - end -end - -files.each do |filename| - code_in = filename.gsub(/hyph-(.*).pat.txt/,'\1') - code_out = code_in.gsub(/-/,"_") - language = languages[code_in] # FIXME - # TODO: handle exceptions - puts - puts "Generating Hyphenator.js support for " + code_in - puts " writing to '#{$path_js}/#{code_out}.js'" - puts - patterns = Patterns.new - File.open(filename,'r') do |f_in| - f_in.each_line do |line| - if line.strip.length > 0 - patterns.push(Pattern.new(line)) - end - end - end - patterns.sort! - # puts patterns - specialChars = patterns.join('').gsub(/[.0-9a-z]/,'').unpack('U*').sort.uniq.pack('U*') - - File.open("#{$path_js}/#{code_out}.js", "w") do |f_out| - # BOM mark - # f_out.puts [239,187,191].pack("ccc") - # f_out.print ["EF","BB","BF"].pack("H2H2H2") - f_out.putc(239) - f_out.putc(187) - f_out.putc(191) - f_out.puts "Hyphenator.languages.#{code_out} = {" - f_out.puts "\tleftmin : #{language.hyphenmin[0]}," - f_out.puts "\trightmin : #{language.hyphenmin[1]}," - lengths = patterns.length_of_shortest_and_longest_pattern - f_out.puts "\tshortestPattern : #{lengths.first}," - f_out.puts "\tlongestPattern : #{lengths.last}," - # TODO: handle Ux201C, Ux201D - # if specialChars.gsub!(/.../, ...) ~= nil - # if specialChars =~ /[]/ - # if has_unsafe_characters(specialChars) - # end - unescape_string_if_needed(specialChars) - f_out.puts "\tspecialChars : #{unescape_string_if_needed(specialChars)}," - f_out.puts "\tpatterns : {" - - # current length of patterns (they are sorted according to their length) - current_length = 0 - pattern_string = "" - i_first = i_last = -1 - patterns.each_length do |pats| - f_out.puts "\t\t#{pats.first.length} : #{unescape_string_if_needed(pats.join(""))}" - end - - f_out.puts "\t}" - f_out.puts "};" - end -end diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.java b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.java deleted file mode 100644 index a4f70616a36..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright Simon Pepping 2009 - * - * The copyright owner licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* $Id: ConvertLanguageData.java 304 2009-11-26 07:26:55Z spepping $ */ - -package org.tug.texhyphen; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URISyntaxException; -import java.net.URL; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.sax.SAXTransformerFactory; -import javax.xml.transform.sax.TransformerHandler; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; - -/** - * Convert language data in ruby format to XML format - */ -public final class ConvertLanguageData { - - /** - * @param languageDataPath - * @throws IOException - * @throws TransformerException - * @throws SAXException - * @throws URISyntaxException - */ - public static void convert(String languageDataPath, boolean useStylesheet) - throws IOException, TransformerException, SAXException, URISyntaxException { - - // input - InputStream inis = new FileInputStream(languageDataPath); - InputSource input = new InputSource(inis); - input.setSystemId(languageDataPath); - input.setEncoding("utf-8"); - XMLReader reader = new LanguageDataParser(); - - // output - String outPath = languageDataPath.replaceFirst("\\.rb$", ".xml"); - Result result = new StreamResult(outPath); - - // transformation - TransformerFactory tf = TransformerFactory.newInstance(); - if (!tf.getFeature(SAXTransformerFactory.FEATURE)) { - throw new TransformerException("TransformerFactory is not a SAXTransformerFactory"); - } - SAXTransformerFactory stf = (SAXTransformerFactory) tf; - TransformerHandler th; - if (useStylesheet) { - URL xsltUrl = ConvertTeXPattern.class.getResource("ConvertLanguageData.xsl"); - File xsltFile = new File(xsltUrl.toURI()); - InputStream xsltStream = new FileInputStream(xsltFile); - Source xsltSource = new StreamSource(xsltStream); - xsltSource.setSystemId(xsltFile.getAbsolutePath()); - th = stf.newTransformerHandler(xsltSource); - } else { - th = stf.newTransformerHandler(); - } - - // pipeline - reader.setContentHandler(th); - reader.setProperty("http://xml.org/sax/properties/lexical-handler", th); - th.setResult(result); - reader.parse(input); - } - - /** - * @param args - * @throws IOException - * @throws TransformerException - * @throws SAXException - * @throws URISyntaxException - */ - public static void main(String[] args) - throws IOException, TransformerException, SAXException, URISyntaxException { - if (args[0].endsWith("--debug")) { - convert(args[1], false); - } else { - convert(args[0], true); - } - } - -} diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.xsl b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.xsl deleted file mode 100644 index 98aa733a0c0..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.xsl +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.java b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.java deleted file mode 100644 index 1ec9cee9474..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.java +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright Simon Pepping 2009 - * - * The copyright owner licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* $Id: ConvertTeXPattern.java 304 2009-11-26 07:26:55Z spepping $ */ - -package org.tug.texhyphen; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.sax.SAXTransformerFactory; -import javax.xml.transform.sax.TransformerHandler; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Convert modern UTF8 TeX hyphenation patterns to XML format - */ -public final class ConvertTeXPattern { - - public static void convert(String[] texPatterns, String outfilePath, boolean useStylesheet, - boolean useLanguagedata) - throws IOException, TransformerException, SAXException, URISyntaxException, - ParserConfigurationException, CodeMappingException { - checkCodeMapping(); - Collection languages = codeMapping.keySet(); - convert(texPatterns, outfilePath, useStylesheet, languages); - } - - public static void convert(String[] texPatterns, String outfilePath, boolean useStylesheet) - throws IOException, TransformerException, SAXException, URISyntaxException, - CodeMappingException { - convert(texPatterns, outfilePath, useStylesheet, null); - } - - /** - * infile outfile - * indir outdir (file protocol only) - * infiles outdir - * file and http protocols allowed - * - * @param texPatternUri - * @param outfilePath - * @param useStylesheet - * @param texcodes filter of requested tex codes; is allowed to be null - * @throws IOException - * @throws TransformerException - * @throws SAXException - * @throws URISyntaxException - * @throws CodeMappingException - */ - public static void convert(String[] texPatterns, String outfilePath, boolean useStylesheet, - Collection texcodes) - throws IOException, TransformerException, SAXException, URISyntaxException, - CodeMappingException { - File outDir = new File(outfilePath); - boolean oneTexcode = (texcodes != null && texcodes.size() == 1); - boolean oneInputfile = (texPatterns.length == 1); - boolean oneFilteredInput = (oneTexcode || oneInputfile); - if (!oneFilteredInput && !outDir.isDirectory()) { - throw new IllegalArgumentException - ("with multiple input files the output path " + outfilePath + " must be a directory"); - } - for (String texPattern : texPatterns) { - URI texPatternUri = makeTexPatternUri(texPattern); - URI[] texPatternUris = makeTexPatternUris(texPatternUri); - oneInputfile = (texPatternUris.length == 1); - oneFilteredInput = (oneTexcode || oneInputfile); - if (!oneFilteredInput && !outDir.isDirectory()) { - throw new IllegalArgumentException - ("with an input directory " + texPattern + " the output path " + outfilePath + " must be a directory"); - } - for (URI t : texPatternUris) { - TransformationData transformationData = makeTransformationData(t, outDir, texcodes); - if (transformationData == null) { - continue; - } - doConvert(t, transformationData, useStylesheet); - } - } - } - - /** - * @param texPattern - * @return - * @throws URISyntaxException - * @throws FileNotFoundException - */ - private static URI makeTexPatternUri(String texPattern) - throws URISyntaxException, FileNotFoundException { - URI texPatternUri; - texPatternUri = new URI(texPattern); - String scheme = texPatternUri.getScheme(); - // see if it is a relative file path - if (scheme == null) { - File f = new File(texPattern); - texPatternUri = new URI("file", null, f.getAbsolutePath(), null, null); - scheme = texPatternUri.getScheme(); - } - if (scheme == null || !(scheme.equals("http") || scheme.equals("file"))) { - throw new FileNotFoundException - ("URI with file or http scheme required for hyphenation pattern file"); - } - return texPatternUri; - } - - /** - * @param outfilePath - * @param outDir - * @param texPatternUri - * @param scheme - * @return - * @throws URISyntaxException - */ - private static URI[] makeTexPatternUris(URI texPatternUri) throws URISyntaxException { - URI[] texPatternUris; - texPatternUris = new URI[] {texPatternUri}; - String scheme = texPatternUri.getScheme(); - if (scheme.equals("file")) { - File dir = new File(texPatternUri); - if (dir.isDirectory()) { - ArrayList l = new ArrayList(); - FilenameFilter filter = new FilenameFilter() { - public boolean accept(File dir, String name) { - return name.endsWith(".tex"); - } - }; - for (File f : dir.listFiles(filter)) { - l.add(new URI("file", null, f.getAbsolutePath(), null, null)); - } - texPatternUris = l.toArray(texPatternUris); - } - } - return texPatternUris; - } - - /** - * @param t - * @param outDir - * @param texcodes filter of requested tex codes; is allowed to be null - * @return - * @throws CodeMappingException - */ - private static TransformationData makeTransformationData - (URI t, File outDir, Collection texcodes) throws CodeMappingException { - File outFile; - String path = t.getPath(); - String basename = path.substring(path.lastIndexOf('/') + 1); - String base = basename.substring(0, basename.lastIndexOf('.')); - // xmlCode, texCode - String[] codes = mapCode(base); - // code mapping lists no xmlCode - if (codes[0] == null) { - return null; - } - if (texcodes != null && !texcodes.contains(codes[1])) { - return null; - } - if (!outDir.isDirectory()) { - outFile = outDir; - } else { - outFile = new File(outDir, codes[0] + ".xml"); - } - return new TransformationData(outFile, codes[1]); - } - - private static class TransformationData { - File outFile; - String texCode; - TransformationData(File outFile, String texCode) { - this.outFile = outFile; - this.texCode = texCode; - } - } - - private static class CodeMappingException extends Exception { - public CodeMappingException(Exception e) { - super(e); - } - public CodeMappingException(String m) { - super(m); - } - } - - static Map codeMapping; - static CodeMappingException codeMappingException; - static { - try { - codeMapping = readLanguagedata(); - } catch (ParserConfigurationException e) { - codeMappingException = new CodeMappingException(e); - } catch (SAXException e) { - codeMappingException = new CodeMappingException(e); - } catch (IOException e) { - codeMappingException = new CodeMappingException(e); - } - } - - private static String[] mapCode(String texCode) throws CodeMappingException { - checkCodeMapping(); - String hyp = "hyph-"; - String xmlCode = texCode; - if (texCode.startsWith(hyp)) { - texCode = texCode.substring(hyp.length()); - xmlCode = codeMapping.get(texCode); - } - return new String[] {xmlCode, texCode}; - } - - /** - * @throws CodeMappingException - */ - private static void checkCodeMapping() throws CodeMappingException { - if (codeMapping == null) { - if (codeMappingException != null) { - throw codeMappingException; - } else { - throw new CodeMappingException("Failure initializing code mapping"); - } - } - } - - public static Map readLanguagedata() - throws ParserConfigurationException, SAXException, IOException { - SAXParserFactory spf = SAXParserFactory.newInstance(); - spf.setNamespaceAware(true); - SAXParser parser = spf.newSAXParser(); - InputStream is = ConvertTeXPattern.class.getResourceAsStream("languages.xml"); - TexcodeReader texcodeReader = new TexcodeReader(); - parser.parse(is, texcodeReader); - return texcodeReader.getTexcodes(); - } - - private static class TexcodeReader extends DefaultHandler { - - private Map texcodes = new HashMap(); - - /* (non-Javadoc) - * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) - */ - @Override - public void startElement(String uri, String localName, String qName, - Attributes attributes) throws SAXException { - if (uri.equals(LanguageDataParser.LANG_NAMESPACE) && localName.equals("language")) { - String texcode = attributes.getValue("code"); - String fopcode = attributes.getValue("fop-code"); - if (fopcode != null) { - texcodes.put(texcode, fopcode); - } - } - } - - /** - * @return the texcodes - */ - public Map getTexcodes() { - return texcodes; - } - - } - - public static void doConvert(URI texPatternUri, TransformationData outdata, boolean useStylesheet) - throws TransformerException, SAXException, MalformedURLException, IOException, URISyntaxException { - - String scheme = texPatternUri.getScheme(); - InputStream inis = null; - if (scheme.equals("file")) { - File in = new File(texPatternUri); - inis = new FileInputStream(in); - } else if (scheme.equals("http")) { - inis = texPatternUri.toURL().openStream(); - } else { - throw new FileNotFoundException - ("URI with file or http scheme required for hyphenation pattern file"); - } - - InputSource input = new InputSource(inis); - input.setSystemId(texPatternUri.toString()); - input.setEncoding("utf-8"); - XMLReader reader = new TeXPatternParser(); - Result result = new StreamResult(outdata.outFile); - TransformerFactory tf = TransformerFactory.newInstance(); - if (!tf.getFeature(SAXTransformerFactory.FEATURE)) { - throw new TransformerException("TransformerFactory is not a SAXTransformerFactory"); - } - SAXTransformerFactory stf = (SAXTransformerFactory) tf; - TransformerHandler th; - if (useStylesheet) { - URL xsltUrl = ConvertTeXPattern.class.getResource("ConvertTeXPattern.xsl"); - File xsltFile = new File(xsltUrl.toURI()); - InputStream xsltStream = new FileInputStream(xsltFile); - Source xsltSource = new StreamSource(xsltStream); - xsltSource.setSystemId(xsltFile.getAbsolutePath()); - th = stf.newTransformerHandler(xsltSource); - Transformer tr = th.getTransformer(); - tr.setParameter("tex-code", outdata.texCode); - } else { - th = stf.newTransformerHandler(); - } - reader.setContentHandler(th); - reader.setProperty("http://xml.org/sax/properties/lexical-handler", th); - th.setResult(result); - reader.parse(input); - } - - /** - * @param args input URI, output file - * @throws URISyntaxException if the URI is not correct - * @throws IOException if a file is not found, or contains illegal content - * @throws TransformerException - * @throws SAXException - * @throws ParserConfigurationException - * @throws CodeMappingException - */ - public static void main(String[] args) - throws URISyntaxException, IOException, TransformerException, SAXException, - ParserConfigurationException, CodeMappingException { - String prefix = "--"; - int i = 0; - boolean useStylesheet = true; - boolean useLanguagedata = false; - Collection texcodes = null; - while (args[i].startsWith(prefix)) { - String option = args[i].substring(prefix.length()); - if (option.equals("debug")) { - useStylesheet = false; - } else if (option.equals("uselanguagedata") || option.equals("langdata")) { - useLanguagedata = true; - } else if (option.equals("texcodes")) { - texcodes = Arrays.asList(args[++i].split(",")); - } else { - throw new IllegalArgumentException("Unknown option: " + option); - } - ++i; - } - if (texcodes != null) { - convert(Arrays.copyOfRange(args, i, args.length - 1), args[args.length - 1], - useStylesheet, texcodes); - } else { - convert(Arrays.copyOfRange(args, i, args.length - 1), args[args.length - 1], - useStylesheet, useLanguagedata); - } - } - -} diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.xsl b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.xsl deleted file mode 100644 index 803962b7d5a..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.xsl +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/LanguageDataParser.java b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/LanguageDataParser.java deleted file mode 100644 index 95c484b25ab..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/LanguageDataParser.java +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Copyright Simon Pepping 2009 - * - * The copyright owner licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* $Id: LanguageDataParser.java 304 2009-11-26 07:26:55Z spepping $ */ - -package org.tug.texhyphen; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.xml.sax.Attributes; -import org.xml.sax.ContentHandler; -import org.xml.sax.DTDHandler; -import org.xml.sax.EntityResolver; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXNotRecognizedException; -import org.xml.sax.SAXNotSupportedException; -import org.xml.sax.XMLReader; -import org.xml.sax.ext.LexicalHandler; -import org.xml.sax.helpers.AttributesImpl; - -/** - * The class TeXParser parses TeX hyphenation pattern files and produces SAX events - */ -public class LanguageDataParser implements XMLReader { - - public static final String LANG_NAMESPACE = "urn:org:tug:texhyphen:languagedata"; - public static int lineLength = 72; - private static final int TOP_LEVEL = 3, IN_LANG = 4; - private static final Pattern - comment = Pattern.compile("#.*"), - langStart = Pattern.compile("{", Pattern.LITERAL), - langEnd = Pattern.compile("}", Pattern.LITERAL), - dataline = Pattern.compile("\"([^\"]+)\" ?=> ?\"([^\"]+)\","), - keywordline = Pattern.compile("\"([^\"]+)\" ?=> ?(false|true|nil),"), - listline = Pattern.compile("\"([^\"]+)\" ?=> ?\\[(\"[^\"]+\"(?:,\"[^\"]+\")*)\\],"), - datalistline = Pattern.compile("\"([^\"]+)\" ?=> ?\\[([^,]+(?:,[^,]+)*)\\],"), - space = Pattern.compile("[ \\t]+"); - private static final AttributesImpl emptyAtts = new AttributesImpl(); - - private ContentHandler contentHandler; - private DTDHandler dtdHandler; - private EntityResolver entityResolver; - private ErrorHandler errorHandler; - private LexicalHandler lexicalHandler; - - private void parseLanguageData(BufferedReader inbr) throws SAXException, IOException { - int parseState = TOP_LEVEL; - Language lang = null; - - contentHandler.startDocument(); - contentHandler.startPrefixMapping("", LANG_NAMESPACE); - contentHandler.startElement(LANG_NAMESPACE, "languages", "languages", emptyAtts); - - for (String line = inbr.readLine(); line != null; line = inbr.readLine()) { - Matcher matcher = comment.matcher(line).useAnchoringBounds(true); - int start = 0; - while (start < line.length()) { - if (matcher.usePattern(comment).lookingAt()) { - processComment(matcher.group(), parseState == TOP_LEVEL ? null : lang); - } else if (matcher.usePattern(space).lookingAt()) { - // do nothing - } else if (parseState == TOP_LEVEL && matcher.usePattern(langStart).lookingAt()) { - parseState = IN_LANG; - lang = new Language(); - } else if ((parseState == IN_LANG) && matcher.usePattern(langEnd).lookingAt()) { - pushoutLanguage(lang); - lang = null; - parseState = TOP_LEVEL; - } else if (parseState == IN_LANG - && (matcher.usePattern(dataline).lookingAt() - || matcher.usePattern(keywordline).lookingAt())) { - String key = matcher.group(1); - String value = matcher.group(2); - processDataline(key, value, lang); - } else if (parseState == IN_LANG - && (matcher.usePattern(listline).lookingAt() - || matcher.usePattern(datalistline).lookingAt())) { - String key = matcher.group(1); - String values = matcher.group(2); - processListline(key, values, lang); - } else { - break; - } - start = matcher.end(); - matcher = matcher.region(start, line.length()).useAnchoringBounds(true); - } - } - - contentHandler.endElement(LANG_NAMESPACE, "languages", "languages"); - contentHandler.endPrefixMapping(LANG_NAMESPACE); - contentHandler.endDocument(); - } - - static Collection attributeKeys; - static { - attributeKeys = new Vector(); - attributeKeys.add("code"); - attributeKeys.add("name"); - attributeKeys.add("use-old-patterns"); - attributeKeys.add("use-new-loader"); - attributeKeys.add("encoding"); - attributeKeys.add("exceptions"); - } - - private void processComment(String comment, Language lang) throws SAXException { - comment = comment.replace("--", "––"); - if (!comment.endsWith(" ")) { - comment = comment + " "; - } - if (lang == null) { - char[] textchars = comment.toCharArray(); - if (lexicalHandler != null) { - lexicalHandler.comment(textchars, 1, textchars.length - 1); - } - } else { - lang.elements.add(new Element("comment", comment)); - } - - } - - private void processDataline(String key, String value, Language lang) { - key = key.replace('_', '-'); - if (value.equals("nil")) { - value = ""; - } - if (attributeKeys.contains(key)) { - lang.atts.addAttribute("", key, key, "CDATA", value); - } else { - lang.elements.add(new Element(key, value)); - } - } - - private void processListline(String key, String valuesString, Language lang) { - key = key.replace('_', '-'); - valuesString = valuesString.replace("\"", ""); - String[] values = valuesString.split(",[ \\t]*"); - if (attributeKeys.contains(key)) { - StringBuilder attValue = new StringBuilder(); - for (String value : values) { - if (!value.equals("nil")) { - attValue.append(" " + value); - } - } - lang.atts.addAttribute("", key, key, "CDATA", attValue.toString()); - } else if (key.equals("hyphenmin")) { - key = "hyphen-min"; - AttributesImpl atts = new AttributesImpl(); - atts.addAttribute("", "before", "before", "CDATA", values[0]); - atts.addAttribute("", "after", "after", "CDATA", values[1]); - lang.elements.add(new Element(key, "", atts)); - } else { - key = key.replaceAll("s$", ""); - for (String value : values) { - if (value.equals("nil")) { - value = ""; - } - lang.elements.add(new Element(key, value)); - } - } - } - - private void pushoutLanguage(Language lang) throws SAXException { - contentHandler.startElement(LANG_NAMESPACE, "language", "language", lang.atts); - Iterator iter = lang.elements.iterator(); - while (iter.hasNext()) { - Element elt = iter.next(); - char[] text = elt.content.toCharArray(); - if (elt.tag.equals("comment")) { - if (lexicalHandler != null) { - lexicalHandler.comment(text, 1, text.length - 1); - } - } else { - contentHandler.startElement(LANG_NAMESPACE, elt.tag, elt.tag, elt.atts); - contentHandler.characters(text, 0, text.length); - contentHandler.endElement(LANG_NAMESPACE, elt.tag, elt.tag); - } - } - contentHandler.endElement(LANG_NAMESPACE, "language", "language"); - } - - public Reader getReaderFromInputSource(InputSource input) throws IOException { - Reader reader = input.getCharacterStream(); - String encoding = null; - if (reader == null) { - encoding = input.getEncoding(); - } - if (reader == null) { - InputStream stream = input.getByteStream(); - if (stream != null) { - if (encoding == null) { - reader = new InputStreamReader(stream); - } else { - reader = new InputStreamReader(stream, encoding); - } - } - } - if (reader == null) { - String systemId = input.getSystemId(); - reader = getReaderFromSystemId(systemId, encoding); - } - return reader; - } - - public Reader getReaderFromSystemId(String systemId, String encoding) throws IOException { - if (systemId == null) { - throw new IOException("Cannot create a reader from a null systemID"); - } - if (encoding.isEmpty()) { - encoding = null; - } - Reader reader = null; - URI uri = null; - File file = null; - try { - uri = new URI(systemId); - } catch (URISyntaxException e) { - // handled below - } - if (uri == null || !uri.isAbsolute()) { - file = new File(systemId); - } - if (file != null) { - if (encoding == null) { - reader = new FileReader(file); - } else { - InputStream stream = new FileInputStream(file); - reader = new InputStreamReader(stream, encoding); - } - } else if (uri != null && uri.getScheme().equals("http")) { - URL url = uri.toURL(); - URLConnection conn = url.openConnection(); - if (encoding == null) { - encoding = conn.getContentEncoding(); - } - InputStream stream = conn.getInputStream(); - reader = new InputStreamReader(stream, encoding); - } - return reader; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getContentHandler() - */ - public ContentHandler getContentHandler() { - return contentHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getDTDHandler() - */ - public DTDHandler getDTDHandler() { - return dtdHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getEntityResolver() - */ - public EntityResolver getEntityResolver() { - return entityResolver; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getErrorHandler() - */ - public ErrorHandler getErrorHandler() { - return errorHandler; - } - - - /** - * @return the lexicalHandler - */ - public LexicalHandler getLexicalHandler() { - return lexicalHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getFeature(java.lang.String) - */ - public boolean getFeature(String arg0) - throws SAXNotRecognizedException, SAXNotSupportedException { - throw new SAXNotSupportedException(); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getProperty(java.lang.String) - */ - public Object getProperty(String arg0) - throws SAXNotRecognizedException, SAXNotSupportedException { - throw new SAXNotSupportedException(); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource) - */ - public void parse(InputSource input) throws IOException, SAXException { - Reader reader = getReaderFromInputSource(input); - if (reader == null) { - throw new IOException("Could not open input source " + input); - } - BufferedReader inbr = new BufferedReader(reader); - parseLanguageData(inbr); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#parse(java.lang.String) - */ - public void parse(String systemId) throws IOException, SAXException { - Reader reader = getReaderFromSystemId(systemId, null); - if (reader == null) { - throw new IOException("Could not open input systemID " + systemId); - } - BufferedReader inbr = new BufferedReader(reader); - parseLanguageData(inbr); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setContentHandler(org.xml.sax.ContentHandler) - */ - public void setContentHandler(ContentHandler contenthandler) { - this.contentHandler = contenthandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setDTDHandler(org.xml.sax.DTDHandler) - */ - public void setDTDHandler(DTDHandler dtdhandler) { - this.dtdHandler = dtdhandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setEntityResolver(org.xml.sax.EntityResolver) - */ - public void setEntityResolver(EntityResolver entityresolver) { - this.entityResolver = entityresolver; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler) - */ - public void setErrorHandler(ErrorHandler errorHandler) { - this.errorHandler = errorHandler; - } - - - /** - * @param lexicalHandler the lexicalHandler to set - */ - public void setLexicalHandler(LexicalHandler lexicalHandler) { - this.lexicalHandler = lexicalHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setFeature(java.lang.String, boolean) - */ - public void setFeature(String arg0, boolean arg1) - throws SAXNotRecognizedException, SAXNotSupportedException { - throw new SAXNotSupportedException(); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setProperty(java.lang.String, java.lang.Object) - */ - public void setProperty(String name, Object value) - throws SAXNotRecognizedException, SAXNotSupportedException { - if (name.equals("http://xml.org/sax/properties/lexical-handler")) { - lexicalHandler = (LexicalHandler) value; - } else { - throw new SAXNotSupportedException(); - } - } - - private static class Element { - String tag; - String content; - Attributes atts; - Element(String tag, String content) { - this(tag, content, LanguageDataParser.emptyAtts); - } - Element(String tag, String content, Attributes atts) { - this.tag = tag; - this.content = content; - this.atts = atts; - } - } - - private static class Language { - AttributesImpl atts; - List elements; - Language() { - atts = new AttributesImpl(); - elements = new Vector(); - } - } - -} diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/README b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/README deleted file mode 100644 index aaf4e074ae6..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/README +++ /dev/null @@ -1,38 +0,0 @@ -This utility consists of two parts. - -Part 1 converts languages.rb to languages.xml. It consists of -ConvertLanguageData.java, LanguageDataParser.java, -ConvertLanguageData.xsl, codemapping.xml. Invocation: - -java org.tug.texhyphen.util.ConvertLanguageData path/to/languages.rb - -output: languages.xml, in the same directory as languages.rb. - -The file codemapping contains the mapping from tex-code to -fop-code. If this file has an entry with non-empty fop-code, it is -inserted in languages.xml as attribute fop-code. If this file has an -entry with empty fop-code, that language gets no attribute -fop-code. Otherwise, that language gets attribute fop-code with the -same value as tex-code (attribute code). - -The current file languages.xml was modified manually after conversion, -to add the three languages at the bottom of the file. - -Part 2 converts tex pattern files to fop pattern files. It consists of -ConvertTeXPattern.java, TeXPatternParser.java, ConvertTeXPattern.xsl, -languages.xml. Invocation: - -java org.tug.texhyphen.util.ConvertTeXPattern [--uselanguagedata] -[--texcodes code1,code2,...] infileuri1 [infileuri2 ...] outfile - -infileuri must be a file or http URI. With a file URI, it may also be -a directory; in that case all pattern files in that directory are -converted. outfile must be a path to an output filename or -directory. If there are more input files, it must be an output -directory. Option 'uselanguagedata' converts all input files which -represent a language in the languages file with a fop-code. Option -'--texcodes code1,code2,...' converts only those input files which -represent a language with one of the given tex codes. Without those -options all input files are converted. In any case, only files are -converted which represent a language in the languages file with a -fop-code. diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/TeXPatternParser.java b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/TeXPatternParser.java deleted file mode 100644 index 0cc5a542f78..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/TeXPatternParser.java +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Copyright Simon Pepping 2009 - * - * The copyright owner licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* $Id: TeXPatternParser.java 304 2009-11-26 07:26:55Z spepping $ */ - -package org.tug.texhyphen; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.util.Stack; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.xml.sax.ContentHandler; -import org.xml.sax.DTDHandler; -import org.xml.sax.EntityResolver; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXNotRecognizedException; -import org.xml.sax.SAXNotSupportedException; -import org.xml.sax.XMLReader; -import org.xml.sax.ext.LexicalHandler; -import org.xml.sax.helpers.AttributesImpl; - -/** - * The class TeXParser parses TeX hyphenation pattern files and produces SAX events - */ -public class TeXPatternParser implements XMLReader { - - public static final String TEX_NAMESPACE = "urn:org:tug:texhyphen"; - private static final int TOP_LEVEL = 3, IN_COMMAND = 4, AFTER_COMMAND = 5, IN_DATA = 6; - private static final Pattern - comment = Pattern.compile("%.*"), - commandStart = Pattern.compile("\\\\"), - command = Pattern.compile("[a-zA-Z]+"), - space = Pattern.compile(" +"), - argOpen = Pattern.compile("\\{"), - argClose = Pattern.compile("\\}"), - text = Pattern.compile("[^%\\\\\\{\\}]+"); - private static final AttributesImpl emptyAtts = new AttributesImpl(); - - private ContentHandler contentHandler; - private DTDHandler dtdHandler; - private EntityResolver entityResolver; - private ErrorHandler errorHandler; - private LexicalHandler lexicalHandler; - - private void parsePatterns(BufferedReader inbr) throws SAXException, IOException { - int parseState = TOP_LEVEL; - Stack stack = new Stack(); - - contentHandler.startDocument(); - contentHandler.startPrefixMapping("", TEX_NAMESPACE); - contentHandler.startElement(TEX_NAMESPACE, "tex", "tex", emptyAtts); - - for (String line = inbr.readLine(); line != null; line = inbr.readLine()) { - Matcher matcher = comment.matcher(line).useAnchoringBounds(true); - int start = 0; - char[] textchars; - boolean inComment = false; - while (start < line.length()) { - if (matcher.usePattern(comment).lookingAt()) { - String text = matcher.group().replace("--", "––"); - textchars = (text + "\n").toCharArray(); - if (lexicalHandler != null) { - lexicalHandler.comment(textchars, 1, textchars.length - 1); - } - inComment = true; - } else if (parseState == IN_DATA && matcher.usePattern(text).lookingAt()) { - textchars = matcher.group().toCharArray(); - contentHandler.characters(textchars, 0, textchars.length); - } else if (parseState != IN_DATA && matcher.usePattern(space).lookingAt()) { - if (parseState == TOP_LEVEL) { - textchars = matcher.group().toCharArray(); - contentHandler.ignorableWhitespace(textchars, 0, textchars.length); - } - } else if (parseState == TOP_LEVEL && matcher.usePattern(commandStart).lookingAt()) { - parseState = IN_COMMAND; - } else if (parseState == IN_COMMAND && matcher.usePattern(command).lookingAt()) { - String tag = matcher.group(); - contentHandler.startElement(TEX_NAMESPACE, tag, tag, emptyAtts); - stack.push(tag); - parseState = AFTER_COMMAND; - } else if (parseState == AFTER_COMMAND && matcher.usePattern(argOpen).lookingAt()) { - parseState = IN_DATA; - } else if (parseState == IN_DATA && matcher.usePattern(argClose).lookingAt()) { - String tag = stack.pop(); - contentHandler.endElement(TEX_NAMESPACE, tag, tag); - parseState = TOP_LEVEL; - } else { - break; - } - start = matcher.end(); - matcher = matcher.region(start, line.length()).useAnchoringBounds(true); - } - textchars = "\n".toCharArray(); - if (parseState == IN_DATA && !inComment) { - contentHandler.characters(textchars, 0, textchars.length); - } else if (parseState == TOP_LEVEL && !inComment) { - contentHandler.ignorableWhitespace(textchars, 0, textchars.length); - } - } - - contentHandler.endElement(TEX_NAMESPACE, "tex", "tex"); - contentHandler.endPrefixMapping(TEX_NAMESPACE); - contentHandler.endDocument(); - } - - public Reader getReaderFromInputSource(InputSource input) throws IOException { - Reader reader = input.getCharacterStream(); - String encoding = null; - if (reader == null) { - encoding = input.getEncoding(); - } - if (reader == null) { - InputStream stream = input.getByteStream(); - if (stream != null) { - if (encoding == null) { - reader = new InputStreamReader(stream); - } else { - reader = new InputStreamReader(stream, encoding); - } - } - } - if (reader == null) { - String systemId = input.getSystemId(); - reader = getReaderFromSystemId(systemId, encoding); - } - return reader; - } - - public Reader getReaderFromSystemId(String systemId, String encoding) throws IOException { - if (systemId == null) { - throw new IOException("Cannot create a reader from a null systemID"); - } - if (encoding.isEmpty()) { - encoding = null; - } - Reader reader = null; - URI uri = null; - File file = null; - try { - uri = new URI(systemId); - } catch (URISyntaxException e) { - // handled below - } - if (uri == null || !uri.isAbsolute()) { - file = new File(systemId); - } - if (file != null) { - if (encoding == null) { - reader = new FileReader(file); - } else { - InputStream stream = new FileInputStream(file); - reader = new InputStreamReader(stream, encoding); - } - } else if (uri != null && uri.getScheme().equals("http")) { - URL url = uri.toURL(); - URLConnection conn = url.openConnection(); - if (encoding == null) { - encoding = conn.getContentEncoding(); - } - InputStream stream = conn.getInputStream(); - reader = new InputStreamReader(stream, encoding); - } - return reader; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getContentHandler() - */ - public ContentHandler getContentHandler() { - return contentHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getDTDHandler() - */ - public DTDHandler getDTDHandler() { - return dtdHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getEntityResolver() - */ - public EntityResolver getEntityResolver() { - return entityResolver; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getErrorHandler() - */ - public ErrorHandler getErrorHandler() { - return errorHandler; - } - - - /** - * @return the lexicalHandler - */ - public LexicalHandler getLexicalHandler() { - return lexicalHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getFeature(java.lang.String) - */ - public boolean getFeature(String arg0) - throws SAXNotRecognizedException, SAXNotSupportedException { - throw new SAXNotSupportedException(); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#getProperty(java.lang.String) - */ - public Object getProperty(String arg0) - throws SAXNotRecognizedException, SAXNotSupportedException { - throw new SAXNotSupportedException(); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource) - */ - public void parse(InputSource input) throws IOException, SAXException { - Reader reader = getReaderFromInputSource(input); - if (reader == null) { - throw new IOException("Could not open input source " + input); - } - BufferedReader inbr = new BufferedReader(reader); - parsePatterns(inbr); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#parse(java.lang.String) - */ - public void parse(String systemId) throws IOException, SAXException { - Reader reader = getReaderFromSystemId(systemId, null); - if (reader == null) { - throw new IOException("Could not open input systemID " + systemId); - } - BufferedReader inbr = new BufferedReader(reader); - parsePatterns(inbr); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setContentHandler(org.xml.sax.ContentHandler) - */ - public void setContentHandler(ContentHandler contenthandler) { - this.contentHandler = contenthandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setDTDHandler(org.xml.sax.DTDHandler) - */ - public void setDTDHandler(DTDHandler dtdhandler) { - this.dtdHandler = dtdhandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setEntityResolver(org.xml.sax.EntityResolver) - */ - public void setEntityResolver(EntityResolver entityresolver) { - this.entityResolver = entityresolver; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler) - */ - public void setErrorHandler(ErrorHandler errorHandler) { - this.errorHandler = errorHandler; - } - - - /** - * @param lexicalHandler the lexicalHandler to set - */ - public void setLexicalHandler(LexicalHandler lexicalHandler) { - this.lexicalHandler = lexicalHandler; - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setFeature(java.lang.String, boolean) - */ - public void setFeature(String arg0, boolean arg1) - throws SAXNotRecognizedException, SAXNotSupportedException { - throw new SAXNotSupportedException(); - } - - /* (non-Javadoc) - * @see org.xml.sax.XMLReader#setProperty(java.lang.String, java.lang.Object) - */ - public void setProperty(String name, Object value) - throws SAXNotRecognizedException, SAXNotSupportedException { - if (name.equals("http://xml.org/sax/properties/lexical-handler")) { - lexicalHandler = (LexicalHandler) value; - } else { - throw new SAXNotSupportedException(); - } - } - -} diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/codemapping.xml b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/codemapping.xml deleted file mode 100644 index c5b64722fa0..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/codemapping.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/languages.xml b/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/languages.xml deleted file mode 100644 index 2f0fd637d3c..00000000000 --- a/Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/languages.xml +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - - zerohyph.tex - - - - - - - persian - zerohyph.tex - - - - - - - - - ibyhyph.tex - - Ancient Greek Hyphenation Patterns for Ibycus encoding (v3.0) - peter_heslin - - - - - - - - polygreek - Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible. - grphyph5.tex - - - - - - - Hyphenation patterns for multi-accent (polytonic) Modern Greek - dimitrios_filippou - - - - Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible. - grmhyph5.tex - - - - Hyphenation patterns for uni-accent (monotonic) Modern Greek - dimitrios_filippou - - - - Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible. - grahyph5.tex - - - Hyphenation patterns for Ancient Greek - dimitrios_filippou - - - - TODO: automatic conversion could be done, but was too complicated; leave for later. - copthyph.tex - - - Coptic Hyphenation Patterns - claudio_beccari - - - - Kept for the sake of backward compatibility, but newer and better patterns by WL are available. - dehypht.tex - - - German Hyphenation Patterns (Traditional Orthography) - - - - Kept for the sake of backward compatibility, but newer and better patterns by WL are available. - dehyphn.tex - - - German Hyphenation Patterns (Reformed Orthography) - - - - - - - Swiss-German Hyphenation Patterns (Traditional Orthography) - - - - 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. - ruhyphen.tex - - Russian Hyphenation Patterns - - - - 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. - ukrhyph.tex - - Ukrainian Hyphenation Patterns - - - - - - - cahyph.tex - - - Catalan Hyphenation Patterns - - - - czhyph.tex - czhyphen.tex - czhyphen.ex - - - - - - Czech Hyphenation Patterns (Pavel Sevecek, v3, 1995) - - - - skhyph.tex - skhyphen.tex - skhyphen.ex - - - Slovak Hyphenation Patterns (Jana Chlebikova, 1992) - - - - cyhyph.tex - - Welsh Hyphenation Patterns - - - - dkhyph.tex - dkcommon.tex - dkspecial.tex - - - Danish Hyphenation Patterns - - - - - eohyph.tex - - - Esperanto Hyphenation Patterns - - - - - espanol - eshyph.tex - - Spanish Hyphenation Patterns - - - - bahyph.tex - - - Basque Hyphenation Patterns - - - - - - patois - francais - frhyph.tex - - French hyphenation patterns (V2.12, 2002/12/11) - - - - glhyph.tex - - Galician Hyphenation Patterns - - - - ethyph.tex - - - Estonian Hyphenation Patterns - - - - fihyph.tex - - Finnish Hyphenation Patterns - - - - hrhyph.tex - - Croatian Hyphenation Patterns - - - - huhyphn.tex - - - Hungarian Hyphenation Patterns (v20031107) - - - - iahyphen.tex - - - Hyphenation Patterns for Interlingua - - - - inhyph.tex - - Indonesian Hyphenation Patterns - - - - icehyph.tex - - - Icelandic Hyphenation Patterns - - - - gahyph.tex - - - Irish Hyphenation Patterns - - - - ithyph.tex - - - Italian Hyphenation Patterns - - - - kmrhyph.tex - - Kurmanji Hyphenation Patterns (v. 1.0 2009/06/29 JKn and MSh) - - - - Old patterns support both EC & OT1 encodings at the same time. - lahyph.tex - - - Latin Hyphenation Patterns - - - - - Lithuanian Hyphenation Patterns - - - - - Latvian Hyphenation Patterns - - - - nehyph96.tex - - - - Dutch Hyphenation Patterns - - - - - - - - plhyph.tex - - - Polish Hyphenation Patterns - - - - - portuges - pthyph.tex - - - Portuguese Hyphenation Patterns - - - - pyhyph.tex - - Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0) - - - - rohyphen.tex - - Romanian Hyphenation Patterns - - - - - - slovene - sihyph.tex - - Slovenian Hyphenation Patterns - - - - sorhyph.tex - - Upper Sorbian Hyphenation Patterns (E. Werner) - - - - - - svhyph.tex - - - Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03) - - - - tkhyph.tex - - - Turkish Hyphenation Patterns - - - - - british - UKenglish - ukhyphen.tex - - - Hyphenation Patterns for British English - - - - shhyphl.tex - - - - - - Serbian hyphenation patterns in Latin script - - - - srhyphc.tex - - Serbian hyphenation patterns in Cyrillic script - - - - mnhyph.tex - - Mongolian hyphenation patterns - - - - mnhyphn.tex - - (New) Mongolian Hyphenation Patterns - - - - bghyphen.tex - - - Bulgarian Hyphenation Patterns - - - - - - - Sanskrit Hyphenation Patterns (v0.2, 2008/1/3) - - - - norwegian - norsk - - - Norwegian Bokmal Hyphenation Patterns - - - - - - Norwegian Nynorsk Hyphenation Patterns - - - - - - ushyphmax.tex - - - - - - - - - nohyphbx.tex - - diff --git a/Master/texmf-dist/source/generic/hyph-utf8/generate-converters.rb b/Master/texmf-dist/source/generic/hyph-utf8/generate-converters.rb index bdc920181f9..db699173334 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/generate-converters.rb +++ b/Master/texmf-dist/source/generic/hyph-utf8/generate-converters.rb @@ -1,56 +1,17 @@ #!/usr/bin/env ruby +require 'hyph-utf8' + $encoding_data_dir = "data/encodings" $encodings = ["ec", "qx", "t2a", "lmc", "il2", "il3", "l7x"] -$output_data_dir = "../../../tex/generic/hyph-utf8/conversions" - -class UnicodeCharacter - def initialize(code_uni, code_enc, name) - @code_uni = code_uni - @code_enc = code_enc - # TODO: might be longer or shorter - @bytes = [code_uni].pack('U').unpack('H2H2') - @name = name - end - - attr_reader :code_uni, :code_enc, :bytes, :name -end - -class UnicodeCharacters < Hash - def add_new_character(code_uni, code_enc, name) - first_byte = [code_uni].pack('U').unpack('H2').first - if self[first_byte] == nil then - self[first_byte] = Array.new - end - self[first_byte].push(UnicodeCharacter.new(code_uni, code_enc, name)) - end -end +$path_root=File.expand_path("../../..") +$output_data_dir = "#{$path_root}/tex/generic/hyph-utf8/conversions" # 0x19; U+0131; 1; dotlessi $encodings.each do |encoding| - #$utf_combinations = Hash.new - $unicode_characters = UnicodeCharacters.new + e = Encoding.new(encoding) - # those that need lccode to be set - $lowercase_characters = Array.new - - File.open($encoding_data_dir + "/" + encoding + ".dat").grep(/^0x(\w+)\tU\+(\w+)\t(\d*)\t([_a-zA-Z\.]*)$/) do |line| - # puts line - code_enc = $1.hex - code_uni = $2.hex - if $3.length > 0 - type = $3.to_i - else - type = 0 - end - name = $4 - if type == 1 then - $unicode_characters.add_new_character(code_uni, code_enc, name) - $lowercase_characters.push(UnicodeCharacter.new(code_uni, code_enc, name)) - end - end - $file_out = File.open("#{$output_data_dir}#{File::Separator}conv-utf8-#{encoding}.tex", "w") $file_out.puts "% conv-utf8-#{encoding}.tex" $file_out.puts "%" @@ -65,7 +26,7 @@ $encodings.each do |encoding| $file_out.puts "% (But consider adapting the scripts if you need modifications.)" $file_out.puts "%" - $unicode_characters.sort.each do |first_byte| + e.unicode_characters_first_byte.sort.each do |first_byte| # sorting all the second characters alphabetically first_byte[1].sort!{|x,y| x.code_uni <=> y.code_uni } # make all the possible first characters active @@ -73,7 +34,7 @@ $encodings.each do |encoding| $file_out.puts "\\catcode\"#{first_byte[0].upcase}=\\active" end $file_out.puts "%" - $unicode_characters.sort.each do |first_byte| + e.unicode_characters_first_byte.sort.each do |first_byte| $file_out.puts "\\def^^#{first_byte[0]}#1{%" string_fi = "" for i in 1..(first_byte[1].size) @@ -92,7 +53,7 @@ $encodings.each do |encoding| $file_out.puts "%" $file_out.puts "% ensure all the chars above have valid \lccode values" $file_out.puts "%" - $lowercase_characters.sort!{|x,y| x.code_enc <=> y.code_enc }.each do |character| + e.lowercase_characters.sort!{|x,y| x.code_enc <=> y.code_enc }.each do |character| code = [ character.code_enc ].pack("c").unpack("H2").first.upcase # \lccode"FF="FF ux_code = sprintf("U+%04X", character.code_uni) 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 16e32e975e9..872912f94b3 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 @@ -140,7 +140,7 @@ languages.each do |language| file.puts('\else') file.puts(" \\message{#{language.encoding.upcase} #{language.message}}") # a hack for OT1 encoding in three languages - if language.code == 'da' or language.code == 'fr' or language.code == 'la' then + if language.code == 'da' or language.code == 'fr' then file.puts(" % A hack to support both EC and OT1 encoding in 8-bit engines.") file.puts(" % Kept for backward compatibility only, though we would prefer to drop it.") file.puts(" % OT1 encoding is close-to-useless for proper hyphenation.") diff --git a/Master/texmf-dist/source/generic/hyph-utf8/generate-ptex-patterns.rb b/Master/texmf-dist/source/generic/hyph-utf8/generate-ptex-patterns.rb new file mode 100755 index 00000000000..08a77340d8b --- /dev/null +++ b/Master/texmf-dist/source/generic/hyph-utf8/generate-ptex-patterns.rb @@ -0,0 +1,108 @@ +#!/usr/bin/env ruby + +require 'hyph-utf8' + +# this file generates patterns for pTeX out of the plain ones + +# use 'gem install unicode' if unicode is missing on your computer +# require 'jcode' +# require 'rubygems' +# require 'unicode' + +load 'languages.rb' + +$path_root=File.expand_path("../../..") +$path_ptex="#{$path_root}/tex/generic/hyph-utf8/patterns/ptex" + +# load encodings +encodings_list = ["ascii", "ec", "qx", "t2a", "lmc", "il2", "il3", "l7x"] +encodings = Hash.new +encodings_list.each do |encoding_name| + encodings[encoding_name] = Encoding.new(encoding_name) +end + +$l = Languages.new + +# TODO: should be singleton +languages = $l.list.sort{|a,b| a.name <=> b.name} + +language_codes = Hash.new +languages.each do |language| + language_codes[language.code] = language.code +end +language_codes['mn-cyrl-x-lmc'] = nil +# language_codes['sh-latn'] = 'sr-latn' +language_codes['sh-cyrl'] = nil + +# e = Encoding.new("ec") +# puts e.convert_string_to_escaped_characters("moja čaša") +# +# return + +languages.sort{|x,y| x.code <=> y.code }.each do |language| + encoding = nil + if language.use_new_loader then + if language.encoding == nil or language_codes[language.code] == nil + include_language = false + puts "(skipping #{language.code} # encoding)" + elsif language.encoding == 'ascii' + include_language = false + puts "(skipping #{language.code} # ascii)" + else + include_language = true + encoding = encodings[language.encoding] + end + else + include_language = false + puts "(skipping #{language.code} # loader)" + end + + code = language_codes[language.code] + + if include_language + puts ">> generating #{code} (#{language.name})" + file_ptex = File.open("#{$path_ptex}/phyph-#{code}.tex", "w") + + patterns = language.get_patterns + exceptions = language.get_exceptions + + if code == 'nn' or code == 'nb' + patterns = $l['no'].get_patterns + end + + if language.encoding != 'ascii' then + patterns = encoding.convert_to_escaped_characters(patterns) + exceptions = encoding.convert_to_escaped_characters(exceptions) + end + + file_ptex.puts("% pTeX-friendly hyphenation patterns") + file_ptex.puts("%") + file_ptex.puts("% language: #{language.name} (#{language.code})") + file_ptex.puts("% encoding: #{language.encoding}") + file_ptex.puts("%") + file_ptex.puts("% This file has been auto-generated from hyph-#{language.code}.tex") + file_ptex.puts("% with a script [texmf]/scripts/generic/hyph-utf8/generate-ptex-patterns.rb") + file_ptex.puts("% See the original file for details about author, licence etc.") + file_ptex.puts("%") + + if patterns.length > 0 then + # file_ptex.puts("\\patterns{\n#{encoding.convert_to_escaped_characters(patterns.join("\n"))}\n}") + file_ptex.puts("\\patterns{\n#{patterns.join("\n")}\n}") + end + if exceptions.length > 0 then + # file_ptex.puts("\\hyphenation{\n#{encoding.convert_to_escaped_characters(exceptions.join("\n"))}\n}") + file_ptex.puts("\\hyphenation{\n#{exceptions.join("\n")}\n}") + end + + + # # patterns + # patterns.each do |pattern| + # $file_pat.puts pattern.gsub(/'/,"’") + # end + # # exceptions + # if exceptions != "" + # $file_hyp.puts exceptions + # end + file_ptex.close + end +end diff --git a/Master/texmf-dist/source/generic/hyph-utf8/generate-tl-files.rb b/Master/texmf-dist/source/generic/hyph-utf8/generate-tl-files.rb index e4aff48abfe..dc1c3245a70 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/generate-tl-files.rb +++ b/Master/texmf-dist/source/generic/hyph-utf8/generate-tl-files.rb @@ -120,8 +120,9 @@ language_groups.sort.each do |language_name,language_list| if language.use_new_loader then file = "file=loadhyph-#{language.code}.tex" # we skip the mongolian language - if language.code != "mn-cyrl-x-lmc" then - + if language.code == "mn-cyrl-x-lmc" then + file = "luaspecial=\"disabled:only for 8bit montex with lmc encoding\"" + else filename_pat = "hyph-#{language.code}.pat.txt" filename_hyp = "hyph-#{language.code}.hyp.txt" @@ -143,6 +144,12 @@ language_groups.sort.each do |language_name,language_list| end else file = "file=#{language.filename_old_patterns}" + if language.code == 'ar' or language.code == 'fa' then + file = file + " \\\n\tfile_patterns=" + elsif language.code == 'grc-x-ibycus' then + # TODO: fix this + file = file + " \\\n\tluaspecial=\"disabled:8-bit only\"" + end end $file_tlpsrc.puts "execute AddHyphen \\\n\t#{name}#{synonyms} \\" diff --git a/Master/texmf-dist/source/generic/hyph-utf8/hyph-utf8.rb b/Master/texmf-dist/source/generic/hyph-utf8/hyph-utf8.rb new file mode 100644 index 00000000000..e0004a76630 --- /dev/null +++ b/Master/texmf-dist/source/generic/hyph-utf8/hyph-utf8.rb @@ -0,0 +1,109 @@ +# this is a Unicode character represented in some particular encoding +class UnicodeCharacter + # unicode code + # code in that particular encoding + # character name (like 'eacute') + def initialize(code_uni, code_enc, name) + @code_uni = code_uni + @code_enc = code_enc + # TODO: might be longer or shorter + @bytes = [code_uni].pack('U').unpack('H2H2') + @name = name + end + + attr_reader :code_uni, :code_enc, :bytes, :name +end + +class UnicodeCharacters < Hash + # a hash based on the first character + def add_new_character_first_byte(code_uni, code_enc, name) + first_byte = [code_uni].pack('U').unpack('H2').first + if self[first_byte] == nil then + self[first_byte] = Array.new + end + self[first_byte].push(UnicodeCharacter.new(code_uni, code_enc, name)) + end + # a hash based on the whole unicode codepoint + def add_new_character(code_uni, code_enc, name) + self[code_uni] = UnicodeCharacter.new(code_uni, code_enc, name) + end +end + +class Encoding + def initialize(encoding_name) + @encoding_name = encoding_name + @unicode_characters_first_byte = UnicodeCharacters.new + @unicode_characters = UnicodeCharacters.new + @lowercase_characters = Array.new + + if encoding_name != 'ascii' then + read_data + end + end + + def convert_to_escaped_characters(str) + if str.kind_of?(Array) then + str.each_index do |i| + str[i] = convert_string_to_escaped_characters(str[i]) + end + elsif str.kind_of?(String) then + str = convert_string_to_escaped_characters(str) + end + return str + end + + attr_reader :encoding_name, :unicode_characters, :unicode_characters_first_byte, :lowercase_characters + + def convert_string_to_escaped_characters(str) + characters = str.unpack('U*') + new_string = Array.new(characters.length) + characters.each_index do |i| + c = characters[i] # character code on position i + # check if unicode entry with that number exists + uc = @unicode_characters[c] + if uc == nil then + if c < 128 then + new_string[i] = [c].pack('U') + elsif c == 8217 # ’ + new_string[i] = "'" + else + puts "There must be an error: character #{c} in string #{str} is not ASCII." + end + # an unicode character + else + new_string[i] = sprintf("^^%x", uc.code_enc) + end + end + return new_string.join('') + end + +private + def read_data + # fetch the characters + encoding_data_dir = File.expand_path("data/encodings") + filename = "#{encoding_data_dir}/#{@encoding_name}.dat" + + if File.exists?(filename) then + File.open(filename).grep(/^0x(\w+)\tU\+(\w+)\t(\d*)\t([_a-zA-Z\.]*)$/) do |line| + # puts line + code_enc = $1.hex + code_uni = $2.hex + if $3.length > 0 + type = $3.to_i + else + type = 0 + end + name = $4 + if type == 1 then + @unicode_characters_first_byte.add_new_character_first_byte(code_uni, code_enc, name) + @unicode_characters.add_new_character(code_uni, code_enc, name) + @lowercase_characters.push(UnicodeCharacter.new(code_uni, code_enc, name)) + end + end + else + # TODO: throw an error + puts "Invalid encoding name '#{@encoding_name}'." + puts "File '#{filename}' doesn't exist." + end + end +end diff --git a/Master/texmf-dist/source/generic/hyph-utf8/languages.rb b/Master/texmf-dist/source/generic/hyph-utf8/languages.rb index 450013b7868..fc524fc3520 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/languages.rb +++ b/Master/texmf-dist/source/generic/hyph-utf8/languages.rb @@ -40,7 +40,7 @@ class Language def get_patterns if @patterns == nil - filename = "../../../tex/generic/hyph-utf8/patterns/tex/hyph-#{@code}.tex"; + filename = "../../../tex/generic/hyph-utf8/patterns/tex/hyph-#{@code}.tex" lines = IO.readlines(filename, '.').join("") @patterns = lines.gsub(/%.*/,''). gsub(/.*\\patterns\s*\{(.*?)\}.*/m,'\1'). @@ -49,6 +49,19 @@ class Language gsub(/\s*$/m,''). gsub(/'/,"’"). split("\n") + # Russian and Ukrainian have some extra patterns with dashes + # we may combine these patterns with the main file anyway + if @code == 'ru' or @code == 'uk' then + filename = "../../../tex/generic/hyph-utf8/patterns/tex-special/exhyph-#{@code}.tex" + lines = IO.readlines(filename, '.').join("") + @patterns.concat(lines.gsub(/%.*/,''). + gsub(/.*\\patterns\s*\{(.*?)\}.*/m,'\1'). + gsub(/\s+/m,"\n"). + gsub(/^\s*/m,''). + gsub(/\s*$/m,''). + gsub(/'/,"’"). + split("\n")) + end if @code == 'eo' then @patterns = lines.gsub(/%.*/,''). diff --git a/Master/texmf-dist/source/generic/hyph-utf8/languages/gl/README b/Master/texmf-dist/source/generic/hyph-utf8/languages/gl/README index 6154587b019..95e00612c7b 100644 --- a/Master/texmf-dist/source/generic/hyph-utf8/languages/gl/README +++ b/Master/texmf-dist/source/generic/hyph-utf8/languages/gl/README @@ -1,25 +1,25 @@ -This directory contains seven files + README, licensed all but one under lppl 1.3: - -glpatter-utf8.tex: - The source file, version 2.4. When processed under the program - mkpatter ---by typing 'tex -ini -8bit glpatter-utf8.tex' (without the quotes) - at the command line, provided you have the utility - mkpattern installed--- it generates the file hyph-utf8-gl.tex. - -(hyph-gl.tex): - The generated file containing the patterns in UTF-8 (belongs to TEXMF/tex). - - -glhyextr.tex: ##This file is in the public domain## - A configuration file, to include additional patterns other - than the ones in glpatter-utf8.tex. It is not \input by glpatter-utf8.tex - (iin contrast with the single-byte encoded version glpatter.tex) - as modern tools allow the addition of patterns at run time. - -glhybiox.tex, glhymed.tex, glhyquim.tex, glhytec.tex & glhyxeog.tex: - Files with aditional patterns drawn from serveral fields of - the language, so that you may input them from glhyextr.tex. - -The files for specific patterns are very incomplete and feedback is welcome. - ---Javier A. Mgica +This directory contains seven files + README, licensed all but one under lppl 1.3: + +glpatter-utf8.tex: + The source file, version 2.4. When processed under the program + mkpatter ---by typing 'tex -ini -8bit glpatter-utf8.tex' (without the quotes) + at the command line, provided you have the utility + mkpattern installed--- it generates the file hyph-utf8-gl.tex. + +(hyph-gl.tex): + The generated file containing the patterns in UTF-8 (belongs to TEXMF/tex). + + +glhyextr.tex: ##This file is in the public domain## + A configuration file, to include additional patterns other + than the ones in glpatter-utf8.tex. It is not \input by glpatter-utf8.tex + (iin contrast with the single-byte encoded version glpatter.tex) + as modern tools allow the addition of patterns at run time. + +glhybiox.tex, glhymed.tex, glhyquim.tex, glhytec.tex & glhyxeog.tex: + Files with aditional patterns drawn from serveral fields of + the language, so that you may input them from glhyextr.tex. + +The files for specific patterns are very incomplete and feedback is welcome. + +--Javier A. Mgica diff --git a/Master/texmf-dist/source/luatex/hyph-utf8/luatex-hyphen.dtx b/Master/texmf-dist/source/luatex/hyph-utf8/luatex-hyphen.dtx index 2eac29d4e5c..69e0aaaa698 100644 --- a/Master/texmf-dist/source/luatex/hyph-utf8/luatex-hyphen.dtx +++ b/Master/texmf-dist/source/luatex/hyph-utf8/luatex-hyphen.dtx @@ -106,7 +106,7 @@ This work is under the CC0 license. %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{luatex-hyphen.drv} - [2010/04/28 v1.3beta Hyphenation file for LuaTeX] + [2010/04/28 v1.4 Hyphenation file for LuaTeX] \documentclass{ltxdoc} \usepackage[ascii]{inputenc} \usepackage[T1]{fontenc} @@ -140,7 +140,7 @@ This work is under the CC0 license. % \GetFileInfo{luatex-hyphen.drv} % % \title{The \texttt{hyphen.cfg} file for Lua\TeX } -% \date{2010/04/28 v1.3beta} +% \date{2010/04/28 v1.4} % \author{Khaled Hosny, \'Elie Roux, and Manuel P\'egouri\'e-Gonnard\\ % \texttt{khaledhosny@eglug.org} \\ % \texttt{elie.roux@telecom-bretagne.eu} \\ @@ -205,14 +205,10 @@ This work is under the CC0 license. % directly without being parsed by \TeX. If one of these keys is % missing or is the empty string, it is ignored and no patterns (resp. % exceptions) are loaded for this language. The values of -% \texttt{*hyphenmin} are currently unused. +% \texttt{*hyphenmin} values are currently unused. % \item Special case are supported by a field \verb+special+. Currently, % the following kind of values are recognized: % \begin{description} -% \item[\texttt{'null'}] for languages with no hyphenation patterns -% nor exceptions. (Note that this is equivalent to both -% \verb+hyphenation+ and \verb+patterns+ being \verb+nil+ or -% \verb+''+, but produces a more explicit message in the log.) % \item[\texttt{'disabled:'}] allows to disable specific % languages: when the user tries to load this language, an error % will be issued, with the \verb++. @@ -325,10 +321,7 @@ function loadlanguage(lname, id) % % \begin{macrocode} if ldata.special then - if ldata.special == 'null' then - wlog(msg, ' (null)', cname, id) - return - elseif ldata.special:find('^disabled:') then + if ldata.special:find('^disabled:') then err("language disabled by %s: %s (%s)", dbname, cname, ldata.special:gsub('^disabled:', '')) elseif ldata.special == 'language0' then @@ -344,7 +337,7 @@ function loadlanguage(lname, id) % % \begin{macrocode} wlog(msg, '', cname, id) - for _, item in ipairs{'hyphenation', 'patterns'} do + for _, item in ipairs{'patterns', 'hyphenation'} do local file = ldata[item] if file ~= nil and file ~= '' then local file = kpse.find_file(file) or err("file not found: %s", file) @@ -352,6 +345,9 @@ function loadlanguage(lname, id) local data = fh:read('*a') or err("file not readable: %s", f) fh:close() lang[item](lang.new(id), data) + else + if item == 'hyphenation' then item = item..' exceptions' end + wlog("info: no %s for this language", item) end end end @@ -429,7 +425,7 @@ end % % \begin{macrocode} \ProvidesFile{hyphen.cfg} - [2010/04/26 v3.8l-luatex-1.3beta % + [2010/04/26 v3.8l-luatex-1.4 % Language switching mechanism for LuaTeX, adapted from babel v3.8l] % \end{macrocode} % diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/loadhyph/loadhyph-la.tex b/Master/texmf-dist/tex/generic/hyph-utf8/loadhyph/loadhyph-la.tex index 1eb18f85a7f..b01c8fb5dc0 100644 --- a/Master/texmf-dist/tex/generic/hyph-utf8/loadhyph/loadhyph-la.tex +++ b/Master/texmf-dist/tex/generic/hyph-utf8/loadhyph/loadhyph-la.tex @@ -22,10 +22,6 @@ \message{UTF-8 Latin Hyphenation Patterns} \else \message{EC Latin Hyphenation Patterns} - % A hack to support both EC and OT1 encoding in 8-bit engines. - % Kept for backward compatibility only, though we would prefer to drop it. - % OT1 encoding is close-to-useless for proper hyphenation. - \input spechyph-ot1-la.tex \input conv-utf8-ec.tex \fi \input hyph-la.tex diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex-special/spechyph-ot1-la.tex b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex-special/spechyph-ot1-la.tex deleted file mode 100644 index f6e0c589c26..00000000000 --- a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex-special/spechyph-ot1-la.tex +++ /dev/null @@ -1,25 +0,0 @@ -\begingroup - -\catcode"C3=\active -\catcode"C5=\active -% -\def^^c3#1{% - \ifx#1^^a6^^1a\else % æ - U+00E6 - ae - \errmessage{Hyphenation pattern file corrupted or OT1 encoding not supported!} -\fi} -\def^^c5#1{% - \ifx#1^^93^^1b\else % œ - U+0153 - oe - \errmessage{Hyphenation pattern file corrupted or OT1 encoding not supported!} -\fi} -% -% ensure all the chars above have valid lccode values -% -\lccode"1A="1A % æ - U+00E6 - ae -\lccode"1B="1B % œ - U+0153 - oe - -% Ligatures ae and oe (in OT1) -\patterns{ -æ1 -œ1 -} -\endgroup diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex index 70c074ac943..af2e63a09cd 100644 --- a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex +++ b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex @@ -2642,7 +2642,7 @@ ansport7s6 an1st6 6anstar ans4te4 -6ans6ti +6ans6ti 2ansu an9s6und 5ansunda diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt index 0dfdfa8805e..daf5019e533 100644 --- a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt +++ b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt @@ -1,3 +1,4 @@ +-- аА бБ вВ diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt index e743df3e30d..e110fb4be87 100644 --- a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt +++ b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt @@ -4806,3 +4806,2216 @@ 8чъ. 8шъ. 8щъ. +8-7 +--8 +.а-8 +.б-8 +.в-8 +.г-8 +.д-8 +.е-8 +.ё-8 +.ж-8 +.з-8 +.и-8 +.й-8 +.к-8 +.л-8 +.м-8 +.н-8 +.о-8 +.п-8 +.р-8 +.с-8 +.т-8 +.у-8 +.ф-8 +.х-8 +.ц-8 +.ч-8 +.ш-8 +.щ-8 +.ъ-8 +.ы-8 +.ь-8 +.э-8 +.ю-8 +.я-8 +-а8а8 +8а8а- +-а8б8 +8а8б- +-а8в8 +8а8в- +-а8г8 +8а8г- +-а8д8 +8а8д- +-а8е8 +8а8е- +-а8ё8 +8а8ё- +-а8ж8 +8а8ж- +-а8з8 +8а8з- +-а8и8 +8а8и- +-а8й8 +8а8й- +-а8к8 +8а8к- +-а8л8 +8а8л- +-а8м8 +8а8м- +-а8н8 +8а8н- +-а8о8 +8а8о- +-а8п8 +8а8п- +-а8р8 +8а8р- +-а8с8 +8а8с- +-а8т8 +8а8т- +-а8у8 +8а8у- +-а8ф8 +8а8ф- +-а8х8 +8а8х- +-а8ц8 +8а8ц- +-а8ч8 +8а8ч- +-а8ш8 +8а8ш- +-а8щ8 +8а8щ- +-а8ъ8 +8а8ъ- +-а8ы8 +8а8ы- +-а8ь8 +8а8ь- +-а8э8 +8а8э- +-а8ю8 +8а8ю- +-а8я8 +8а8я- +-б8а8 +8б8а- +-б8б8 +8б8б- +-б8в8 +8б8в- +-б8г8 +8б8г- +-б8д8 +8б8д- +-б8е8 +8б8е- +-б8ё8 +8б8ё- +-б8ж8 +8б8ж- +-б8з8 +8б8з- +-б8и8 +8б8и- +-б8й8 +8б8й- +-б8к8 +8б8к- +-б8л8 +8б8л- +-б8м8 +8б8м- +-б8н8 +8б8н- +-б8о8 +8б8о- +-б8п8 +8б8п- +-б8р8 +8б8р- +-б8с8 +8б8с- +-б8т8 +8б8т- +-б8у8 +8б8у- +-б8ф8 +8б8ф- +-б8х8 +8б8х- +-б8ц8 +8б8ц- +-б8ч8 +8б8ч- +-б8ш8 +8б8ш- +-б8щ8 +8б8щ- +-б8ъ8 +8б8ъ- +-б8ы8 +8б8ы- +-б8ь8 +8б8ь- +-б8э8 +8б8э- +-б8ю8 +8б8ю- +-б8я8 +8б8я- +-в8а8 +8в8а- +-в8б8 +8в8б- +-в8в8 +8в8в- +-в8г8 +8в8г- +-в8д8 +8в8д- +-в8е8 +8в8е- +-в8ё8 +8в8ё- +-в8ж8 +8в8ж- +-в8з8 +8в8з- +-в8и8 +8в8и- +-в8й8 +8в8й- +-в8к8 +8в8к- +-в8л8 +8в8л- +-в8м8 +8в8м- +-в8н8 +8в8н- +-в8о8 +8в8о- +-в8п8 +8в8п- +-в8р8 +8в8р- +-в8с8 +8в8с- +-в8т8 +8в8т- +-в8у8 +8в8у- +-в8ф8 +8в8ф- +-в8х8 +8в8х- +-в8ц8 +8в8ц- +-в8ч8 +8в8ч- +-в8ш8 +8в8ш- +-в8щ8 +8в8щ- +-в8ъ8 +8в8ъ- +-в8ы8 +8в8ы- +-в8ь8 +8в8ь- +-в8э8 +8в8э- +-в8ю8 +8в8ю- +-в8я8 +8в8я- +-г8а8 +8г8а- +-г8б8 +8г8б- +-г8в8 +8г8в- +-г8г8 +8г8г- +-г8д8 +8г8д- +-г8е8 +8г8е- +-г8ё8 +8г8ё- +-г8ж8 +8г8ж- +-г8з8 +8г8з- +-г8и8 +8г8и- +-г8й8 +8г8й- +-г8к8 +8г8к- +-г8л8 +8г8л- +-г8м8 +8г8м- +-г8н8 +8г8н- +-г8о8 +8г8о- +-г8п8 +8г8п- +-г8р8 +8г8р- +-г8с8 +8г8с- +-г8т8 +8г8т- +-г8у8 +8г8у- +-г8ф8 +8г8ф- +-г8х8 +8г8х- +-г8ц8 +8г8ц- +-г8ч8 +8г8ч- +-г8ш8 +8г8ш- +-г8щ8 +8г8щ- +-г8ъ8 +8г8ъ- +-г8ы8 +8г8ы- +-г8ь8 +8г8ь- +-г8э8 +8г8э- +-г8ю8 +8г8ю- +-г8я8 +8г8я- +-д8а8 +8д8а- +-д8б8 +8д8б- +-д8в8 +8д8в- +-д8г8 +8д8г- +-д8д8 +8д8д- +-д8е8 +8д8е- +-д8ё8 +8д8ё- +-д8ж8 +8д8ж- +-д8з8 +8д8з- +-д8и8 +8д8и- +-д8й8 +8д8й- +-д8к8 +8д8к- +-д8л8 +8д8л- +-д8м8 +8д8м- +-д8н8 +8д8н- +-д8о8 +8д8о- +-д8п8 +8д8п- +-д8р8 +8д8р- +-д8с8 +8д8с- +-д8т8 +8д8т- +-д8у8 +8д8у- +-д8ф8 +8д8ф- +-д8х8 +8д8х- +-д8ц8 +8д8ц- +-д8ч8 +8д8ч- +-д8ш8 +8д8ш- +-д8щ8 +8д8щ- +-д8ъ8 +8д8ъ- +-д8ы8 +8д8ы- +-д8ь8 +8д8ь- +-д8э8 +8д8э- +-д8ю8 +8д8ю- +-д8я8 +8д8я- +-е8а8 +8е8а- +-е8б8 +8е8б- +-е8в8 +8е8в- +-е8г8 +8е8г- +-е8д8 +8е8д- +-е8е8 +8е8е- +-е8ё8 +8е8ё- +-е8ж8 +8е8ж- +-е8з8 +8е8з- +-е8и8 +8е8и- +-е8й8 +8е8й- +-е8к8 +8е8к- +-е8л8 +8е8л- +-е8м8 +8е8м- +-е8н8 +8е8н- +-е8о8 +8е8о- +-е8п8 +8е8п- +-е8р8 +8е8р- +-е8с8 +8е8с- +-е8т8 +8е8т- +-е8у8 +8е8у- +-е8ф8 +8е8ф- +-е8х8 +8е8х- +-е8ц8 +8е8ц- +-е8ч8 +8е8ч- +-е8ш8 +8е8ш- +-е8щ8 +8е8щ- +-е8ъ8 +8е8ъ- +-е8ы8 +8е8ы- +-е8ь8 +8е8ь- +-е8э8 +8е8э- +-е8ю8 +8е8ю- +-е8я8 +8е8я- +-ё8а8 +8ё8а- +-ё8б8 +8ё8б- +-ё8в8 +8ё8в- +-ё8г8 +8ё8г- +-ё8д8 +8ё8д- +-ё8е8 +8ё8е- +-ё8ё8 +8ё8ё- +-ё8ж8 +8ё8ж- +-ё8з8 +8ё8з- +-ё8и8 +8ё8и- +-ё8й8 +8ё8й- +-ё8к8 +8ё8к- +-ё8л8 +8ё8л- +-ё8м8 +8ё8м- +-ё8н8 +8ё8н- +-ё8о8 +8ё8о- +-ё8п8 +8ё8п- +-ё8р8 +8ё8р- +-ё8с8 +8ё8с- +-ё8т8 +8ё8т- +-ё8у8 +8ё8у- +-ё8ф8 +8ё8ф- +-ё8х8 +8ё8х- +-ё8ц8 +8ё8ц- +-ё8ч8 +8ё8ч- +-ё8ш8 +8ё8ш- +-ё8щ8 +8ё8щ- +-ё8ъ8 +8ё8ъ- +-ё8ы8 +8ё8ы- +-ё8ь8 +8ё8ь- +-ё8э8 +8ё8э- +-ё8ю8 +8ё8ю- +-ё8я8 +8ё8я- +-ж8а8 +8ж8а- +-ж8б8 +8ж8б- +-ж8в8 +8ж8в- +-ж8г8 +8ж8г- +-ж8д8 +8ж8д- +-ж8е8 +8ж8е- +-ж8ё8 +8ж8ё- +-ж8ж8 +8ж8ж- +-ж8з8 +8ж8з- +-ж8и8 +8ж8и- +-ж8й8 +8ж8й- +-ж8к8 +8ж8к- +-ж8л8 +8ж8л- +-ж8м8 +8ж8м- +-ж8н8 +8ж8н- +-ж8о8 +8ж8о- +-ж8п8 +8ж8п- +-ж8р8 +8ж8р- +-ж8с8 +8ж8с- +-ж8т8 +8ж8т- +-ж8у8 +8ж8у- +-ж8ф8 +8ж8ф- +-ж8х8 +8ж8х- +-ж8ц8 +8ж8ц- +-ж8ч8 +8ж8ч- +-ж8ш8 +8ж8ш- +-ж8щ8 +8ж8щ- +-ж8ъ8 +8ж8ъ- +-ж8ы8 +8ж8ы- +-ж8ь8 +8ж8ь- +-ж8э8 +8ж8э- +-ж8ю8 +8ж8ю- +-ж8я8 +8ж8я- +-з8а8 +8з8а- +-з8б8 +8з8б- +-з8в8 +8з8в- +-з8г8 +8з8г- +-з8д8 +8з8д- +-з8е8 +8з8е- +-з8ё8 +8з8ё- +-з8ж8 +8з8ж- +-з8з8 +8з8з- +-з8и8 +8з8и- +-з8й8 +8з8й- +-з8к8 +8з8к- +-з8л8 +8з8л- +-з8м8 +8з8м- +-з8н8 +8з8н- +-з8о8 +8з8о- +-з8п8 +8з8п- +-з8р8 +8з8р- +-з8с8 +8з8с- +-з8т8 +8з8т- +-з8у8 +8з8у- +-з8ф8 +8з8ф- +-з8х8 +8з8х- +-з8ц8 +8з8ц- +-з8ч8 +8з8ч- +-з8ш8 +8з8ш- +-з8щ8 +8з8щ- +-з8ъ8 +8з8ъ- +-з8ы8 +8з8ы- +-з8ь8 +8з8ь- +-з8э8 +8з8э- +-з8ю8 +8з8ю- +-з8я8 +8з8я- +-и8а8 +8и8а- +-и8б8 +8и8б- +-и8в8 +8и8в- +-и8г8 +8и8г- +-и8д8 +8и8д- +-и8е8 +8и8е- +-и8ё8 +8и8ё- +-и8ж8 +8и8ж- +-и8з8 +8и8з- +-и8и8 +8и8и- +-и8й8 +8и8й- +-и8к8 +8и8к- +-и8л8 +8и8л- +-и8м8 +8и8м- +-и8н8 +8и8н- +-и8о8 +8и8о- +-и8п8 +8и8п- +-и8р8 +8и8р- +-и8с8 +8и8с- +-и8т8 +8и8т- +-и8у8 +8и8у- +-и8ф8 +8и8ф- +-и8х8 +8и8х- +-и8ц8 +8и8ц- +-и8ч8 +8и8ч- +-и8ш8 +8и8ш- +-и8щ8 +8и8щ- +-и8ъ8 +8и8ъ- +-и8ы8 +8и8ы- +-и8ь8 +8и8ь- +-и8э8 +8и8э- +-и8ю8 +8и8ю- +-и8я8 +8и8я- +-й8а8 +8й8а- +-й8б8 +8й8б- +-й8в8 +8й8в- +-й8г8 +8й8г- +-й8д8 +8й8д- +-й8е8 +8й8е- +-й8ё8 +8й8ё- +-й8ж8 +8й8ж- +-й8з8 +8й8з- +-й8и8 +8й8и- +-й8й8 +8й8й- +-й8к8 +8й8к- +-й8л8 +8й8л- +-й8м8 +8й8м- +-й8н8 +8й8н- +-й8о8 +8й8о- +-й8п8 +8й8п- +-й8р8 +8й8р- +-й8с8 +8й8с- +-й8т8 +8й8т- +-й8у8 +8й8у- +-й8ф8 +8й8ф- +-й8х8 +8й8х- +-й8ц8 +8й8ц- +-й8ч8 +8й8ч- +-й8ш8 +8й8ш- +-й8щ8 +8й8щ- +-й8ъ8 +8й8ъ- +-й8ы8 +8й8ы- +-й8ь8 +8й8ь- +-й8э8 +8й8э- +-й8ю8 +8й8ю- +-й8я8 +8й8я- +-к8а8 +8к8а- +-к8б8 +8к8б- +-к8в8 +8к8в- +-к8г8 +8к8г- +-к8д8 +8к8д- +-к8е8 +8к8е- +-к8ё8 +8к8ё- +-к8ж8 +8к8ж- +-к8з8 +8к8з- +-к8и8 +8к8и- +-к8й8 +8к8й- +-к8к8 +8к8к- +-к8л8 +8к8л- +-к8м8 +8к8м- +-к8н8 +8к8н- +-к8о8 +8к8о- +-к8п8 +8к8п- +-к8р8 +8к8р- +-к8с8 +8к8с- +-к8т8 +8к8т- +-к8у8 +8к8у- +-к8ф8 +8к8ф- +-к8х8 +8к8х- +-к8ц8 +8к8ц- +-к8ч8 +8к8ч- +-к8ш8 +8к8ш- +-к8щ8 +8к8щ- +-к8ъ8 +8к8ъ- +-к8ы8 +8к8ы- +-к8ь8 +8к8ь- +-к8э8 +8к8э- +-к8ю8 +8к8ю- +-к8я8 +8к8я- +-л8а8 +8л8а- +-л8б8 +8л8б- +-л8в8 +8л8в- +-л8г8 +8л8г- +-л8д8 +8л8д- +-л8е8 +8л8е- +-л8ё8 +8л8ё- +-л8ж8 +8л8ж- +-л8з8 +8л8з- +-л8и8 +8л8и- +-л8й8 +8л8й- +-л8к8 +8л8к- +-л8л8 +8л8л- +-л8м8 +8л8м- +-л8н8 +8л8н- +-л8о8 +8л8о- +-л8п8 +8л8п- +-л8р8 +8л8р- +-л8с8 +8л8с- +-л8т8 +8л8т- +-л8у8 +8л8у- +-л8ф8 +8л8ф- +-л8х8 +8л8х- +-л8ц8 +8л8ц- +-л8ч8 +8л8ч- +-л8ш8 +8л8ш- +-л8щ8 +8л8щ- +-л8ъ8 +8л8ъ- +-л8ы8 +8л8ы- +-л8ь8 +8л8ь- +-л8э8 +8л8э- +-л8ю8 +8л8ю- +-л8я8 +8л8я- +-м8а8 +8м8а- +-м8б8 +8м8б- +-м8в8 +8м8в- +-м8г8 +8м8г- +-м8д8 +8м8д- +-м8е8 +8м8е- +-м8ё8 +8м8ё- +-м8ж8 +8м8ж- +-м8з8 +8м8з- +-м8и8 +8м8и- +-м8й8 +8м8й- +-м8к8 +8м8к- +-м8л8 +8м8л- +-м8м8 +8м8м- +-м8н8 +8м8н- +-м8о8 +8м8о- +-м8п8 +8м8п- +-м8р8 +8м8р- +-м8с8 +8м8с- +-м8т8 +8м8т- +-м8у8 +8м8у- +-м8ф8 +8м8ф- +-м8х8 +8м8х- +-м8ц8 +8м8ц- +-м8ч8 +8м8ч- +-м8ш8 +8м8ш- +-м8щ8 +8м8щ- +-м8ъ8 +8м8ъ- +-м8ы8 +8м8ы- +-м8ь8 +8м8ь- +-м8э8 +8м8э- +-м8ю8 +8м8ю- +-м8я8 +8м8я- +-н8а8 +8н8а- +-н8б8 +8н8б- +-н8в8 +8н8в- +-н8г8 +8н8г- +-н8д8 +8н8д- +-н8е8 +8н8е- +-н8ё8 +8н8ё- +-н8ж8 +8н8ж- +-н8з8 +8н8з- +-н8и8 +8н8и- +-н8й8 +8н8й- +-н8к8 +8н8к- +-н8л8 +8н8л- +-н8м8 +8н8м- +-н8н8 +8н8н- +-н8о8 +8н8о- +-н8п8 +8н8п- +-н8р8 +8н8р- +-н8с8 +8н8с- +-н8т8 +8н8т- +-н8у8 +8н8у- +-н8ф8 +8н8ф- +-н8х8 +8н8х- +-н8ц8 +8н8ц- +-н8ч8 +8н8ч- +-н8ш8 +8н8ш- +-н8щ8 +8н8щ- +-н8ъ8 +8н8ъ- +-н8ы8 +8н8ы- +-н8ь8 +8н8ь- +-н8э8 +8н8э- +-н8ю8 +8н8ю- +-н8я8 +8н8я- +-о8а8 +8о8а- +-о8б8 +8о8б- +-о8в8 +8о8в- +-о8г8 +8о8г- +-о8д8 +8о8д- +-о8е8 +8о8е- +-о8ё8 +8о8ё- +-о8ж8 +8о8ж- +-о8з8 +8о8з- +-о8и8 +8о8и- +-о8й8 +8о8й- +-о8к8 +8о8к- +-о8л8 +8о8л- +-о8м8 +8о8м- +-о8н8 +8о8н- +-о8о8 +8о8о- +-о8п8 +8о8п- +-о8р8 +8о8р- +-о8с8 +8о8с- +-о8т8 +8о8т- +-о8у8 +8о8у- +-о8ф8 +8о8ф- +-о8х8 +8о8х- +-о8ц8 +8о8ц- +-о8ч8 +8о8ч- +-о8ш8 +8о8ш- +-о8щ8 +8о8щ- +-о8ъ8 +8о8ъ- +-о8ы8 +8о8ы- +-о8ь8 +8о8ь- +-о8э8 +8о8э- +-о8ю8 +8о8ю- +-о8я8 +8о8я- +-п8а8 +8п8а- +-п8б8 +8п8б- +-п8в8 +8п8в- +-п8г8 +8п8г- +-п8д8 +8п8д- +-п8е8 +8п8е- +-п8ё8 +8п8ё- +-п8ж8 +8п8ж- +-п8з8 +8п8з- +-п8и8 +8п8и- +-п8й8 +8п8й- +-п8к8 +8п8к- +-п8л8 +8п8л- +-п8м8 +8п8м- +-п8н8 +8п8н- +-п8о8 +8п8о- +-п8п8 +8п8п- +-п8р8 +8п8р- +-п8с8 +8п8с- +-п8т8 +8п8т- +-п8у8 +8п8у- +-п8ф8 +8п8ф- +-п8х8 +8п8х- +-п8ц8 +8п8ц- +-п8ч8 +8п8ч- +-п8ш8 +8п8ш- +-п8щ8 +8п8щ- +-п8ъ8 +8п8ъ- +-п8ы8 +8п8ы- +-п8ь8 +8п8ь- +-п8э8 +8п8э- +-п8ю8 +8п8ю- +-п8я8 +8п8я- +-р8а8 +8р8а- +-р8б8 +8р8б- +-р8в8 +8р8в- +-р8г8 +8р8г- +-р8д8 +8р8д- +-р8е8 +8р8е- +-р8ё8 +8р8ё- +-р8ж8 +8р8ж- +-р8з8 +8р8з- +-р8и8 +8р8и- +-р8й8 +8р8й- +-р8к8 +8р8к- +-р8л8 +8р8л- +-р8м8 +8р8м- +-р8н8 +8р8н- +-р8о8 +8р8о- +-р8п8 +8р8п- +-р8р8 +8р8р- +-р8с8 +8р8с- +-р8т8 +8р8т- +-р8у8 +8р8у- +-р8ф8 +8р8ф- +-р8х8 +8р8х- +-р8ц8 +8р8ц- +-р8ч8 +8р8ч- +-р8ш8 +8р8ш- +-р8щ8 +8р8щ- +-р8ъ8 +8р8ъ- +-р8ы8 +8р8ы- +-р8ь8 +8р8ь- +-р8э8 +8р8э- +-р8ю8 +8р8ю- +-р8я8 +8р8я- +-с8а8 +8с8а- +-с8б8 +8с8б- +-с8в8 +8с8в- +-с8г8 +8с8г- +-с8д8 +8с8д- +-с8е8 +8с8е- +-с8ё8 +8с8ё- +-с8ж8 +8с8ж- +-с8з8 +8с8з- +-с8и8 +8с8и- +-с8й8 +8с8й- +-с8к8 +8с8к- +-с8л8 +8с8л- +-с8м8 +8с8м- +-с8н8 +8с8н- +-с8о8 +8с8о- +-с8п8 +8с8п- +-с8р8 +8с8р- +-с8с8 +8с8с- +-с8т8 +8с8т- +-с8у8 +8с8у- +-с8ф8 +8с8ф- +-с8х8 +8с8х- +-с8ц8 +8с8ц- +-с8ч8 +8с8ч- +-с8ш8 +8с8ш- +-с8щ8 +8с8щ- +-с8ъ8 +8с8ъ- +-с8ы8 +8с8ы- +-с8ь8 +8с8ь- +-с8э8 +8с8э- +-с8ю8 +8с8ю- +-с8я8 +8с8я- +-т8а8 +8т8а- +-т8б8 +8т8б- +-т8в8 +8т8в- +-т8г8 +8т8г- +-т8д8 +8т8д- +-т8е8 +8т8е- +-т8ё8 +8т8ё- +-т8ж8 +8т8ж- +-т8з8 +8т8з- +-т8и8 +8т8и- +-т8й8 +8т8й- +-т8к8 +8т8к- +-т8л8 +8т8л- +-т8м8 +8т8м- +-т8н8 +8т8н- +-т8о8 +8т8о- +-т8п8 +8т8п- +-т8р8 +8т8р- +-т8с8 +8т8с- +-т8т8 +8т8т- +-т8у8 +8т8у- +-т8ф8 +8т8ф- +-т8х8 +8т8х- +-т8ц8 +8т8ц- +-т8ч8 +8т8ч- +-т8ш8 +8т8ш- +-т8щ8 +8т8щ- +-т8ъ8 +8т8ъ- +-т8ы8 +8т8ы- +-т8ь8 +8т8ь- +-т8э8 +8т8э- +-т8ю8 +8т8ю- +-т8я8 +8т8я- +-у8а8 +8у8а- +-у8б8 +8у8б- +-у8в8 +8у8в- +-у8г8 +8у8г- +-у8д8 +8у8д- +-у8е8 +8у8е- +-у8ё8 +8у8ё- +-у8ж8 +8у8ж- +-у8з8 +8у8з- +-у8и8 +8у8и- +-у8й8 +8у8й- +-у8к8 +8у8к- +-у8л8 +8у8л- +-у8м8 +8у8м- +-у8н8 +8у8н- +-у8о8 +8у8о- +-у8п8 +8у8п- +-у8р8 +8у8р- +-у8с8 +8у8с- +-у8т8 +8у8т- +-у8у8 +8у8у- +-у8ф8 +8у8ф- +-у8х8 +8у8х- +-у8ц8 +8у8ц- +-у8ч8 +8у8ч- +-у8ш8 +8у8ш- +-у8щ8 +8у8щ- +-у8ъ8 +8у8ъ- +-у8ы8 +8у8ы- +-у8ь8 +8у8ь- +-у8э8 +8у8э- +-у8ю8 +8у8ю- +-у8я8 +8у8я- +-ф8а8 +8ф8а- +-ф8б8 +8ф8б- +-ф8в8 +8ф8в- +-ф8г8 +8ф8г- +-ф8д8 +8ф8д- +-ф8е8 +8ф8е- +-ф8ё8 +8ф8ё- +-ф8ж8 +8ф8ж- +-ф8з8 +8ф8з- +-ф8и8 +8ф8и- +-ф8й8 +8ф8й- +-ф8к8 +8ф8к- +-ф8л8 +8ф8л- +-ф8м8 +8ф8м- +-ф8н8 +8ф8н- +-ф8о8 +8ф8о- +-ф8п8 +8ф8п- +-ф8р8 +8ф8р- +-ф8с8 +8ф8с- +-ф8т8 +8ф8т- +-ф8у8 +8ф8у- +-ф8ф8 +8ф8ф- +-ф8х8 +8ф8х- +-ф8ц8 +8ф8ц- +-ф8ч8 +8ф8ч- +-ф8ш8 +8ф8ш- +-ф8щ8 +8ф8щ- +-ф8ъ8 +8ф8ъ- +-ф8ы8 +8ф8ы- +-ф8ь8 +8ф8ь- +-ф8э8 +8ф8э- +-ф8ю8 +8ф8ю- +-ф8я8 +8ф8я- +-х8а8 +8х8а- +-х8б8 +8х8б- +-х8в8 +8х8в- +-х8г8 +8х8г- +-х8д8 +8х8д- +-х8е8 +8х8е- +-х8ё8 +8х8ё- +-х8ж8 +8х8ж- +-х8з8 +8х8з- +-х8и8 +8х8и- +-х8й8 +8х8й- +-х8к8 +8х8к- +-х8л8 +8х8л- +-х8м8 +8х8м- +-х8н8 +8х8н- +-х8о8 +8х8о- +-х8п8 +8х8п- +-х8р8 +8х8р- +-х8с8 +8х8с- +-х8т8 +8х8т- +-х8у8 +8х8у- +-х8ф8 +8х8ф- +-х8х8 +8х8х- +-х8ц8 +8х8ц- +-х8ч8 +8х8ч- +-х8ш8 +8х8ш- +-х8щ8 +8х8щ- +-х8ъ8 +8х8ъ- +-х8ы8 +8х8ы- +-х8ь8 +8х8ь- +-х8э8 +8х8э- +-х8ю8 +8х8ю- +-х8я8 +8х8я- +-ц8а8 +8ц8а- +-ц8б8 +8ц8б- +-ц8в8 +8ц8в- +-ц8г8 +8ц8г- +-ц8д8 +8ц8д- +-ц8е8 +8ц8е- +-ц8ё8 +8ц8ё- +-ц8ж8 +8ц8ж- +-ц8з8 +8ц8з- +-ц8и8 +8ц8и- +-ц8й8 +8ц8й- +-ц8к8 +8ц8к- +-ц8л8 +8ц8л- +-ц8м8 +8ц8м- +-ц8н8 +8ц8н- +-ц8о8 +8ц8о- +-ц8п8 +8ц8п- +-ц8р8 +8ц8р- +-ц8с8 +8ц8с- +-ц8т8 +8ц8т- +-ц8у8 +8ц8у- +-ц8ф8 +8ц8ф- +-ц8х8 +8ц8х- +-ц8ц8 +8ц8ц- +-ц8ч8 +8ц8ч- +-ц8ш8 +8ц8ш- +-ц8щ8 +8ц8щ- +-ц8ъ8 +8ц8ъ- +-ц8ы8 +8ц8ы- +-ц8ь8 +8ц8ь- +-ц8э8 +8ц8э- +-ц8ю8 +8ц8ю- +-ц8я8 +8ц8я- +-ч8а8 +8ч8а- +-ч8б8 +8ч8б- +-ч8в8 +8ч8в- +-ч8г8 +8ч8г- +-ч8д8 +8ч8д- +-ч8е8 +8ч8е- +-ч8ё8 +8ч8ё- +-ч8ж8 +8ч8ж- +-ч8з8 +8ч8з- +-ч8и8 +8ч8и- +-ч8й8 +8ч8й- +-ч8к8 +8ч8к- +-ч8л8 +8ч8л- +-ч8м8 +8ч8м- +-ч8н8 +8ч8н- +-ч8о8 +8ч8о- +-ч8п8 +8ч8п- +-ч8р8 +8ч8р- +-ч8с8 +8ч8с- +-ч8т8 +8ч8т- +-ч8у8 +8ч8у- +-ч8ф8 +8ч8ф- +-ч8х8 +8ч8х- +-ч8ц8 +8ч8ц- +-ч8ч8 +8ч8ч- +-ч8ш8 +8ч8ш- +-ч8щ8 +8ч8щ- +-ч8ъ8 +8ч8ъ- +-ч8ы8 +8ч8ы- +-ч8ь8 +8ч8ь- +-ч8э8 +8ч8э- +-ч8ю8 +8ч8ю- +-ч8я8 +8ч8я- +-ш8а8 +8ш8а- +-ш8б8 +8ш8б- +-ш8в8 +8ш8в- +-ш8г8 +8ш8г- +-ш8д8 +8ш8д- +-ш8е8 +8ш8е- +-ш8ё8 +8ш8ё- +-ш8ж8 +8ш8ж- +-ш8з8 +8ш8з- +-ш8и8 +8ш8и- +-ш8й8 +8ш8й- +-ш8к8 +8ш8к- +-ш8л8 +8ш8л- +-ш8м8 +8ш8м- +-ш8н8 +8ш8н- +-ш8о8 +8ш8о- +-ш8п8 +8ш8п- +-ш8р8 +8ш8р- +-ш8с8 +8ш8с- +-ш8т8 +8ш8т- +-ш8у8 +8ш8у- +-ш8ф8 +8ш8ф- +-ш8х8 +8ш8х- +-ш8ц8 +8ш8ц- +-ш8ч8 +8ш8ч- +-ш8ш8 +8ш8ш- +-ш8щ8 +8ш8щ- +-ш8ъ8 +8ш8ъ- +-ш8ы8 +8ш8ы- +-ш8ь8 +8ш8ь- +-ш8э8 +8ш8э- +-ш8ю8 +8ш8ю- +-ш8я8 +8ш8я- +-щ8а8 +8щ8а- +-щ8б8 +8щ8б- +-щ8в8 +8щ8в- +-щ8г8 +8щ8г- +-щ8д8 +8щ8д- +-щ8е8 +8щ8е- +-щ8ё8 +8щ8ё- +-щ8ж8 +8щ8ж- +-щ8з8 +8щ8з- +-щ8и8 +8щ8и- +-щ8й8 +8щ8й- +-щ8к8 +8щ8к- +-щ8л8 +8щ8л- +-щ8м8 +8щ8м- +-щ8н8 +8щ8н- +-щ8о8 +8щ8о- +-щ8п8 +8щ8п- +-щ8р8 +8щ8р- +-щ8с8 +8щ8с- +-щ8т8 +8щ8т- +-щ8у8 +8щ8у- +-щ8ф8 +8щ8ф- +-щ8х8 +8щ8х- +-щ8ц8 +8щ8ц- +-щ8ч8 +8щ8ч- +-щ8ш8 +8щ8ш- +-щ8щ8 +8щ8щ- +-щ8ъ8 +8щ8ъ- +-щ8ы8 +8щ8ы- +-щ8ь8 +8щ8ь- +-щ8э8 +8щ8э- +-щ8ю8 +8щ8ю- +-щ8я8 +8щ8я- +-ъ8а8 +8ъ8а- +-ъ8б8 +8ъ8б- +-ъ8в8 +8ъ8в- +-ъ8г8 +8ъ8г- +-ъ8д8 +8ъ8д- +-ъ8е8 +8ъ8е- +-ъ8ё8 +8ъ8ё- +-ъ8ж8 +8ъ8ж- +-ъ8з8 +8ъ8з- +-ъ8и8 +8ъ8и- +-ъ8й8 +8ъ8й- +-ъ8к8 +8ъ8к- +-ъ8л8 +8ъ8л- +-ъ8м8 +8ъ8м- +-ъ8н8 +8ъ8н- +-ъ8о8 +8ъ8о- +-ъ8п8 +8ъ8п- +-ъ8р8 +8ъ8р- +-ъ8с8 +8ъ8с- +-ъ8т8 +8ъ8т- +-ъ8у8 +8ъ8у- +-ъ8ф8 +8ъ8ф- +-ъ8х8 +8ъ8х- +-ъ8ц8 +8ъ8ц- +-ъ8ч8 +8ъ8ч- +-ъ8ш8 +8ъ8ш- +-ъ8щ8 +8ъ8щ- +-ъ8ъ8 +8ъ8ъ- +-ъ8ы8 +8ъ8ы- +-ъ8ь8 +8ъ8ь- +-ъ8э8 +8ъ8э- +-ъ8ю8 +8ъ8ю- +-ъ8я8 +8ъ8я- +-ы8а8 +8ы8а- +-ы8б8 +8ы8б- +-ы8в8 +8ы8в- +-ы8г8 +8ы8г- +-ы8д8 +8ы8д- +-ы8е8 +8ы8е- +-ы8ё8 +8ы8ё- +-ы8ж8 +8ы8ж- +-ы8з8 +8ы8з- +-ы8и8 +8ы8и- +-ы8й8 +8ы8й- +-ы8к8 +8ы8к- +-ы8л8 +8ы8л- +-ы8м8 +8ы8м- +-ы8н8 +8ы8н- +-ы8о8 +8ы8о- +-ы8п8 +8ы8п- +-ы8р8 +8ы8р- +-ы8с8 +8ы8с- +-ы8т8 +8ы8т- +-ы8у8 +8ы8у- +-ы8ф8 +8ы8ф- +-ы8х8 +8ы8х- +-ы8ц8 +8ы8ц- +-ы8ч8 +8ы8ч- +-ы8ш8 +8ы8ш- +-ы8щ8 +8ы8щ- +-ы8ъ8 +8ы8ъ- +-ы8ы8 +8ы8ы- +-ы8ь8 +8ы8ь- +-ы8э8 +8ы8э- +-ы8ю8 +8ы8ю- +-ы8я8 +8ы8я- +-ь8а8 +8ь8а- +-ь8б8 +8ь8б- +-ь8в8 +8ь8в- +-ь8г8 +8ь8г- +-ь8д8 +8ь8д- +-ь8е8 +8ь8е- +-ь8ё8 +8ь8ё- +-ь8ж8 +8ь8ж- +-ь8з8 +8ь8з- +-ь8и8 +8ь8и- +-ь8й8 +8ь8й- +-ь8к8 +8ь8к- +-ь8л8 +8ь8л- +-ь8м8 +8ь8м- +-ь8н8 +8ь8н- +-ь8о8 +8ь8о- +-ь8п8 +8ь8п- +-ь8р8 +8ь8р- +-ь8с8 +8ь8с- +-ь8т8 +8ь8т- +-ь8у8 +8ь8у- +-ь8ф8 +8ь8ф- +-ь8х8 +8ь8х- +-ь8ц8 +8ь8ц- +-ь8ч8 +8ь8ч- +-ь8ш8 +8ь8ш- +-ь8щ8 +8ь8щ- +-ь8ъ8 +8ь8ъ- +-ь8ы8 +8ь8ы- +-ь8ь8 +8ь8ь- +-ь8э8 +8ь8э- +-ь8ю8 +8ь8ю- +-ь8я8 +8ь8я- +-э8а8 +8э8а- +-э8б8 +8э8б- +-э8в8 +8э8в- +-э8г8 +8э8г- +-э8д8 +8э8д- +-э8е8 +8э8е- +-э8ё8 +8э8ё- +-э8ж8 +8э8ж- +-э8з8 +8э8з- +-э8и8 +8э8и- +-э8й8 +8э8й- +-э8к8 +8э8к- +-э8л8 +8э8л- +-э8м8 +8э8м- +-э8н8 +8э8н- +-э8о8 +8э8о- +-э8п8 +8э8п- +-э8р8 +8э8р- +-э8с8 +8э8с- +-э8т8 +8э8т- +-э8у8 +8э8у- +-э8ф8 +8э8ф- +-э8х8 +8э8х- +-э8ц8 +8э8ц- +-э8ч8 +8э8ч- +-э8ш8 +8э8ш- +-э8щ8 +8э8щ- +-э8ъ8 +8э8ъ- +-э8ы8 +8э8ы- +-э8ь8 +8э8ь- +-э8э8 +8э8э- +-э8ю8 +8э8ю- +-э8я8 +8э8я- +-ю8а8 +8ю8а- +-ю8б8 +8ю8б- +-ю8в8 +8ю8в- +-ю8г8 +8ю8г- +-ю8д8 +8ю8д- +-ю8е8 +8ю8е- +-ю8ё8 +8ю8ё- +-ю8ж8 +8ю8ж- +-ю8з8 +8ю8з- +-ю8и8 +8ю8и- +-ю8й8 +8ю8й- +-ю8к8 +8ю8к- +-ю8л8 +8ю8л- +-ю8м8 +8ю8м- +-ю8н8 +8ю8н- +-ю8о8 +8ю8о- +-ю8п8 +8ю8п- +-ю8р8 +8ю8р- +-ю8с8 +8ю8с- +-ю8т8 +8ю8т- +-ю8у8 +8ю8у- +-ю8ф8 +8ю8ф- +-ю8х8 +8ю8х- +-ю8ц8 +8ю8ц- +-ю8ч8 +8ю8ч- +-ю8ш8 +8ю8ш- +-ю8щ8 +8ю8щ- +-ю8ъ8 +8ю8ъ- +-ю8ы8 +8ю8ы- +-ю8ь8 +8ю8ь- +-ю8э8 +8ю8э- +-ю8ю8 +8ю8ю- +-ю8я8 +8ю8я- +-я8а8 +8я8а- +-я8б8 +8я8б- +-я8в8 +8я8в- +-я8г8 +8я8г- +-я8д8 +8я8д- +-я8е8 +8я8е- +-я8ё8 +8я8ё- +-я8ж8 +8я8ж- +-я8з8 +8я8з- +-я8и8 +8я8и- +-я8й8 +8я8й- +-я8к8 +8я8к- +-я8л8 +8я8л- +-я8м8 +8я8м- +-я8н8 +8я8н- +-я8о8 +8я8о- +-я8п8 +8я8п- +-я8р8 +8я8р- +-я8с8 +8я8с- +-я8т8 +8я8т- +-я8у8 +8я8у- +-я8ф8 +8я8ф- +-я8х8 +8я8х- +-я8ц8 +8я8ц- +-я8ч8 +8я8ч- +-я8ш8 +8я8ш- +-я8щ8 +8я8щ- +-я8ъ8 +8я8ъ- +-я8ы8 +8я8ы- +-я8ь8 +8я8ь- +-я8э8 +8я8э- +-я8ю8 +8я8ю- +-я8я8 +8я8я- diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.chr.txt b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.chr.txt index 06ac3f1a44f..dfce24391d3 100644 --- a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.chr.txt +++ b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.chr.txt @@ -1,3 +1,4 @@ +-- аА бБ вВ diff --git a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.pat.txt b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.pat.txt index 440eca6b263..d409bb43337 100644 --- a/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.pat.txt +++ b/Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.pat.txt @@ -1988,3 +1988,2351 @@ виу4ди о3в4каз е3в4каз +8-7 +--8 +.а-8 +.б-8 +.в-8 +.г-8 +.ґ-8 +.д-8 +.е-8 +.є-8 +.ж-8 +.з-8 +.и-8 +.і-8 +.ї-8 +.й-8 +.к-8 +.л-8 +.м-8 +.н-8 +.о-8 +.п-8 +.р-8 +.с-8 +.т-8 +.у-8 +.ф-8 +.х-8 +.ц-8 +.ч-8 +.ш-8 +.щ-8 +.ь-8 +.ю-8 +.я-8 +.’-8 +-а8а8 +8а8а- +-а8б8 +8а8б- +-а8в8 +8а8в- +-а8г8 +8а8г- +-а8ґ8 +8а8ґ- +-а8д8 +8а8д- +-а8е8 +8а8е- +-а8є8 +8а8є- +-а8ж8 +8а8ж- +-а8з8 +8а8з- +-а8и8 +8а8и- +-а8і8 +8а8і- +-а8ї8 +8а8ї- +-а8й8 +8а8й- +-а8к8 +8а8к- +-а8л8 +8а8л- +-а8м8 +8а8м- +-а8н8 +8а8н- +-а8о8 +8а8о- +-а8п8 +8а8п- +-а8р8 +8а8р- +-а8с8 +8а8с- +-а8т8 +8а8т- +-а8у8 +8а8у- +-а8ф8 +8а8ф- +-а8х8 +8а8х- +-а8ц8 +8а8ц- +-а8ч8 +8а8ч- +-а8ш8 +8а8ш- +-а8щ8 +8а8щ- +-а8ь8 +8а8ь- +-а8ю8 +8а8ю- +-а8я8 +8а8я- +-а8’8 +8а8’- +-б8а8 +8б8а- +-б8б8 +8б8б- +-б8в8 +8б8в- +-б8г8 +8б8г- +-б8ґ8 +8б8ґ- +-б8д8 +8б8д- +-б8е8 +8б8е- +-б8є8 +8б8є- +-б8ж8 +8б8ж- +-б8з8 +8б8з- +-б8и8 +8б8и- +-б8і8 +8б8і- +-б8ї8 +8б8ї- +-б8й8 +8б8й- +-б8к8 +8б8к- +-б8л8 +8б8л- +-б8м8 +8б8м- +-б8н8 +8б8н- +-б8о8 +8б8о- +-б8п8 +8б8п- +-б8р8 +8б8р- +-б8с8 +8б8с- +-б8т8 +8б8т- +-б8у8 +8б8у- +-б8ф8 +8б8ф- +-б8х8 +8б8х- +-б8ц8 +8б8ц- +-б8ч8 +8б8ч- +-б8ш8 +8б8ш- +-б8щ8 +8б8щ- +-б8ь8 +8б8ь- +-б8ю8 +8б8ю- +-б8я8 +8б8я- +-б8’8 +8б8’- +-в8а8 +8в8а- +-в8б8 +8в8б- +-в8в8 +8в8в- +-в8г8 +8в8г- +-в8ґ8 +8в8ґ- +-в8д8 +8в8д- +-в8е8 +8в8е- +-в8є8 +8в8є- +-в8ж8 +8в8ж- +-в8з8 +8в8з- +-в8и8 +8в8и- +-в8і8 +8в8і- +-в8ї8 +8в8ї- +-в8й8 +8в8й- +-в8к8 +8в8к- +-в8л8 +8в8л- +-в8м8 +8в8м- +-в8н8 +8в8н- +-в8о8 +8в8о- +-в8п8 +8в8п- +-в8р8 +8в8р- +-в8с8 +8в8с- +-в8т8 +8в8т- +-в8у8 +8в8у- +-в8ф8 +8в8ф- +-в8х8 +8в8х- +-в8ц8 +8в8ц- +-в8ч8 +8в8ч- +-в8ш8 +8в8ш- +-в8щ8 +8в8щ- +-в8ь8 +8в8ь- +-в8ю8 +8в8ю- +-в8я8 +8в8я- +-в8’8 +8в8’- +-г8а8 +8г8а- +-г8б8 +8г8б- +-г8в8 +8г8в- +-г8г8 +8г8г- +-г8ґ8 +8г8ґ- +-г8д8 +8г8д- +-г8е8 +8г8е- +-г8є8 +8г8є- +-г8ж8 +8г8ж- +-г8з8 +8г8з- +-г8и8 +8г8и- +-г8і8 +8г8і- +-г8ї8 +8г8ї- +-г8й8 +8г8й- +-г8к8 +8г8к- +-г8л8 +8г8л- +-г8м8 +8г8м- +-г8н8 +8г8н- +-г8о8 +8г8о- +-г8п8 +8г8п- +-г8р8 +8г8р- +-г8с8 +8г8с- +-г8т8 +8г8т- +-г8у8 +8г8у- +-г8ф8 +8г8ф- +-г8х8 +8г8х- +-г8ц8 +8г8ц- +-г8ч8 +8г8ч- +-г8ш8 +8г8ш- +-г8щ8 +8г8щ- +-г8ь8 +8г8ь- +-г8ю8 +8г8ю- +-г8я8 +8г8я- +-г8’8 +8г8’- +-ґ8а8 +8ґ8а- +-ґ8б8 +8ґ8б- +-ґ8в8 +8ґ8в- +-ґ8г8 +8ґ8г- +-ґ8ґ8 +8ґ8ґ- +-ґ8д8 +8ґ8д- +-ґ8е8 +8ґ8е- +-ґ8є8 +8ґ8є- +-ґ8ж8 +8ґ8ж- +-ґ8з8 +8ґ8з- +-ґ8и8 +8ґ8и- +-ґ8і8 +8ґ8і- +-ґ8ї8 +8ґ8ї- +-ґ8й8 +8ґ8й- +-ґ8к8 +8ґ8к- +-ґ8л8 +8ґ8л- +-ґ8м8 +8ґ8м- +-ґ8н8 +8ґ8н- +-ґ8о8 +8ґ8о- +-ґ8п8 +8ґ8п- +-ґ8р8 +8ґ8р- +-ґ8с8 +8ґ8с- +-ґ8т8 +8ґ8т- +-ґ8у8 +8ґ8у- +-ґ8ф8 +8ґ8ф- +-ґ8х8 +8ґ8х- +-ґ8ц8 +8ґ8ц- +-ґ8ч8 +8ґ8ч- +-ґ8ш8 +8ґ8ш- +-ґ8щ8 +8ґ8щ- +-ґ8ь8 +8ґ8ь- +-ґ8ю8 +8ґ8ю- +-ґ8я8 +8ґ8я- +-ґ8’8 +8ґ8’- +-д8а8 +8д8а- +-д8б8 +8д8б- +-д8в8 +8д8в- +-д8г8 +8д8г- +-д8ґ8 +8д8ґ- +-д8д8 +8д8д- +-д8е8 +8д8е- +-д8є8 +8д8є- +-д8ж8 +8д8ж- +-д8з8 +8д8з- +-д8и8 +8д8и- +-д8і8 +8д8і- +-д8ї8 +8д8ї- +-д8й8 +8д8й- +-д8к8 +8д8к- +-д8л8 +8д8л- +-д8м8 +8д8м- +-д8н8 +8д8н- +-д8о8 +8д8о- +-д8п8 +8д8п- +-д8р8 +8д8р- +-д8с8 +8д8с- +-д8т8 +8д8т- +-д8у8 +8д8у- +-д8ф8 +8д8ф- +-д8х8 +8д8х- +-д8ц8 +8д8ц- +-д8ч8 +8д8ч- +-д8ш8 +8д8ш- +-д8щ8 +8д8щ- +-д8ь8 +8д8ь- +-д8ю8 +8д8ю- +-д8я8 +8д8я- +-д8’8 +8д8’- +-е8а8 +8е8а- +-е8б8 +8е8б- +-е8в8 +8е8в- +-е8г8 +8е8г- +-е8ґ8 +8е8ґ- +-е8д8 +8е8д- +-е8е8 +8е8е- +-е8є8 +8е8є- +-е8ж8 +8е8ж- +-е8з8 +8е8з- +-е8и8 +8е8и- +-е8і8 +8е8і- +-е8ї8 +8е8ї- +-е8й8 +8е8й- +-е8к8 +8е8к- +-е8л8 +8е8л- +-е8м8 +8е8м- +-е8н8 +8е8н- +-е8о8 +8е8о- +-е8п8 +8е8п- +-е8р8 +8е8р- +-е8с8 +8е8с- +-е8т8 +8е8т- +-е8у8 +8е8у- +-е8ф8 +8е8ф- +-е8х8 +8е8х- +-е8ц8 +8е8ц- +-е8ч8 +8е8ч- +-е8ш8 +8е8ш- +-е8щ8 +8е8щ- +-е8ь8 +8е8ь- +-е8ю8 +8е8ю- +-е8я8 +8е8я- +-е8’8 +8е8’- +-є8а8 +8є8а- +-є8б8 +8є8б- +-є8в8 +8є8в- +-є8г8 +8є8г- +-є8ґ8 +8є8ґ- +-є8д8 +8є8д- +-є8е8 +8є8е- +-є8є8 +8є8є- +-є8ж8 +8є8ж- +-є8з8 +8є8з- +-є8и8 +8є8и- +-є8і8 +8є8і- +-є8ї8 +8є8ї- +-є8й8 +8є8й- +-є8к8 +8є8к- +-є8л8 +8є8л- +-є8м8 +8є8м- +-є8н8 +8є8н- +-є8о8 +8є8о- +-є8п8 +8є8п- +-є8р8 +8є8р- +-є8с8 +8є8с- +-є8т8 +8є8т- +-є8у8 +8є8у- +-є8ф8 +8є8ф- +-є8х8 +8є8х- +-є8ц8 +8є8ц- +-є8ч8 +8є8ч- +-є8ш8 +8є8ш- +-є8щ8 +8є8щ- +-є8ь8 +8є8ь- +-є8ю8 +8є8ю- +-є8я8 +8є8я- +-є8’8 +8є8’- +-ж8а8 +8ж8а- +-ж8б8 +8ж8б- +-ж8в8 +8ж8в- +-ж8г8 +8ж8г- +-ж8ґ8 +8ж8ґ- +-ж8д8 +8ж8д- +-ж8е8 +8ж8е- +-ж8є8 +8ж8є- +-ж8ж8 +8ж8ж- +-ж8з8 +8ж8з- +-ж8и8 +8ж8и- +-ж8і8 +8ж8і- +-ж8ї8 +8ж8ї- +-ж8й8 +8ж8й- +-ж8к8 +8ж8к- +-ж8л8 +8ж8л- +-ж8м8 +8ж8м- +-ж8н8 +8ж8н- +-ж8о8 +8ж8о- +-ж8п8 +8ж8п- +-ж8р8 +8ж8р- +-ж8с8 +8ж8с- +-ж8т8 +8ж8т- +-ж8у8 +8ж8у- +-ж8ф8 +8ж8ф- +-ж8х8 +8ж8х- +-ж8ц8 +8ж8ц- +-ж8ч8 +8ж8ч- +-ж8ш8 +8ж8ш- +-ж8щ8 +8ж8щ- +-ж8ь8 +8ж8ь- +-ж8ю8 +8ж8ю- +-ж8я8 +8ж8я- +-ж8’8 +8ж8’- +-з8а8 +8з8а- +-з8б8 +8з8б- +-з8в8 +8з8в- +-з8г8 +8з8г- +-з8ґ8 +8з8ґ- +-з8д8 +8з8д- +-з8е8 +8з8е- +-з8є8 +8з8є- +-з8ж8 +8з8ж- +-з8з8 +8з8з- +-з8и8 +8з8и- +-з8і8 +8з8і- +-з8ї8 +8з8ї- +-з8й8 +8з8й- +-з8к8 +8з8к- +-з8л8 +8з8л- +-з8м8 +8з8м- +-з8н8 +8з8н- +-з8о8 +8з8о- +-з8п8 +8з8п- +-з8р8 +8з8р- +-з8с8 +8з8с- +-з8т8 +8з8т- +-з8у8 +8з8у- +-з8ф8 +8з8ф- +-з8х8 +8з8х- +-з8ц8 +8з8ц- +-з8ч8 +8з8ч- +-з8ш8 +8з8ш- +-з8щ8 +8з8щ- +-з8ь8 +8з8ь- +-з8ю8 +8з8ю- +-з8я8 +8з8я- +-з8’8 +8з8’- +-и8а8 +8и8а- +-и8б8 +8и8б- +-и8в8 +8и8в- +-и8г8 +8и8г- +-и8ґ8 +8и8ґ- +-и8д8 +8и8д- +-и8е8 +8и8е- +-и8є8 +8и8є- +-и8ж8 +8и8ж- +-и8з8 +8и8з- +-и8и8 +8и8и- +-и8і8 +8и8і- +-и8ї8 +8и8ї- +-и8й8 +8и8й- +-и8к8 +8и8к- +-и8л8 +8и8л- +-и8м8 +8и8м- +-и8н8 +8и8н- +-и8о8 +8и8о- +-и8п8 +8и8п- +-и8р8 +8и8р- +-и8с8 +8и8с- +-и8т8 +8и8т- +-и8у8 +8и8у- +-и8ф8 +8и8ф- +-и8х8 +8и8х- +-и8ц8 +8и8ц- +-и8ч8 +8и8ч- +-и8ш8 +8и8ш- +-и8щ8 +8и8щ- +-и8ь8 +8и8ь- +-и8ю8 +8и8ю- +-и8я8 +8и8я- +-и8’8 +8и8’- +-і8а8 +8і8а- +-і8б8 +8і8б- +-і8в8 +8і8в- +-і8г8 +8і8г- +-і8ґ8 +8і8ґ- +-і8д8 +8і8д- +-і8е8 +8і8е- +-і8є8 +8і8є- +-і8ж8 +8і8ж- +-і8з8 +8і8з- +-і8и8 +8і8и- +-і8і8 +8і8і- +-і8ї8 +8і8ї- +-і8й8 +8і8й- +-і8к8 +8і8к- +-і8л8 +8і8л- +-і8м8 +8і8м- +-і8н8 +8і8н- +-і8о8 +8і8о- +-і8п8 +8і8п- +-і8р8 +8і8р- +-і8с8 +8і8с- +-і8т8 +8і8т- +-і8у8 +8і8у- +-і8ф8 +8і8ф- +-і8х8 +8і8х- +-і8ц8 +8і8ц- +-і8ч8 +8і8ч- +-і8ш8 +8і8ш- +-і8щ8 +8і8щ- +-і8ь8 +8і8ь- +-і8ю8 +8і8ю- +-і8я8 +8і8я- +-і8’8 +8і8’- +-ї8а8 +8ї8а- +-ї8б8 +8ї8б- +-ї8в8 +8ї8в- +-ї8г8 +8ї8г- +-ї8ґ8 +8ї8ґ- +-ї8д8 +8ї8д- +-ї8е8 +8ї8е- +-ї8є8 +8ї8є- +-ї8ж8 +8ї8ж- +-ї8з8 +8ї8з- +-ї8и8 +8ї8и- +-ї8і8 +8ї8і- +-ї8ї8 +8ї8ї- +-ї8й8 +8ї8й- +-ї8к8 +8ї8к- +-ї8л8 +8ї8л- +-ї8м8 +8ї8м- +-ї8н8 +8ї8н- +-ї8о8 +8ї8о- +-ї8п8 +8ї8п- +-ї8р8 +8ї8р- +-ї8с8 +8ї8с- +-ї8т8 +8ї8т- +-ї8у8 +8ї8у- +-ї8ф8 +8ї8ф- +-ї8х8 +8ї8х- +-ї8ц8 +8ї8ц- +-ї8ч8 +8ї8ч- +-ї8ш8 +8ї8ш- +-ї8щ8 +8ї8щ- +-ї8ь8 +8ї8ь- +-ї8ю8 +8ї8ю- +-ї8я8 +8ї8я- +-ї8’8 +8ї8’- +-й8а8 +8й8а- +-й8б8 +8й8б- +-й8в8 +8й8в- +-й8г8 +8й8г- +-й8ґ8 +8й8ґ- +-й8д8 +8й8д- +-й8е8 +8й8е- +-й8є8 +8й8є- +-й8ж8 +8й8ж- +-й8з8 +8й8з- +-й8и8 +8й8и- +-й8і8 +8й8і- +-й8ї8 +8й8ї- +-й8й8 +8й8й- +-й8к8 +8й8к- +-й8л8 +8й8л- +-й8м8 +8й8м- +-й8н8 +8й8н- +-й8о8 +8й8о- +-й8п8 +8й8п- +-й8р8 +8й8р- +-й8с8 +8й8с- +-й8т8 +8й8т- +-й8у8 +8й8у- +-й8ф8 +8й8ф- +-й8х8 +8й8х- +-й8ц8 +8й8ц- +-й8ч8 +8й8ч- +-й8ш8 +8й8ш- +-й8щ8 +8й8щ- +-й8ь8 +8й8ь- +-й8ю8 +8й8ю- +-й8я8 +8й8я- +-й8’8 +8й8’- +-к8а8 +8к8а- +-к8б8 +8к8б- +-к8в8 +8к8в- +-к8г8 +8к8г- +-к8ґ8 +8к8ґ- +-к8д8 +8к8д- +-к8е8 +8к8е- +-к8є8 +8к8є- +-к8ж8 +8к8ж- +-к8з8 +8к8з- +-к8и8 +8к8и- +-к8і8 +8к8і- +-к8ї8 +8к8ї- +-к8й8 +8к8й- +-к8к8 +8к8к- +-к8л8 +8к8л- +-к8м8 +8к8м- +-к8н8 +8к8н- +-к8о8 +8к8о- +-к8п8 +8к8п- +-к8р8 +8к8р- +-к8с8 +8к8с- +-к8т8 +8к8т- +-к8у8 +8к8у- +-к8ф8 +8к8ф- +-к8х8 +8к8х- +-к8ц8 +8к8ц- +-к8ч8 +8к8ч- +-к8ш8 +8к8ш- +-к8щ8 +8к8щ- +-к8ь8 +8к8ь- +-к8ю8 +8к8ю- +-к8я8 +8к8я- +-к8’8 +8к8’- +-л8а8 +8л8а- +-л8б8 +8л8б- +-л8в8 +8л8в- +-л8г8 +8л8г- +-л8ґ8 +8л8ґ- +-л8д8 +8л8д- +-л8е8 +8л8е- +-л8є8 +8л8є- +-л8ж8 +8л8ж- +-л8з8 +8л8з- +-л8и8 +8л8и- +-л8і8 +8л8і- +-л8ї8 +8л8ї- +-л8й8 +8л8й- +-л8к8 +8л8к- +-л8л8 +8л8л- +-л8м8 +8л8м- +-л8н8 +8л8н- +-л8о8 +8л8о- +-л8п8 +8л8п- +-л8р8 +8л8р- +-л8с8 +8л8с- +-л8т8 +8л8т- +-л8у8 +8л8у- +-л8ф8 +8л8ф- +-л8х8 +8л8х- +-л8ц8 +8л8ц- +-л8ч8 +8л8ч- +-л8ш8 +8л8ш- +-л8щ8 +8л8щ- +-л8ь8 +8л8ь- +-л8ю8 +8л8ю- +-л8я8 +8л8я- +-л8’8 +8л8’- +-м8а8 +8м8а- +-м8б8 +8м8б- +-м8в8 +8м8в- +-м8г8 +8м8г- +-м8ґ8 +8м8ґ- +-м8д8 +8м8д- +-м8е8 +8м8е- +-м8є8 +8м8є- +-м8ж8 +8м8ж- +-м8з8 +8м8з- +-м8и8 +8м8и- +-м8і8 +8м8і- +-м8ї8 +8м8ї- +-м8й8 +8м8й- +-м8к8 +8м8к- +-м8л8 +8м8л- +-м8м8 +8м8м- +-м8н8 +8м8н- +-м8о8 +8м8о- +-м8п8 +8м8п- +-м8р8 +8м8р- +-м8с8 +8м8с- +-м8т8 +8м8т- +-м8у8 +8м8у- +-м8ф8 +8м8ф- +-м8х8 +8м8х- +-м8ц8 +8м8ц- +-м8ч8 +8м8ч- +-м8ш8 +8м8ш- +-м8щ8 +8м8щ- +-м8ь8 +8м8ь- +-м8ю8 +8м8ю- +-м8я8 +8м8я- +-м8’8 +8м8’- +-н8а8 +8н8а- +-н8б8 +8н8б- +-н8в8 +8н8в- +-н8г8 +8н8г- +-н8ґ8 +8н8ґ- +-н8д8 +8н8д- +-н8е8 +8н8е- +-н8є8 +8н8є- +-н8ж8 +8н8ж- +-н8з8 +8н8з- +-н8и8 +8н8и- +-н8і8 +8н8і- +-н8ї8 +8н8ї- +-н8й8 +8н8й- +-н8к8 +8н8к- +-н8л8 +8н8л- +-н8м8 +8н8м- +-н8н8 +8н8н- +-н8о8 +8н8о- +-н8п8 +8н8п- +-н8р8 +8н8р- +-н8с8 +8н8с- +-н8т8 +8н8т- +-н8у8 +8н8у- +-н8ф8 +8н8ф- +-н8х8 +8н8х- +-н8ц8 +8н8ц- +-н8ч8 +8н8ч- +-н8ш8 +8н8ш- +-н8щ8 +8н8щ- +-н8ь8 +8н8ь- +-н8ю8 +8н8ю- +-н8я8 +8н8я- +-н8’8 +8н8’- +-о8а8 +8о8а- +-о8б8 +8о8б- +-о8в8 +8о8в- +-о8г8 +8о8г- +-о8ґ8 +8о8ґ- +-о8д8 +8о8д- +-о8е8 +8о8е- +-о8є8 +8о8є- +-о8ж8 +8о8ж- +-о8з8 +8о8з- +-о8и8 +8о8и- +-о8і8 +8о8і- +-о8ї8 +8о8ї- +-о8й8 +8о8й- +-о8к8 +8о8к- +-о8л8 +8о8л- +-о8м8 +8о8м- +-о8н8 +8о8н- +-о8о8 +8о8о- +-о8п8 +8о8п- +-о8р8 +8о8р- +-о8с8 +8о8с- +-о8т8 +8о8т- +-о8у8 +8о8у- +-о8ф8 +8о8ф- +-о8х8 +8о8х- +-о8ц8 +8о8ц- +-о8ч8 +8о8ч- +-о8ш8 +8о8ш- +-о8щ8 +8о8щ- +-о8ь8 +8о8ь- +-о8ю8 +8о8ю- +-о8я8 +8о8я- +-о8’8 +8о8’- +-п8а8 +8п8а- +-п8б8 +8п8б- +-п8в8 +8п8в- +-п8г8 +8п8г- +-п8ґ8 +8п8ґ- +-п8д8 +8п8д- +-п8е8 +8п8е- +-п8є8 +8п8є- +-п8ж8 +8п8ж- +-п8з8 +8п8з- +-п8и8 +8п8и- +-п8і8 +8п8і- +-п8ї8 +8п8ї- +-п8й8 +8п8й- +-п8к8 +8п8к- +-п8л8 +8п8л- +-п8м8 +8п8м- +-п8н8 +8п8н- +-п8о8 +8п8о- +-п8п8 +8п8п- +-п8р8 +8п8р- +-п8с8 +8п8с- +-п8т8 +8п8т- +-п8у8 +8п8у- +-п8ф8 +8п8ф- +-п8х8 +8п8х- +-п8ц8 +8п8ц- +-п8ч8 +8п8ч- +-п8ш8 +8п8ш- +-п8щ8 +8п8щ- +-п8ь8 +8п8ь- +-п8ю8 +8п8ю- +-п8я8 +8п8я- +-п8’8 +8п8’- +-р8а8 +8р8а- +-р8б8 +8р8б- +-р8в8 +8р8в- +-р8г8 +8р8г- +-р8ґ8 +8р8ґ- +-р8д8 +8р8д- +-р8е8 +8р8е- +-р8є8 +8р8є- +-р8ж8 +8р8ж- +-р8з8 +8р8з- +-р8и8 +8р8и- +-р8і8 +8р8і- +-р8ї8 +8р8ї- +-р8й8 +8р8й- +-р8к8 +8р8к- +-р8л8 +8р8л- +-р8м8 +8р8м- +-р8н8 +8р8н- +-р8о8 +8р8о- +-р8п8 +8р8п- +-р8р8 +8р8р- +-р8с8 +8р8с- +-р8т8 +8р8т- +-р8у8 +8р8у- +-р8ф8 +8р8ф- +-р8х8 +8р8х- +-р8ц8 +8р8ц- +-р8ч8 +8р8ч- +-р8ш8 +8р8ш- +-р8щ8 +8р8щ- +-р8ь8 +8р8ь- +-р8ю8 +8р8ю- +-р8я8 +8р8я- +-р8’8 +8р8’- +-с8а8 +8с8а- +-с8б8 +8с8б- +-с8в8 +8с8в- +-с8г8 +8с8г- +-с8ґ8 +8с8ґ- +-с8д8 +8с8д- +-с8е8 +8с8е- +-с8є8 +8с8є- +-с8ж8 +8с8ж- +-с8з8 +8с8з- +-с8и8 +8с8и- +-с8і8 +8с8і- +-с8ї8 +8с8ї- +-с8й8 +8с8й- +-с8к8 +8с8к- +-с8л8 +8с8л- +-с8м8 +8с8м- +-с8н8 +8с8н- +-с8о8 +8с8о- +-с8п8 +8с8п- +-с8р8 +8с8р- +-с8с8 +8с8с- +-с8т8 +8с8т- +-с8у8 +8с8у- +-с8ф8 +8с8ф- +-с8х8 +8с8х- +-с8ц8 +8с8ц- +-с8ч8 +8с8ч- +-с8ш8 +8с8ш- +-с8щ8 +8с8щ- +-с8ь8 +8с8ь- +-с8ю8 +8с8ю- +-с8я8 +8с8я- +-с8’8 +8с8’- +-т8а8 +8т8а- +-т8б8 +8т8б- +-т8в8 +8т8в- +-т8г8 +8т8г- +-т8ґ8 +8т8ґ- +-т8д8 +8т8д- +-т8е8 +8т8е- +-т8є8 +8т8є- +-т8ж8 +8т8ж- +-т8з8 +8т8з- +-т8и8 +8т8и- +-т8і8 +8т8і- +-т8ї8 +8т8ї- +-т8й8 +8т8й- +-т8к8 +8т8к- +-т8л8 +8т8л- +-т8м8 +8т8м- +-т8н8 +8т8н- +-т8о8 +8т8о- +-т8п8 +8т8п- +-т8р8 +8т8р- +-т8с8 +8т8с- +-т8т8 +8т8т- +-т8у8 +8т8у- +-т8ф8 +8т8ф- +-т8х8 +8т8х- +-т8ц8 +8т8ц- +-т8ч8 +8т8ч- +-т8ш8 +8т8ш- +-т8щ8 +8т8щ- +-т8ь8 +8т8ь- +-т8ю8 +8т8ю- +-т8я8 +8т8я- +-т8’8 +8т8’- +-у8а8 +8у8а- +-у8б8 +8у8б- +-у8в8 +8у8в- +-у8г8 +8у8г- +-у8ґ8 +8у8ґ- +-у8д8 +8у8д- +-у8е8 +8у8е- +-у8є8 +8у8є- +-у8ж8 +8у8ж- +-у8з8 +8у8з- +-у8и8 +8у8и- +-у8і8 +8у8і- +-у8ї8 +8у8ї- +-у8й8 +8у8й- +-у8к8 +8у8к- +-у8л8 +8у8л- +-у8м8 +8у8м- +-у8н8 +8у8н- +-у8о8 +8у8о- +-у8п8 +8у8п- +-у8р8 +8у8р- +-у8с8 +8у8с- +-у8т8 +8у8т- +-у8у8 +8у8у- +-у8ф8 +8у8ф- +-у8х8 +8у8х- +-у8ц8 +8у8ц- +-у8ч8 +8у8ч- +-у8ш8 +8у8ш- +-у8щ8 +8у8щ- +-у8ь8 +8у8ь- +-у8ю8 +8у8ю- +-у8я8 +8у8я- +-у8’8 +8у8’- +-ф8а8 +8ф8а- +-ф8б8 +8ф8б- +-ф8в8 +8ф8в- +-ф8г8 +8ф8г- +-ф8ґ8 +8ф8ґ- +-ф8д8 +8ф8д- +-ф8е8 +8ф8е- +-ф8є8 +8ф8є- +-ф8ж8 +8ф8ж- +-ф8з8 +8ф8з- +-ф8и8 +8ф8и- +-ф8і8 +8ф8і- +-ф8ї8 +8ф8ї- +-ф8й8 +8ф8й- +-ф8к8 +8ф8к- +-ф8л8 +8ф8л- +-ф8м8 +8ф8м- +-ф8н8 +8ф8н- +-ф8о8 +8ф8о- +-ф8п8 +8ф8п- +-ф8р8 +8ф8р- +-ф8с8 +8ф8с- +-ф8т8 +8ф8т- +-ф8у8 +8ф8у- +-ф8ф8 +8ф8ф- +-ф8х8 +8ф8х- +-ф8ц8 +8ф8ц- +-ф8ч8 +8ф8ч- +-ф8ш8 +8ф8ш- +-ф8щ8 +8ф8щ- +-ф8ь8 +8ф8ь- +-ф8ю8 +8ф8ю- +-ф8я8 +8ф8я- +-ф8’8 +8ф8’- +-х8а8 +8х8а- +-х8б8 +8х8б- +-х8в8 +8х8в- +-х8г8 +8х8г- +-х8ґ8 +8х8ґ- +-х8д8 +8х8д- +-х8е8 +8х8е- +-х8є8 +8х8є- +-х8ж8 +8х8ж- +-х8з8 +8х8з- +-х8и8 +8х8и- +-х8і8 +8х8і- +-х8ї8 +8х8ї- +-х8й8 +8х8й- +-х8к8 +8х8к- +-х8л8 +8х8л- +-х8м8 +8х8м- +-х8н8 +8х8н- +-х8о8 +8х8о- +-х8п8 +8х8п- +-х8р8 +8х8р- +-х8с8 +8х8с- +-х8т8 +8х8т- +-х8у8 +8х8у- +-х8ф8 +8х8ф- +-х8х8 +8х8х- +-х8ц8 +8х8ц- +-х8ч8 +8х8ч- +-х8ш8 +8х8ш- +-х8щ8 +8х8щ- +-х8ь8 +8х8ь- +-х8ю8 +8х8ю- +-х8я8 +8х8я- +-х8’8 +8х8’- +-ц8а8 +8ц8а- +-ц8б8 +8ц8б- +-ц8в8 +8ц8в- +-ц8г8 +8ц8г- +-ц8ґ8 +8ц8ґ- +-ц8д8 +8ц8д- +-ц8е8 +8ц8е- +-ц8є8 +8ц8є- +-ц8ж8 +8ц8ж- +-ц8з8 +8ц8з- +-ц8и8 +8ц8и- +-ц8і8 +8ц8і- +-ц8ї8 +8ц8ї- +-ц8й8 +8ц8й- +-ц8к8 +8ц8к- +-ц8л8 +8ц8л- +-ц8м8 +8ц8м- +-ц8н8 +8ц8н- +-ц8о8 +8ц8о- +-ц8п8 +8ц8п- +-ц8р8 +8ц8р- +-ц8с8 +8ц8с- +-ц8т8 +8ц8т- +-ц8у8 +8ц8у- +-ц8ф8 +8ц8ф- +-ц8х8 +8ц8х- +-ц8ц8 +8ц8ц- +-ц8ч8 +8ц8ч- +-ц8ш8 +8ц8ш- +-ц8щ8 +8ц8щ- +-ц8ь8 +8ц8ь- +-ц8ю8 +8ц8ю- +-ц8я8 +8ц8я- +-ц8’8 +8ц8’- +-ч8а8 +8ч8а- +-ч8б8 +8ч8б- +-ч8в8 +8ч8в- +-ч8г8 +8ч8г- +-ч8ґ8 +8ч8ґ- +-ч8д8 +8ч8д- +-ч8е8 +8ч8е- +-ч8є8 +8ч8є- +-ч8ж8 +8ч8ж- +-ч8з8 +8ч8з- +-ч8и8 +8ч8и- +-ч8і8 +8ч8і- +-ч8ї8 +8ч8ї- +-ч8й8 +8ч8й- +-ч8к8 +8ч8к- +-ч8л8 +8ч8л- +-ч8м8 +8ч8м- +-ч8н8 +8ч8н- +-ч8о8 +8ч8о- +-ч8п8 +8ч8п- +-ч8р8 +8ч8р- +-ч8с8 +8ч8с- +-ч8т8 +8ч8т- +-ч8у8 +8ч8у- +-ч8ф8 +8ч8ф- +-ч8х8 +8ч8х- +-ч8ц8 +8ч8ц- +-ч8ч8 +8ч8ч- +-ч8ш8 +8ч8ш- +-ч8щ8 +8ч8щ- +-ч8ь8 +8ч8ь- +-ч8ю8 +8ч8ю- +-ч8я8 +8ч8я- +-ч8’8 +8ч8’- +-ш8а8 +8ш8а- +-ш8б8 +8ш8б- +-ш8в8 +8ш8в- +-ш8г8 +8ш8г- +-ш8ґ8 +8ш8ґ- +-ш8д8 +8ш8д- +-ш8е8 +8ш8е- +-ш8є8 +8ш8є- +-ш8ж8 +8ш8ж- +-ш8з8 +8ш8з- +-ш8и8 +8ш8и- +-ш8і8 +8ш8і- +-ш8ї8 +8ш8ї- +-ш8й8 +8ш8й- +-ш8к8 +8ш8к- +-ш8л8 +8ш8л- +-ш8м8 +8ш8м- +-ш8н8 +8ш8н- +-ш8о8 +8ш8о- +-ш8п8 +8ш8п- +-ш8р8 +8ш8р- +-ш8с8 +8ш8с- +-ш8т8 +8ш8т- +-ш8у8 +8ш8у- +-ш8ф8 +8ш8ф- +-ш8х8 +8ш8х- +-ш8ц8 +8ш8ц- +-ш8ч8 +8ш8ч- +-ш8ш8 +8ш8ш- +-ш8щ8 +8ш8щ- +-ш8ь8 +8ш8ь- +-ш8ю8 +8ш8ю- +-ш8я8 +8ш8я- +-ш8’8 +8ш8’- +-щ8а8 +8щ8а- +-щ8б8 +8щ8б- +-щ8в8 +8щ8в- +-щ8г8 +8щ8г- +-щ8ґ8 +8щ8ґ- +-щ8д8 +8щ8д- +-щ8е8 +8щ8е- +-щ8є8 +8щ8є- +-щ8ж8 +8щ8ж- +-щ8з8 +8щ8з- +-щ8и8 +8щ8и- +-щ8і8 +8щ8і- +-щ8ї8 +8щ8ї- +-щ8й8 +8щ8й- +-щ8к8 +8щ8к- +-щ8л8 +8щ8л- +-щ8м8 +8щ8м- +-щ8н8 +8щ8н- +-щ8о8 +8щ8о- +-щ8п8 +8щ8п- +-щ8р8 +8щ8р- +-щ8с8 +8щ8с- +-щ8т8 +8щ8т- +-щ8у8 +8щ8у- +-щ8ф8 +8щ8ф- +-щ8х8 +8щ8х- +-щ8ц8 +8щ8ц- +-щ8ч8 +8щ8ч- +-щ8ш8 +8щ8ш- +-щ8щ8 +8щ8щ- +-щ8ь8 +8щ8ь- +-щ8ю8 +8щ8ю- +-щ8я8 +8щ8я- +-щ8’8 +8щ8’- +-ь8а8 +8ь8а- +-ь8б8 +8ь8б- +-ь8в8 +8ь8в- +-ь8г8 +8ь8г- +-ь8ґ8 +8ь8ґ- +-ь8д8 +8ь8д- +-ь8е8 +8ь8е- +-ь8є8 +8ь8є- +-ь8ж8 +8ь8ж- +-ь8з8 +8ь8з- +-ь8и8 +8ь8и- +-ь8і8 +8ь8і- +-ь8ї8 +8ь8ї- +-ь8й8 +8ь8й- +-ь8к8 +8ь8к- +-ь8л8 +8ь8л- +-ь8м8 +8ь8м- +-ь8н8 +8ь8н- +-ь8о8 +8ь8о- +-ь8п8 +8ь8п- +-ь8р8 +8ь8р- +-ь8с8 +8ь8с- +-ь8т8 +8ь8т- +-ь8у8 +8ь8у- +-ь8ф8 +8ь8ф- +-ь8х8 +8ь8х- +-ь8ц8 +8ь8ц- +-ь8ч8 +8ь8ч- +-ь8ш8 +8ь8ш- +-ь8щ8 +8ь8щ- +-ь8ь8 +8ь8ь- +-ь8ю8 +8ь8ю- +-ь8я8 +8ь8я- +-ь8’8 +8ь8’- +-ю8а8 +8ю8а- +-ю8б8 +8ю8б- +-ю8в8 +8ю8в- +-ю8г8 +8ю8г- +-ю8ґ8 +8ю8ґ- +-ю8д8 +8ю8д- +-ю8е8 +8ю8е- +-ю8є8 +8ю8є- +-ю8ж8 +8ю8ж- +-ю8з8 +8ю8з- +-ю8и8 +8ю8и- +-ю8і8 +8ю8і- +-ю8ї8 +8ю8ї- +-ю8й8 +8ю8й- +-ю8к8 +8ю8к- +-ю8л8 +8ю8л- +-ю8м8 +8ю8м- +-ю8н8 +8ю8н- +-ю8о8 +8ю8о- +-ю8п8 +8ю8п- +-ю8р8 +8ю8р- +-ю8с8 +8ю8с- +-ю8т8 +8ю8т- +-ю8у8 +8ю8у- +-ю8ф8 +8ю8ф- +-ю8х8 +8ю8х- +-ю8ц8 +8ю8ц- +-ю8ч8 +8ю8ч- +-ю8ш8 +8ю8ш- +-ю8щ8 +8ю8щ- +-ю8ь8 +8ю8ь- +-ю8ю8 +8ю8ю- +-ю8я8 +8ю8я- +-ю8’8 +8ю8’- +-я8а8 +8я8а- +-я8б8 +8я8б- +-я8в8 +8я8в- +-я8г8 +8я8г- +-я8ґ8 +8я8ґ- +-я8д8 +8я8д- +-я8е8 +8я8е- +-я8є8 +8я8є- +-я8ж8 +8я8ж- +-я8з8 +8я8з- +-я8и8 +8я8и- +-я8і8 +8я8і- +-я8ї8 +8я8ї- +-я8й8 +8я8й- +-я8к8 +8я8к- +-я8л8 +8я8л- +-я8м8 +8я8м- +-я8н8 +8я8н- +-я8о8 +8я8о- +-я8п8 +8я8п- +-я8р8 +8я8р- +-я8с8 +8я8с- +-я8т8 +8я8т- +-я8у8 +8я8у- +-я8ф8 +8я8ф- +-я8х8 +8я8х- +-я8ц8 +8я8ц- +-я8ч8 +8я8ч- +-я8ш8 +8я8ш- +-я8щ8 +8я8щ- +-я8ь8 +8я8ь- +-я8ю8 +8я8ю- +-я8я8 +8я8я- +-я8’8 +8я8’- +-’8а8 +8’8а- +-’8б8 +8’8б- +-’8в8 +8’8в- +-’8г8 +8’8г- +-’8ґ8 +8’8ґ- +-’8д8 +8’8д- +-’8е8 +8’8е- +-’8є8 +8’8є- +-’8ж8 +8’8ж- +-’8з8 +8’8з- +-’8и8 +8’8и- +-’8і8 +8’8і- +-’8ї8 +8’8ї- +-’8й8 +8’8й- +-’8к8 +8’8к- +-’8л8 +8’8л- +-’8м8 +8’8м- +-’8н8 +8’8н- +-’8о8 +8’8о- +-’8п8 +8’8п- +-’8р8 +8’8р- +-’8с8 +8’8с- +-’8т8 +8’8т- +-’8у8 +8’8у- +-’8ф8 +8’8ф- +-’8х8 +8’8х- +-’8ц8 +8’8ц- +-’8ч8 +8’8ч- +-’8ш8 +8’8ш- +-’8щ8 +8’8щ- +-’8ь8 +8’8ь- +-’8ю8 +8’8ю- +-’8я8 +8’8я- +-’8’8 +8’8’- diff --git a/Master/texmf-dist/tex/luatex/hyph-utf8/luatex-hyphen.lua b/Master/texmf-dist/tex/luatex/hyph-utf8/luatex-hyphen.lua index fd68da74710..6f7e1059dc0 100644 --- a/Master/texmf-dist/tex/luatex/hyph-utf8/luatex-hyphen.lua +++ b/Master/texmf-dist/tex/luatex/hyph-utf8/luatex-hyphen.lua @@ -49,10 +49,7 @@ function loadlanguage(lname, id) err("no entry in %s for this language: %s", dbname, lname) end if ldata.special then - if ldata.special == 'null' then - wlog(msg, ' (null)', cname, id) - return - elseif ldata.special:find('^disabled:') then + if ldata.special:find('^disabled:') then err("language disabled by %s: %s (%s)", dbname, cname, ldata.special:gsub('^disabled:', '')) elseif ldata.special == 'language0' then @@ -62,7 +59,7 @@ function loadlanguage(lname, id) end end wlog(msg, '', cname, id) - for _, item in ipairs{'hyphenation', 'patterns'} do + for _, item in ipairs{'patterns', 'hyphenation'} do local file = ldata[item] if file ~= nil and file ~= '' then local file = kpse.find_file(file) or err("file not found: %s", file) @@ -70,6 +67,9 @@ function loadlanguage(lname, id) local data = fh:read('*a') or err("file not readable: %s", f) fh:close() lang[item](lang.new(id), data) + else + if item == 'hyphenation' then item = item..' exceptions' end + wlog("info: no %s for this language", item) end end end -- cgit v1.2.3