view lisp/ps-def.el @ 92870:8f17f65dd575

* textmodes/org.el (org-ctrl-c-star): Implement a missing branch in the decision tree. (org-select-remember-template): Cleaned the code. (org-prepare-dblock): Added the extra :content parameter. (org-write-agenda): New output type ".ics" files. (org-write-agenda): Call `org-icalendar-verify-function', both for time stamps and for TODO entries. (org-agenda-collect-markers, org-create-marker-find-array) (org-check-agenda-marker-table): New functions. (org-agenda-marker-table): New variable. (org-export-as-html): Revert the change that killed the html buffer. Side effects first need to be studied carefully. (org-get-tags-at): Fix the structure of the condition-case statement. (org-ts-regexp0, org-repeat-re, org-display-custom-time) (org-timestamp-change): Fix regulear expressions to swallow the extra character for repeat-shift control. (org-auto-repeat-maybe): Implement the new repeater mechanisms. (org-get-legal-level): Aliased to `org-get-valid-level'. (org-dblock-write:clocktable): Added a :link parameter, linking headlines to their location in the Org agenda files. (org-get-tags-at): Bugfix: prevent `org-back-to-heading' from throwing an error when getting tags before headlines. (org-timestamp-change, org-modify-ts-extra) (org-ts-regexp1): Fix timestamp editing. (org-agenda-custom-commands-local-options): New constant. (org-agenda-custom-commands): Use `org-agenda-custom-commands-local-options' to improve customize type. "htmlize": Removed hack to fix face problem with htmlize, it no longer seem necessary. (org-follow-link-hook): New hook. (org-agenda-custom-commands): Added "Component" as a tag for each item in a command serie. (org-open-at-point): Run `org-follow-link-hook'. (org-agenda-schedule): Bugfix: don't display marker type when it is `nil'. (org-store-link): org-irc required. (org-set-regexps-and-options): Parse the new logging options. (org-extract-log-state-settings): New function. (org-todo): Handle the new ways of recording state change stuff. (org-local-logging): New function. (org-columns-open-link): Fixed bug with opening link in column view. (org-local-logging): New function (org-todo): Make sure that LOGGING properties are honoured. (org-todo-keywords): Improve docstring. (org-startup-options): Cleanup startup options. (org-set-regexps-and-options): Process the "!" markers. (org-todo): Respect the new logging stuff. (org-log-note-how): New variable. (org-add-log-maybe): New parameter HOW that defines how logging should be done and also overrides PURPOSE. Add a docstring. (org-add-log-note): Check if we really need to ask for a note. (org-get-current-options): Digest the new keyword. (org-agenda-reset-markers): Renamed from `org-agenda-maybe-reset-markers'. FORCE argument removed. (org-diary, org-agenda-quit, org-prepare-agenda): Call the renamed function, without force argument. (org-buffer-property-keys): Bind local variables s and p. (org-make-tags-matcher): Allow "" to match an empty or non-existent property value. (org-export-as-html): Join unsorted lists when they directly follow each other. Such lists may be created by headlines that are converted to lists. (org-nofm-to-completion): New function. (org-export-as-html): Use :html-extension instead of org-export-html-extension. (org-store-link): Support for links from `rmail-summary-mode'. (org-columns-new, org-complete, org-set-property): Set the `include-columns' argument in the call to `org-buffer-property-keys'. (org-buffer-property-keys): New argument `include-columns', to include properties expected by any of the COLUMS formats in the current buffer. (org-cleaned-string-for-export): Get rid of drawers first, so that they will be removed also in the text before the first headline. (org-clock-report): Show the clocktable when found. (org-refile): Fix positioning bug when `org-reverse-note-order' is nil. (org-version): With prefix argument, insert `org-version' at point. (org-agenda-goto): Recenter the window after finding the target location, to make sure the correct position will be displayed. (org-agenda-get-deadlines): Don't scale priority with the warning period. (org-insert-heading): Don't break line in the middle of the line. (org-agenda-get-deadlines): Allow `org-deadline-warning-days' to be 0. (org-update-checkbox-count): Revamped to deal with hierarchical beckboxes. This was a patch from Miguel A. Figueroa-Villanueva. (org-remove-timestamp-with-keyword): New function. (org-schedule, org-deadline): Use `org-remove-timestamp-with-keyword' to make sure all such time stamps are removed. (org-mode): Support for `align'. (org-agenda-get-deadlines): Make sure priorities increase as the due date approaches and is passed. (org-remember-apply-template): Fixed problem with tags that contain "_" or "@". (org-make-link-regexps): Improve the regular expression for plain links. (org-agenda-get-closed): List each clocking entry. (org-set-tags): Only tabify before tags if indent-tabs-mode is t. (org-special-ctrl-k): New option. (org-kill-line): New function. (org-archive-all-done): Fixed incorrect number of stars in regexp. (org-refile-get-location): New function. (org-refile-goto-last-stored): New function. (org-global-tags-completion-table): Add the value of org-tag-alist in each buffer, to make sure that also unused tags will be available for completion. (org-columns-edit-value) (org-columns-next-allowed-value): Only update if not in agenda. (org-clocktable-steps): New function. (org-dblock-write:clocktable): Call `org-clocktable-steps'. (org-archive-subtree): Add the outline tree context as a property. (org-closest-date): New optional argument `prefer'. (org-goto-auto-isearch): New option. (org-goto-map, org-get-location): Implement auto-isearch. (org-goto-local-auto-isearch-map): New variable. (org-goto-local-search-forward-headings) (org-goto-local-auto-isearch): New functions
author Carsten Dominik <dominik@science.uva.nl>
date Thu, 13 Mar 2008 08:54:11 +0000
parents 85b224f48b52
children 46345beb0bac
line wrap: on
line source

;;; ps-def.el --- XEmacs and Emacs definitions for ps-print

;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.

;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;;	Kenichi Handa <handa@m17n.org> (multi-byte characters)
;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters)
;;	Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, print, PostScript
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free
;; Software Foundation; either version 3, or (at your option) any later
;; version.

;; GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY
;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
;; details.

;; You should have received a copy of the GNU General Public License along with
;; GNU Emacs; see the file COPYING.  If not, write to the Free Software
;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

;;; Commentary:

;; See ps-print.el for documentation.

;;; Code:

(eval-and-compile
  (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))

(declare-function ps-plot-with-face "ps-print" (from to face))
(declare-function ps-plot-string    "ps-print" (string))

(defvar ps-bold-faces)                  ; in ps-print.el
(defvar ps-italic-faces)



;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; XEmacs Definitions


(cond
 ((featurep 'xemacs)			; XEmacs


  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; ps-bdf

  (defvar installation-directory nil)
  (defvar coding-system-for-read)


  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; ps-mule

  (defvar leading-code-private-22 157)

  (or (fboundp 'charset-bytes)
      (defun charset-bytes (charset) 1)) ; ascii

  (or (fboundp 'charset-dimension)
      (defun charset-dimension (charset) 1)) ; ascii

  (or (fboundp 'charset-id)
      (defun charset-id (charset) 0))	; ascii

  (or (fboundp 'charset-width)
      (defun charset-width (charset) 1)) ; ascii

  (or (fboundp 'find-charset-region)
      (defun find-charset-region (beg end &optional table)
	(list 'ascii)))

  (or (fboundp 'char-width)
      (defun char-width (char) 1))	; ascii

  (or (fboundp 'chars-in-region)
      (defun chars-in-region (beg end)
	(- (max beg end) (min beg end))))

  (or (fboundp 'forward-point)
      (defun forward-point (arg)
	(save-excursion
	  (let ((count (abs arg))
		(step  (if (zerop arg)
			   0
			 (/ arg arg))))
	    (while (and (> count 0)
			(< (point-min) (point)) (< (point) (point-max)))
	      (forward-char step)
	      (setq count (1- count)))
	    (+ (point) (* count step))))))

  (or (fboundp 'decompose-composite-char)
      (defun decompose-composite-char (char &optional type
					    with-composition-rule)
	nil))

  (or (fboundp 'encode-coding-string)
      (defun encode-coding-string (string coding-system &optional nocopy)
	(if nocopy
	    string
	  (copy-sequence string))))

  (or (fboundp 'coding-system-p)
      (defun coding-system-p (obj) nil))

  (or (fboundp 'ccl-execute-on-string)
      (defun ccl-execute-on-string (ccl-prog status str
					     &optional contin unibyte-p)
	str))

  (or (fboundp 'define-ccl-program)
      (defmacro define-ccl-program (name ccl-program &optional doc)
	`(defconst ,name nil ,doc)))

  (or (fboundp 'multibyte-string-p)
      (defun multibyte-string-p (str)
	(let ((len (length str))
	      (i 0)
	      multibyte)
	  (while (and (< i len) (not (setq multibyte (> (aref str i) 255))))
	    (setq i (1+ i)))
	  multibyte)))

  (or (fboundp 'string-make-multibyte)
      (defalias 'string-make-multibyte 'copy-sequence))

  (or (fboundp 'encode-char)
      (defun encode-char (ch ccs)
	ch))


  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; ps-print

  ;; GNU Emacs
  (or (fboundp 'line-beginning-position)
      (defun line-beginning-position (&optional n)
	(save-excursion
	  (and n (/= n 1) (forward-line (1- n)))
	  (beginning-of-line)
	  (point))))


  ;; GNU Emacs
  (or (fboundp 'find-composition)
      (defalias 'find-composition 'ignore))


  (defun ps-xemacs-color-name (color)
    (if (color-specifier-p color)
	(color-name color)
      color))


  (defalias 'ps-mark-active-p 'region-active-p)


  (defun ps-face-foreground-name (face)
    (ps-xemacs-color-name (face-foreground face)))


  (defun ps-face-background-name (face)
    (ps-xemacs-color-name (face-background face)))


  (defalias 'ps-frame-parameter 'frame-property)


  ;; Return t if the device (which can be changed during an emacs session)
  ;; can handle colors.
  ;; XEmacs change: Need to check for emacs-major-version too.
  (if (or (> emacs-major-version 19)
	  (and (= emacs-major-version 19)
	       (>= emacs-minor-version 12)))
      ;; xemacs >= 19.12
      (defun ps-color-device ()
	(eq (device-class) 'color))
    ;; xemacs < 19.12
    (setq ps-print-color-p nil)
    (defalias 'ps-color-device 'ignore))


  (defun ps-mapper (extent list)
    (nconc list
	   (list (list (extent-start-position extent) 'push extent)
		 (list (extent-end-position extent) 'pull extent)))
    nil)


  (defun ps-extent-sorter (a b)
    (< (extent-priority a) (extent-priority b)))


  (defun ps-xemacs-face-kind-p (face kind kind-regex)
    (let* ((frame-font (or (face-font-instance face)
			   (face-font-instance 'default)))
	   (kind-cons
	    (and frame-font
		 (assq kind
		       (font-instance-properties frame-font))))
	   (kind-spec (cdr-safe kind-cons))
	   (case-fold-search t))
      (and kind-spec (string-match kind-regex kind-spec))))


  ;; to avoid XEmacs compilation gripes
  (defvar coding-system-for-write)
  (defvar buffer-file-coding-system)


  (and (fboundp 'find-coding-system)
       (or (funcall 'find-coding-system 'raw-text-unix)
	   (funcall 'copy-coding-system 'no-conversion-unix 'raw-text-unix)))


  (defun ps-color-values (x-color)
    (let ((color (ps-xemacs-color-name x-color)))
      (cond
       ((fboundp 'x-color-values)
	(funcall 'x-color-values color))
       ((and (fboundp 'color-instance-rgb-components)
	     (ps-color-device))
	(funcall 'color-instance-rgb-components
		 (if (color-instance-p x-color)
		     x-color
		   (make-color-instance color))))
       (t
	(error "No available function to determine X color values")))))


  (defun ps-face-bold-p (face)
    (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
	(memq face ps-bold-faces)))	; Kludge-compatible


  (defun ps-face-italic-p (face)
    (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
	(ps-xemacs-face-kind-p face 'SLANT "i\\|o")
	(memq face ps-italic-faces)))	; Kludge-compatible


  (defalias 'ps-face-strikeout-p 'ignore)


  (defalias 'ps-face-overline-p 'ignore)


  (defalias 'ps-face-box-p 'ignore)


  ;; XEmacs will have to make do with %s (princ) for floats.
  (defvar ps-color-format "%s %s %s")
  (defvar ps-float-format "%s ")


  (defun ps-generate-postscript-with-faces1 (from to)
    ;; Generate some PostScript.
    (let ((face 'default)
	  (position to)
	  ;; XEmacs
	  ;; Build the list of extents...
	  (a (cons 'dummy nil))
	  record type extent extent-list)
      (map-extents 'ps-mapper nil from to a)
      (setq a (sort (cdr a) 'car-less-than-car)
	    extent-list nil)

      ;; Loop through the extents...
      (while a
	(setq record (car a)
	      position (car record)

	      record (cdr record)
	      type (car record)

	      record (cdr record)
	      extent (car record))

	;; Plot up to this record.
	;; XEmacs 19.12: for some reason, we're getting into a
	;; situation in which some of the records have
	;; positions less than 'from'.  Since we've narrowed
	;; the buffer, this'll generate errors.  This is a hack,
	;; but don't call ps-plot-with-face unless from > point-min.
	(and (>= from (point-min))
	     (ps-plot-with-face from (min position (point-max)) face))

	(cond
	 ((eq type 'push)
	  (and (extent-face extent)
	       (setq extent-list (sort (cons extent extent-list)
				       'ps-extent-sorter))))

	 ((eq type 'pull)
	  (setq extent-list (sort (delq extent extent-list)
				  'ps-extent-sorter))))

	(setq face (if extent-list
		       (extent-face (car extent-list))
		     'default)
	      from position
	      a (cdr a)))

      (ps-plot-with-face from to face)))

  )
 (t					; Emacs
  ;; Do nothing
  ))					; end cond featurep



;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Emacs Definitions


(cond
 ((featurep 'xemacs)			; XEmacs
  ;; Do nothing
  )
 (t					; Emacs


  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; ps-print


  (defun ps-mark-active-p ()
    mark-active)


  (defun ps-face-foreground-name (face)
    (face-foreground face nil t))


  (defun ps-face-background-name (face)
    (face-background face nil t))


  (defalias 'ps-frame-parameter 'frame-parameter)


  ;; Return t if the device (which can be changed during an emacs session) can
  ;; handle colors.  This function is not yet implemented for GNU emacs.
  (defun ps-color-device ()
    (if (fboundp 'color-values)
	(funcall 'color-values "Green")
      t))


  (defun ps-color-values (x-color)
    (cond
     ((fboundp 'color-values)
      (funcall 'color-values x-color))
     ((fboundp 'x-color-values)
      (funcall 'x-color-values x-color))
     (t
      (error "No available function to determine X color values"))))


  (defun ps-face-bold-p (face)
    (or (face-bold-p face)
	(memq face ps-bold-faces)))


  (defun ps-face-italic-p (face)
    (or (face-italic-p face)
	(memq face ps-italic-faces)))


  (defun ps-face-strikeout-p (face)
    (eq (face-attribute face :strike-through) t))


  (defun ps-face-overline-p (face)
    (eq (face-attribute face :overline) t))


  (defun ps-face-box-p (face)
    (not (memq (face-attribute face :box) '(nil unspecified))))


  ;; Emacs understands the %f format; we'll use it to limit color RGB values
  ;; to three decimals to cut down some on the size of the PostScript output.
  (defvar ps-color-format "%0.3f %0.3f %0.3f")
  (defvar ps-float-format "%0.3f ")


  (defun ps-generate-postscript-with-faces1 (from to)
    ;; Generate some PostScript.
    (let ((face 'default)
	  (position to)
	  ;; Emacs
	  (property-change from)
	  (overlay-change from)
	  (save-buffer-invisibility-spec buffer-invisibility-spec)
	  (buffer-invisibility-spec nil)
	  before-string after-string)
      (while (< from to)
	(and (< property-change to)	; Don't search for property change
					; unless previous search succeeded.
	     (setq property-change (next-property-change from nil to)))
	(and (< overlay-change to)	; Don't search for overlay change
					; unless previous search succeeded.
	     (setq overlay-change (min (next-overlay-change from)
				       to)))
	(setq position (min property-change overlay-change)
	      before-string nil
	      after-string nil)
	;; The code below is not quite correct,
	;; because a non-nil overlay invisible property
	;; which is inactive according to the current value
	;; of buffer-invisibility-spec nonetheless overrides
	;; a face text property.
	(setq face
	      (cond ((let ((prop (get-text-property from 'invisible)))
		       ;; Decide whether this invisible property
		       ;; really makes the text invisible.
		       (if (eq save-buffer-invisibility-spec t)
			   (not (null prop))
			 (or (memq prop save-buffer-invisibility-spec)
			     (assq prop save-buffer-invisibility-spec))))
		     'emacs--invisible--face)
		    ((get-text-property from 'face))
		    (t 'default)))
	(let ((overlays (overlays-at from))
	      (face-priority -1))	; text-property
	  (while (and overlays
		      (not (eq face 'emacs--invisible--face)))
	    (let* ((overlay (car overlays))
		   (overlay-invisible
		    (overlay-get overlay 'invisible))
		   (overlay-priority
		    (or (overlay-get overlay 'priority) 0)))
	      (and (> overlay-priority face-priority)
		   (setq before-string
			 (or (overlay-get overlay 'before-string)
			     before-string)
			 after-string
			 (or (and (<= (overlay-end overlay) position)
				  (overlay-get overlay 'after-string))
			     after-string)
			 face-priority overlay-priority
			 face
			 (cond
			  ((if (eq save-buffer-invisibility-spec t)
			       (not (null overlay-invisible))
			     (or (memq overlay-invisible
				       save-buffer-invisibility-spec)
				 (assq overlay-invisible
				       save-buffer-invisibility-spec)))
			   'emacs--invisible--face)
			  ((overlay-get overlay 'face))
			  (t face)
			  ))))
	    (setq overlays (cdr overlays))))
	;; Plot up to this record.
	(and before-string
	     (ps-plot-string before-string))
	(ps-plot-with-face from position face)
	(and after-string
	     (ps-plot-string after-string))
	(setq from position))
      (ps-plot-with-face from to face)))

  ))					; end cond featurep


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(provide 'ps-def)

;; arch-tag: 4edde45b-af10-4685-b8ee-7cd0f951095a
;;; ps-def.el ends here