[Python-modules-commits] r6013 - in packages/python-docutils/trunk/debian (3 files)

smcv at users.alioth.debian.org smcv at users.alioth.debian.org
Tue Jul 22 15:10:53 UTC 2008


    Date: Tuesday, July 22, 2008 @ 15:10:51
  Author: smcv
Revision: 6013

Update rst.el to upstream r5596, fixing performance issues

Added:
  packages/python-docutils/trunk/debian/patches/17_speed_up_rst_el.dpatch
Modified:
  packages/python-docutils/trunk/debian/changelog
  packages/python-docutils/trunk/debian/patches/00list

Modified: packages/python-docutils/trunk/debian/changelog
===================================================================
--- packages/python-docutils/trunk/debian/changelog	2008-07-21 11:35:39 UTC (rev 6012)
+++ packages/python-docutils/trunk/debian/changelog	2008-07-22 15:10:51 UTC (rev 6013)
@@ -1,3 +1,12 @@
+python-docutils (0.5-2) UNRELEASED; urgency=low
+
+  FIXME: target unstable? I'd prefer to get a second opinion from madduck
+
+  * Update rst.el to upstream Subversion r5596, which apparently fixes
+    all its performance problems (17_speed_up_rst_el.dpatch, closes: #474941)
+
+ -- Simon McVittie <smcv at debian.org>  Tue, 22 Jul 2008 16:02:29 +0100
+
 python-docutils (0.5-1) experimental; urgency=low
 
   * New upstream release (closes: #491344, #474939)

Modified: packages/python-docutils/trunk/debian/patches/00list
===================================================================
--- packages/python-docutils/trunk/debian/patches/00list	2008-07-21 11:35:39 UTC (rev 6012)
+++ packages/python-docutils/trunk/debian/patches/00list	2008-07-22 15:10:51 UTC (rev 6013)
@@ -4,3 +4,4 @@
 14_distutils_setup.dpatch
 15_emacs_debian_paths.dpatch
 16_disable_picins.dpatch
+17_speed_up_rst_el.dpatch

Added: packages/python-docutils/trunk/debian/patches/17_speed_up_rst_el.dpatch
===================================================================
--- packages/python-docutils/trunk/debian/patches/17_speed_up_rst_el.dpatch	                        (rev 0)
+++ packages/python-docutils/trunk/debian/patches/17_speed_up_rst_el.dpatch	2008-07-22 15:10:51 UTC (rev 6013)
@@ -0,0 +1,436 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 17_speed_up_rst_el.dpatch by Simon McVittie <smcv at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Update rst.el to upstream r5596, fixing performance problems (#474941)
+
+ at DPATCH@
+
+From 3ec4b5fc5d512f221b1916de123cfaef2e2ce5d3 Mon Sep 17 00:00:00 2001
+From: smerten <smerten at 929543f6-e4f2-0310-98a6-ba3bd3dd1d04>
+Date: Wed, 16 Jul 2008 21:09:56 +0000
+Subject: [PATCH] Improved font-lock code to use a better `PRE-MATCH-FORM`. As a result
+ performance is no longer a problem. `rst-mode-lazy` is no longer
+ needed. `font-lock-support-mode` is currently switched off.
+
+git-svn-id: http://svn.berlios.de/svnroot/repos/docutils/trunk/docutils@5596 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
+---
+ tools/editors/emacs/rst.el |  321 ++++++++++++++++++++------------------------
+ 1 files changed, 144 insertions(+), 177 deletions(-)
+
+diff --git a/tools/editors/emacs/rst.el b/tools/editors/emacs/rst.el
+index 34be79a..2e03fbb 100644
+--- a/tools/editors/emacs/rst.el
++++ b/tools/editors/emacs/rst.el
+@@ -359,18 +359,6 @@ is for which (pred elem) is true)"
+   :type '(hook))
+ 
+ 
+-(defcustom rst-mode-lazy t
+-  "*If non-nil Rst Mode font-locks comment, literal blocks, and section titles
+-correctly. Because this is really slow it switches on Lazy Lock Mode
+-automatically. You may increase Lazy Lock Defer Time for reasonable results.
+-
+-If nil comments and literal blocks are font-locked only on the line they start.
+-
+-The value of this variable is used when Rst Mode is turned on."
+-  :group 'rst
+-  :type '(boolean))
+-
+-
+ ;;;###autoload
+ (define-derived-mode rst-mode text-mode "ReST"
+   :abbrev-table rst-mode-abbrev-table
+@@ -386,9 +374,7 @@ negative prefix arg to rotate in the other direction.
+ \\{rst-mode-map}
+ 
+ Turning on `rst-mode' calls the normal hooks `text-mode-hook' and
+-`rst-mode-hook'. This mode also supports font-lock highlighting.
+-You may customize `rst-mode-lazy' to toggle font-locking of
+-blocks."
++`rst-mode-hook'. This mode also supports font-lock highlighting."
+ 
+   (set (make-local-variable 'paragraph-separate) paragraph-start)
+   (set (make-local-variable 'indent-line-function) 'indent-relative-maybe)
+@@ -411,40 +397,14 @@ blocks."
+ 
+   ;; Font lock
+   (set (make-local-variable 'font-lock-defaults)
+-       '(rst-font-lock-keywords-function
++       '(rst-font-lock-keywords
+ 	 t nil nil nil
+ 	 (font-lock-multiline . t)
+ 	 (font-lock-mark-block-function . mark-paragraph)))
+   (when (boundp 'font-lock-support-mode)
+-    ;; rst-mode has its own mind about font-lock-support-mode
+-    (make-local-variable 'font-lock-support-mode)
+-    ;; jit-lock-mode replaced lazy-lock-mode in GNU Emacs 22
+-    (let ((jit-or-lazy-lock-mode
+-           (cond
+-            ((fboundp 'lazy-lock-mode) 'lazy-lock-mode)
+-            ((fboundp 'jit-lock-mode) 'jit-lock-mode)
+-            ;; if neither lazy-lock nor jit-lock is supported,
+-            ;; tell user and disable rst-mode-lazy
+-            (t (when rst-mode-lazy
+-                 (message "Disabled lazy fontification, because no known support mode found.")
+-                 (setq rst-mode-lazy nil))))))
+-      (cond
+-       ((and (not rst-mode-lazy) (not font-lock-support-mode)))
+-       ;; No support mode set and none required - leave it alone
+-       ((or (not font-lock-support-mode) ;; No support mode set (but required)
+-	    (symbolp font-lock-support-mode)) ;; or a fixed mode for all
+-	(setq font-lock-support-mode
+-	      (list (cons 'rst-mode (and rst-mode-lazy jit-or-lazy-lock-mode))
+-		    (cons t font-lock-support-mode))))
+-       ((and (listp font-lock-support-mode)
+-	     (not (assoc 'rst-mode font-lock-support-mode)))
+-	;; A list of modes missing rst-mode
+-	(setq font-lock-support-mode
+-	      (cons (cons 'rst-mode (and rst-mode-lazy jit-or-lazy-lock-mode))
+-		    font-lock-support-mode))))))
+-
+-  )
+-
++    ;; rst-mode does not need font-lock-support-mode and works not well with
++    ;; jit-lock-mode because reST is not made for machines
++    (set (make-local-variable 'font-lock-support-mode) nil)))
+ 
+ ;;;###autoload
+ (define-minor-mode rst-minor-mode
+@@ -2776,11 +2736,11 @@ details check the Rst Faces Defaults group."
+   (string-match "[[:alpha:]]" "b")
+   "Non-nil if we can use the character classes in our regexps.")
+ 
+-(defun rst-font-lock-keywords-function ()
+-  "Returns keywords to highlight in rst mode according to current settings."
++(defvar rst-font-lock-keywords
+   ;; The reST-links in the comments below all relate to sections in
+   ;; http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html
+-  (let* ( ;; This gets big - so let's define some abbreviations
++  (let* ( ;; This gets big - so let's define some abbreviations; the trailing
++	  ;; numbers in the names give the number of regex groups contained
+ 	 ;; horizontal white space
+ 	 (re-hws "[\t ]")
+ 	 ;; beginning of line with possible indentation
+@@ -2822,7 +2782,8 @@ details check the Rst Faces Defaults group."
+ 	 ;; recognized
+ 	 (re-ado2 (concat "^\\(\\(["
+ 			  (if rst-use-char-classes
+-			      "^[:word:][:space:][:cntrl:]" "^\\w \t\x00-\x1F")
++			      "^[:word:][:space:][:cntrl:]"
++			    "^\\w \t\x00-\x1F")
+ 			  "]\\)\\2\\2+\\)" re-hws "*$"))
+ 	 )
+     (list
+@@ -2923,76 +2884,53 @@ details check the Rst Faces Defaults group."
+      ;; Do all block fontification as late as possible so 'append works
+ 
+      ;; Sections_ / Transitions_
+-     (append
+-      (list
+-       re-ado2)
+-      (if (not rst-mode-lazy)
+-	  (list 1 rst-block-face)
+-	(list
+-	 (list 'rst-font-lock-handle-adornment
+-	       '(progn
+-		  (setq rst-font-lock-adornment-point (match-end 1))
+-		  (point-max))
+-	       nil
+-	       (list 1 '(cdr (assoc nil rst-adornment-faces-alist))
+-		     'append t)
+-	       (list 2 '(cdr (assoc rst-font-lock-level
+-				    rst-adornment-faces-alist))
+-		     'append t)
+-	       (list 3 '(cdr (assoc nil rst-adornment-faces-alist))
+-		     'append t)))))
++     (list
++      re-ado2
++      (list 'rst-font-lock-handle-adornment-match
++	    '(rst-font-lock-handle-adornment-limit
++	      (match-string-no-properties 1) (match-end 1))
++	    nil
++	    (list 1 '(cdr (assoc nil rst-adornment-faces-alist))
++		  'append t)
++	    (list 2 '(cdr (assoc rst-font-lock-adornment-level
++				 rst-adornment-faces-alist))
++		  'append t)
++	    (list 3 '(cdr (assoc nil rst-adornment-faces-alist))
++		  'append t)))
+ 
+      ;; `Comments`_
+-     (append
+-      (list
+-       (concat re-bol "\\(" re-ems "\\)\[^[|_]\\([^:\n]\\|:\\([^:\n]\\|$\\)\\)*$")
+-
+-       (list 1 rst-comment-face))
+-      (if rst-mode-lazy
+-	  (list
+-	   (list 'rst-font-lock-find-unindented-line
+-		 '(progn
+-		    (setq rst-font-lock-indentation-point (match-end 1))
+-		    (point-max))
+-		 nil
+-		 (list 0 rst-comment-face 'append)))))
+-     (append
+-      (list
+-       (concat re-bol "\\(" re-emt "\\)\\(\\s *\\)$")
+-       (list 1 rst-comment-face)
+-       (list 2 rst-comment-face))
+-      (if rst-mode-lazy
+-	  (list
+-	   (list 'rst-font-lock-find-unindented-line
+-		 '(progn
+-		    (setq rst-font-lock-indentation-point 'next)
+-		    (point-max))
+-		 nil
+-		 (list 0 rst-comment-face 'append)))))
++     (list
++      (concat re-bol "\\(" re-ems "\\)\[^[|_]\\([^:\n]\\|:\\([^:\n]\\|$\\)\\)*$")
++      (list 1 rst-comment-face)
++      (list 'rst-font-lock-find-unindented-line-match
++	    '(rst-font-lock-find-unindented-line-limit (match-end 1))
++	    nil
++	    (list 0 rst-comment-face 'append)))
++     (list
++      (concat re-bol "\\(" re-emt "\\)\\(\\s *\\)$")
++      (list 1 rst-comment-face)
++      (list 2 rst-comment-face)
++      (list 'rst-font-lock-find-unindented-line-match
++	    '(rst-font-lock-find-unindented-line-limit 'next)
++	    nil
++	    (list 0 rst-comment-face 'append)))
+ 
+      ;; `Literal Blocks`_
+-     (append
+-      (list
+-       (concat re-bol "\\(\\([^.\n]\\|\\.[^.\n]\\).*\\)?\\(::\\)$")
+-       (list 3 rst-block-face))
+-      (if rst-mode-lazy
+-	  (list
+-	   (list 'rst-font-lock-find-unindented-line
+-		 '(progn
+-		    (setq rst-font-lock-indentation-point t)
+-		    (point-max))
+-		 nil
+-		 (list 0 rst-literal-face 'append)))))
+-
+-    ;; `Doctest Blocks`_
+-    (append
++     (list
++      (concat re-bol "\\(\\([^.\n]\\|\\.[^.\n]\\).*\\)?\\(::\\)$")
++      (list 3 rst-block-face)
++      (list 'rst-font-lock-find-unindented-line-match
++	    '(rst-font-lock-find-unindented-line-limit t)
++	    nil
++	    (list 0 rst-literal-face 'append)))
++
++     ;; `Doctest Blocks`_
+      (list
+       (concat re-bol "\\(>>>\\|\\.\\.\\.\\)\\(.+\\)")
+       (list 1 rst-block-face)
+-      (list 2 rst-literal-face)))
+-    )))
+-
+-
++      (list 2 rst-literal-face))
++     ))
++  "Returns keywords to highlight in rst mode according to current settings.")
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Indented blocks
+@@ -3027,54 +2965,70 @@ point is not moved."
+     (goto-char (or fnd start))
+     fnd))
+ 
+-;; Stores the point where the current indentation ends if a number. If `next'
+-;; indicates `rst-font-lock-find-unindented-line' shall take the indentation
+-;; from the next line if this is not empty. If non-nil indicates
+-;; `rst-font-lock-find-unindented-line' shall take the indentation from the
+-;; next non-empty line. Also used as a trigger for
+-;; `rst-font-lock-find-unindented-line'.
+-(defvar rst-font-lock-indentation-point nil)
+-
+-(defun rst-font-lock-find-unindented-line (limit)
+-  (let* ((ind-pnt rst-font-lock-indentation-point)
+-	 (beg-pnt ind-pnt))
+-    ;; May run only once - enforce this
+-    (setq rst-font-lock-indentation-point nil)
+-    (when (and ind-pnt (not (numberp ind-pnt)))
+-      ;; Find indentation point in next line if any
+-      (setq ind-pnt
+-	    (save-excursion
+-	      (save-match-data
+-		(if (eq ind-pnt 'next)
+-		    (when (and (zerop (forward-line 1)) (< (point) limit))
+-		      (setq beg-pnt (point))
+-		      (when (not (looking-at "\\s *$"))
++;; Beginning of the match if `rst-font-lock-find-unindented-line-end'.
++(defvar rst-font-lock-find-unindented-line-begin nil)
++
++;; End of the match as determined by
++;; `rst-font-lock-find-unindented-line-limit'. Also used as a trigger for
++;; `rst-font-lock-find-unindented-line-match'.
++(defvar rst-font-lock-find-unindented-line-end nil)
++
++;; Finds the next unindented line relative to indenation at IND-PNT and returns
++;; this point, the end of the buffer or nil if nothing found. If IND-PNT is
++;; `next' takes the indentation from the next line if this is not empty. If
++;; IND-PNT is non-nil but not a number takes the indentation from the next
++;; non-empty line.
++(defun rst-font-lock-find-unindented-line-limit (ind-pnt)
++  (setq rst-font-lock-find-unindented-line-begin ind-pnt)
++  (setq rst-font-lock-find-unindented-line-end
++	(save-excursion
++	  (when (not (numberp ind-pnt))
++	    ;; Find indentation point in next line if any
++	    (setq ind-pnt
++		  ;; FIXME: Should be refactored to two different functions
++		  ;;        giving their result to this function, may be
++		  ;;        integrated in caller
++		  (save-match-data
++		    (if (eq ind-pnt 'next)
++			(when (and (zerop (forward-line 1))
++				   (< (point) (point-max)))
++			  ;; Not at EOF
++			  (setq rst-font-lock-find-unindented-line-begin (point))
++			  (when (not (looking-at "\\s *$"))
++			    ;; Use end of indentation if non-empty line
++			    (looking-at "\\s *")
++			    (match-end 0)))
++		      ;; Skip until non-empty line or EOF
++		      (while (and (zerop (forward-line 1))
++				  (< (point) (point-max))
++				  (looking-at "\\s *$")))
++		      (when (< (point) (point-max))
++			;; Not at EOF
++			(setq rst-font-lock-find-unindented-line-begin (point))
+ 			(looking-at "\\s *")
+-			(match-end 0)))
+-		  (while (and (zerop (forward-line 1)) (< (point) limit)
+-			      (looking-at "\\s *$")))
+-		  (when (< (point) limit)
+-		    (setq beg-pnt (point))
+-		    (looking-at "\\s *")
+-		    (match-end 0)))))))
+-    (when ind-pnt
+-      (goto-char ind-pnt)
+-      ;; Always succeeds because the limit set by PRE-MATCH-FORM is the
+-      ;; ultimate point to find
+-      (goto-char (or (rst-forward-indented-block nil limit) limit))
+-      (set-match-data (list beg-pnt (point)))
+-      t)))
++			(match-end 0))))))
++	  (when ind-pnt
++	    (goto-char ind-pnt)
++	    (or (rst-forward-indented-block nil (point-max))
++		(point-max))))))
++
++;; Sets the match found by `rst-font-lock-find-unindented-line-limit' the first
++;; time called or nil.
++(defun rst-font-lock-find-unindented-line-match (limit)
++  (when rst-font-lock-find-unindented-line-end
++    (set-match-data
++     (list rst-font-lock-find-unindented-line-begin
++	   rst-font-lock-find-unindented-line-end))
++    ;; Make sure this is called only once
++    (setq rst-font-lock-find-unindented-line-end nil)
++    t))
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Adornments
+ 
+-;; Stores the point where the current adornment ends. Also used as a trigger
+-;; for `rst-font-lock-handle-adornment'.
+-(defvar rst-font-lock-adornment-point nil)
+-
+-;; Here `rst-font-lock-handle-adornment' stores the section level of the
++;; Here `rst-font-lock-handle-adornment-match' stores the section level of the
+ ;; current adornment or t for a transition.
+-(defvar rst-font-lock-level nil)
++(defvar rst-font-lock-adornment-level nil)
+ 
+ ;; FIXME: It would be good if this could be used to markup section titles of
+ ;; given level with a special key; it would be even better to be able to
+@@ -3153,8 +3107,8 @@ entered.")
+ 	  (setq end-ovr end-pnt)
+ 	  (forward-line 1)
+ 	  (setq beg-txt (point))
+-	  (while (and (< (point) limit) (not end-txt))
+-	    (if (looking-at "\\s *$")
++	  (while (and (<= (point) limit) (not end-txt))
++	    (if (or (= (point) limit) (looking-at "\\s *$"))
+ 		;; No underline found
+ 		(setq end-txt (1- (point)))
+ 	      (when (looking-at (concat "\\(" ado-re "\\)\\s *$"))
+@@ -3169,33 +3123,46 @@ entered.")
+ 	  (setq end-und end-pnt)
+ 	  (setq end-txt (1- beg-und))
+ 	  (setq beg-txt (progn
+-			  (if (re-search-backward "^\\s *$" 1 'move)
+-			      (forward-line 1))
+-			  (point)))))
++			  (goto-char end-txt)
++			  (forward-line 0)
++			  (point)))
++	  (when (and (zerop (forward-line -1))
++		     (looking-at (concat "\\(" ado-re "\\)\\s *$")))
++	    ;; There is a matching overline
++	    (setq key (concat (list ado-ch) "o"))
++	    (setq beg-ovr (point))
++	    (setq end-ovr (match-end 1)))))
+ 	(list key
+ 	      (or beg-ovr beg-txt beg-und)
+ 	      (or end-und end-txt end-und)
+ 	      beg-ovr end-ovr beg-txt end-txt beg-und end-und)))))
+ 
+-;; Handles adornments for font-locking section titles and transitions. Returns
+-;; three match groups. First and last match group matched pure overline /
+-;; underline adornment while second group matched section title text. Each
+-;; group may not exist.
+-(defun rst-font-lock-handle-adornment (limit)
+-  (let ((ado-pnt rst-font-lock-adornment-point))
++;; Stores the result of `rst-classify-adornment'. Also used as a trigger
++;; for `rst-font-lock-handle-adornment-match'.
++(defvar rst-font-lock-adornment-data nil)
++
++;; Determines limit for adornments for font-locking section titles and
++;; transitions. In fact it determines all things necessary and puts the result
++;; to `rst-font-lock-adornment-data'. ADO is the complete adornment matched.
++;; ADO-END is the point where ADO ends. Returns the point where the whole
++;; adorned construct ends.
++(defun rst-font-lock-handle-adornment-limit (ado ado-end)
++  (let ((ado-data (rst-classify-adornment ado ado-end (point-max))))
++    (setq rst-font-lock-adornment-level (rst-adornment-level (car ado-data) t))
++    (setq rst-font-lock-adornment-data (cdr ado-data))
++    (goto-char (nth 1 ado-data))
++    (nth 2 ado-data)))
++
++;; Sets the match found by `rst-font-lock-handle-adornment-limit' the first
++;; time called or nil.
++(defun rst-font-lock-handle-adornment-match (limit)
++  (let ((ado-data rst-font-lock-adornment-data))
+     ;; May run only once - enforce this
+-    (setq rst-font-lock-adornment-point nil)
+-    (if ado-pnt
+-      (let* ((ado (rst-classify-adornment (match-string-no-properties 1)
+-					  ado-pnt limit))
+-	     (key (car ado))
+-	     (mtc (cdr ado)))
+-	(setq rst-font-lock-level (rst-adornment-level key t))
+-	(goto-char (nth 1 mtc))
+-	(set-match-data mtc)
+-	t))))
+-
+-
++    (setq rst-font-lock-adornment-data nil)
++    (when ado-data
++      (goto-char (nth 1 ado-data))
++      (set-match-data ado-data)
++      t)))
+ 
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+-- 
+1.5.6.3
+


Property changes on: packages/python-docutils/trunk/debian/patches/17_speed_up_rst_el.dpatch
___________________________________________________________________
Name: svn:executable
   + *




More information about the Python-modules-commits mailing list