diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/circe-20180525.1231/lui-format.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/circe-20180525.1231/lui-format.el | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/circe-20180525.1231/lui-format.el b/configs/shared/emacs/.emacs.d/elpa/circe-20180525.1231/lui-format.el deleted file mode 100644 index 68cc0ff000a0..000000000000 --- a/configs/shared/emacs/.emacs.d/elpa/circe-20180525.1231/lui-format.el +++ /dev/null @@ -1,198 +0,0 @@ -;;; lui-format.el --- A formatting function for use with Lui - -;; Copyright (C) 2005, 2012 Jorgen Schaefer - -;; Author: Jorgen Schaefer <forcer@forcix.cx> - -;; This file is part of Lui. - -;; This program 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 of the License, or -;; (at your option) any later version. - -;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - -;;; Commentary: - -;; An improved formatting function using named parameters. -;; -;; See the docstring of `lui-format' for more details. -;; -;; Most of the design is borrowed from Python's string.format. - -;;; Code: - -(require 'lui) - -(defun lui-display (format not-tracked-p &rest keywords) - "Display a formatted string in the current Lui interface. - -The string is formatted using FORMAT and `lui-format'. - -If NOT-TRACKED-P is given, the inserted string won't trigger -tracking. See `lui-insert' for a description. - -KEYWORDS are the keyword arguments passed to `lui-format'. - -See `lui-format' for a full description of the arguments." - (lui-insert (lui-format format keywords) - not-tracked-p)) - -(defun lui-format (format &rest keywords) - "Display FORMAT formatted with KEYWORDS. -FORMAT should be a symbol whose value is taken. If the value is a -procedure, the keyword list is passed as a single argument to it, -and it should return the formatted string. If the value is a -string, it is formatted according to the rules below. - -KEYWORDS is a plist of keywords and strings, or symbols and -strings. They are used as format arguments. - -The string is taken verbatim, unless there is are opening or -closing braces. - -Double opening or closing braces are replaced by single -occurrences of those characters. Otherwise, the contents between -opening and closing braces is a format description and replaced -by a formatted string. - -The string between opening and closing braces is taken as a name -of a keyword argument, and replaced by that argument's value. If -there is a colon in the string, the keyword name is the part -before the colon. The part after the colon is used to format the -argument using standard `format' - -Example: - - (lui-format \"Hello {foo:.1f}\" :foo 3.1415) - -is equivalent to - - (format \"Hello %.1f\" 3.1415) - -If the name is either a number, a number followed by a dash, or -two numbers with a dash in between them, this is taken as a -special name that is looked up in the list given using the list -argument to the :indexed-args keyword. - -{1} refers to the second element (element 1) -{1-} refers to the second and all following elements -{1-3} refers to the second through fourth element - -If more than one element is selected, the elements are separated -by a single space character. - -All named arguments receive a property of `lui-format-argument' -with the respective name as value. The whole string receives a -`lui-format' property with FORMAT as a value, and a -`lui-keywords' argument with KEYWORDS as a value." - ;; If it's only a single argument, that argument is a list. - (when (not (cdr keywords)) - (setq keywords (car keywords))) - (cond - ((functionp format) - (apply format keywords)) - ((and (symbolp format) - (functionp (symbol-value format))) - (apply (symbol-value format) keywords)) - (t - (let* ((format-string (if (symbolp format) - (symbol-value format) - format)) - (plist (mapcar (lambda (entry) - (if (keywordp entry) - ;; Keyword -> symbol - (intern (substring (symbol-name entry) - 1)) - entry)) - keywords))) - (propertize (lui-format-internal format-string plist) - 'lui-format format - 'lui-keywords keywords))))) - -(defun lui-format-internal (fmt keywords) - "Internal function for `lui-format'. - -FMT is the format string and KEYWORDS is the symbol-based plist. - -See `lui-format'." - (with-temp-buffer - (insert fmt) - (goto-char (point-min)) - (while (re-search-forward "{{\\|}}\\|{\\([^}]*\\)}" nil t) - (cond - ((string-equal (match-string 0) "3.1") - (replace-match "{")) - ((string-equal (match-string 0) "}}") - (replace-match "}")) - (t ;; (match-string 1) - (replace-match (save-match-data - (lui-format-single (match-string 1) keywords)) - t t)))) - (buffer-string))) - -(defun lui-format-single (specifier keywords) - "Format a single braced SPECIFIER according to KEYWORDS. -See `lui-format' for details. - -This adds `lui-format-argument' as necessary." - (let* ((split (split-string specifier ":")) - (identifier (car split)) - (format (cadr split))) - (when (not format) - (setq format "s")) - (propertize (format (concat "%" format) - (lui-format-lookup identifier keywords)) - 'lui-format-argument (intern identifier)))) - -(defun lui-format-lookup (identifier keywords) - "Lookup the format IDENTIFIER in KEYWORDS. - -See `lui-format' for details." - (cond - ((string-match "^\\([0-9]+\\)\\(-\\([0-9]+\\)?\\)?$" identifier) - (let ((from (match-string 1 identifier)) - (rangep (match-string 2 identifier)) - (to (match-string 3 identifier)) - (indexed-args (plist-get keywords 'indexed-args))) - (if rangep - (mapconcat (lambda (element) - (if (stringp element) - element - (format "%s" element))) - (lui-sublist indexed-args - (string-to-number from) - (when to (string-to-number to))) - " ") - (or (nth (string-to-number from) - indexed-args) - "")))) - (t - (or (plist-get keywords (intern identifier)) - (error "Unknown keyword argument %S" identifier))))) - -(defun lui-sublist (list from &optional to) - "Return the sublist from LIST starting at FROM and ending at TO." - (if (not to) - (nthcdr from list) - (let ((from-list (nthcdr from list)) - (i (- to from)) - (to-list nil)) - (while (>= i 0) - (when (null from-list) - (error "Argument out of range: %S" to)) - (setq to-list (cons (car from-list) - to-list) - i (- i 1) - from-list (cdr from-list))) - (nreverse to-list)))) - -(provide 'lui-format) -;;; lui-format.el ends here |