1 ;; Copyright (C) 1994, 2013 Free Software Foundation, Inc.
3 ;; Author: Werner Fink <werner@suse.de>
4 ;; Maintainer: auctex-devel@gnu.org
7 ;; This file is part of AUCTeX.
9 ;; AUCTeX is free software; you can redistribute it and/or modify it
10 ;; under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 3, or (at your option)
14 ;; AUCTeX is distributed in the hope that it will be useful, but
15 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 ;; General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with AUCTeX; see the file COPYING. If not, write to the Free
21 ;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 ;;; dinbrief.el - Special code for LaTeX class dinbrief.
28 ;; LaTeX Class: dinbrief.cls
34 (TeX-add-style-hook "dinbrief"
37 (add-hook 'LaTeX-document-style-hook
38 'LaTeX-dinbrief-style)
39 (LaTeX-add-environments
40 '("letter" LaTeX-dinbrief-env-recipient)
43 '("address" "Absender: ")
44 '("postremark" "Postvermerk: ")
46 '("subject" "Betreff: ")
47 '("handling" "Behandlungsvermerk: ")
49 '("place" "Heutiger Ort: ")
55 "disabledraftstandard"
60 '("backaddress" "Retouradresse: ")
61 '("signature" "Unterschrift: ")
62 '("opening" "Anrede: ")
63 '("closing" "Schluss: "))))
66 (defmacro LaTeX-dinbrief-insert (&rest args)
67 "Insert text ignoring active markers."
68 `(progn (if (TeX-mark-active) (TeX-deactivate-mark))
71 (defun LaTeX-dinbrief-style ()
72 "Insert some useful packages for writing german letters."
74 (goto-char (point-min)) ; insert before \begin{document}
75 (if (re-search-forward ".begin.document." (point-max) t)
76 (beginning-of-line 1))
78 (indent-relative-maybe)
79 (LaTeX-dinbrief-insert TeX-esc "usepackage"
80 LaTeX-optop "latin1,utf8" LaTeX-optcl
81 TeX-grop "inputenc" TeX-grcl)
83 (LaTeX-dinbrief-insert TeX-esc "usepackage"
84 LaTeX-optop "T1" LaTeX-optcl
85 TeX-grop "fontenc" TeX-grcl)
87 (LaTeX-dinbrief-insert TeX-esc "usepackage"
88 TeX-grop "ngerman" TeX-grcl)
89 (TeX-run-style-hooks "inputenc")
90 (TeX-run-style-hooks "fontenc")
91 (TeX-run-style-hooks "ngerman")))
93 (defun LaTeX-dinbrief-env-recipient (environment)
94 "Insert ENVIRONMENT and prompt for recipient and address."
96 (sender (LaTeX-dinbrief-sender))
97 (recipient (read-string "Empfänger: "))
98 (address (LaTeX-dinbrief-recipient))
99 (date (read-string "Datum: " (LaTeX-dinbrief-today)))
100 (postremark (read-string "Postvermerk: "))
101 (fenster (read-string "Fenster \(ja/nein\): "))
102 (vermerk (read-string "Behandlungsvermerk: "))
103 (verteil (read-string "Verteiler: "))
104 (betreff (read-string "Betreff: "))
105 (opening (read-string "Anrede: "))
106 (closing (read-string "Schluss: "))
107 (signature (read-string "Unterschrift: "))
108 (anlage (read-string "Anlagen: ")))
110 (if (string= fenster "ja")
112 (LaTeX-dinbrief-insert TeX-esc "enabledraftstandard")
114 (LaTeX-dinbrief-insert TeX-esc "centeraddress")
116 (LaTeX-dinbrief-insert TeX-esc "nowindowrules")
118 (LaTeX-dinbrief-insert TeX-esc "windowtics")
120 (let ((retouradr (read-string "Retouradresse: " sender)))
122 (if (not (zerop (length retouradr)))
124 (if (TeX-mark-active) (TeX-deactivate-mark))
125 (LaTeX-dinbrief-insert TeX-esc "backaddress" TeX-grop retouradr TeX-grcl)
126 (newline-and-indent)))))
127 (LaTeX-dinbrief-insert TeX-esc "enabledraftstandard")
129 (LaTeX-dinbrief-insert TeX-esc "centeraddress")
131 (LaTeX-dinbrief-insert TeX-esc "nowindowrules")
133 (LaTeX-dinbrief-insert TeX-esc "windowtics"))
135 (if (not (zerop (length signature)))
137 (LaTeX-dinbrief-insert TeX-esc "signature" TeX-grop signature TeX-grcl)
138 (newline-and-indent)))
139 (if (not (zerop (length date)))
141 (LaTeX-dinbrief-insert TeX-esc "date" TeX-grop date TeX-grcl)
142 (newline-and-indent)))
145 (let ((indentation (current-column)))
146 (LaTeX-insert-environment
148 (concat TeX-grop recipient
149 (if (not (zerop (length address)))
151 (if (not (zerop (length recipient)))
152 (concat " " TeX-esc TeX-esc " "))
155 (save-excursion ; Fix indentation of address
156 (if (search-backward TeX-grcl nil 'move)
157 (let ((addr-end (point-marker)))
158 (if (search-backward TeX-grop nil 'move)
159 (let ((addr-column (current-column)))
160 (while (search-forward
161 (concat TeX-esc TeX-esc)
162 (marker-position addr-end) 'move)
165 (indent-to addr-column))))))))
166 (LaTeX-dinbrief-insert "\n")
167 (indent-to indentation))
168 (if (not (zerop (length postremark)))
170 (LaTeX-dinbrief-insert TeX-esc "postremark" TeX-grop postremark TeX-grcl)
171 (newline-and-indent)))
172 (if (not (zerop (length betreff)))
174 (LaTeX-dinbrief-insert TeX-esc "subject" TeX-grop)
175 (LaTeX-dinbrief-insert betreff TeX-grcl)
176 (newline-and-indent)))
177 (if (not (zerop (length vermerk)))
179 (LaTeX-dinbrief-insert TeX-esc "handling" TeX-grop vermerk TeX-grcl)
180 (newline-and-indent)))
181 (if (not (zerop (length verteil)))
183 (LaTeX-dinbrief-insert TeX-esc "cc" TeX-grop verteil TeX-grcl)
184 (newline-and-indent)))
185 (if (not (zerop (length anlage)))
187 (LaTeX-dinbrief-insert TeX-esc "encl" TeX-grop anlage TeX-grcl)
188 (newline-and-indent)))
189 (LaTeX-dinbrief-insert TeX-esc "opening"
191 (if (zerop (length opening))
196 (indent-relative-maybe)
198 (LaTeX-dinbrief-insert "\n" TeX-esc "closing"
200 (if (zerop (length closing))
204 (indent-relative-maybe))))
206 (defun LaTeX-dinbrief-sender ()
207 "Read and write the senders address."
209 (let ((name (read-string "Absender: " (user-full-name)))
210 (str (read-string "Meine Strasse: "))
211 (ort (read-string "Mein Wohnort: ")))
212 (if (not (zerop (length name)))
214 (goto-char (point-min)) ; insert before \end{document}
215 (if (re-search-forward ".end.document." (point-max) t)
216 (beginning-of-line 1))
218 (LaTeX-dinbrief-insert TeX-esc "address" TeX-grop name)
219 (if (not (zerop (length str)))
221 (LaTeX-dinbrief-insert " " TeX-esc TeX-esc)
223 (LaTeX-dinbrief-insert str)))
224 (if (not (zerop (length ort)))
226 (LaTeX-dinbrief-insert " " TeX-esc "par")
228 (LaTeX-dinbrief-insert ort)))
229 (LaTeX-dinbrief-insert TeX-grcl)
231 (concat name ", " str ", " ort)))))
233 (defun LaTeX-dinbrief-recipient ()
234 "Read and return the recipient address."
236 (let ((str (read-string "Wohnhaft in Strasse: "))
237 (ort (read-string "Aus der Ortschaft: ")))
238 (if (not (zerop (length str)))
239 (if (not (zerop (length ort)))
240 (concat str " " TeX-esc TeX-esc " " ort)
242 (if (not (zerop (length ort)))
245 (defun LaTeX-dinbrief-today ()
246 "Return a string representing todays date according to flavor."
248 (let ((ctime-string (current-time-string))
249 (month-alist '(("Jan" . "Januar")
257 ("Sep" . "September")
260 ("Dec" . "Dezember"))))
262 "^\\S-+\\s-+\\(\\S-+\\)\\s-+\\(\\S-+\\)\\s-+\\S-+\\s-+\\(\\S-+\\)"
264 (let ((year (substring ctime-string (match-beginning 3) (match-end 3)))
265 (month (substring ctime-string (match-beginning 1) (match-end 1)))
266 (day (substring ctime-string (match-beginning 2) (match-end 2)))
267 (place (read-string "Heutiger Ort: ")))
268 (if (assoc month month-alist)
270 (setq month (cdr (assoc month month-alist)))
271 (if (> 2 (length day))
272 (setq day (concat "0" day)))))
273 (format "%s, den %s. %s %s" place day month year))))
275 ;;; dinbrief.el ends here