summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMojca Miklavec <mojca.miklavec@gmail.com>2010-06-01 01:39:02 +0000
committerMojca Miklavec <mojca.miklavec@gmail.com>2010-06-01 01:39:02 +0000
commit3a5cf8de164c5d0f1fdb01999af33d77f59d526f (patch)
tree1e1c013154793e9a74852ded1537869e3cfabbb0
parent3205d02db781aec158019161797c2a156ceb0b34 (diff)
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
-rw-r--r--Master/texmf-dist/doc/generic/hyph-utf8/CHANGES32
-rw-r--r--Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdfbin393081 -> 392542 bytes
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/README6
-rwxr-xr-xMaster/texmf-dist/source/generic/hyph-utf8/collaboration/generate-js-Hyphenator.rb204
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.java108
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertLanguageData.xsl38
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.java385
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/ConvertTeXPattern.xsl128
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/LanguageDataParser.java428
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/README38
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/TeXPatternParser.java325
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/codemapping.xml23
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/conversion-to-xml/org/tug/texhyphen/languages.xml434
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/generate-converters.rb55
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/generate-pattern-loaders.rb2
-rwxr-xr-xMaster/texmf-dist/source/generic/hyph-utf8/generate-ptex-patterns.rb108
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/generate-tl-files.rb11
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/hyph-utf8.rb109
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/languages.rb15
-rw-r--r--Master/texmf-dist/source/generic/hyph-utf8/languages/gl/README50
-rw-r--r--Master/texmf-dist/source/luatex/hyph-utf8/luatex-hyphen.dtx22
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/loadhyph/loadhyph-la.tex4
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex-special/spechyph-ot1-la.tex25
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex2
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt1
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt2213
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.chr.txt1
-rw-r--r--Master/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-uk.pat.txt2348
-rw-r--r--Master/texmf-dist/tex/luatex/hyph-utf8/luatex-hyphen.lua10
29 files changed, 4881 insertions, 2244 deletions
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
--- a/Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdf
+++ b/Master/texmf-dist/doc/luatex/hyph-utf8/luatex-hyphen.pdf
Binary files 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, <mathias at mnn.ch>
-
-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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:lang="urn:org:tug:texhyphen:languagedata">
-
- <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
- <xsl:variable name="language-data" select="document('codemapping.xml')/lang:code-mappings"/>
-
- <xsl:template match="*|@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="*|@*|node()"/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:template match="lang:language">
- <xsl:variable name="code" select="$language-data/lang:code-mapping[@code=current()/@code]"/>
- <xsl:variable name="fop-code">
- <xsl:choose>
- <xsl:when test="$code">
- <xsl:value-of select="$code/@fop-code"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@code"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:copy>
- <xsl:if test="string($fop-code)">
- <xsl:attribute name="fop-code">
- <xsl:value-of select="$fop-code"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates select="*|@*|node()"/>
- </xsl:copy>
- </xsl:template>
-
-</xsl:stylesheet>
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<String> 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<String> 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<URI> l = new ArrayList<URI>();
- 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<String> 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<String, String> 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<String,String> 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<String, String> texcodes = new HashMap<String, String>();
-
- /* (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<String,String> 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<String> 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 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:tex="urn:org:tug:texhyphen"
- xmlns:lang="urn:org:tug:texhyphen:languagedata"
- exclude-result-prefixes="tex lang">
-
- <xsl:output doctype-system="hyphenation.dtd" indent="yes"/>
-
- <xsl:param name="comment-length" select="72"/>
- <xsl:param name="tex-code"/>
- <xsl:param name="hyphen-min-before-default" select="2"/>
- <xsl:param name="hyphen-min-after-default" select="3"/>
-
- <xsl:template match="/tex:tex">
- <hyphenation-info>
- <xsl:choose>
- <xsl:when test="tex:hyphenation">
- <!-- (comment*), (patterns), (comment*, hyphenation, comment*) => (comment*), hyphen-min, (comment*, exceptions, comment*), (patterns) -->
- <xsl:variable name="set1" select="node()[following-sibling::tex:patterns]"/>
- <xsl:variable name="set2" select="tex:patterns"/>
- <xsl:variable name="set3" select="node()[preceding-sibling::tex:patterns]"/>
- <xsl:apply-templates select="$set1"/>
- <xsl:call-template name="hyphen-min"/>
- <xsl:apply-templates select="$set3"/>
- <xsl:apply-templates select="$set2"/>
- </xsl:when>
- <xsl:otherwise>
- <!-- (comment*), (patterns, comment*) => (comment*), hyphen-min, (patterns, comment*) -->
- <xsl:variable name="set1" select="node()[following-sibling::tex:patterns]"/>
- <xsl:variable name="set2" select="node()[preceding-sibling::tex:patterns or self::tex:patterns]"/>
- <xsl:apply-templates select="$set1"/>
- <xsl:call-template name="hyphen-min"/>
- <xsl:apply-templates select="$set2"/>
- </xsl:otherwise>
- </xsl:choose>
- </hyphenation-info>
- </xsl:template>
-
- <xsl:template match="tex:patterns">
- <patterns>
- <xsl:apply-templates />
- </patterns>
- </xsl:template>
-
- <xsl:template match="tex:patterns" mode="call-hyphen-min">
- <xsl:call-template name="hyphen-min"/>
- <patterns>
- <xsl:apply-templates />
- </patterns>
- </xsl:template>
-
- <xsl:template name="hyphen-min">
- <xsl:variable name="hyphen-min"
- select="document('languages.xml')/lang:languages/lang:language[@code=$tex-code]/lang:hyphen-min" />
- <xsl:if test="count($hyphen-min)">
- <hyphen-min before="{$hyphen-min/@before}" after="{$hyphen-min/@after}" />
- </xsl:if>
- </xsl:template>
-
- <xsl:template match="tex:message"/>
-
- <xsl:template match="tex:hyphenation">
- <exceptions>
- <xsl:apply-templates />
- </exceptions>
- </xsl:template>
-
- <!-- Comments in TeX contain the trailing new line. -->
- <!-- Here we keep the trailing new line if the comment is immediately -->
- <!-- preceded or followed by a text node. -->
- <!-- Otherwise we strip the new line and pad the comment -->
- <!-- to the parameter comment-length. -->
- <!-- The XSLT engine uses the same criteria to decide if the comment -->
- <!-- should start on a new line or not. -->
- <!-- This is not quite correct, because we risk adding spaces to -->
- <!-- elements with mixed content. -->
- <!-- The following test would be more appropriate: -->
- <!-- test="preceding-sibling::text() or following-sibling::text()". -->
- <xsl:template match="comment()">
- <xsl:choose>
- <xsl:when
- test="preceding-sibling::node()[1][self::text()]
- or following-sibling::node()[1][self::text()]">
- <xsl:comment>
- <xsl:value-of select="." />
- </xsl:comment>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="length" select="string-length(.)" />
- <xsl:comment>
- <xsl:value-of select="substring(.,1,$length - 1)" />
- <xsl:text> </xsl:text>
- <xsl:call-template name="make-spaces">
- <xsl:with-param name="length"
- select="$comment-length - ($length - 1)" />
- </xsl:call-template>
- </xsl:comment>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="make-spaces">
- <xsl:param name="length" select="0" />
- <xsl:choose>
- <xsl:when test="$length >= 10">
- <xsl:text> </xsl:text>
- <xsl:call-template name="make-spaces">
- <xsl:with-param name="length" select="$length - 10" />
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$length >= 5">
- <xsl:text> </xsl:text>
- <xsl:call-template name="make-spaces">
- <xsl:with-param name="length" select="$length - 5" />
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$length >= 1">
- <xsl:text> </xsl:text>
- <xsl:call-template name="make-spaces">
- <xsl:with-param name="length" select="$length - 1" />
- </xsl:call-template>
- </xsl:when>
- </xsl:choose>
- <xsl:text></xsl:text>
- </xsl:template>
-
-</xsl:stylesheet> \ 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<String> attributeKeys;
- static {
- attributeKeys = new Vector<String>();
- 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<Element> 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<Element> elements;
- Language() {
- atts = new AttributesImpl();
- elements = new Vector<Element>();
- }
- }
-
-}
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<String> stack = new Stack<String>();
-
- 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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<code-mappings xmlns="urn:org:tug:texhyphen:languagedata">
- <code-mapping code="grc-x-ibycus" fop-code="grc_X_ibycus"/>
- <code-mapping code="zh-latn" fop-code="zh_Latn"/>
- <code-mapping code="de-1901" fop-code="de_1901"/>
- <code-mapping code="de-1996" fop-code="de"/>
- <code-mapping code="de-ch-1901" fop-code="de_CH_1901"/>
- <code-mapping code="el-monoton" fop-code="el"/>
- <code-mapping code="el-polyton" fop-code="el_Polyton"/>
- <code-mapping code="mn-cyrl" fop-code="mn"/>
- <code-mapping code="mn-cyrl-x-2a" fop-code="mn_Cyrl_x_2a"/>
- <code-mapping code="sh-cyrl" fop-code="sh_Cyrl"/>
- <code-mapping code="sh-latn" fop-code="sh_Latn"/>
- <code-mapping code="sr-cyrl" fop-code="sr"/>
- <code-mapping code="sr-latn" fop-code="sr_Latn"/>
- <code-mapping code="en-gb" fop-code="en_GB"/>
- <code-mapping code="en-us" fop-code="en"/>
- <code-mapping code="eo" fop-code=""/>
- <code-mapping code="nn" fop-code=""/>
- <code-mapping code="nb" fop-code=""/>
- <!-- hu patterns cause a stack overflow when compiled with FOP -->
- <code-mapping code="hu" fop-code=""/>
-</code-mappings>
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 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<languages xmlns="urn:org:tug:texhyphen:languagedata">
- <!-- –––––––––––––––––––––––––––––––––––––– -->
- <!-- languages with no hyphenation patterns -->
- <!-- –––––––––––––––––––––––––––––––––––––– -->
- <!-- arabic zerohyph.tex -->
- <language fop-code="ar" code="ar" name="arabic" use-new-loader="false" use-old-patterns="false" encoding="" exceptions="false">
- <filename-old-patterns>zerohyph.tex</filename-old-patterns>
- <!-- "hyphenmin" => [], # not needed -->
- <message/>
- </language>
- <!-- farsi zerohyph.tex -->
- <!-- =persian -->
- <language fop-code="fa" code="fa" name="farsi" use-new-loader="false" use-old-patterns="false" encoding="" exceptions="false">
- <synonym>persian</synonym>
- <filename-old-patterns>zerohyph.tex</filename-old-patterns>
- <!-- "hyphenmin" => [], # not needed -->
- <message/>
- </language>
- <!-- ––––––––––––––––––––––––––––––- -->
- <!-- special patterns, not converted -->
- <!-- ––––––––––––––––––––––––––––––- -->
- <!-- ibycus ibyhyph.tex -->
- <language fop-code="grc_X_ibycus" code="grc-x-ibycus" name="ibycus" use-new-loader="false" use-old-patterns="true" encoding="" exceptions="false">
- <filename-old-patterns>ibyhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Ancient Greek Hyphenation Patterns for Ibycus encoding (v3.0)</message>
- <author>peter_heslin</author>
- </language>
- <!-- –––––––––––––––––––––––––––– -->
- <!-- languages using old patterns -->
- <!-- –––––––––––––––––––––––––––– -->
- <!-- greek xu-grphyph4.tex -->
- <!-- =polygreek -->
- <language fop-code="el_Polyton" code="el-polyton" name="greek" use-new-loader="true" use-old-patterns="true" encoding="" exceptions="true">
- <synonym>polygreek</synonym>
- <use-old-patterns-comment>Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible.</use-old-patterns-comment>
- <filename-old-patterns>grphyph5.tex</filename-old-patterns>
- <!-- left/right hyphen min for Greek can be as low as one (1), -->
- <!-- but for aesthetic reasons keep them at 2/2. -->
- <!-- Dimitrios Filippou -->
- <hyphen-min before="1" after="1"/>
- <!-- polyglosia -->
- <!-- "message" => "Polytonic Greek Hyphenation Patterns", -->
- <message>Hyphenation patterns for multi-accent (polytonic) Modern Greek</message>
- <author>dimitrios_filippou</author>
- </language>
- <!-- monogreek xu-grmhyph4.tex -->
- <language fop-code="el" code="el-monoton" name="monogreek" use-new-loader="true" use-old-patterns="true" encoding="" exceptions="true">
- <use-old-patterns-comment>Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible.</use-old-patterns-comment>
- <filename-old-patterns>grmhyph5.tex</filename-old-patterns>
- <hyphen-min before="1" after="1"/>
- <!-- polyglosia -->
- <!-- "message" => "Monotonic Greek Hyphenation Patterns", -->
- <message>Hyphenation patterns for uni-accent (monotonic) Modern Greek</message>
- <author>dimitrios_filippou</author>
- </language>
- <!-- ancientgreek xu-grahyph4.tex -->
- <language fop-code="grc" code="grc" name="ancientgreek" use-new-loader="true" use-old-patterns="true" encoding="" exceptions="false">
- <use-old-patterns-comment>Old patterns work in a different way, one-to-one conversion from UTF-8 is not possible.</use-old-patterns-comment>
- <filename-old-patterns>grahyph5.tex</filename-old-patterns>
- <hyphen-min before="1" after="1"/>
- <!-- polyglosia -->
- <message>Hyphenation patterns for Ancient Greek</message>
- <author>dimitrios_filippou</author>
- </language>
- <!-- coptic xu-copthyph.tex -->
- <language fop-code="cop" code="cop" name="coptic" use-new-loader="true" use-old-patterns="true" encoding="" exceptions="false">
- <use-old-patterns-comment>TODO: automatic conversion could be done, but was too complicated; leave for later.</use-old-patterns-comment>
- <filename-old-patterns>copthyph.tex</filename-old-patterns>
- <hyphen-min before="1" after="1"/>
- <!-- polyglosia TODO: no documentation found -->
- <message>Coptic Hyphenation Patterns</message>
- <author>claudio_beccari</author>
- </language>
- <!-- german xu-dehypht.tex -->
- <language fop-code="de_1901" code="de-1901" name="german" use-new-loader="true" use-old-patterns="true" encoding="ec" exceptions="false">
- <use-old-patterns-comment>Kept for the sake of backward compatibility, but newer and better patterns by WL are available.</use-old-patterns-comment>
- <filename-old-patterns>dehypht.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>German Hyphenation Patterns (Traditional Orthography)</message>
- </language>
- <!-- ngerman xu-dehyphn.tex -->
- <language fop-code="de" code="de-1996" name="ngerman" use-new-loader="true" use-old-patterns="true" encoding="ec" exceptions="false">
- <use-old-patterns-comment>Kept for the sake of backward compatibility, but newer and better patterns by WL are available.</use-old-patterns-comment>
- <filename-old-patterns>dehyphn.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>German Hyphenation Patterns (Reformed Orthography)</message>
- </language>
- <!-- swissgerman -->
- <language fop-code="de_CH_1901" code="de-ch-1901" name="swissgerman" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <!-- TODO: how is it going to be called -->
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Swiss-German Hyphenation Patterns (Traditional Orthography)</message>
- </language>
- <!-- russian xu-ruhyphen.tex -->
- <language fop-code="ru" code="ru" name="russian" use-new-loader="true" use-old-patterns="true" encoding="t2a" exceptions="false">
- <use-old-patterns-comment>The old system allows choosing patterns and encodings manually. That mechanism needs to be implemented first in this package, so we still fall back on old system.</use-old-patterns-comment>
- <filename-old-patterns>ruhyphen.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Russian Hyphenation Patterns</message>
- </language>
- <!-- ukrainian xu-ukrhyph.tex -->
- <language fop-code="uk" code="uk" name="ukrainian" use-new-loader="true" use-old-patterns="true" encoding="t2a" exceptions="false">
- <use-old-patterns-comment>The old system allows choosing patterns and encodings manually. That mechanism needs to be implemented first in this package, so we still fall back on old system.</use-old-patterns-comment>
- <filename-old-patterns>ukrhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Ukrainian Hyphenation Patterns</message>
- </language>
- <!-- –––––––––––––––––––––––––––– -->
- <!-- languages using new patterns -->
- <!-- –––––––––––––––––––––––––––– -->
- <!-- catalan cahyph.tex -->
- <language fop-code="ca" code="ca" name="catalan" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>cahyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Catalan Hyphenation Patterns</message>
- </language>
- <!-- czech xu-czhyph.tex -->
- <language fop-code="cs" code="cs" name="czech" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>czhyph.tex</filename-old-patterns>
- <filename-old-patterns-other>czhyphen.tex</filename-old-patterns-other>
- <filename-old-patterns-other>czhyphen.ex</filename-old-patterns-other>
- <!-- Both Czech and Slovak: \lefthyphenmin=2, \righthyphenmin=3 -->
- <!-- Typographical rules allow \righthyphenmin=2 when typesetting in a -->
- <!-- narrow column (newspapers etc.). -->
- <!-- (used to be 2,2) -->
- <hyphen-min before="2" after="3"/>
- <message>Czech Hyphenation Patterns (Pavel Sevecek, v3, 1995)</message>
- </language>
- <!-- slovak xu-skhyph.tex -->
- <language fop-code="sk" code="sk" name="slovak" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>skhyph.tex</filename-old-patterns>
- <filename-old-patterns-other>skhyphen.tex</filename-old-patterns-other>
- <filename-old-patterns-other>skhyphen.ex</filename-old-patterns-other>
- <!-- see czech -->
- <hyphen-min before="2" after="3"/>
- <message>Slovak Hyphenation Patterns (Jana Chlebikova, 1992)</message>
- </language>
- <!-- welsh cyhyph.tex -->
- <language fop-code="cy" code="cy" name="welsh" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>cyhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="3"/>
- <message>Welsh Hyphenation Patterns</message>
- </language>
- <!-- danish dkhyph.tex -->
- <language fop-code="da" code="da" name="danish" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>dkhyph.tex</filename-old-patterns>
- <filename-old-patterns-other>dkcommon.tex</filename-old-patterns-other>
- <filename-old-patterns-other>dkspecial.tex</filename-old-patterns-other>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Danish Hyphenation Patterns</message>
- </language>
- <!-- esperanto xu-eohyph.tex -->
- <!-- TODO -->
- <language code="eo" name="esperanto" use-new-loader="true" use-old-patterns="false" encoding="il3" exceptions="false">
- <filename-old-patterns>eohyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- TODO -->
- <message>Esperanto Hyphenation Patterns</message>
- </language>
- <!-- spanish xu-eshyph.tex -->
- <!-- =espanol -->
- <language fop-code="es" code="es" name="spanish" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <synonym>espanol</synonym>
- <filename-old-patterns>eshyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Spanish Hyphenation Patterns</message>
- </language>
- <!-- basque xu-bahyph.tex -->
- <language fop-code="eu" code="eu" name="basque" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>bahyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Basque Hyphenation Patterns</message>
- </language>
- <!-- french xu-frhyph.tex -->
- <!-- =patois -->
- <!-- =francais -->
- <language fop-code="fr" code="fr" name="french" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <synonym>patois</synonym>
- <synonym>francais</synonym>
- <filename-old-patterns>frhyph.tex</filename-old-patterns>
- <!-- "hyphenmin" => [], -->
- <message>French hyphenation patterns (V2.12, 2002/12/11)</message>
- </language>
- <!-- galician xu-glhyph.tex -->
- <language fop-code="gl" code="gl" name="galician" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>glhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Galician Hyphenation Patterns</message>
- </language>
- <!-- estonian xu-ethyph.tex -->
- <language fop-code="et" code="et" name="estonian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>ethyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="3"/>
- <!-- babel -->
- <message>Estonian Hyphenation Patterns</message>
- </language>
- <!-- finnish fihyph.tex -->
- <language fop-code="fi" code="fi" name="finnish" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>fihyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Finnish Hyphenation Patterns</message>
- </language>
- <!-- croatian xu-hrhyph.tex -->
- <language fop-code="hr" code="hr" name="croatian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>hrhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Croatian Hyphenation Patterns</message>
- </language>
- <!-- hungarian xu-huhyphn.tex -->
- <language code="hu" name="hungarian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>huhyphn.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- polyglosia -->
- <message>Hungarian Hyphenation Patterns (v20031107)</message>
- </language>
- <!-- interlingua iahyphen.tex -->
- <language fop-code="ia" code="ia" name="interlingua" use-new-loader="true" use-old-patterns="false" encoding="ascii" exceptions="true">
- <filename-old-patterns>iahyphen.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Hyphenation Patterns for Interlingua</message>
- </language>
- <!-- indonesian inhyph.tex -->
- <language fop-code="id" code="id" name="indonesian" use-new-loader="true" use-old-patterns="false" encoding="ascii" exceptions="true">
- <filename-old-patterns>inhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Indonesian Hyphenation Patterns</message>
- </language>
- <!-- icelandic icehyph.tex -->
- <language fop-code="is" code="is" name="icelandic" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>icehyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Icelandic Hyphenation Patterns</message>
- </language>
- <!-- irish gahyph.tex -->
- <language fop-code="ga" code="ga" name="irish" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>gahyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="3"/>
- <!-- babel -->
- <message>Irish Hyphenation Patterns</message>
- </language>
- <!-- italian ithyph.tex -->
- <language fop-code="it" code="it" name="italian" use-new-loader="true" use-old-patterns="false" encoding="ascii" exceptions="false">
- <filename-old-patterns>ithyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Italian Hyphenation Patterns</message>
- </language>
- <!-- kurmanji -->
- <language fop-code="kmr" code="kmr" name="kurmanji" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>kmrhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Kurmanji Hyphenation Patterns (v. 1.0 2009/06/29 JKn and MSh)</message>
- </language>
- <!-- latin xu-lahyph.tex -->
- <language fop-code="la" code="la" name="latin" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <use-old-patterns-comment>Old patterns support both EC &amp; OT1 encodings at the same time.</use-old-patterns-comment>
- <filename-old-patterns>lahyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Latin Hyphenation Patterns</message>
- </language>
- <!-- lithuanian -->
- <language fop-code="lt" code="lt" name="lithuanian" use-new-loader="true" use-old-patterns="false" encoding="l7x" exceptions="false">
- <hyphen-min before="2" after="2"/>
- <message>Lithuanian Hyphenation Patterns</message>
- </language>
- <!-- latvian -->
- <language fop-code="lv" code="lv" name="latvian" use-new-loader="true" use-old-patterns="false" encoding="l7x" exceptions="false">
- <hyphen-min before="2" after="2"/>
- <message>Latvian Hyphenation Patterns</message>
- </language>
- <!-- dutch nehyph96.tex -->
- <language fop-code="nl" code="nl" name="dutch" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>nehyph96.tex</filename-old-patterns>
- <!-- quoting Hans Hagen: -->
- <!-- patterns generated with 2,2 (so don't go less) but use prefered values 2,3 (educational publishers want 4,5 -) -->
- <hyphen-min before="2" after="2"/>
- <message>Dutch Hyphenation Patterns</message>
- </language>
- <!-- norsk xu-nohyphbx.tex -->
- <!-- =norwegian -->
- <!-- nynorsk nnhyph.tex -->
- <!-- bokmal nbhyph.tex -->
- <!-- polish xu-plhyph.tex -->
- <language fop-code="pl" code="pl" name="polish" use-new-loader="true" use-old-patterns="false" encoding="qx" exceptions="true">
- <filename-old-patterns>plhyph.tex</filename-old-patterns>
- <!--{}"hyphenmin" => [1,1], -->
- <hyphen-min before="2" after="2"/>
- <message>Polish Hyphenation Patterns</message>
- </language>
- <!-- portuguese pthyph.tex -->
- <!-- =portuges -->
- <language fop-code="pt" code="pt" name="portuguese" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <synonym>portuges</synonym>
- <filename-old-patterns>pthyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="3"/>
- <!-- babel -->
- <message>Portuguese Hyphenation Patterns</message>
- </language>
- <!-- pinyin xu-pyhyph.tex -->
- <language fop-code="zh_Latn" code="zh-latn" name="pinyin" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>pyhyph.tex</filename-old-patterns>
- <hyphen-min before="1" after="1"/>
- <message>Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0)</message>
- </language>
- <!-- romanian xu-rohyphen.tex -->
- <language fop-code="ro" code="ro" name="romanian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>rohyphen.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Romanian Hyphenation Patterns</message>
- <!-- : `rohyphen' 1.1 <29.10.1996> -->
- </language>
- <!-- slovenian xu-sihyph.tex -->
- <!-- =slovene -->
- <language fop-code="sl" code="sl" name="slovenian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <synonym>slovene</synonym>
- <filename-old-patterns>sihyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Slovenian Hyphenation Patterns</message>
- </language>
- <!-- uppersorbian xu-sorhyph.tex -->
- <language fop-code="hsb" code="hsb" name="uppersorbian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>sorhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Upper Sorbian Hyphenation Patterns (E. Werner)</message>
- <!-- \message{Hyphenation patterns for Upper Sorbian, E. Werner} -->
- <!-- \message{Completely new revision 1997, March 22} -->
- </language>
- <!-- swedish svhyph.tex -->
- <language fop-code="sv" code="sv" name="swedish" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>svhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- patters say it could be 1,2; babel says 2,2 - double check -->
- <message>Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03)</message>
- </language>
- <!-- turkish xu-tkhyph.tex -->
- <language fop-code="tr" code="tr" name="turkish" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="false">
- <filename-old-patterns>tkhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- polyglosia -->
- <message>Turkish Hyphenation Patterns</message>
- </language>
- <!-- ukenglish ukhyphen.tex -->
- <!-- TODO - should we rename it or not? -->
- <language fop-code="en_GB" code="en-gb" name="ukenglish" use-new-loader="true" use-old-patterns="false" encoding="ascii" exceptions="true">
- <synonym>british</synonym>
- <synonym>UKenglish</synonym>
- <filename-old-patterns>ukhyphen.tex</filename-old-patterns>
- <hyphen-min before="2" after="3"/>
- <!-- confirmed, same as what Knuth says -->
- <message>Hyphenation Patterns for British English</message>
- </language>
- <!-- serbian xu-srhyphc.tex -->
- <language fop-code="sr_Latn" code="sr-latn" name="serbian" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <filename-old-patterns>shhyphl.tex</filename-old-patterns>
- <!-- It is allowed to leave one character at the end of the row. -->
- <!-- However, if you think that it is graphicaly not very -->
- <!-- pleasent these patterns will work well with \lefthyphenmin=2. -->
- <!-- \lefthyphenmin=1 \righthyphenmin=2 -->
- <hyphen-min before="2" after="2"/>
- <message>Serbian hyphenation patterns in Latin script</message>
- </language>
- <!-- serbianc -->
- <language fop-code="sr" code="sr-cyrl" name="serbianc" use-new-loader="true" use-old-patterns="false" encoding="t2a" exceptions="true">
- <filename-old-patterns>srhyphc.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Serbian hyphenation patterns in Cyrillic script</message>
- </language>
- <!-- mongolian xu-mnhyph.tex -->
- <language fop-code="mn" code="mn-cyrl" name="mongolian" use-new-loader="true" use-old-patterns="false" encoding="lmc" exceptions="false">
- <filename-old-patterns>mnhyph.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>Mongolian hyphenation patterns</message>
- </language>
- <!-- mongolian2a -->
- <language fop-code="mn_Cyrl_x_2a" code="mn-cyrl-x-2a" name="mongolian2a" use-new-loader="true" use-old-patterns="false" encoding="t2a" exceptions="false">
- <filename-old-patterns>mnhyphn.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <message>(New) Mongolian Hyphenation Patterns</message>
- </language>
- <!-- bulgarian xu-bghyphen.tex -->
- <language fop-code="bg" code="bg" name="bulgarian" use-new-loader="true" use-old-patterns="false" encoding="t2a" exceptions="false">
- <filename-old-patterns>bghyphen.tex</filename-old-patterns>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Bulgarian Hyphenation Patterns</message>
- </language>
- <!-- sanskrit -->
- <language fop-code="sa" code="sa" name="sanskrit" use-new-loader="true" use-old-patterns="false" encoding="" exceptions="false">
- <hyphen-min before="1" after="5"/>
- <!-- polyglosia -->
- <!-- no patterns for 8-bit TeX -->
- <message>Sanskrit Hyphenation Patterns (v0.2, 2008/1/3)</message>
- </language>
- <!-- norsk xu-nohyphbx.tex -->
- <language code="nb" name="bokmal" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <synonym>norwegian</synonym>
- <synonym>norsk</synonym>
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Norwegian Bokmal Hyphenation Patterns</message>
- </language>
- <!-- nynorsk nnhyph.tex -->
- <language code="nn" name="nynorsk" use-new-loader="true" use-old-patterns="false" encoding="ec" exceptions="true">
- <hyphen-min before="2" after="2"/>
- <!-- babel -->
- <message>Norwegian Nynorsk Hyphenation Patterns</message>
- </language>
- <!-- The following languages are not (yet) in languages.rb. -->
- <!-- I added them after this file was generated from languages.rb. -->
- <language fop-code="en" code="en-us" name="US english">
- <hyphen-min before="2" after="3"/>
- <filename-old-patterns>ushyphmax.tex</filename-old-patterns>
- </language>
- <language fop-code="sh_Latn" code="sh-latn" name="serbocroatian">
- <hyphen-min before="1" after="2"/>
- </language>
- <language fop-code="sh_Cyrl" code="sh-cyrl" name="serbocroatianc">
- <hyphen-min before="1" after="2"/>
- </language>
- <language fop-code="no" code="no" name="norwegian">
- <filename-old-patterns>nohyphbx.tex</filename-old-patterns>
- </language>
-</languages>
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:<reason>'}] allows to disable specific
% languages: when the user tries to load this language, an error
% will be issued, with the \verb+<reason>+.
@@ -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