mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-05 11:45:45 +00:00
(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.
This commit is contained in:
parent
f73dcb6f54
commit
595a68b473
@ -2126,39 +2126,29 @@ The value of `tex-command' specifies the command to use to run TeX."
|
||||
(tex-out-file (expand-file-name (concat tex-zap-file ".tex")
|
||||
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)
|
||||
(ismain (string-equal main-file (buffer-file-name)))
|
||||
already-output)
|
||||
;; 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))
|
||||
(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)))
|
||||
(let ((default-directory zap-directory)) ; why?
|
||||
;; We assume the header is fully contained in tex-main-file.
|
||||
;; We use f-f-ns so we get prompted about any changes on disk.
|
||||
(with-current-buffer (find-file-noselect main-file)
|
||||
(setq already-output (tex-region-header tex-out-file
|
||||
(and ismain beg))))
|
||||
;; Write out the specified region (but don't repeat anything
|
||||
;; already written in the header).
|
||||
(write-region (if ismain
|
||||
(max beg already-output)
|
||||
beg)
|
||||
end tex-out-file (not (zerop already-output)))
|
||||
;; 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)))
|
||||
;; 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
|
||||
@ -2167,55 +2157,51 @@ 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))
|
||||
(defun tex-region-header (file &optional beg)
|
||||
"If there is a TeX header in the current buffer, write it to FILE.
|
||||
Return point at the end of the region so written, or zero. If
|
||||
the optional buffer position BEG is specified, then the region
|
||||
written out starts at BEG, if this lies before the start of the header.
|
||||
|
||||
;; 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 the first line matches `tex-first-line-header-regexp', it is
|
||||
also written out. The variables `tex-start-of-header' and
|
||||
`tex-end-of-header' are used to locate the header. Note that the
|
||||
start of the header is required to be within the first 100 lines."
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(goto-char (point-min))
|
||||
(let ((search-end (save-excursion
|
||||
(forward-line 100)
|
||||
(point)))
|
||||
(already-output 0)
|
||||
hbeg hend)
|
||||
;; 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)))
|
||||
file))
|
||||
;; 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.
|
||||
(and tex-start-of-header
|
||||
(re-search-forward tex-start-of-header search-end t)
|
||||
(progn
|
||||
(beginning-of-line)
|
||||
(setq hbeg (point)) ; mark beginning of header
|
||||
(when (re-search-forward tex-end-of-header nil t)
|
||||
(forward-line 1)
|
||||
(setq hend (point)) ; mark end of header
|
||||
(write-region
|
||||
(max (if beg
|
||||
(min hbeg beg)
|
||||
hbeg)
|
||||
already-output)
|
||||
hend file (not (zerop already-output)))
|
||||
(setq already-output hend))))
|
||||
already-output))))
|
||||
|
||||
(defun tex-buffer ()
|
||||
"Run TeX on current buffer. See \\[tex-region] for more information.
|
||||
|
Loading…
Reference in New Issue
Block a user