diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/json-reformat-20160212.853/json-reformat.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/json-reformat-20160212.853/json-reformat.el | 221 |
1 files changed, 0 insertions, 221 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/json-reformat-20160212.853/json-reformat.el b/configs/shared/emacs/.emacs.d/elpa/json-reformat-20160212.853/json-reformat.el deleted file mode 100644 index c509690475dc..000000000000 --- a/configs/shared/emacs/.emacs.d/elpa/json-reformat-20160212.853/json-reformat.el +++ /dev/null @@ -1,221 +0,0 @@ -;;; json-reformat.el --- Reformatting tool for JSON - -;; Author: Wataru MIYAGUNI <gonngo@gmail.com> -;; URL: https://github.com/gongo/json-reformat -;; Package-Version: 20160212.853 -;; Version: 0.0.6 -;; Keywords: json - -;; Copyright (c) 2012 Wataru MIYAGUNI -;; -;; MIT License -;; -;; Permission is hereby granted, free of charge, to any person obtaining -;; a copy of this software and associated documentation files (the -;; "Software"), to deal in the Software without restriction, including -;; without limitation the rights to use, copy, modify, merge, publish, -;; distribute, sublicense, and/or sell copies of the Software, and to -;; permit persons to whom the Software is furnished to do so, subject to -;; the following conditions: -;; -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. -;; -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -;; LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -;; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -;; WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -;;; Commentary: - -;; json-reformat.el is a reformatting tool for JSON (http://json.org/). -;; -;; ## Usage -;; -;; 1. Specify region -;; 2. Call 'M-x json-reformat-region' -;; -;; ## Customize -;; -;; - `json-reformat:indent-width' -;; - `json-reformat:pretty-string?' -;; - -;;; Code: - -(require 'json) -(eval-when-compile (require 'cl)) - -(unless (require 'subr-x nil t) - ;; built-in subr-x from 24.4 - (defsubst hash-table-keys (hash-table) - "Return a list of keys in HASH-TABLE." - (let ((keys '())) - (maphash (lambda (k _v) (push k keys)) hash-table) - keys))) - -(put 'json-reformat-error 'error-message "JSON Reformat error") -(put 'json-reformat-error 'error-conditions '(json-reformat-error error)) - -(defconst json-reformat:special-chars-as-pretty-string - '((?\" . ?\") - (?\\ . ?\\))) - -(defcustom json-reformat:indent-width 4 - "How much indentation `json-reformat-region' should do at each level." - :type 'integer - :safe #'integerp - :group 'json-reformat) - -(defcustom json-reformat:pretty-string? nil - "Whether to decode the string. - -Example: - -{\"name\":\"foobar\",\"nick\":\"foo \\u00e4 bar\",\"description\":\"<pre>\\nbaz\\n</pre>\"} - -If nil: - - { - \"name\": \"foobar\", - \"nick\": \"foo \\u00e4 bar\", - \"description\": \"<pre>\\nbaz\\n<\\/pre>\" - } - -Else t: - - { - \"name\": \"foobar\", - \"nick\": \"foo ä bar\", - \"description\": \"<pre> - baz - </pre>\" - }" - :type 'boolean - :safe #'booleanp - :group 'json-reformat) - -(defun json-reformat:indent (level) - (make-string (* level json-reformat:indent-width) ? )) - -(defun json-reformat:number-to-string (val) - (number-to-string val)) - -(defun json-reformat:symbol-to-string (val) - (cond ((equal 't val) "true") - ((equal json-false val) "false") - (t (symbol-name val)))) - -(defun json-reformat:encode-char-as-pretty (char) - (setq char (encode-char char 'ucs)) - (let ((special-char (car (rassoc char json-reformat:special-chars-as-pretty-string)))) - (if special-char - (format "\\%c" special-char) - (format "%c" char)))) - -(defun json-reformat:string-to-string (val) - (if json-reformat:pretty-string? - (format "\"%s\"" (mapconcat 'json-reformat:encode-char-as-pretty val "")) - (json-encode-string val))) - -(defun json-reformat:vector-to-string (val level) - (if (= (length val) 0) "[]" - (concat "[\n" - (mapconcat - 'identity - (loop for v across val - collect (concat - (json-reformat:indent (1+ level)) - (json-reformat:print-node v (1+ level)) - )) - (concat ",\n")) - "\n" (json-reformat:indent level) "]" - ))) - -(defun json-reformat:print-node (val level) - (cond ((hash-table-p val) (json-reformat:tree-to-string (json-reformat:tree-sibling-to-plist val) level)) - ((numberp val) (json-reformat:number-to-string val)) - ((vectorp val) (json-reformat:vector-to-string val level)) - ((null val) "null") - ((symbolp val) (json-reformat:symbol-to-string val)) - (t (json-reformat:string-to-string val)))) - -(defun json-reformat:tree-sibling-to-plist (root) - (let (pl) - (dolist (key (reverse (hash-table-keys root)) pl) - (setq pl (plist-put pl key (gethash key root)))))) - -(defun json-reformat:tree-to-string (root level) - (concat "{\n" - (let (key val str) - (while root - (setq key (car root) - val (cadr root) - root (cddr root)) - (setq str - (concat str (json-reformat:indent (1+ level)) - "\"" key "\"" - ": " - (json-reformat:print-node val (1+ level)) - (when root ",") - "\n" - ))) - str) - (json-reformat:indent level) - "}")) - -(defun json-reformat-from-string (string) - (with-temp-buffer - (insert string) - (goto-char (point-min)) - (condition-case errvar - (let ((json-key-type 'string) - (json-object-type 'hash-table) - json-tree) - (setq json-tree (json-read)) - (json-reformat:print-node json-tree 0)) - (json-error - (signal 'json-reformat-error - (list (error-message-string errvar) - (line-number-at-pos (point)) - (point))))))) - -;;;###autoload -(defun json-reformat-region (begin end) - "Reformat the JSON in the specified region. - -If you want to customize the reformat style, -please see the documentation of `json-reformat:indent-width' -and `json-reformat:pretty-string?'." - (interactive "*r") - (let ((start-line (line-number-at-pos begin)) - (start-pos begin)) - (save-excursion - (save-restriction - (narrow-to-region begin end) - (goto-char (point-min)) - (let (reformatted) - (condition-case errvar - (progn - (setq reformatted - (json-reformat-from-string - (buffer-substring-no-properties (point-min) (point-max)))) - (delete-region (point-min) (point-max)) - (insert reformatted)) - (json-reformat-error - (let ((reason (nth 1 errvar)) - (line (nth 2 errvar)) - (position (nth 3 errvar))) - (message - "JSON parse error [Reason] %s [Position] In buffer, line %d (char %d)" - reason - (+ start-line line -1) - (+ start-pos position -1)))))))))) - -(provide 'json-reformat) - -;;; json-reformat.el ends here |