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
|
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'
files << sprintf("tex/generic/hyphen/%s", language.legacy_patterns)
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
|