1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Merge from origin/emacs-25

9ee6ecb lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
526d80c Port chart.el methods to cl-generic.
410bb69 Add nt/INSTALL.W64 build instructions
8f5b524 Add new input method 'programmer-dvorak'
6d11f6e Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
bb83bb1 Fix EWW rendering of long RTL lines
b1a8509 fix  bug#21054
ce5ad12 Clean up cairo printing code
This commit is contained in:
John Wiegley 2016-01-11 22:48:07 -08:00
commit 8d7128c46d
10 changed files with 560 additions and 179 deletions

View file

@ -60,6 +60,7 @@
;; with all the bitmaps you want to use.
(require 'eieio)
(eval-when-compile (require 'cl-generic))
;;; Code:
(define-obsolete-variable-alias 'chart-map 'chart-mode-map "24.1")
@ -124,14 +125,6 @@ too much in text characters anyways.")
(font-lock-mode -1) ;Isn't it off already? --Stef
)
(defun chart-new-buffer (obj)
"Create a new buffer NAME in which the chart OBJ is displayed.
Returns the newly created buffer."
(with-current-buffer (get-buffer-create (format "*%s*" (oref obj title)))
(chart-mode)
(setq chart-local-object obj)
(current-buffer)))
(defclass chart ()
((title :initarg :title
:initform "Emacs Chart")
@ -156,7 +149,15 @@ Returns the newly created buffer."
)
"Superclass for all charts to be displayed in an Emacs buffer.")
(defmethod initialize-instance :AFTER ((obj chart) &rest _fields)
(defun chart-new-buffer (obj)
"Create a new buffer NAME in which the chart OBJ is displayed.
Returns the newly created buffer."
(with-current-buffer (get-buffer-create (format "*%s*" (oref obj title)))
(chart-mode)
(setq chart-local-object obj)
(current-buffer)))
(cl-defmethod initialize-instance :after ((obj chart) &rest _fields)
"Initialize the chart OBJ being created with FIELDS.
Make sure the width/height is correct."
(oset obj x-width (- (window-width) 10))
@ -201,7 +202,7 @@ Make sure the width/height is correct."
:initform vertical))
"Subclass for bar charts (vertical or horizontal).")
(defmethod chart-draw ((c chart) &optional buff)
(cl-defmethod chart-draw ((c chart) &optional buff)
"Start drawing a chart object C in optional BUFF.
Erases current contents of buffer."
(save-excursion
@ -221,19 +222,19 @@ Erases current contents of buffer."
(message "Rendering chart...done")
))
(defmethod chart-draw-title ((c chart))
(cl-defmethod chart-draw-title ((c chart))
"Draw a title upon the chart.
Argument C is the chart object."
(chart-display-label (oref c title) 'horizontal 0 0 (window-width)
(oref c title-face)))
(defmethod chart-size-in-dir ((c chart) dir)
(cl-defmethod chart-size-in-dir ((c chart) dir)
"Return the physical size of chart C in direction DIR."
(if (eq dir 'vertical)
(oref c y-width)
(oref c x-width)))
(defmethod chart-draw-axis ((c chart))
(cl-defmethod chart-draw-axis ((c chart))
"Draw axis into the current buffer defined by chart C."
(let ((ymarg (oref c y-margin))
(xmarg (oref c x-margin))
@ -247,7 +248,7 @@ Argument C is the chart object."
ymarg (+ ymarg xlen)))
)
(defmethod chart-axis-draw ((a chart-axis) &optional dir margin zone start end)
(cl-defmethod chart-axis-draw ((a chart-axis) &optional dir margin zone start end)
"Draw some axis for A in direction DIR with MARGIN in boundary.
ZONE is a zone specification.
START and END represent the boundary."
@ -257,7 +258,7 @@ START and END represent the boundary."
1 0))
start end (oref a name-face)))
(defmethod chart-translate-xpos ((c chart) x)
(cl-defmethod chart-translate-xpos ((c chart) x)
"Translate in chart C the coordinate X into a screen column."
(let ((range (oref (oref c x-axis) bounds)))
(+ (oref c x-margin)
@ -266,7 +267,7 @@ START and END represent the boundary."
(float (- (cdr range) (car range))))))))
)
(defmethod chart-translate-ypos ((c chart) y)
(cl-defmethod chart-translate-ypos ((c chart) y)
"Translate in chart C the coordinate Y into a screen row."
(let ((range (oref (oref c y-axis) bounds)))
(+ (oref c x-margin)
@ -276,7 +277,7 @@ START and END represent the boundary."
(float (- (cdr range) (car range)))))))))
)
(defmethod chart-axis-draw ((a chart-axis-range) &optional dir margin zone _start _end)
(cl-defmethod chart-axis-draw ((a chart-axis-range) &optional dir margin zone _start _end)
"Draw axis information based upon a range to be spread along the edge.
A is the chart to draw. DIR is the direction.
MARGIN, ZONE, START, and END specify restrictions in chart space."
@ -313,7 +314,7 @@ MARGIN, ZONE, START, and END specify restrictions in chart space."
(setq i (+ i j))))
)
(defmethod chart-translate-namezone ((c chart) n)
(cl-defmethod chart-translate-namezone ((c chart) n)
"Return a dot-pair representing a positional range for a name.
The name in chart C of the Nth name resides.
Automatically compensates for direction."
@ -329,7 +330,7 @@ Automatically compensates for direction."
(+ m -1 (round (* lpn (+ 1.0 (float n))))))
))
(defmethod chart-axis-draw ((a chart-axis-names) &optional dir margin zone _start _end)
(cl-defmethod chart-axis-draw ((a chart-axis-names) &optional dir margin zone _start _end)
"Draw axis information based upon A range to be spread along the edge.
Optional argument DIR is the direction of the chart.
Optional arguments MARGIN, ZONE, START and END specify boundaries of the drawing."
@ -368,7 +369,7 @@ Optional arguments MARGIN, ZONE, START and END specify boundaries of the drawing
s (cdr s))))
)
(defmethod chart-draw-data ((c chart-bar))
(cl-defmethod chart-draw-data ((c chart-bar))
"Display the data available in a bar chart C."
(let* ((data (oref c sequences))
(dir (oref c direction))
@ -413,7 +414,7 @@ Optional arguments MARGIN, ZONE, START and END specify boundaries of the drawing
(setq data (cdr data))))
)
(defmethod chart-add-sequence ((c chart) &optional seq axis-label)
(cl-defmethod chart-add-sequence ((c chart) &optional seq axis-label)
"Add to chart object C the sequence object SEQ.
If AXIS-LABEL, then the axis stored in C is updated with the bounds of SEQ,
or is created with the bounds of SEQ."
@ -445,7 +446,7 @@ or is created with the bounds of SEQ."
;;; Charting optimizers
(defmethod chart-trim ((c chart) max)
(cl-defmethod chart-trim ((c chart) max)
"Trim all sequences in chart C to be at most MAX elements long."
(let ((s (oref c sequences)))
(while s
@ -455,7 +456,7 @@ or is created with the bounds of SEQ."
(setq s (cdr s))))
)
(defmethod chart-sort ((c chart) pred)
(cl-defmethod chart-sort ((c chart) pred)
"Sort the data in chart C using predicate PRED.
See `chart-sort-matchlist' for more details."
(let* ((sl (oref c sequences))