Lang-S-Konversion: Ausnahmeliste.
[wortliste.git] / Makefile
blob15e664034870b9ef364d412349fc716ce973febe
1 # -*- coding: utf-8 -*-
3 # This Makefile creates German hyphenation patterns in subdirectories
4 # $(TRAD) and $(REFO) for traditional and new orthography, respectively.
5 # Hyphenation patterns for traditional Swiss German are generated in
6 # directory $(SWISS).
8 # The input data is in $(SRCDIR); the possible targets are `pattern-trad',
9 # `pattern-refo', and `pattern-swiss'. If no target (or target `all') is
10 # given, all patterns for all three targets are built.
12 # SRCDIR (and the other variables) can be easily modified as parameters
13 # while calling `make', e.g.
15 # make pattern-trad SRCDIR=~/git/wortliste
17 # If you add one of the (phony) targets `major', `fugen', or `suffix',
18 # patterns that only use major hyphenation points (`Haupttrennstellen')
19 # are created. Example:
21 # make major pattern-refo
23 # The used directories names are the same as above but with `-major' (etc.)
24 # appended to the names.
26 # To control the used weights in the major hyphenation patterns, add
27 # variable `W=N', where `N' gives the quality: value 1 specifies the best
28 # hyphenation points only, value 2 both the best and second-best points,
29 # etc. The default is value 0, using all major hyphenation points.
33 # Dieses Makefile erzeugt deutsche Trennmuster in den
34 # Unterverzeichnissen $(TRAD) und $(REFO) für die traditionelle
35 # bzw. reformierte Rechtschreibung. Trennmuster für tradionelles
36 # deutschschweizerisches Deutsch werden Verzeichnis $(SWISS) erzeugt.
38 # Die Eingabedaten werden im Verzeichnis $(SRCDIR) erwartet; die möglichen
39 # Make-Ziele sind `pattern-trad', `pattern-refo' und `pattern-swiss'. Wenn
40 # kein Ziel angegeben ist (oder man das Ziel `all' verwendet), werden alle
41 # drei Trennmuster erzeugt.
43 # SRCDIR (und die anderen Variablen) kann man leicht beim Aufruf von
44 # `make' als Parameter modifizieren, z.B.
46 # make pattern-trad SRCDIR=~/git/wortliste
48 # Wird eines der zusätzlichen (künstlichen) Ziele `major', `fugen' oder
49 # `suffix' angegeben, werden Haupttrennstellmuster erzeugt.
51 # Beispiel:
53 # make major pattern-refo
55 # Die verwendeten Verzeichnisnamen sind die gleichen wie oben, allerdings
56 # mit einem angehängten `-major', `-fugen' bzw. `-suffix'.
58 # Diese Spezialmuster spiegeln die Auszeichnung in der Liste direkt wider.
59 # Sie haben nicht das Ziel, "gute" Trennungen in Texten zu erzeugen sondern
60 # sind zum Testen der Konsistenz der Auszeichnung sowie zum "kategorisierten"
61 # Markieren der Trennstellen neuer Wörter gedacht.
63 # Bei `major' kann die Menge der verwendeten Haupttrennstellen mittels der
64 # Variable `W=N' (Wichtungs-Schwellwert)
65 # kontrolliert werden, wo `N' die Qualität angibt: Wert 1 selektiert
66 # nur die besten Haupttrennstellen, Wert 2 die besten und zweitbesten
67 # Haupttrennstellen usw. Der Standardwert für `W' ist 0; er gibt an, dass
68 # alle Haupttrennstellen verwendet werden sollen.
70 # Die Ziele `de-1901-Latf' und `de-1996-Latf' erzeugen (experimentelle)
71 # Wortlisten und (Quasi-) Trennmuster für die Wandlung von Wörtern in
72 # traditioneller oder reformierter Standartorthographie in die Variante mit
73 # Unterscheidung von langem und runden S (Binnen-S vs. Schluß-S) wie sie im
74 # Satz mit gebrochenen Schriften benötigt wird.
76 SRCDIR = .
77 W = 0
79 DATADIR = $(SRCDIR)/daten
80 SCRIPTDIR = $(SRCDIR)/skripte
81 PYSCRIPTDIR = $(SRCDIR)/skripte/python
82 WORDLIST = wortliste
83 # Variables FROM and TO are used by goal `pidiff'. FROM must be a
84 # commit set from shell, like `make pidiff FROM=abcdef', TO is optional
85 # and evaluates to `HEAD' if not given.
87 ifneq ($(findstring major,$(MAKECMDGOALS)),)
88 MAJOR = -major
89 # A single `-' gets removed; all other combinations of `-', `<', `>',
90 # and `=' are converted to a hyphen.
91 SEDMAJOR = $(SED) -e '/[=<>-]/!n' \
92 -e 's/---*/=/g' \
93 -e 's/-//g' \
94 -e 's/[=<>][=<>]*/-/g' \
95 -e '/-/!d'
96 PERLMAJOR = -g $(W)
98 ifeq ($(words $(MAKECMDGOALS)),1)
99 major: all
100 else
101 # This is to suppress the `nothing to be done' warning.
102 major:
104 endif
105 else ifneq ($(findstring fugen,$(MAKECMDGOALS)),)
106 MAJOR = -fugen
107 # All combinations of `-', `<', `>', `<=', `=>' get removed,
108 # runs of `=' are converted to a hyphen.
109 SEDMAJOR = $(SED) -e '/[=<>-]/!n' \
110 -e 's/--*//g' \
111 -e 's/<=*//g' \
112 -e 's/=*>//g' \
113 -e 's/[<>][<>]*//g' \
114 -e 's/[=][=]*/-/g'
115 PERLMAJOR = -g $(W)
117 ifeq ($(words $(MAKECMDGOALS)),1)
118 fugen: all
119 else
120 # This is to suppress the `nothing to be done' warning.
121 fugen:
123 endif
124 else ifneq ($(findstring suffix,$(MAKECMDGOALS)),)
125 MAJOR = -suffix
126 # All combinations of `-', `<', `=' get removed,
127 # runs of `>' are converted to a hyphen.
128 SEDMAJOR = $(SED) -e '/[=<>-]/!n' \
129 -e 's/-//g' \
130 -e 's/[<=][<=]*//g' \
131 -e 's/[>][>]*/-/g'
132 PERLMAJOR = -g $(W)
134 ifeq ($(words $(MAKECMDGOALS)),1)
135 suffix: all
136 else
137 # This is to suppress the `nothing to be done' warning.
138 suffix:
140 endif
141 else
142 MAJOR =
143 SEDMAJOR = cat
144 PERLMAJOR =
145 endif
147 TRAD = dehypht-x$(MAJOR)
148 REFO = dehyphn-x$(MAJOR)
149 SWISS = dehyphts-x$(MAJOR)
150 LATF = de-Latf
152 LC_ENVVARS = LC_COLLATE=de_DE.ISO8859-15 \
153 LC_CTYPE=de_DE.ISO8859-15
155 CAT = cat
156 CHDIR = cd
157 COPY = cp
158 DATE = $(shell date '+%Y-%m-%d')
159 ECHO = echo
160 GIT = git
161 ICONV = iconv -f iso-8859-15 -t utf-8
162 MKDIR = mkdir -p
163 PERL = perl
164 PWD = pwd
165 PYTHON = python
166 SED = sed
167 SH = bash
168 SORT = $(LC_ENVVARS) sort -d \
169 | $(LC_ENVVARS) uniq -i
171 GIT_VERSION := `$(CHDIR) $(SRCDIR); \
172 $(GIT) log --format=%H -1 HEAD --`
173 TRADFILES = $(TRAD)/$(TRAD)-$(DATE).pat $(TRAD)/$(TRAD)-$(DATE).tex
174 REFOFILES = $(REFO)/$(REFO)-$(DATE).pat $(REFO)/$(REFO)-$(DATE).tex
175 SWISSFILES = $(SWISS)/$(SWISS)-$(DATE).pat $(SWISS)/$(SWISS)-$(DATE).tex
178 override SRCDIR := $(shell cd $(SRCDIR); $(PWD))
181 all: pattern-trad pattern-refo pattern-swiss
183 .PHONY: pattern-trad pattern-refo pattern-swiss major fugen suffix
184 pattern-trad: $(TRADFILES)
185 pattern-refo: $(REFOFILES)
186 pattern-swiss: $(SWISSFILES)
188 # intermediate targets
190 # auxiliary targets
192 .PHONY: words-trad words-refo
193 words-trad: $(TRAD)/words.hyphenated.trad
194 words-refo: $(REFO)/words.hyphenated.refo
197 .PHONY: pre-trad pre-refo pre-swiss
198 pre-trad:
199 $(MKDIR) $(TRAD)
200 pre-refo:
201 $(MKDIR) $(REFO)
202 pre-swiss:
203 $(MKDIR) $(SWISS)
205 $(TRADFILES) $(TRAD)/words.hyphenated.trad: pre-trad
206 $(REFOFILES) $(REFO)/words.hyphenated.refo: pre-refo
207 $(SWISSFILES) $(SWISS)/words.hyphenated.swiss: pre-swiss
210 # GNU make supports creation of multiple targets by a single
211 # invocation of a recipe only for pattern rules, thus we have
212 # to use a `sentinel file' (using `echo' for the time stamp).
215 $(TRAD)/pattern.8 $(TRAD)/pattern.rules: $(TRAD)/make-full-pattern-trad
217 $(TRAD)/make-full-pattern-trad: $(TRAD)/words.hyphenated.trad
218 $(CHDIR) $(TRAD); \
219 $(SH) $(SCRIPTDIR)/make-full-pattern.sh $(<F) $(DATADIR)/german.tr
220 $(ECHO) done > $@
222 $(TRAD)/$(TRAD)-$(DATE).pat: $(TRAD)/pattern.8 $(TRAD)/pattern.rules
223 $(CAT) $(DATADIR)/$(TRAD).1 \
224 | $(SED) -e "s/@DATE@/$(DATE)/" \
225 -e "s/@GIT_VERSION@/$(GIT_VERSION)/" > $@; \
226 $(CAT) $(TRAD)/pattern.rules >> $@; \
227 $(CAT) $(DATADIR)/$(TRAD).2 >> $@; \
228 $(CAT) $(TRAD)/pattern.8 \
229 | $(ICONV) >> $@; \
230 $(CAT) $(DATADIR)/$(TRAD).3 >> $@
233 $(REFO)/pattern.8 $(REFO)/pattern.rules: $(REFO)/make-full-pattern-refo
235 $(REFO)/make-full-pattern-refo: $(REFO)/words.hyphenated.refo
236 $(CHDIR) $(REFO); \
237 $(SH) $(SCRIPTDIR)/make-full-pattern.sh $(<F) $(DATADIR)/german.tr
238 $(ECHO) done > $@
240 $(REFO)/$(REFO)-$(DATE).pat: $(REFO)/pattern.8 $(REFO)/pattern.rules
241 $(CAT) $(DATADIR)/$(REFO).1 \
242 | $(SED) -e "s/@DATE@/$(DATE)/" \
243 -e "s/@GIT_VERSION@/$(GIT_VERSION)/" > $@; \
244 $(CAT) $(REFO)/pattern.rules >> $@; \
245 $(CAT) $(DATADIR)/$(REFO).2 >> $@; \
246 $(CAT) $(REFO)/pattern.8 \
247 | $(ICONV) >> $@; \
248 $(CAT) $(DATADIR)/$(REFO).3 >> $@
251 $(SWISS)/pattern.8 $(SWISS)/pattern.rules: $(SWISS)/make-full-pattern-swiss
253 $(SWISS)/make-full-pattern-swiss: $(SWISS)/words.hyphenated.swiss
254 $(CHDIR) $(SWISS); \
255 $(SH) $(SCRIPTDIR)/make-full-pattern.sh $(<F) $(DATADIR)/german.tr
256 $(ECHO) done > $@
258 $(SWISS)/$(SWISS)-$(DATE).pat: $(SWISS)/pattern.8 $(SWISS)/pattern.rules
259 $(CAT) $(DATADIR)/$(SWISS).1 \
260 | $(SED) -e "s/@DATE@/$(DATE)/" \
261 -e "s/@GIT_VERSION@/$(GIT_VERSION)/" > $@; \
262 $(CAT) $(SWISS)/pattern.rules >> $@; \
263 $(CAT) $(DATADIR)/$(SWISS).2 >> $@; \
264 $(CAT) $(SWISS)/pattern.8 \
265 | $(ICONV) >> $@; \
266 $(CAT) $(DATADIR)/$(SWISS).3 >> $@
269 $(TRAD)/words.hyphenated.trad: $(SRCDIR)/$(WORDLIST)
270 $(CAT) $< \
271 | $(PERL) $(SCRIPTDIR)/extract-tex.pl -l -t $(PERLMAJOR) \
272 | $(SEDMAJOR) \
273 | $(SORT) > $@
275 $(REFO)/words.hyphenated.refo: $(SRCDIR)/$(WORDLIST)
276 $(CAT) $< \
277 | $(PERL) $(SCRIPTDIR)/extract-tex.pl -l $(PERLMAJOR) \
278 | $(SEDMAJOR) \
279 | $(SORT) > $@
281 $(SWISS)/words.hyphenated.swiss: $(SRCDIR)/$(WORDLIST)
282 $(CAT) $< \
283 | $(PERL) $(SCRIPTDIR)/extract-tex.pl -l -s $(PERLMAJOR) \
284 | $(SEDMAJOR) \
285 | $(SORT) > $@
288 $(TRAD)/$(TRAD)-$(DATE).tex: $(DATADIR)/$(TRAD).tex.in
289 $(CAT) $< \
290 | $(SED) -e "s/@DATE@/$(DATE)/" > $@
292 $(REFO)/$(REFO)-$(DATE).tex: $(DATADIR)/$(REFO).tex.in
293 $(CAT) $< \
294 | $(SED) -e "s/@DATE@/$(DATE)/" > $@
296 $(SWISS)/$(SWISS)-$(DATE).tex: $(DATADIR)/$(SWISS).tex.in
297 $(CAT) $< \
298 | $(SED) -e "s/@DATE@/$(DATE)/" > $@
300 pidiff:
301 $(SH) skripte/patgen-list-diff.sh $(FROM) $(TO)
303 # Listen und Patterns für Langes-S (Orthographie für Satz mit
304 # gebrochenen Schriften (de-Latf: deutsch, Latin script, fraktur)
306 .PHONY: de-1901-Latf de-1996-Latf
307 de-1901-Latf: $(LATF)/de-1901-Latf.pat
309 $(LATF)/words-de-1901-Latf.txt: $(PYSCRIPTDIR)/s2long-s.py
310 $(MKDIR) $(LATF)
311 $(PYTHON) $(PYSCRIPTDIR)/s2long-s.py -i wortliste -l de-1901 \
312 -o $(LATF)/words-de-1901-Latf.txt
314 $(LATF)/words-de-1901-Latf.hyphenated: $(LATF)/words-de-1901-Latf.txt
315 $(PYTHON) $(PYSCRIPTDIR)/long_s_quasihyph.py < $< > $@
317 $(LATF)/de-1901-Latf.pat: $(LATF)/words-de-1901-Latf.hyphenated
318 $(CHDIR) $(LATF); \
319 $(SH) $(SCRIPTDIR)/make-full-pattern.sh $(<F) $(DATADIR)/de-Latf.tr
320 $(CAT) $(LATF)/pattern.8 | $(ICONV) >> $@;
322 de-1996-Latf: $(LATF)/de-1996-Latf.pat
324 $(LATF)/words-de-1996-Latf.txt: $(PYSCRIPTDIR)/s2long-s.py
325 $(PYTHON) $(PYSCRIPTDIR)/s2long-s.py -i wortliste -l de-1996 \
326 -o $(LATF)/words-de-1996-Latf.txt
328 $(LATF)/words-de-1996-Latf.hyphenated: $(LATF)/words-de-1996-Latf.txt
329 $(PYTHON) $(PYSCRIPTDIR)/long_s_quasihyph.py < $< > $@
331 $(LATF)/de-1996-Latf.pat: $(LATF)/words-de-1996-Latf.hyphenated
332 $(CHDIR) $(LATF); \
333 $(SH) $(SCRIPTDIR)/make-full-pattern.sh $(<F) $(DATADIR)/de-Latf.tr
334 $(CAT) $(LATF)/pattern.8 | $(ICONV) >> $@;
336 # EOF