Mercurial > emacs
comparison lisp/textmodes/tex-mode.el @ 84611:fb155376791a
(tex-region): Simplify previous change,
handling the case where the region is not in `tex-main-file'.
(tex-region-1): Delete.
(tex-region-header): New function, doing the header part of the
old tex-region-1.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Mon, 17 Sep 2007 00:24:12 +0000 |
parents | fc8dde12dd1e |
children | bb15bcc10f4b |
comparison
equal
deleted
inserted
replaced
84610:b52ff2b36d6d | 84611:fb155376791a |
---|---|
2124 (let* ((zap-directory | 2124 (let* ((zap-directory |
2125 (file-name-as-directory (expand-file-name tex-directory))) | 2125 (file-name-as-directory (expand-file-name tex-directory))) |
2126 (tex-out-file (expand-file-name (concat tex-zap-file ".tex") | 2126 (tex-out-file (expand-file-name (concat tex-zap-file ".tex") |
2127 zap-directory)) | 2127 zap-directory)) |
2128 (main-file (expand-file-name (tex-main-file))) | 2128 (main-file (expand-file-name (tex-main-file))) |
2129 (texbuf (current-buffer)) | 2129 (ismain (string-equal main-file (buffer-file-name))) |
2130 ;; Variables local to texbuf that are needed by t-r-1. | 2130 already-output) |
2131 (hstart tex-start-of-header) | |
2132 (hend tex-end-of-header) | |
2133 (first tex-first-line-header-regexp) | |
2134 (trailer tex-trailer) | |
2135 size) | |
2136 ;; Don't delete temp files if we do the same buffer twice in a row. | 2131 ;; Don't delete temp files if we do the same buffer twice in a row. |
2137 (or (eq (current-buffer) tex-last-buffer-texed) | 2132 (or (eq (current-buffer) tex-last-buffer-texed) |
2138 (tex-delete-last-temp-files t)) | 2133 (tex-delete-last-temp-files t)) |
2139 (if (string-equal main-file (buffer-file-name)) | 2134 (let ((default-directory zap-directory)) ; why? |
2140 (tex-region-1 zap-directory tex-out-file beg end) | 2135 ;; We assume the header is fully contained in tex-main-file. |
2141 ; If this is not the main file, we need to first make a merged | 2136 ;; We use f-f-ns so we get prompted about any changes on disk. |
2142 ; buffer with the contents of the main file and this file. | 2137 (with-current-buffer (find-file-noselect main-file) |
2143 (with-temp-buffer | 2138 (setq already-output (tex-region-header tex-out-file |
2144 ;; This is so we get prompted about any changes on disk. | 2139 (and ismain beg)))) |
2145 (insert (with-current-buffer (find-file-noselect main-file) | 2140 ;; Write out the specified region (but don't repeat anything |
2146 (save-restriction | 2141 ;; already written in the header). |
2147 (widen) | 2142 (write-region (if ismain |
2148 (buffer-string)))) | 2143 (max beg already-output) |
2149 ;; Get the size of the text inserted before the specified region. | 2144 beg) |
2150 (setq size (- (point-max) (point-min)) | 2145 end tex-out-file (not (zerop already-output))) |
2151 beg (+ beg size) | 2146 ;; Write the trailer, if any. |
2152 end (+ end size)) | 2147 ;; Precede it with a newline to make sure it |
2153 (insert (with-current-buffer texbuf | 2148 ;; is not hidden in a comment. |
2154 (save-restriction | 2149 (if tex-trailer |
2155 (widen) | 2150 (write-region (concat "\n" tex-trailer) nil |
2156 (buffer-string)))) | 2151 tex-out-file t))) |
2157 (set (make-local-variable 'tex-start-of-header) hstart) | |
2158 (set (make-local-variable 'tex-end-of-header) hend) | |
2159 (set (make-local-variable 'tex-first-line-header-regexp) first) | |
2160 (set (make-local-variable 'tex-trailer) trailer) | |
2161 (tex-region-1 zap-directory tex-out-file beg end))) | |
2162 ;; Record the file name to be deleted afterward. | 2152 ;; Record the file name to be deleted afterward. |
2163 (setq tex-last-temp-file tex-out-file) | 2153 (setq tex-last-temp-file tex-out-file) |
2164 ;; Use a relative file name here because (1) the proper dir | 2154 ;; Use a relative file name here because (1) the proper dir |
2165 ;; is already current, and (2) the abs file name is sometimes | 2155 ;; is already current, and (2) the abs file name is sometimes |
2166 ;; too long and can make tex crash. | 2156 ;; too long and can make tex crash. |
2167 (tex-start-tex tex-command (concat tex-zap-file ".tex") zap-directory) | 2157 (tex-start-tex tex-command (concat tex-zap-file ".tex") zap-directory) |
2168 (setq tex-print-file tex-out-file))) | 2158 (setq tex-print-file tex-out-file))) |
2169 | 2159 |
2170 (defun tex-region-1 (zap-directory tex-out-file beg end) | 2160 (defun tex-region-header (file &optional beg) |
2171 "Write the region BEG END of the current buffer to TEX-OUT-FILE. | 2161 "If there is a TeX header in the current buffer, write it to FILE. |
2172 The region is surrounded by a header and trailer, if they are found." | 2162 Return point at the end of the region so written, or zero. If |
2173 (save-excursion | 2163 the optional buffer position BEG is specified, then the region |
2174 (save-restriction | 2164 written out starts at BEG, if this lies before the start of the header. |
2175 (widen) | 2165 |
2176 (goto-char (point-min)) | 2166 If the first line matches `tex-first-line-header-regexp', it is |
2177 (forward-line 100) | 2167 also written out. The variables `tex-start-of-header' and |
2178 (let ((search-end (point)) | 2168 `tex-end-of-header' are used to locate the header. Note that the |
2179 (default-directory zap-directory) ; why? | 2169 start of the header is required to be within the first 100 lines." |
2180 (already-output 0)) | 2170 (save-excursion |
2181 (goto-char (point-min)) | 2171 (save-restriction |
2182 | 2172 (widen) |
2183 ;; Maybe copy first line, such as `\input texinfo', to temp file. | 2173 (goto-char (point-min)) |
2184 (and tex-first-line-header-regexp | 2174 (let ((search-end (save-excursion |
2185 (looking-at tex-first-line-header-regexp) | 2175 (forward-line 100) |
2186 (write-region (point) | 2176 (point))) |
2187 (progn (forward-line 1) | 2177 (already-output 0) |
2188 (setq already-output (point))) | 2178 hbeg hend) |
2189 tex-out-file nil nil)) | 2179 ;; Maybe copy first line, such as `\input texinfo', to temp file. |
2190 | 2180 (and tex-first-line-header-regexp |
2191 ;; Write out the header, if there is one, | 2181 (looking-at tex-first-line-header-regexp) |
2192 ;; and any of the specified region which extends before it. | 2182 (write-region (point) |
2193 ;; But don't repeat anything already written. | 2183 (progn (forward-line 1) |
2194 (if (re-search-forward tex-start-of-header search-end t) | 2184 (setq already-output (point))) |
2195 (let (hbeg) | 2185 file)) |
2196 (beginning-of-line) | 2186 ;; Write out the header, if there is one, and any of the |
2197 (setq hbeg (point)) ;mark beginning of header | 2187 ;; specified region which extends before it. But don't repeat |
2198 (if (re-search-forward tex-end-of-header nil t) | 2188 ;; anything already written. |
2199 (let (hend) | 2189 (and tex-start-of-header |
2200 (forward-line 1) | 2190 (re-search-forward tex-start-of-header search-end t) |
2201 (setq hend (point)) ;mark end of header | 2191 (progn |
2202 (write-region (max (min hbeg beg) already-output) | 2192 (beginning-of-line) |
2203 hend | 2193 (setq hbeg (point)) ; mark beginning of header |
2204 tex-out-file | 2194 (when (re-search-forward tex-end-of-header nil t) |
2205 (not (zerop already-output)) nil) | 2195 (forward-line 1) |
2206 (setq already-output hend))))) | 2196 (setq hend (point)) ; mark end of header |
2207 | 2197 (write-region |
2208 ;; Write out the specified region | 2198 (max (if beg |
2209 ;; (but don't repeat anything already written). | 2199 (min hbeg beg) |
2210 (write-region (max beg already-output) end | 2200 hbeg) |
2211 tex-out-file | 2201 already-output) |
2212 (not (zerop already-output)) nil)) | 2202 hend file (not (zerop already-output))) |
2213 ;; Write the trailer, if any. | 2203 (setq already-output hend)))) |
2214 ;; Precede it with a newline to make sure it | 2204 already-output)))) |
2215 ;; is not hidden in a comment. | |
2216 (if tex-trailer | |
2217 (write-region (concat "\n" tex-trailer) nil | |
2218 tex-out-file t nil))))) | |
2219 | 2205 |
2220 (defun tex-buffer () | 2206 (defun tex-buffer () |
2221 "Run TeX on current buffer. See \\[tex-region] for more information. | 2207 "Run TeX on current buffer. See \\[tex-region] for more information. |
2222 Does not save the buffer, so it's useful for trying experimental versions. | 2208 Does not save the buffer, so it's useful for trying experimental versions. |
2223 See \\[tex-file] for an alternative." | 2209 See \\[tex-file] for an alternative." |