[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/annotate 88ed6f22cb 285/372: - rewritten export and integr
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/annotate 88ed6f22cb 285/372: - rewritten export and integrate of annotations |
Date: |
Fri, 4 Feb 2022 16:59:08 -0500 (EST) |
branch: elpa/annotate
commit 88ed6f22cb9515af49a8e4a95717fea490de2eed
Author: cage <cage-invalid@invalid>
Commit: cage <cage-invalid@invalid>
- rewritten export and integrate of annotations
export use now the Emacs diff functions to generate a buffer
containing the patch.
---
annotate.el | 216 +++++++++++++++++++++++++++---------------------------------
1 file changed, 96 insertions(+), 120 deletions(-)
diff --git a/annotate.el b/annotate.el
index 16c9eb0b9a..f975e5c743 100644
--- a/annotate.el
+++ b/annotate.el
@@ -695,44 +695,104 @@ annotate-actual-comment-end"
strings
(list (annotate-actual-comment-end)))))
+(cl-defstruct annotate-overlay-lines
+ overlay
+ line
+ relative-start
+ relative-end)
+
+(cl-defun annotate--integrate-annotations (&key (use-annotation-marker t)
+ (as-new-buffer t)
+ (switch-to-new-buffer t))
+ "Export all annotations, This function is not part of the public API"
+ (cl-labels ((build-input-text-line ()
+ (save-excursion
+ (annotate--split-lines (buffer-substring-no-properties
(point-min)
+
(point-max))))))
+
+ (let* ((filename (annotate-actual-file-name))
+ (export-buffer (generate-new-buffer (concat filename
".annotated.diff")))
+ (annotations-overlays (sort (annotate-all-annotations)
+ (lambda (a b)
+ (< (overlay-start a)
+ (overlay-start b)))))
+ (lines-count (count-lines (point-min) (point-max)))
+ (buffer-lines (build-input-text-line))
+ (ov-line-pos (mapcar (lambda (ov)
+ (line-number-at-pos
(overlay-start ov)))
+ annotations-overlays))
+ (ov-start-pos-in-line (mapcar (lambda (ov)
+ (save-excursion
+ (goto-char (overlay-start ov))
+ (let ((bol
(annotate-beginning-of-line-pos)))
+ (- (overlay-start ov) bol))))
+ annotations-overlays))
+ (ov-end-pos-in-line (mapcar (lambda (ov)
+ (save-excursion
+ (goto-char (overlay-start ov))
+ (let ((bol
(annotate-beginning-of-line-pos)))
+ (- (overlay-end ov) bol))))
+ annotations-overlays))
+ (overlay-relative-pos (cl-mapcar (lambda (ov line start end)
+ (make-annotate-overlay-lines
:overlay ov
+
:line line
+
:relative-start start
+
:relative-end end))
+ annotations-overlays
+ ov-line-pos
+ ov-start-pos-in-line
+ ov-end-pos-in-line))
+ (parent-buffer-mode major-mode)
+ (output-buffer (if as-new-buffer
+ export-buffer
+ (current-buffer))))
+ (with-current-buffer output-buffer
+ (when as-new-buffer
+ (erase-buffer)
+ (funcall parent-buffer-mode))
+ (cl-loop
+ for buffer-line in buffer-lines
+ for line-number from 1 do
+ (let ((overlays-in-line (remove-if-not (lambda (a) (=
(annotate-overlay-lines-line a)
+ line-number))
+ overlay-relative-pos)))
+ (when (or (/= (1- line-number)
+ lines-count)
+ (not (annotate-string-empty-p buffer-line)))
+ (insert buffer-line "\n")
+ (cl-loop for ov-line-pos in overlays-in-line do
+ (let* ((overlay (annotate-overlay-lines-overlay
ov-line-pos))
+ (relative-start
(annotate-overlay-lines-relative-start ov-line-pos))
+ (relative-end
(annotate-overlay-lines-relative-end ov-line-pos))
+ (padding (if (<= (1- relative-start) 0)
+ ""
+ (make-string (1-
relative-start) ? )))
+ (annotated-lines (annotate--split-lines
(overlay-get overlay
+
'annotation)))
+ (ov-length (- relative-end relative-start))
+ (underline (make-string (1- ov-length)
+
annotate-integrate-higlight)))
+ (insert (annotate-wrap-in-comment padding underline)
"\n")
+ (when (annotate-chain-last-p overlay)
+ (when use-annotation-marker
+ (insert (annotate-wrap-in-comment
annotate-integrate-marker) "\n"))
+ (cl-loop for line in annotated-lines do
+ (insert (annotate-wrap-in-comment line)
"\n")))))))))
+ (when (and as-new-buffer
+ switch-to-new-buffer)
+ (switch-to-buffer output-buffer))
+ (when (not as-new-buffer)
+ (delete-region (point) (point-max)))
+ output-buffer)))
+
(defun annotate-integrate-annotations ()
"Write all annotations into the file as comments below the annotated line.
An example might look like this:"
(interactive)
- (cl-labels ((wrap-annotation-text (text)
- (let* ((lines (annotate--split-lines text))
- (commented-lines (mapcar 'annotate-wrap-in-comment
- (append (list
annotate-integrate-marker)
- lines))))
- (annotate--join-with-string commented-lines "\n"))))
- (save-excursion
- (dolist (ov (sort (annotate-all-annotations)
- (lambda (o1 o2)
- (< (overlay-start o1)
- (overlay-start o2)))))
- (goto-char (overlay-start ov))
- (let* ((ov-start (overlay-start ov))
- (ov-end (overlay-end ov))
- (bol (progn (beginning-of-line)
- (point)))
- (underline-marker (if (= bol ov-start)
- (make-string (max 0 (- ov-end ov-start
1))
-
annotate-integrate-higlight)
- (make-string (max 0 (- ov-end ov-start))
-
annotate-integrate-higlight))))
- (end-of-line)
- (insert "\n"
- (annotate-wrap-in-comment (make-string (max 0
- (- ov-start
- bol
-
(annotate-comments-length)))
- ? )
- underline-marker))
- (when (annotate-chain-last-p ov)
- (let ((annotation-integrated-text (wrap-annotation-text
(overlay-get ov
-
'annotation))))
- (insert "\n" annotation-integrated-text))))))
- (annotate-clear-annotations)))
+ (annotate--integrate-annotations :use-annotation-marker t
+ :as-new-buffer nil
+ :switch-to-new-buffer nil)
+ (annotate-clear-annotations))
(defun annotate-export-annotations ()
"Export all annotations as a unified diff file.
@@ -753,92 +813,8 @@ An example might look like this:
This diff does not contain any changes, but highlights the
annotation, and can be conveniently viewed in diff-mode."
(interactive)
- (cl-labels ((build-annotation-text-lines (text)
- (let* ((lines (annotate--split-lines text))
- (commented-lines (mapcar (lambda (a) (concat "+"
-
(annotate-wrap-in-comment a)))
- lines)))
- (annotate--join-with-string commented-lines "\n"))))
-
- (let* ((filename (annotate-actual-file-name))
- (export-buffer (generate-new-buffer (concat filename
- ".annotations.diff")))
- (annotations (sort (annotate-all-annotations)
- (lambda (a b)
- (< (overlay-start a)
- (overlay-start b)))))
- (parent-buffer-mode major-mode))
- ;; write the diff file description
- (with-current-buffer export-buffer
- (funcall parent-buffer-mode)
- (let ((time-string
- (format-time-string "%F %H:%M:%S.%N %z"
- (nth 5 (file-attributes filename
'integer)))))
- (insert "--- " filename "\t" time-string "\n")
- (insert "+++ " filename "\t" time-string "\n")))
- ;; write diff, highlight, and comment for each annotation
- (save-excursion
- ;; sorted annotations by location in the file
- (dolist (ann annotations)
- (let* ((start (overlay-start ann))
- (end (overlay-end ann))
- (text (overlay-get ann 'annotation))
- ;; beginning of first annotated line
- (bol (progn (goto-char start)
- (beginning-of-line)
- (point)))
- ;; end of last annotated line
- (eol (progn (goto-char end)
- (end-of-line)
- (point)))
- ;; all lines that contain annotations
- (annotated-lines (buffer-substring bol eol))
- ;; context lines before the annotation
- (previous-lines (annotate-context-before start))
- ;; context lines after the annotation
- (following-lines (annotate-context-after end))
- (chain-last-p (annotate-chain-last-p ann))
- (annotation-line-list (butlast (split-string
- (annotate-prefix-lines "+"
annotated-lines)
- "\n")))
- (integration-padding (if (and (> (1- start) 0)
- (> (1- start) bol))
- (make-string (- (1- start) bol) ? )
- ""))
- (added-lines-text (build-annotation-text-lines (concat
integration-padding
-
text)))
- ;; line header for diff chunk
- (diff-range (annotate-diff-line-range start end
-
added-lines-text
-
chain-last-p)))
- (with-current-buffer export-buffer
- (insert "@@ " diff-range " @@\n")
- (when previous-lines
- (insert (annotate-prefix-lines " " previous-lines)))
- (insert (annotate-prefix-lines "-" annotated-lines))
- ;; loop over annotation lines and insert with highlight
- ;; and annotation text
- (let ((annotation-line-list (butlast (split-string
- (annotate-prefix-lines "+"
annotated-lines)
- "\n")))
- (integration-padding (if (and (> (1- start) 0)
- (> (1- start) bol))
- (make-string (- (1- start) bol)
? )
- "")))
- (insert (car annotation-line-list) "\n")
- (unless (string= (car annotation-line-list) "+")
- (insert "+"
- (annotate-wrap-in-comment integration-padding
- (make-string (- end start)
-
annotate-integrate-higlight))
- "\n"))
- (when (annotate-chain-last-p ann)
- (insert (build-annotation-text-lines (concat
integration-padding text))
- "\n")))
- (insert (annotate-prefix-lines " " following-lines t))))))
- (switch-to-buffer export-buffer)
- (diff-mode)
- (view-mode))))
+ (let ((buffer (annotate--integrate-annotations :switch-to-new-buffer nil)))
+ (diff-buffers (current-buffer) buffer "-u")))
(defun annotate--font-lock-matcher (limit)
"Finds the next annotation. Matches two areas:
- [nongnu] elpa/annotate a81a7d9386 209/372: - updated versions;, (continued)
- [nongnu] elpa/annotate a81a7d9386 209/372: - updated versions;, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 30ee7a0b87 198/372: - fixed 'annotate-previous-annotation-ends' and 'annotate-next-annotation-ends', ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 1143087515 213/372: - updated documentation., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate b8fd76f712 216/372: Merge pull request #60 from cage2/rethink-multiline-annotations, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate a37ec08035 249/372: - added signalling of error to 'annotate-switch-db';, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 34f0df8d5b 251/372: - updated documentation., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate bc89867f65 289/372: Merge pull request #92 from cage2/expand-db-path, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate be998ca006 263/372: Merge pull request #81 from cage2/popup-annotation, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 804c7b9421 257/372: - Removed internal link because of issue #79., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate a9f061cecd 268/372: - added more docstrings., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 88ed6f22cb 285/372: - rewritten export and integrate of annotations,
ELPA Syncer <=
- [nongnu] elpa/annotate 463e215bec 284/372: - fixed export for annotated text made from a single line., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate e53c0f5adf 296/372: - added checking encrypted (GPG) file format, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate be48989c98 299/372: - fixed 'annotate-previous-annotation-ends', ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 59ca58c06b 308/372: changed function from 'font-lock-ensure' to 'font-lock-flush'., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate f823c3cf09 354/372: - changed default for asking confirm before deleting an annotation: the value is now 'nil' (do not prompt for confirmation)., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 3bb813cd62 360/372: - updated NEWS.org and Changelog., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate 140eb6b6cb 363/372: - updated NEWS.org;, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate b22f594f3b 336/372: Merge pull request #107 from cage2/prevent-saving-empty-db, ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate de86b9b22e 341/372: - removed uses of regular expressions from 'annotate-unwrap-text'., ELPA Syncer, 2022/02/04
- [nongnu] elpa/annotate e083073ead 371/372: - updated Changelog;, ELPA Syncer, 2022/02/04