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
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.
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 # Die Wichtung der verwendeten Haupttrennstellen kann mittels der Variable
64 # `W=N' kontrolliert werden, wo `N' die Qualität angibt: Wert 1 selektiert
65 # nur die besten Haupttrennstellen, Wert 2 die besten und zweitbesten
66 # Haupttrennstellen usw. Der Standardwert für `W' ist 0; er gibt an, dass
67 # alle Haupttrennstellen verwendet werden sollen.
73 DATADIR
= $(SRCDIR
)/daten
74 SCRIPTDIR
= $(SRCDIR
)/skripte
75 PYSCRIPTDIR
= $(SRCDIR
)/skripte
/python
77 # Variables FROM and TO are used by goal `pidiff'. FROM must be a
78 # commit set from shell, like `make pidiff FROM=abcdef', TO is optional
79 # and evaluates to `HEAD' if not given.
81 ifneq ($(findstring major
,$(MAKECMDGOALS
)),)
83 # A single `-' gets removed; all other combinations of `-', `<', `>',
84 # and `=' are converted to a hyphen.
85 SEDMAJOR
= $(SED
) -e
'/[=<>-]/!n' \
88 -e
's/[=<>][=<>]*/-/g' \
92 ifeq ($(words $(MAKECMDGOALS
)),1)
95 # This is to suppress the `nothing to be done' warning.
99 else ifneq ($(findstring fugen
,$(MAKECMDGOALS
)),)
101 # All combinations of `-', `<', `>', `<=', `=>' get removed,
102 # runs of `=' are converted to a hyphen.
103 SEDMAJOR
= $(SED
) -e
'/[=<>-]/!n' \
107 -e
's/[<>][<>]*//g' \
111 ifeq ($(words $(MAKECMDGOALS
)),1)
114 # This is to suppress the `nothing to be done' warning.
118 else ifneq ($(findstring suffix,$(MAKECMDGOALS
)),)
120 # All combinations of `-', `<', `=' get removed,
121 # runs of `>' are converted to a hyphen.
122 SEDMAJOR
= $(SED
) -e
'/[=<>-]/!n' \
124 -e
's/[<=][<=]*//g' \
128 ifeq ($(words $(MAKECMDGOALS
)),1)
131 # This is to suppress the `nothing to be done' warning.
141 TRAD
= dehypht-x
$(MAJOR
)
142 REFO
= dehyphn-x
$(MAJOR
)
143 SWISS
= dehyphts-x
$(MAJOR
)
146 LC_ENVVARS
= LC_COLLATE
=de_DE.ISO8859-15 \
147 LC_CTYPE
=de_DE.ISO8859-15
152 DATE
= $(shell date
'+%Y-%m-%d')
155 ICONV
= iconv
-f iso-8859-15
-t utf-8
162 SORT
= $(LC_ENVVARS
) sort -d \
163 |
$(LC_ENVVARS
) uniq
-i
165 GIT_VERSION
:= `$(CHDIR) $(SRCDIR); \
166 $(GIT) log --format=%H -1 HEAD --`
167 TRADFILES
= $(TRAD
)/$(TRAD
)-$(DATE
).pat
$(TRAD
)/$(TRAD
)-$(DATE
).
tex
168 REFOFILES
= $(REFO
)/$(REFO
)-$(DATE
).pat
$(REFO
)/$(REFO
)-$(DATE
).
tex
169 SWISSFILES
= $(SWISS
)/$(SWISS
)-$(DATE
).pat
$(SWISS
)/$(SWISS
)-$(DATE
).
tex
172 override SRCDIR
:= $(shell cd
$(SRCDIR
); $(PWD
))
175 all: pattern-trad pattern-refo pattern-swiss
177 .PHONY
: pattern-trad pattern-refo pattern-swiss major fugen
suffix
178 pattern-trad
: $(TRADFILES
)
179 pattern-refo
: $(REFOFILES
)
180 pattern-swiss
: $(SWISSFILES
)
182 # intermediate targets
186 .PHONY
: words-trad words-refo
187 words-trad
: $(TRAD
)/words.hyphenated.trad
188 words-refo
: $(REFO
)/words.hyphenated.refo
191 .PHONY
: pre-trad pre-refo pre-swiss
199 $(TRADFILES
) $(TRAD
)/words.hyphenated.trad
: pre-trad
200 $(REFOFILES
) $(REFO
)/words.hyphenated.refo
: pre-refo
201 $(SWISSFILES
) $(SWISS
)/words.hyphenated.swiss
: pre-swiss
204 # GNU make supports creation of multiple targets by a single
205 # invocation of a recipe only for pattern rules, thus we have
206 # to use a `sentinel file' (using `echo' for the time stamp).
209 $(TRAD
)/pattern
.8 $(TRAD
)/pattern.rules
: $(TRAD
)/make-full-pattern-trad
211 $(TRAD
)/make-full-pattern-trad
: $(TRAD
)/words.hyphenated.trad
213 $(SH
) $(SCRIPTDIR
)/make-full-pattern.sh
$(<F
) $(DATADIR
)/german.tr
216 $(TRAD
)/$(TRAD
)-$(DATE
).pat
: $(TRAD
)/pattern
.8 $(TRAD
)/pattern.rules
217 $(CAT
) $(DATADIR
)/$(TRAD
).1 \
218 |
$(SED
) -e
"s/@DATE@/$(DATE)/" \
219 -e
"s/@GIT_VERSION@/$(GIT_VERSION)/" > $@
; \
220 $(CAT
) $(TRAD
)/pattern.rules
>> $@
; \
221 $(CAT
) $(DATADIR
)/$(TRAD
).2 >> $@
; \
222 $(CAT
) $(TRAD
)/pattern
.8 \
224 $(CAT
) $(DATADIR
)/$(TRAD
).3 >> $@
227 $(REFO
)/pattern
.8 $(REFO
)/pattern.rules
: $(REFO
)/make-full-pattern-refo
229 $(REFO
)/make-full-pattern-refo
: $(REFO
)/words.hyphenated.refo
231 $(SH
) $(SCRIPTDIR
)/make-full-pattern.sh
$(<F
) $(DATADIR
)/german.tr
234 $(REFO
)/$(REFO
)-$(DATE
).pat
: $(REFO
)/pattern
.8 $(REFO
)/pattern.rules
235 $(CAT
) $(DATADIR
)/$(REFO
).1 \
236 |
$(SED
) -e
"s/@DATE@/$(DATE)/" \
237 -e
"s/@GIT_VERSION@/$(GIT_VERSION)/" > $@
; \
238 $(CAT
) $(REFO
)/pattern.rules
>> $@
; \
239 $(CAT
) $(DATADIR
)/$(REFO
).2 >> $@
; \
240 $(CAT
) $(REFO
)/pattern
.8 \
242 $(CAT
) $(DATADIR
)/$(REFO
).3 >> $@
245 $(SWISS
)/pattern
.8 $(SWISS
)/pattern.rules
: $(SWISS
)/make-full-pattern-swiss
247 $(SWISS
)/make-full-pattern-swiss
: $(SWISS
)/words.hyphenated.swiss
249 $(SH
) $(SCRIPTDIR
)/make-full-pattern.sh
$(<F
) $(DATADIR
)/german.tr
252 $(SWISS
)/$(SWISS
)-$(DATE
).pat
: $(SWISS
)/pattern
.8 $(SWISS
)/pattern.rules
253 $(CAT
) $(DATADIR
)/$(SWISS
).1 \
254 |
$(SED
) -e
"s/@DATE@/$(DATE)/" \
255 -e
"s/@GIT_VERSION@/$(GIT_VERSION)/" > $@
; \
256 $(CAT
) $(SWISS
)/pattern.rules
>> $@
; \
257 $(CAT
) $(DATADIR
)/$(SWISS
).2 >> $@
; \
258 $(CAT
) $(SWISS
)/pattern
.8 \
260 $(CAT
) $(DATADIR
)/$(SWISS
).3 >> $@
263 $(TRAD
)/words.hyphenated.trad
: $(SRCDIR
)/$(WORDLIST
)
265 |
$(PERL
) $(SCRIPTDIR
)/extract-tex.pl
-l
-t
$(PERLMAJOR
) \
269 $(REFO
)/words.hyphenated.refo
: $(SRCDIR
)/$(WORDLIST
)
271 |
$(PERL
) $(SCRIPTDIR
)/extract-tex.pl
-l
$(PERLMAJOR
) \
275 $(SWISS
)/words.hyphenated.swiss
: $(SRCDIR
)/$(WORDLIST
)
277 |
$(PERL
) $(SCRIPTDIR
)/extract-tex.pl
-l
-s
$(PERLMAJOR
) \
282 $(TRAD
)/$(TRAD
)-$(DATE
).
tex: $(DATADIR
)/$(TRAD
).
tex.in
284 |
$(SED
) -e
"s/@DATE@/$(DATE)/" > $@
286 $(REFO
)/$(REFO
)-$(DATE
).
tex: $(DATADIR
)/$(REFO
).
tex.in
288 |
$(SED
) -e
"s/@DATE@/$(DATE)/" > $@
290 $(SWISS
)/$(SWISS
)-$(DATE
).
tex: $(DATADIR
)/$(SWISS
).
tex.in
292 |
$(SED
) -e
"s/@DATE@/$(DATE)/" > $@
295 $(SH
) skripte
/patgen-list-diff.sh
$(FROM
) $(TO
)
297 # Listen und Patterns für Langes-S (Orthographie für Satz mit
298 # gebrochenen Schriften (de-Latf: deutsch, Latin-script-fraktur)
300 $(LANGS
)/words-de-1901-Latf.txt
: $(PYSCRIPTDIR
)/s2long-s.py
302 $(PYTHON
) $(PYSCRIPTDIR
)/s2long-s.py
-i wortliste
-l de-1901 \
303 -o
$(LANGS
)/words-de-1901-Latf.txt
305 $(LANGS
)/words-de-1901-Latf.hyphenated
: $(LANGS
)/words-de-1901-Latf.txt
306 $(PYTHON
) $(PYSCRIPTDIR
)/long_s_quasihyph.py
< $< > $@
308 $(LANGS
)/de-1901-Latf.pat
: $(LANGS
)/words-de-1901-Latf.hyphenated
310 $(SH
) $(SCRIPTDIR
)/make-full-pattern.sh
$(<F
) $(DATADIR
)/german.tr
311 $(CAT
) $(LANGS
)/pattern
.8 |
$(ICONV
) >> $@
;
313 $(LANGS
)/words-de-1996-Latf.txt
: $(PYSCRIPTDIR
)/s2long-s.py
314 $(PYTHON
) $(PYSCRIPTDIR
)/s2long-s.py
-i wortliste
-l de-1996 \
315 -o
$(LANGS
)/words-de-1996-Latf.txt
317 $(LANGS
)/words-de-1996-Latf.hyphenated
: $(LANGS
)/words-de-1996-Latf.txt
318 $(PYTHON
) $(PYSCRIPTDIR
)/long_s_quasihyph.py
< $< > $@
321 $(LANGS
)/de-1996-Latf.pat
: $(LANGS
)/words-de-1996-Latf.hyphenated
323 $(SH
) $(SCRIPTDIR
)/make-full-pattern.sh
$(<F
) $(DATADIR
)/german.tr
324 $(CAT
) $(LANGS
)/pattern
.8 |
$(ICONV
) >> $@
;