Commit b2272f67 authored by Glenn Morris's avatar Glenn Morris
Browse files

(tex-region): Handle the case where the region is not in

`tex-main-file'.  Move the old code that applies to both cases...
(tex-region-1): ...to this new function.
parent 7d9de000
......@@ -2103,57 +2103,41 @@ The value of `tex-command' specifies the command to use to run TeX."
(let* ((zap-directory
(file-name-as-directory (expand-file-name tex-directory)))
(tex-out-file (expand-file-name (concat tex-zap-file ".tex")
zap-directory)))
zap-directory))
(main-file (expand-file-name (tex-main-file)))
(texbuf (current-buffer))
;; Variables local to texbuf that are needed by t-r-1.
(hstart tex-start-of-header)
(hend tex-end-of-header)
(first tex-first-line-header-regexp)
(trailer tex-trailer)
size)
;; Don't delete temp files if we do the same buffer twice in a row.
(or (eq (current-buffer) tex-last-buffer-texed)
(tex-delete-last-temp-files t))
;; Write the new temp file.
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(forward-line 100)
(let ((search-end (point))
(default-directory zap-directory)
(already-output 0))
(goto-char (point-min))
;; Maybe copy first line, such as `\input texinfo', to temp file.
(and tex-first-line-header-regexp
(looking-at tex-first-line-header-regexp)
(write-region (point)
(progn (forward-line 1)
(setq already-output (point)))
tex-out-file nil nil))
;; Write out the header, if there is one,
;; and any of the specified region which extends before it.
;; But don't repeat anything already written.
(if (re-search-forward tex-start-of-header search-end t)
(let (hbeg)
(beginning-of-line)
(setq hbeg (point)) ;mark beginning of header
(if (re-search-forward tex-end-of-header nil t)
(let (hend)
(forward-line 1)
(setq hend (point)) ;mark end of header
(write-region (max (min hbeg beg) already-output)
hend
tex-out-file
(not (zerop already-output)) nil)
(setq already-output hend)))))
;; Write out the specified region
;; (but don't repeat anything already written).
(write-region (max beg already-output) end
tex-out-file
(not (zerop already-output)) nil))
;; Write the trailer, if any.
;; Precede it with a newline to make sure it
;; is not hidden in a comment.
(if tex-trailer
(write-region (concat "\n" tex-trailer) nil
tex-out-file t nil))))
(if (string-equal main-file (buffer-file-name))
(tex-region-1 zap-directory tex-out-file beg end)
; If this is not the main file, we need to first make a merged
; buffer with the contents of the main file and this file.
(with-temp-buffer
;; This is so we get prompted about any changes on disk.
(insert (with-current-buffer (find-file-noselect main-file)
(save-restriction
(widen)
(buffer-string))))
;; Get the size of the text inserted before the specified region.
(setq size (- (point-max) (point-min))
beg (+ beg size)
end (+ end size))
(insert (with-current-buffer texbuf
(save-restriction
(widen)
(buffer-string))))
(set (make-local-variable 'tex-start-of-header) hstart)
(set (make-local-variable 'tex-end-of-header) hend)
(set (make-local-variable 'tex-first-line-header-regexp) first)
(set (make-local-variable 'tex-trailer) trailer)
(tex-region-1 zap-directory tex-out-file beg end)))
;; Record the file name to be deleted afterward.
(setq tex-last-temp-file tex-out-file)
;; Use a relative file name here because (1) the proper dir
......@@ -2162,6 +2146,56 @@ The value of `tex-command' specifies the command to use to run TeX."
(tex-start-tex tex-command (concat tex-zap-file ".tex") zap-directory)
(setq tex-print-file tex-out-file)))
(defun tex-region-1 (zap-directory tex-out-file beg end)
"Write the region BEG END of the current buffer to TEX-OUT-FILE.
The region is surrounded by a header and trailer, if they are found."
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(forward-line 100)
(let ((search-end (point))
(default-directory zap-directory) ; why?
(already-output 0))
(goto-char (point-min))
;; Maybe copy first line, such as `\input texinfo', to temp file.
(and tex-first-line-header-regexp
(looking-at tex-first-line-header-regexp)
(write-region (point)
(progn (forward-line 1)
(setq already-output (point)))
tex-out-file nil nil))
;; Write out the header, if there is one,
;; and any of the specified region which extends before it.
;; But don't repeat anything already written.
(if (re-search-forward tex-start-of-header search-end t)
(let (hbeg)
(beginning-of-line)
(setq hbeg (point)) ;mark beginning of header
(if (re-search-forward tex-end-of-header nil t)
(let (hend)
(forward-line 1)
(setq hend (point)) ;mark end of header
(write-region (max (min hbeg beg) already-output)
hend
tex-out-file
(not (zerop already-output)) nil)
(setq already-output hend)))))
;; Write out the specified region
;; (but don't repeat anything already written).
(write-region (max beg already-output) end
tex-out-file
(not (zerop already-output)) nil))
;; Write the trailer, if any.
;; Precede it with a newline to make sure it
;; is not hidden in a comment.
(if tex-trailer
(write-region (concat "\n" tex-trailer) nil
tex-out-file t nil)))))
(defun tex-buffer ()
"Run TeX on current buffer. See \\[tex-region] for more information.
Does not save the buffer, so it's useful for trying experimental versions.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment