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
121
122
123
124
125
126
127
128
129
130
|
module TeX
module Hyphen
module TeXLive
class Package
attr_reader :name
@@metadata = YAML::load File.read File.expand_path '../packages.yml', __dir__
def initialize(name)
@name = name
@languages = []
end
def add_language(language)
@languages << language
@languages.sort!
end
def languages
@languages
end
def self.packages
# a hash with the names of TeX Live packages, either individual language names,
# or an array of languages as the value
@@packages ||= Language.all.inject(Hash.new) do |packages, language|
if name = language.package || language.babelname # Package name, otherwise single language
packages[name] ||= Package.new(name) # Create new package if necessary
packages[name].add_language language
end
packages
end
end
def self.all
packages.values
end
def description_s
override = @@metadata.dig(@name, 'shortdesc_full')
return override if override
leader = @@metadata.dig(@name, 'shortdesc') || @name.titlecase
sprintf '%s hyphenation patterns', leader
end
def description
description = @@metadata.dig(@name, 'description')
if description
description
elsif @languages.count == 1
@languages.first.description
else
''
end
end
def has_dependency?
@@metadata.dig(name, 'dependency')
end
def list_dependencies
dependencies = [
"depend hyphen-base",
"depend hyph-utf8",
]
# external dependencies
if dependency = has_dependency?
dependencies << sprintf("depend %s", dependency)
end
dependencies
end
def list_support_files(type) # type is ‘doc’ or ‘source’
# Cache directory contents
(@dirlist ||= { })[type] ||= Dir.glob(sprintf(PATH::SUPPORT, type)).select do |file|
File.directory?(file)
end.map do |dir|
dir.gsub /^.*\//, ''
end
files = (languages.map(&:bcp47) & @dirlist[type]).map do |bcp47|
sprintf("%s/generic/hyph-utf8/languages/%s", type, bcp47)
end
if special = @@metadata.dig(name, type)
files << special
end
files
end
def list_run_files
files = []
files << "tex/generic/hyph-utf8/patterns/tex/hyph-no.tex" if name == "norwegian"
files = languages.inject(files) do |files, language|
files + language.list_run_files
end
unless has_dependency?
languages.each do |language|
if language.use_old_patterns_comment and language.legacy_patterns != "zerohyph.tex" and language.bcp47 != 'cop'
if language.bcp47 == 'la-x-classic'
files << sprintf("tex/generic/hyph-utf8/patterns/tex-8bit/%s", language.legacy_patterns)
else
files << sprintf("tex/generic/hyphen/%s", language.legacy_patterns)
end
end
end
end
files
end
def <=>(other)
name <=> other.name
end
# TODO Spec out
def self.find(name)
packages[name]
end
end
end
end
end
|