diff options
| author | Chong Yidong | 2006-11-12 17:35:04 +0000 |
|---|---|---|
| committer | Chong Yidong | 2006-11-12 17:35:04 +0000 |
| commit | 2f88760a4bdcba44417ba32e5daabf310e39b0a4 (patch) | |
| tree | f5e452b0ed1ce54a25b55f360bdfc7bc455cab9b | |
| parent | 32aa3a8c8c977a01cfa133726ad61732dbed1095 (diff) | |
| download | emacs-2f88760a4bdcba44417ba32e5daabf310e39b0a4.tar.gz emacs-2f88760a4bdcba44417ba32e5daabf310e39b0a4.zip | |
(handwrite): Also process lines not ending with newline. Replace some
position-fiddling with different logic. Improve performance.
| -rw-r--r-- | lisp/play/handwrite.el | 177 |
1 files changed, 41 insertions, 136 deletions
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el index ed273de635d..578f9a8e0b6 100644 --- a/lisp/play/handwrite.el +++ b/lisp/play/handwrite.el | |||
| @@ -155,7 +155,19 @@ Variables: handwrite-linespace (default 12) | |||
| 155 | (buf-name (buffer-name) ) | 155 | (buf-name (buffer-name) ) |
| 156 | (textp) | 156 | (textp) |
| 157 | (ps-buf-name) ;name of the PostScript buffer | 157 | (ps-buf-name) ;name of the PostScript buffer |
| 158 | ) | 158 | (trans-table |
| 159 | '(("ÿ" . "264") ("á" . "207") ("à" . "210") ("â" . "211") | ||
| 160 | ("ä" . "212") ("ã" . "213") ("å" . "214") ("é" . "216") | ||
| 161 | ("è" . "217") ("ê" . "220") ("ë" . "221") ("í" . "222") | ||
| 162 | ("ì" . "223") ("î" . "224") ("ï" . "225") ("ó" . "227") | ||
| 163 | ("ò" . "230") ("ô" . "231") ("ö" . "232") ("õ" . "233") | ||
| 164 | ("ú" . "234") ("ù" . "235") ("û" . "236") ("ü" . "237") | ||
| 165 | ("ß" . "247") ("°" . "241") ("®" . "250") ("©" . "251") | ||
| 166 | ("ij" . "264") ("ç" . "215") ("§" . "244") ("ñ" . "226") | ||
| 167 | ("£" . "243"))) | ||
| 168 | (escape-table '("\\\\" "(" ")")) ; \\ comes first to not work | ||
| 169 | ; on inserted backslashes | ||
| 170 | line) | ||
| 159 | (goto-char (point-min)) ;start at beginning | 171 | (goto-char (point-min)) ;start at beginning |
| 160 | (setq handwrite-psindex (1+ handwrite-psindex)) | 172 | (setq handwrite-psindex (1+ handwrite-psindex)) |
| 161 | (setq ps-buf-name | 173 | (setq ps-buf-name |
| @@ -178,155 +190,46 @@ Variables: handwrite-linespace (default 12) | |||
| 178 | (switch-to-buffer cur-buf) | 190 | (switch-to-buffer cur-buf) |
| 179 | (goto-char (point-min)) ;start at beginning | 191 | (goto-char (point-min)) ;start at beginning |
| 180 | (save-excursion | 192 | (save-excursion |
| 181 | ;;as long as we see a newline the document is not ended. | 193 | (while (not (eobp)) |
| 182 | (while (re-search-forward "\n" nil t) | 194 | (setq line (thing-at-point 'line)) |
| 183 | (previous-line 1) | 195 | (dolist (escape escape-table) |
| 184 | (beginning-of-line) | 196 | (setq line (replace-regexp-in-string escape |
| 185 | (setq pmin (point)) | 197 | (concat "\\\\" escape) line))) |
| 186 | (search-forward "\n" nil t) | 198 | (dolist (trans trans-table) |
| 187 | (backward-char 1) | 199 | (setq line (replace-regexp-in-string (car trans) |
| 188 | (copy-region-as-kill (point) pmin) | 200 | (concat "\\\\" (cdr trans)) |
| 189 | (forward-char 1) | 201 | line))) |
| 190 | (switch-to-buffer ps-buf-name) | 202 | (switch-to-buffer ps-buf-name) |
| 191 | (yank) | 203 | (insert (replace-regexp-in-string "\n" "" line)) |
| 192 | (message "write write write...") | 204 | (message "write write write...") |
| 193 | (search-forward ")a" nil t) | ||
| 194 | (backward-char 2) | ||
| 195 | (setq lastp (point)) | ||
| 196 | (beginning-of-line) | ||
| 197 | (search-forward "(" nil t) | ||
| 198 | (while (re-search-forward "[()\\]" lastp t) | ||
| 199 | (save-excursion | ||
| 200 | (setq lastp (+ lastp 1)) | ||
| 201 | (forward-char -1) | ||
| 202 | (insert "\\"))) | ||
| 203 | (setq ps-ypos (+ ps-ypos handwrite-linespace)) | 205 | (setq ps-ypos (+ ps-ypos handwrite-linespace)) |
| 204 | (end-of-line) | 206 | (end-of-line) |
| 205 | (insert "\n") | 207 | (insert "\n") |
| 206 | (setq lcount (+ lcount 1)) | 208 | (setq lcount (+ lcount 1)) |
| 207 | (cond ( (eq lcount handwrite-numlines) | 209 | (when (= lcount handwrite-numlines) |
| 208 | (setq ipage (+ ipage 1)) | 210 | (setq ipage (+ ipage 1)) |
| 209 | (insert "0 0 m\n") | 211 | (insert "0 0 m\n") |
| 210 | (insert "showpage exec Hwsave restore\n") | 212 | (insert "showpage exec Hwsave restore\n") |
| 211 | (insert "%%Page: " (number-to-string ipage) " " | 213 | (insert "%%Page: " (number-to-string ipage) " " |
| 212 | (number-to-string ipage) "\n") | 214 | (number-to-string ipage) "\n") |
| 213 | (insert "Hwjst\n") | 215 | (insert "Hwjst\n") |
| 214 | (insert "/Hwsave save def\n") | 216 | (insert "/Hwsave save def\n") |
| 215 | (if handwrite-pagenumbering | 217 | (if handwrite-pagenumbering |
| 216 | (insert "20 30 m\nxym(page " | 218 | (insert "20 30 m\nxym(page " |
| 217 | (number-to-string ipage) ")a\n")) | 219 | (number-to-string ipage) ")a\n")) |
| 218 | (setq ps-ypos 63) | 220 | (setq ps-ypos 63) |
| 219 | (setq lcount 0) | 221 | (setq lcount 0)) |
| 220 | )) | 222 | (insert "44 " (number-to-string ps-ypos) " m\n") |
| 221 | (insert "44 "(number-to-string ps-ypos) " m\n") | ||
| 222 | (insert "xym( )a") | 223 | (insert "xym( )a") |
| 223 | (backward-char 3) | 224 | (backward-char 3) |
| 224 | (switch-to-buffer cur-buf) | 225 | (switch-to-buffer cur-buf) |
| 226 | (forward-line 1) | ||
| 225 | )) | 227 | )) |
| 226 | (switch-to-buffer ps-buf-name) | 228 | (switch-to-buffer ps-buf-name) |
| 227 | (next-line 1) | 229 | (next-line 1) |
| 228 | (insert "showpage exec Hwsave restore\n\n") | 230 | (insert "showpage exec Hwsave restore\n\n") |
| 229 | (insert "%%Pages " (number-to-string ipage) " 0\n") | 231 | (insert "%%Pages " (number-to-string ipage) " 0\n") |
| 230 | (insert "%%EOF\n") | 232 | (insert "%%EOF\n") |
| 231 | (goto-char textp) ;start where the inserted text begins | ||
| 232 | (while (search-forward "ÿ" nil t) | ||
| 233 | (replace-match "\\" nil t) (insert "264")) | ||
| 234 | (goto-char textp) | ||
| 235 | (while (search-forward "á" nil t) | ||
| 236 | (replace-match "\\" nil t) (insert "207")) | ||
| 237 | (goto-char textp) | ||
| 238 | (while (search-forward "à" nil t) | ||
| 239 | (replace-match "\\" nil t) (insert "210")) | ||
| 240 | (goto-char textp) | ||
| 241 | (while (search-forward "â" nil t) | ||
| 242 | (replace-match "\\" nil t) (insert "211")) | ||
| 243 | (goto-char textp) | ||
| 244 | (while (search-forward "ä" nil t) | ||
| 245 | (replace-match "\\" nil t) (insert "212")) | ||
| 246 | (goto-char textp) | ||
| 247 | (while (search-forward "ã" nil t) | ||
| 248 | (replace-match "\\" nil t) (insert "213")) | ||
| 249 | (goto-char textp) | ||
| 250 | (while (search-forward "å" nil t) | ||
| 251 | (replace-match "\\" nil t) (insert "214")) | ||
| 252 | (goto-char textp) | ||
| 253 | (while (search-forward "é" nil t) | ||
| 254 | (replace-match "\\" nil t) (insert "216")) | ||
| 255 | (goto-char textp) | ||
| 256 | (while (search-forward "è" nil t) | ||
| 257 | (replace-match "\\" nil t) (insert "217")) | ||
| 258 | (goto-char textp) | ||
| 259 | (while (search-forward "ê" nil t) | ||
| 260 | (replace-match "\\" nil t) (insert "220")) | ||
| 261 | (goto-char textp) | ||
| 262 | (while (search-forward "ë" nil t) | ||
| 263 | (replace-match "\\" nil t) (insert "221")) | ||
| 264 | (goto-char textp) | ||
| 265 | (while (search-forward "í" nil t) | ||
| 266 | (replace-match "\\" nil t) (insert "222")) | ||
| 267 | (goto-char textp) | ||
| 268 | (while (search-forward "ì" nil t) | ||
| 269 | (replace-match "\\" nil t) (insert "223")) | ||
| 270 | (goto-char textp) | ||
| 271 | (while (search-forward "î" nil t) | ||
| 272 | (replace-match "\\" nil t) (insert "224")) | ||
| 273 | (goto-char textp) | ||
| 274 | (while (search-forward "ï" nil t) | ||
| 275 | (replace-match "\\" nil t) (insert "225")) | ||
| 276 | (goto-char textp) | ||
| 277 | (while (search-forward "ó" nil t) | ||
| 278 | (replace-match "\\" nil t) (insert "227")) | ||
| 279 | (goto-char textp) | ||
| 280 | (while (search-forward "ò" nil t) | ||
| 281 | (replace-match "\\" nil t) (insert "230")) | ||
| 282 | (goto-char textp) | ||
| 283 | (while (search-forward "ô" nil t) | ||
| 284 | (replace-match "\\" nil t) (insert "231")) | ||
| 285 | (goto-char textp) | ||
| 286 | (while (search-forward "ö" nil t) | ||
| 287 | (replace-match "\\" nil t) (insert "232")) | ||
| 288 | (goto-char textp) | ||
| 289 | (while (search-forward "õ" nil t) | ||
| 290 | (replace-match "\\" nil t) (insert "233")) | ||
| 291 | (goto-char textp) | ||
| 292 | (while (search-forward "ú" nil t) | ||
| 293 | (replace-match "\\" nil t) (insert "234")) | ||
| 294 | (goto-char textp) | ||
| 295 | (while (search-forward "ù" nil t) | ||
| 296 | (replace-match "\\" nil t) (insert "235")) | ||
| 297 | (goto-char textp) | ||
| 298 | (while (search-forward "û" nil t) | ||
| 299 | (replace-match "\\" nil t) (insert "236")) | ||
| 300 | (goto-char textp) | ||
| 301 | (while (search-forward "ü" nil t) | ||
| 302 | (replace-match "\\" nil t) (insert "237")) | ||
| 303 | (goto-char textp) | ||
| 304 | (while (search-forward "ß" nil t) | ||
| 305 | (replace-match "\\" nil t) (insert "247")) | ||
| 306 | (goto-char textp) | ||
| 307 | (while (search-forward "°" nil t) | ||
| 308 | (replace-match "\\" nil t) (insert "241")) | ||
| 309 | (goto-char textp) | ||
| 310 | (while (search-forward "®" nil t) | ||
| 311 | (replace-match "\\" nil t) (insert "250")) | ||
| 312 | (goto-char textp) | ||
| 313 | (while (search-forward "©" nil t) | ||
| 314 | (replace-match "\\" nil t) (insert "251")) | ||
| 315 | (goto-char textp) | ||
| 316 | (while (search-forward "ij" nil t) | ||
| 317 | (replace-match "\\" nil t) (insert "264")) | ||
| 318 | (goto-char textp) | ||
| 319 | (while (search-forward "ç" nil t) | ||
| 320 | (replace-match "\\" nil t) (insert "215")) | ||
| 321 | (goto-char textp) | ||
| 322 | (while (search-forward "§" nil t) | ||
| 323 | (replace-match "\\" nil t) (insert "244")) | ||
| 324 | (goto-char textp) | ||
| 325 | (while (search-forward "ñ" nil t) | ||
| 326 | (replace-match "\\" nil t) (insert "226")) | ||
| 327 | (goto-char textp) | ||
| 328 | (while (search-forward "£" nil t) | ||
| 329 | (replace-match "\\" nil t) (insert "243")) | ||
| 330 | ;;To avoid cumbersome code we simply ignore pagefeeds | 233 | ;;To avoid cumbersome code we simply ignore pagefeeds |
| 331 | (goto-char textp) | 234 | (goto-char textp) |
| 332 | (while (search-forward "\f" nil t) | 235 | (while (search-forward "\f" nil t) |
| @@ -342,7 +245,9 @@ Variables: handwrite-linespace (default 12) | |||
| 342 | (ps-lpr-switches | 245 | (ps-lpr-switches |
| 343 | (if (stringp ps-printer-name) | 246 | (if (stringp ps-printer-name) |
| 344 | (list (concat "-P" ps-printer-name))))) | 247 | (list (concat "-P" ps-printer-name))))) |
| 345 | (apply (or ps-print-region-function 'call-process-region) | 248 | (apply (or (and (boundp 'ps-print-region-function) |
| 249 | ps-print-region-function) | ||
| 250 | 'call-process-region) | ||
| 346 | (point-min) (point-max) ps-lpr-command nil nil nil)))) | 251 | (point-min) (point-max) ps-lpr-command nil nil nil)))) |
| 347 | (message "") | 252 | (message "") |
| 348 | (bury-buffer ()) | 253 | (bury-buffer ()) |