auctex-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[AUCTeX-devel] Re: Contribution to AUCTeX


From: Vincent Belaïche
Subject: [AUCTeX-devel] Re: Contribution to AUCTeX
Date: Mon, 21 Jun 2010 21:55:49 +0200

Dear Ralf,

The reason why there is this new variable is simply that I completely
missed the fact that this was already existing. I had looked only into
Texinfo, and I forgot to look out also in the native texinfo.

I provide hereinattached a corrected patch with a ChangeLog.

I also acknowledge the fact that there should be only one feature per
patch and not 3 like this:

1. optimization of texinfo-environment-regexp (use of regexp-opt)

2. Addition of environment mark function

3. Addition of section mark function.


I can split this into 3 differents/subsequent contributions with
respective ChangeLog -- or not, it is up to your feedback.

If you want 3 separate patches, then could you please tell me in which
order I should provide them.

BR,
   Vincent.

PS: please remember I am not subscribed to the devel list, explicitely
include me for answer.


> From: address@hidden
> To: address@hidden
> CC: address@hidden
> Subject: Re: Contribution to AUCTeX‏
> Date: Fri, 18 Jun 2010 17:44:51 +0200
>
> * Vincent Belaïche (2010-06-13) writes:
>
> > + (defconst Texinfo-structuring-command-levels-alist
> > + '( ("top" . -1) ("chapter" . 0) ("unnumbered" . 0) ("appendix" . 0)
> > + ("majorheading" . 2) ("chapheading" . 2)
> > + ("section" . 5) ("unnumberedsec" . 5) ("appendixsec" . 5) ("heading" . 5)
> > + ("subsection" . 9) ("unnumberedsubsec" . 9) ("appendixsubsec" . 9) 
> > ("subheading" . 9)
> > + ("subsubsection" . 13))
> > + "Alist providing for each strucuting command the corresponding
> > + level starting by -1 for @top, down to 13 for @subsubsection." )
>
> Why is this constant required? tex-info.el has been using
> `texinfo-section-list' up until now which also includes information on
> sectioning levels.
>
> By the way, it would probably be easier if you included only one new
> feature per patch. (Including a ChangeLog entry!) Then we could
> already check it in once we discussed it and would not have to wait
> until we discussed the other features as well. (c:
>
> --
> Ralf
2010-06-03  Vincent Belaïche  <address@hidden>

        * tex-info.el (Texinfo-mark-section): Creation of function
        (Texinfo-mark-environment): Creation of function
        (texinfo-environment-regexp): optimize by use of regexp-opt

*** c:/Programme/GNU/emacs-extension/lisp/old/tex-info.el.old   Mon Jun 21 
20:13:52 2010
--- tex-info.el Mon Jun 21 20:11:11 2010
***************
*** 52,61 ****
      ("verbatim") ("vtable")) 
    "Alist of Texinfo environments.")
  
  (defconst texinfo-environment-regexp
    ;; Overwrite version from `texinfo.el'.
    (concat "address@hidden("
!         (mapconcat 'car Texinfo-environment-list "\\|")
          "\\|end\\)\\>")
    "Regexp for environment-like Texinfo list commands.
  Subexpression 1 is what goes into the corresponding address@hidden' 
statement.")
--- 52,68 ----
      ("verbatim") ("vtable")) 
    "Alist of Texinfo environments.")
  
+ (defconst Texinfo-structuring-command-re
+   (concat "^\\s-*@" 
+         (funcall 'regexp-opt (mapcar 'car texinfo-section-list)
+          'word))
+   "Regexp to  match structuring commands")
+   
+ 
  (defconst texinfo-environment-regexp
    ;; Overwrite version from `texinfo.el'.
    (concat "address@hidden("
!         (regexp-opt (mapcar 'car Texinfo-environment-list))
          "\\|end\\)\\>")
    "Regexp for environment-like Texinfo list commands.
  Subexpression 1 is what goes into the corresponding address@hidden' 
statement.")
***************
*** 160,165 ****
--- 167,292 ----
          (goto-char (match-beginning 0))
        (error "Can't locate start of current environment")))))
  
+ 
+ 
+ (defun Texinfo-mark-environment (&optional count)
+   "Set mark to end of current environment and point to the matching begin.
+ If prefix argument COUNT is given, mark the respective number of
+ enclosing environments.  The command will not work properly if
+ there are unbalanced begin-end pairs in comments and verbatim
+ environments."
+   ;; TODO:
+   ;; This is identical to the LaTeX counterpart but for the find begin/end
+   ;; functions. So some day the implemenation should be factorized.
+   (interactive "p")
+   (setq count (if count (abs count) 1))
+   (let ((cur (point)) beg end)
+     ;; Only change point and mark after beginning and end were found.
+     ;; Point should not end up in the middle of nowhere if the search fails.
+     (save-excursion
+       (dotimes (c count) 
+       (Texinfo-find-env-end))
+       (setq end (line-beginning-position 2))
+       (goto-char cur)
+       (dotimes (c count)
+       (Texinfo-find-env-start)
+       (unless (= (1+ c) count)
+         (beginning-of-line 0)))
+       (setq beg (point)))
+     (set-mark end)
+     (goto-char beg)
+     (TeX-activate-region)))
+ 
+ 
+ (defun Texinfo-mark-section (&optional to-be-marked)
+   "Mark current section, with inclusion of any containing to-be-marked,
+ where current section is started by any of the structuring
+ commands matched by regexp in constant
+ `Texinfo-structuring-command-re'.
+ 
+ If optional argument TO-BE-MARKED is set to 1 or is a non nil empty
+ argument, then mark current node.  
+ 
+ If optional argument TO-BE-MARKED is set to 2 or to `-', then
+ mark current section, with exclusion of any subsections."
+   (interactive "P")
+   (let (beg end is-beg-section is-end-section)
+     (cond 
+      ;; node
+      ((or (eq to-be-marked 1) (and (consp to-be-marked) (eq (car 
to-be-marked) 4)))
+       (setq beg
+           (save-excursion
+             (end-of-line)
+             (re-search-backward "address@hidden>" nil t ))
+           end
+           (save-excursion
+             (beginning-of-line)
+             (when 
+                 (re-search-forward "address@hidden(?:node\\|bye\\)\\_>" nil t 
)
+               (beginning-of-line)
+               (point)))))
+      ;; section with exclusion of any subsection
+      ((memq to-be-marked '(- 2)) 
+       (setq beg (save-excursion 
+                 (end-of-line)
+                 (re-search-backward Texinfo-structuring-command-re nil t))
+           is-beg-section t
+           end 
+           (save-excursion
+             (beginning-of-line)
+             (when
+                 (re-search-forward (concat Texinfo-structuring-command-re 
+                                            "\\|address@hidden>" ) nil t)
+               (save-match-data 
+                 (beginning-of-line)
+                 (point))))
+           is-end-section (match-string 1)))
+      ;;
+      (t
+       (let (section-command-level)
+       (setq beg 
+             (save-excursion 
+               (end-of-line)
+               (re-search-backward Texinfo-structuring-command-re nil t)))
+       (when beg
+         (setq is-beg-section t
+               section-command-level  
+               (cadr (assoc (match-string 1) texinfo-section-list))
+               end 
+               (save-excursion
+                 (beginning-of-line)
+                 (while
+                     (and (re-search-forward (concat 
Texinfo-structuring-command-re 
+                                                     "\\|address@hidden>" ) 
+                                             nil t)
+                           (or
+                            (null (setq is-end-section  (match-string 1)))
+                            (> (cadr (assoc is-end-section 
+                                         texinfo-section-list))
+                               section-command-level))))
+                 (when (match-string 0)
+                   (beginning-of-line)
+                   (point))))))));  (cond ...)
+     (when (and beg end)
+       ;; now take also enclosing node of beg and end
+       (dolist 
+         (boundary '(beg end))
+       (when (symbol-value (intern (concat "is-" (symbol-name boundary) 
"-section")))
+         (save-excursion
+           (goto-char (symbol-value boundary))
+           (while 
+               (and
+                (null (bobp))
+                (progn
+                  (beginning-of-line 0)
+                  (looking-at "^\\s-*\\($\\|@\\(c\\|comment\\)\\_>\\)"))))
+           (when  (looking-at "address@hidden>")
+             (set boundary (point))))))
+ 
+       (set-mark end)
+       (goto-char beg)
+       (TeX-activate-region) )))
+ 
  (defun Texinfo-insert-node ()
    "Insert a Texinfo node in the current buffer.
  That means, insert the string address@hidden' and prompt for current,
***************
*** 231,236 ****
--- 358,365 ----
  
      ;; Simulating LaTeX-mode
      (define-key map "\C-c\C-e" 'Texinfo-environment)
+     (define-key map "\C-c." 'Texinfo-mark-environment)
+     (define-key map "\C-c*" 'Texinfo-mark-section)
      (define-key map "\C-c\n"   'address@hidden)
      (or (key-binding "\e\r")
        (define-key map "\e\r" 'address@hidden)) ;*** Alias

reply via email to

[Prev in Thread] Current Thread [Next in Thread]