summaryrefslogtreecommitdiff
path: root/language/hyph-utf8/source/languages/tr/generate_patterns_tr.rb
blob: ec7610d8d37b06de3cc4584ccde1081089093515 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env ruby
#
# This script generates hyphenation patterns for modern Turkish
#
# "Algorithm" originally developed by:
#
# /****************************************************************************
#  *                                                                          *
#  *          turk_hyf.c -- a program to produce PatGen-like hyphenation      *
#  *                        patterns for the Turkish Language.                *
#  *                                                                          *
#  *          Copyright 1987, by Pierre A. MacKay.                            *
#  *                                                                          *
#  *          Humanities and Arts Computing Center                            *
#  *          Mail-Stop DW-10                                                 *
#  *          University of Washington                                        *
#  *          Seattle, Washington 98105                                       *
#  *                                                                          *
#  ****************************************************************************/
#
# Script written in June 2008 by Mojca Miklavec
# as part of "Unicode Hyphenation Patterns" project
#
# Thanks to previous work, modifications and suggestions by:
# - H. Turgut Uyar <uyar at itu.edu.tr>
# - S. Ekin Kocabas <kocabas at stanford.edu>

# TODO: add a function to generate patterns for Ottoman Turkish

# open file for writing the patterns
$tr = File.new("hyph-tr.tex", "w")
# in TDS
$tr = File.new("../../../../../tex/generic/hyph-utf8/patterns/tex/hyph-tr.tex", "w")

# write comments into the file
def add_comment(str)
	$tr.puts "% " + str.gsub(/\n/, "\n% ").gsub(/% \n/, "%\n")
end

# The patterns (and algorithm for generating them) were first meant
# for supporting Ottoman Turkish, but adapted for modern Turkish later.
# Turkish alphabet includes some special vowels (ıiöü) and consonants (çğş),
# but the patterns also support another three vowels (âîû):
# - a with circumflex is a necessity, it must be supported
# - ı and u with circumflex could be there, not as pressing as "a" but still
# Some letters such as z, k, s or t represent multiple letters in the old
# alphabet, so some transcriptions from Ottoman to Turkish use some accents on
# these for phonetic reasons, but there is no need to support them.
# 
# Comment posted by: H. Turgut Uyar <uyar at itu.edu.tr>

# define a class of vowels and consonants
vowels = %w{a â e ı i î o ö u ü û}
consonants = %w{b c ç d f g ğ h j k l m n p r s ş t v y z}

# start the file
add_comment(
	"hyph-tr.tex\n\n" +
	"Turkish hyphenation patterns\n\n" +
	"This file is auto-generated from source/generic/hyph-utf8/languages/tr/generate_patterns_tr.rb that is part of hyph-utf8.\n" +
	"Please don't modify this file; modify the generating script instead.\n\n" +
	"Copyright (C) 1987 Pierre A. MacKay\n" +
	"              2008, 2011 TUG\n\n" +
	"This program can redistributed and/or modified under the terms\n" +
	"of the LaTeX Project Public License Distributed from CTAN\n" +
	"archives in directory macros/latex/base/lppl.txt; either\n" +
	"version 1 of the License, or (at your option) any later version.\n\n" +
	"Credits:\n" +
	"- algorithm developed by P. A. MacKay for the Ottoman Texts Project in 1987\n" +
	"- rules adapted for modern Turkish by H. Turgut Uyar <uyar at itu.edu.tr>\n" +
	"- initiative to improve Turkish patterns by S. Ekin Kocabas <kocabas at stanford.edu>\n" +
	"- script written by Mojca Miklavec <mojca.miklavec.lists at gmail.com> in June 2008\n\n" +
	"See also:\n" +
	"- http://mirror.ctan.org/language/turkish/hyphen/turk_hyf.c\n" +
	"- http://www.tug.org/TUGboat/Articles/tb09-1/tb20mackay.pdf\n\n" +
	"Differences with Ottoman patterns:\n" +
	"- adapted for the use on modern TeX engines, using UTF-8 charactes\n" +
	"- only letters for Modern Turkish + âîû (the first one often needed, the other two don't hurt)\n" +
	"- (if needed, support for Ottoman Turkish might be provided separately under language code 'ota')\n\n" +
	"Changes:\n" +
	"- 2008-06-25/27/28 - create this file by adapting Ottoman rules for modern Turkish\n" +
	"- 2011-08-10 - add LPPL licence with permission of Pierre A. MacKay\n"
)
$tr.puts '\patterns{'

# rules for hyphenation
add_comment("prohibit hyphen before vowels, allow after")
vowels.each do |vowel|
	$tr.puts "2#{vowel}1"
end

add_comment("allow hyphen either side of consonants")
consonants.each do |cons|
	$tr.puts "1#{cons}1"
end

add_comment("prevent e-cek at end of word")
$tr.puts "2e2cek."

add_comment("prohibit hyphen before pair of consonants\nmany pairs generated here are impossible anyway")
consonants.each do |c1|
	consonants.each do |c2|
		$tr.puts "2#{c1}#{c2}"
	end
end

add_comment("allow hyphen between vowels, but not after second vowel of pair\nseveral phonetically impossible pairs here")
vowels.each do |v1|
	vowels.each do |v2|
		$tr.puts "#{v1}3#{v2}2"
	end
end

add_comment("a couple of consonant-clusters")
$tr.puts 'tu4r4k'
$tr.puts 'm1t4rak'

# end the file
$tr.puts '}'
$tr.close