From: Andreas Gerler Date: Fri, 11 Feb 2022 15:40:32 +0000 (+0100) Subject: add ascii X-Git-Url: http://git.bundesbrandschatzamt.de/?a=commitdiff_plain;h=e84707938be36f0d59430f2c4d5fc7253cfd24ad;p=emacsconfig.git add ascii Signed-off-by: Andreas Gerler --- diff --git a/elpa/ascii-3.1/ascii-autoloads.el b/elpa/ascii-3.1/ascii-autoloads.el new file mode 100644 index 00000000..0b322324 --- /dev/null +++ b/elpa/ascii-3.1/ascii-autoloads.el @@ -0,0 +1,41 @@ +;;; ascii-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) + +;;;### (autoloads nil "ascii" "ascii.el" (23247 3459 681282 561000)) +;;; Generated autoloads from ascii.el + +(autoload 'ascii-customize "ascii" "\ +Customize ASCII options. + +\(fn)" t nil) + +(autoload 'ascii-display "ascii" "\ +Toggle ASCII code display. + +If ARG is null, toggle ASCII code display. +If ARG is a number and is greater than zero, turn on display; otherwise, turn +off display. +If ARG is anything else, turn on display. + +\(fn &optional ARG)" t nil) + +(autoload 'ascii-on "ascii" "\ +Turn on ASCII code display. + +\(fn)" t nil) + +(autoload 'ascii-off "ascii" "\ +Turn off ASCII code display. + +\(fn)" t nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; ascii-autoloads.el ends here diff --git a/elpa/ascii-3.1/ascii-pkg.el b/elpa/ascii-3.1/ascii-pkg.el new file mode 100644 index 00000000..b912abee --- /dev/null +++ b/elpa/ascii-3.1/ascii-pkg.el @@ -0,0 +1,2 @@ +;;; -*- no-byte-compile: t -*- +(define-package "ascii" "3.1" "ASCII code display." 'nil) diff --git a/elpa/ascii-3.1/ascii.el b/elpa/ascii-3.1/ascii.el new file mode 100644 index 00000000..e2eb9eff --- /dev/null +++ b/elpa/ascii-3.1/ascii.el @@ -0,0 +1,975 @@ +;;; ascii.el --- ASCII code display. + +;; Copyright (C) 1999, 2000, 2001, 2006, 2007, 2008, 2009, 2010, 2011 +;; Vinicius Jose Latorre + +;; Author: Vinicius Jose Latorre +;; Maintainer: Vinicius Jose Latorre +;; Time-stamp: <2011/01/12 00:58:17 vinicius> +;; Keywords: data, ascii +;; Version: 3.1 +;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre + +;; This file is *NOT* (yet?) part of GNU Emacs. + +;; 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 2, 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 +;; 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: + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Introduction +;; ------------ +;; +;; This package provides a way to display ASCII code on a window, that is, +;; display in another window an ASCII table highlighting the current character +;; code. +;; +;; Well, maybe the name "ascii" is not a good name for this package, as this +;; package also displays non-ASCII code, that is, character code which is +;; greater than 255. It also displays characters codified in HTML (Á), +;; quoted (=20), escaped (\xFF) and Emacs Lisp character (?\^A). +;; +;; To use ascii, insert in your ~/.emacs: +;; +;; (require 'ascii) +;; +;; Or: +;; +;; (autoload 'ascii-on "ascii" "Turn on ASCII code display." t) +;; (autoload 'ascii-off "ascii" "Turn off ASCII code display." t) +;; (autoload 'ascii-display "ascii" "Toggle ASCII code display." t) +;; (autoload 'ascii-customize "ascii" "Customize ASCII code display." t) +;; +;; For good performance, be sure to byte-compile ascii.el, e.g. +;; +;; M-x byte-compile-file +;; +;; This will generate ascii.elc, which will be loaded instead of ascii.el. +;; +;; It runs on GNU Emacs 20.4.1, 21, 22 and 23. +;; +;; +;; Using ascii +;; ----------- +;; +;; To activate ascii, type: +;; +;; M-x ascii-on RET +;; +;; Or: +;; +;; C-u 1 M-x ascii-display RET +;; +;; To deactivate ascii, type: +;; +;; M-x ascii-off RET +;; +;; Or: +;; +;; C-u 0 M-x ascii-display RET +;; +;; To toggle ascii, type: +;; +;; M-x ascii-display RET +;; +;; To customize ascii, type: +;; +;; M-x ascii-customize RET +;; +;; You can also bind `ascii-display', `ascii-on', `ascii-off' and +;; `ascii-customize' to some key, like: +;; +;; (global-set-key "\C-c\C-a" 'ascii-on) +;; (global-set-key "\C-c\C-e" 'ascii-off) +;; (global-set-key "\C-c\C-t" 'ascii-display) +;; (global-set-key "\C-c\C-c" 'ascii-customize) +;; +;; If you're using `mule' package, a good usage example is to activate `ascii' +;; on emacs/etc/HELLO file. +;; +;; +;; Hooks +;; ----- +;; +;; ascii has the following hook variable: +;; +;; `ascii-hook' +;; It is evaluated once when ascii is turned on. +;; +;; +;; Options +;; ------- +;; +;; Below it's shown a brief description of ascii options, please, see the +;; options declaration in the code for a long documentation. +;; +;; `ascii-code' Specify list of character code to +;; display. +;; +;; `ascii-show-nonascii' Non-nil means converts to unibyte and +;; display the ascii code. +;; +;; `ascii-show-nonascii-message' Non-nil means show a message when +;; character is above 255. +;; +;; `ascii-window-size' Specify initial ASCII window size. +;; +;; `ascii-display-code' Specify list of character range to be +;; displayed. +;; +;; `ascii-keep-window' Non-nil means to keep ASCII window +;; active. +;; +;; `ascii-table-separator' Specify string used to separate ASCII +;; table columns. +;; +;; `ascii-ascii-face' Specify symbol face used to highlight +;; ascii code. +;; +;; `ascii-non-ascii-face' Specify symbol face used to highlight +;; non-ascii code. +;; +;; To set the above options you may: +;; +;; a) insert the code in your ~/.emacs, like: +;; +;; (setq ascii-window-size 6) +;; +;; This way always keep your default settings when you enter a new Emacs +;; session. +;; +;; b) or use `set-variable' in your Emacs session, like: +;; +;; M-x set-variable RET ascii-window-size RET 6 RET +;; +;; This way keep your settings only during the current Emacs session. +;; +;; c) or use customization, for example: +;; click on menu-bar *Help* option, +;; then click on *Customize*, +;; then click on *Browse Customization Groups*, +;; expand *Data* group, +;; expand *Ascii* group +;; and then customize ascii options. +;; Through this way, you may choose if the settings are kept or not when +;; you leave out the current Emacs session. +;; +;; d) or see the option value: +;; +;; C-h v ascii-window-size RET +;; +;; and click the *customize* hypertext button. +;; Through this way, you may choose if the settings are kept or not when +;; you leave out the current Emacs session. +;; +;; e) or invoke: +;; +;; M-x ascii-customize RET +;; +;; and then customize ascii options. +;; Through this way, you may choose if the settings are kept or not when +;; you leave out the current Emacs session. +;; +;; +;; Acknowledgments +;; --------------- +;; +;; Thanks to Steven W. Orr for patch to Emacs 23. +;; +;; Thanks to Roman Belenov for suggestion on dynamic ascii +;; table evaluation (depending on character encoding). +;; +;; Thanks to Alex Schroeder for suggestion on customization. +;; +;; +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; code: + + +;; XEmacs needs overlay emulation package. +(eval-and-compile + (and (let (case-fold-search) + (string-match "XEmacs\\|Lucid\\|Epoch" emacs-version)) + (not (require 'overlay)) + (error "`ascii' requires `overlay' package."))) + + +;; GNU Emacs 20, 21 and 22 compatibility +(or (fboundp 'characterp) + (defalias 'characterp 'char-valid-p)) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; User Variables: + + +;;; Interface to the command system + + +(defgroup ascii nil + "ASCII code display" + :link '(emacs-library-link :tag "Source Lisp File" "ascii.el") + :prefix "ascii-" + :group 'data) + + +(defcustom ascii-code '(quoted html backslash elisp) + "*Specify list of character code to display. + +If list is nil, display only ASCII code. + +If list is non-nil, valid element values are: + + quoted display quoted and ASCII code. + Quoted code is specified by `=HH' where H is a hexadecimal + character or by `=' followed by newline. This character coding + is used on MIME. For example: + =FF =1f =20 = + + html display HTML and ASCII code. + HTML code is specified by `&CODE;', for example: + á Á À + + backslash display backslash and ASCII code. + Backslash code is specified by `\\CODE' like in C, for example: + \\177 \\xFF \\x1f \\t \\Z \\\\ + + elisp display Emacs Lisp and ASCII code. + Emacs Lisp code is specified by `?CODE', see how Emacs Lisp + specify a character. For example: + ?? ?a ?A ?\\^A ?\\C-A + ?\\177 ?\\xFF ?\\x1f ?\\t ?\\Z ?\\\\ + +Any other value is ignored." + :type '(repeat :tag "ASCII Code List" + (choice :menu-tag "ASCII Code" + :tag "ASCII Code" + (const :tag "Quoted" quoted) + (const :tag "HTML" html) + (const :tag "Backslash" backslash) + (const :tag "Elisp" elisp))) + :group 'ascii) + + +(defcustom ascii-show-nonascii t + "*Non-nil means converts to unibyte and display the ascii code." + :type 'boolean + :group 'ascii) + + +(defcustom ascii-show-nonascii-message t + "*Non-nil means show a message when character is above 255." + :type 'boolean + :group 'ascii) + + +(defcustom ascii-window-size 6 + "*Specify initial ASCII window size." + :type 'integer + :group 'ascii) + + +(defcustom ascii-display-code '((?\000 . ?\377)) + "*Specify list of character range to be displayed. + +Each element has the following form: + + (LOWER . UPPER) + +LOWER and UPPER are the minimum and maximum character code, respectively. +A character is displayed if: + LOWER <= character <= UPPER + and 0 <= LOWER <= 255 + and 0 <= UPPER <= 255" + :type '(repeat :tag "Range List" + (cons :tag "Range" + (integer :tag "From") + (integer :tag "To"))) + :group 'ascii) + + +(defcustom ascii-keep-window t + "*Non-nil means to keep ASCII window active." + :type 'boolean + :group 'ascii) + + +(defcustom ascii-table-separator "|" + "*Specify string used to separate ASCII table columns." + :type 'string + :group 'ascii) + + +(defcustom ascii-ascii-face 'ascii-ascii-face + "*Specify symbol face used to highlight ascii code." + :type 'face + :group 'ascii) + + +;; secondary-selection face +(defface ascii-ascii-face + '((((type tty) (class color)) + (:background "cyan" :foreground "black")) + (((class color) (background light)) + (:background "paleturquoise")) + (((class color) (background dark)) + (:background "SkyBlue4")) + (t (:inverse-video t))) + "Face used to highlight ascii code.") + + +(defcustom ascii-non-ascii-face 'ascii-non-ascii-face + "*Specify symbol face used to highlight non-ascii code." + :type 'face + :group 'ascii) + + +;; highlight face +(defface ascii-non-ascii-face + '((((type tty) (class color)) + (:background "green")) + (((class color) (background light)) + (:background "darkseagreen2")) + (((class color) (background dark)) + (:background "darkolivegreen")) + (t (:inverse-video t))) + "Face used to highlight non-ascii code.") + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Customization + + +;;;###autoload +(defun ascii-customize () + "Customize ASCII options." + (interactive) + (customize-group 'ascii)) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; User commands + + +(defconst ascii-buffer-name " *ASCII*") + + +(defvar ascii-overlay nil) +(defvar ascii-reference-count 0) + + +(defvar ascii-display nil) +(make-variable-buffer-local 'ascii-display) + + +;;;###autoload +(defun ascii-display (&optional arg) + "Toggle ASCII code display. + +If ARG is null, toggle ASCII code display. +If ARG is a number and is greater than zero, turn on display; otherwise, turn +off display. +If ARG is anything else, turn on display." + (interactive "P") + (if (if arg + (> (prefix-numeric-value arg) 0) + (not ascii-display)) + (ascii-on) + (ascii-off))) + + +;;;###autoload +(defun ascii-on () + "Turn on ASCII code display." + (interactive) + (unless ascii-display + (setq ascii-display t + ascii-reference-count (1+ ascii-reference-count)) + ;; local hooks + (add-hook 'post-command-hook 'ascii-post-command nil t) + (add-hook 'kill-buffer-hook 'ascii-off nil t) + ;; own hook + (run-hooks 'ascii-hook) + (ascii-post-command))) + + +;;;###autoload +(defun ascii-off () + "Turn off ASCII code display." + (interactive) + (when ascii-display + (setq ascii-display nil + ascii-reference-count (1- ascii-reference-count)) + (remove-hook 'post-command-hook 'ascii-post-command t) + (remove-hook 'kill-buffer-hook 'ascii-off t) + (if (> ascii-reference-count 0) + ;; at least one buffer with ascii activated + (or ascii-keep-window + (ascii-hide-table)) + ;; *no* buffer with ascii activated + (and ascii-overlay + (delete-overlay ascii-overlay)) + (let ((buffer (get-buffer ascii-buffer-name))) + (and buffer + (save-excursion + (delete-windows-on buffer) + (kill-buffer buffer))))))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Internal variables + + +(defconst ascii-table + (concat + ;; (0 <= x <= 127) + " OCT DEC HX |- OCT DEC HX |- OCT DEC HX \ +|- OCT DEC HX\n" + (let ((str "") + (c -1) + (cod [ + "C-@ NUL ^@ " ; 0 + "C-a SOH ^A " ; 1 + "C-b STX ^B " ; 2 + "C-c ETX ^C " ; 3 + "C-d EOT ^D " ; 4 + "C-e ENQ ^E " ; 5 + "C-f ACK ^F " ; 6 + "C-g BEL ^G \\a" ; 7 + "C-h BS ^H \\b" ; 8 + "TAB HT ^I \\t" ; 9 + "C-j LF ^J \\n" ; 10 + "C-k VT ^K \\v" ; 11 + "C-l FF ^L \\f" ; 12 + "RET CR ^M \\r" ; 13 + "C-n SO ^N " ; 14 + "C-o SI ^O " ; 15 + "C-p DLE ^P " ; 16 + "C-q DC1 ^Q " ; 17 + "C-r DC2 ^R " ; 18 + "C-s DC3 ^S " ; 19 + "C-t DC4 ^T " ; 20 + "C-u NAK ^U " ; 21 + "C-v SYN ^V " ; 22 + "C-w ETB ^W " ; 23 + "C-x CAN ^X " ; 24 + "C-y EM ^Y " ; 25 + "C-z SUB ^Z " ; 26 + "ESC ESC ^[ \\e" ; 27 + "C-\\ FS ^\\ " ; 28 + "C-] GS ^] " ; 29 + "C-^ RS ^^ " ; 30 + "C-_ US ^_ " ; 31 + ]) + c32 c64 c96) + (while (< c 31) + (setq c (1+ c) + c32 (+ c 32) + c64 (+ c 64) + c96 (+ c 96) + str (concat + str + (format "\\%03o %03d %02x %s|| \\%03o %03d %02x %s|| \ +\\%03o %03d %02x %c || \\%03o %03d %02x %s\n" + c c c (aref cod c) + c32 c32 c32 + (if (= c32 ?\x20) "SPC" (format " %c "c32)) + c64 c64 c64 c64 + c96 c96 c96 + (if (= c96 ?\x7F) "DEL ^?" (format " %c" c96)))))) + str) + + ;; (128 <= x <= 255) + "\n OCT DEC HX |- OCT DEC HX |- OCT DEC HX \ +|- OCT DEC HX\n" + (let ((str "") + (c 127) + c32 c64 c96) + (while (< c 159) + (setq c (1+ c) + c32 (+ c 32) + c64 (+ c 64) + c96 (+ c 96) + str (concat + str + (format "\\%03o %03d %02x \\%03o || \ +\\%03o %03d %02x %c || \\%03o %03d %02x %c || \\%03o %03d %02x %c\n" + c c c c + c32 c32 c32 c32 + c64 c64 c64 c64 + c96 c96 c96 c96)))) + str)) + "ASCII table.") + + +(defconst ascii-position + (vector + ;; 0 1 2 3 + [2 0 23 0] [3 0 23 0] [4 0 23 0] [5 0 23 0] + ;; 4 5 6 7 + [6 0 23 0] [7 0 23 0] [8 0 23 0] [9 0 26 0] + ;; 8 9 10 11 + [10 0 26 0] [11 0 26 0] [12 0 26 0] [13 0 26 0] + ;; 12 13 14 15 + [14 0 26 0] [15 0 26 0] [16 0 23 0] [17 0 23 0] + ;; 16 17 18 19 + [18 0 23 0] [19 0 23 0] [20 0 23 0] [21 0 23 0] + ;; 20 21 22 23 + [22 0 23 0] [23 0 23 0] [24 0 23 0] [25 0 23 0] + ;; 24 25 26 27 + [26 0 23 0] [27 0 23 0] [28 0 23 0] [29 0 26 0] + ;; 28 29 30 31 + [30 0 23 0] [31 0 23 0] [32 0 23 0] [33 0 23 0] + ;; 32 33 34 35 + [2 28 43 1] [3 28 42 1] [4 28 42 1] [5 28 42 1] + ;; 36 37 38 39 + [6 28 42 1] [7 28 42 1] [8 28 42 1] [9 28 42 1] + ;; 40 41 42 43 + [10 28 42 1] [11 28 42 1] [12 28 42 1] [13 28 42 1] + ;; 44 45 46 47 + [14 28 42 1] [15 28 42 1] [16 28 42 1] [17 28 42 1] + ;; 48 49 50 51 + [18 28 42 1] [19 28 42 1] [20 28 42 1] [21 28 42 1] + ;; 52 53 54 55 + [22 28 42 1] [23 28 42 1] [24 28 42 1] [25 28 42 1] + ;; 56 57 58 59 + [26 28 42 1] [27 28 42 1] [28 28 42 1] [29 28 42 1] + ;; 60 61 62 63 + [30 28 42 1] [31 28 42 1] [32 28 42 1] [33 28 42 1] + ;; 64 65 66 67 + [2 45 59 2] [3 45 59 2] [4 45 59 2] [5 45 59 2] + ;; 68 69 70 71 + [6 45 59 2] [7 45 59 2] [8 45 59 2] [9 45 59 2] + ;; 72 73 74 75 + [10 45 59 2] [11 45 59 2] [12 45 59 2] [13 45 59 2] + ;; 76 77 78 79 + [14 45 59 2] [15 45 59 2] [16 45 59 2] [17 45 59 2] + ;; 80 81 82 83 + [18 45 59 2] [19 45 59 2] [20 45 59 2] [21 45 59 2] + ;; 84 85 86 87 + [22 45 59 2] [23 45 59 2] [24 45 59 2] [25 45 59 2] + ;; 88 89 90 91 + [26 45 59 2] [27 45 59 2] [28 45 59 2] [29 45 59 2] + ;; 92 93 94 95 + [30 45 59 2] [31 45 59 2] [32 45 59 2] [33 45 59 2] + ;; 96 97 98 99 + [2 62 76 3] [3 62 76 3] [4 62 76 3] [5 62 76 3] + ;; 100 101 102 103 + [6 62 76 3] [7 62 76 3] [8 62 76 3] [9 62 76 3] + ;; 104 105 106 107 + [10 62 76 3] [11 62 76 3] [12 62 76 3] [13 62 76 3] + ;; 108 109 110 111 + [14 62 76 3] [15 62 76 3] [16 62 76 3] [17 62 76 3] + ;; 112 113 114 115 + [18 62 76 3] [19 62 76 3] [20 62 76 3] [21 62 76 3] + ;; 116 117 118 119 + [22 62 76 3] [23 62 76 3] [24 62 76 3] [25 62 76 3] + ;; 120 121 122 123 + [26 62 76 3] [27 62 76 3] [28 62 76 3] [29 62 76 3] + ;; 124 125 126 127 + [30 62 76 3] [31 62 76 3] [32 62 76 3] [33 62 80 3] + ;; 128 129 130 131 + [36 0 17 0] [37 0 17 0] [38 0 17 0] [39 0 17 0] + ;; 132 133 134 135 + [40 0 17 0] [41 0 17 0] [42 0 17 0] [43 0 17 0] + ;; 136 137 138 139 + [44 0 17 0] [45 0 17 0] [46 0 17 0] [47 0 17 0] + ;; 140 141 142 143 + [48 0 17 0] [49 0 17 0] [50 0 17 0] [51 0 17 0] + ;; 144 145 146 147 + [52 0 17 0] [53 0 17 0] [54 0 14 0] [55 0 17 0] + ;; 148 149 150 151 + [56 0 17 0] [57 0 17 0] [58 0 17 0] [59 0 17 0] + ;; 152 153 154 155 + [60 0 17 0] [61 0 17 0] [62 0 17 0] [63 0 17 0] + ;; 156 157 158 159 + [64 0 17 0] [65 0 17 0] [66 0 17 0] [67 0 17 0] + ;; 160 161 162 163 + [36 28 42 1] [37 28 42 1] [38 28 42 1] [39 28 42 1] + ;; 164 165 166 167 + [40 28 42 1] [41 28 42 1] [42 28 42 1] [43 28 42 1] + ;; 168 169 170 171 + [44 28 42 1] [45 28 42 1] [46 28 42 1] [47 28 42 1] + ;; 172 173 174 175 + [48 28 42 1] [49 28 42 1] [50 28 42 1] [51 28 42 1] + ;; 176 177 178 179 + [52 28 42 1] [53 28 42 1] [54 28 42 1] [55 28 42 1] + ;; 180 181 182 183 + [56 28 42 1] [57 28 42 1] [58 28 42 1] [59 28 42 1] + ;; 184 185 186 187 + [60 28 42 1] [61 28 42 1] [62 28 42 1] [63 28 42 1] + ;; 188 189 190 191 + [64 28 42 1] [65 28 42 1] [66 28 42 1] [67 28 42 1] + ;; 192 193 194 195 + [36 45 59 2] [37 45 59 2] [38 45 59 2] [39 45 59 2] + ;; 196 197 198 199 + [40 45 59 2] [41 45 59 2] [42 45 59 2] [43 45 59 2] + ;; 200 201 202 203 + [44 45 59 2] [45 45 59 2] [46 45 59 2] [47 45 59 2] + ;; 204 205 206 207 + [48 45 59 2] [49 45 59 2] [50 45 59 2] [51 45 59 2] + ;; 208 209 210 211 + [52 45 59 2] [53 45 59 2] [54 45 59 2] [55 45 59 2] + ;; 212 213 214 215 + [56 45 59 2] [57 45 59 2] [58 45 59 2] [59 45 59 2] + ;; 216 217 218 219 + [60 45 59 2] [61 45 59 2] [62 45 59 2] [63 45 59 2] + ;; 220 221 222 223 + [64 45 59 2] [65 45 59 2] [66 45 59 2] [67 45 59 2] + ;; 224 225 226 227 + [36 62 76 3] [37 62 76 3] [38 62 76 3] [39 62 76 3] + ;; 228 229 230 231 + [40 62 76 3] [41 62 76 3] [42 62 76 3] [43 62 76 3] + ;; 232 233 234 235 + [44 62 76 3] [45 62 76 3] [46 62 76 3] [47 62 76 3] + ;; 236 237 238 239 + [48 62 76 3] [49 62 76 3] [50 62 76 3] [51 62 76 3] + ;; 240 241 242 243 + [52 62 76 3] [53 62 76 3] [54 62 76 3] [55 62 76 3] + ;; 244 245 246 247 + [56 62 76 3] [57 62 76 3] [58 62 76 3] [59 62 76 3] + ;; 248 249 250 251 + [60 62 76 3] [61 62 76 3] [62 62 76 3] [63 62 76 3] + ;; 252 253 254 255 + [64 62 76 3] [65 62 76 3] [66 62 76 3] [67 62 76 3] + ) + "Vector with position of each ASCII code in ASCII buffer. + +Each element has the following form: + + [LINE COL-BEG COL-END COL-INDEX] + +LINE is the line number in ASCII buffer. +COL-BEG is the ASCII beginning column. +COL-END is the ASCII end column. +COL-INDEX is the ASCII table column index.") + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Internal functions + + +(defun ascii-post-command () + (let* ((char (following-char)) + (code (if ascii-show-nonascii + (string-to-char (string-make-unibyte (char-to-string char))) + char)) + mess) + (cond ((and (boundp 'ascii-display) + ascii-display + (< code 256) + (ascii-display-code code)) + (setq mess (ascii-show-table code (< char 256)))) + ((and (not ascii-keep-window) + (not (string= (buffer-name) ascii-buffer-name))) + (ascii-hide-table)) + (ascii-overlay + (delete-overlay ascii-overlay)) + ) + ;; display some warning + (cond ((and (boundp 'ascii-display) + ascii-display + ascii-show-nonascii-message + (cond + ((> char 255) + (message "Character code above 255 (\\0%o, %d, 0x%x)" + char char char)) + ((< char 0) + (message "Character code below 0 (\\0%o, %d, 0x%x)" + char char char)) + ))) + (mess + (message "%s code" mess)) + ))) + + +(defun ascii-hide-table () + (let ((buffer (get-buffer ascii-buffer-name))) + (and buffer + (delete-windows-on buffer)))) + + +(defconst ascii-html-alist + '(("copy" . 169) ("reg" . 174) ("trade" . 174) ("Aacute" . 192) + ("Agrave" . 193) ("Acirc" . 194) ("Atilde" . 195) ("Auml" . 196) + ("Aring" . 197) ("AElig" . 198) ("Ccedil" . 199) ("Eacute" . 200) + ("Egrave" . 201) ("Ecirc" . 202) ("Euml" . 203) ("Iacute" . 204) + ("Igrave" . 205) ("Icirc" . 206) ("Iuml" . 207) ("ETH" . 208) + ("Ntilde" . 209) ("Oacute" . 210) ("Ograve" . 211) ("Ocirc" . 212) + ("Otilde" . 213) ("Ouml" . 214) ("Oslash" . 216) ("Uacute" . 217) + ("Ugrave" . 218) ("Ucirc" . 219) ("Uuml" . 220) ("Yacute" . 221) + ("THORN" . 222) ("szlig" . 223) ("aacute" . 224) ("agrave" . 225) + ("acirc" . 226) ("atilde" . 227) ("auml" . 228) ("aring" . 229) + ("aelig" . 230) ("ccedil" . 231) ("eacute" . 232) ("egrave" . 233) + ("ecirc" . 234) ("euml" . 235) ("iacute" . 236) ("igrave" . 237) + ("icirc" . 238) ("iuml" . 239) ("eth" . 240) ("ntilde" . 241) + ("oacute" . 242) ("ograve" . 243) ("ocirc" . 244) ("otilde" . 245) + ("ouml" . 246) ("oslash" . 248) ("uacute" . 249) ("ugrave" . 250) + ("ucirc" . 251) ("uuml" . 252) ("yacute" . 253) ("thorn" . 254) + ("yuml" . 255))) + + +;; á Á À +(defconst ascii-html-regexp + (concat "&\\([aeiouy]acute\\|[aeiou]circ\\|[aeiou]grave\\|[aeiouy]uml\\|" + "aelig\\|aring\\|[ano]tilde\\|ccedil\\|copy\\|eth\\|oslash\\|" + "reg\\|szlig\\|thorn\\|trade\\|" + "#[0-9]+\\);")) + + +;; \177 \xFF \t \Z \\ +(defconst ascii-backslash-regexp + "\\\\\\([0-7]+\\|x[0-9A-Fa-f]+\\|\n\\|.\\)") + + +;; ?A ?\^A ?\C-A ?\177 ?\xFF ?\t ?\Z ?\\ +(defconst ascii-elisp-regexp + (concat "?\\(\\\\\\(\\^\\|C-\\)[@A-Za-_]\\|" + ascii-backslash-regexp + "\\|.\\)")) + + +(defsubst ascii-string-matched (level) + (buffer-substring-no-properties + (match-beginning level) (match-end level))) + + +(defsubst ascii-string-to-char (str) + (string-to-char (car (read-from-string (concat "\"" str "\""))))) + + +(defsubst ascii-char-matched (level) + (ascii-string-to-char (ascii-string-matched level))) + + +(defsubst ascii-code (code var-sym) + (save-match-data + (cond + ;; Quoted + ((and (memq 'quoted ascii-code) + (cond ((looking-at "=\n") + (set var-sym "Quoted") + ?\n) + ((looking-at "=\\([0-9A-Fa-f][0-9A-Fa-f]\\)") + (set var-sym "Quoted") + (string-to-number (ascii-string-matched 1) 16))))) + ;; HTML + ((and (memq 'html ascii-code) + (let ((case-fold-search t)) + (looking-at ascii-html-regexp))) + (set var-sym "HTML") + (let ((str (ascii-string-matched 1))) + (cond ((eq (aref str 0) ?#) + (aset str 0 ?\ ) + (let ((int (string-to-number str))) + (if (and (<= 0 int) (<= int 255)) + int + (set var-sym nil) + code))) + ((cdr (assoc str ascii-html-alist))) + (t + (set var-sym nil) + code)))) + ;; backslash + ((and (memq 'backslash ascii-code) + (looking-at ascii-backslash-regexp)) + (set var-sym "Backslash") + (let* ((str (ascii-string-matched 0)) + (last (aref str (1- (length str))))) + (if (memq last '(?^ ?C ?\n)) + last + (ascii-string-to-char str)))) + ;; elisp + ((and (memq 'elisp ascii-code) + (looking-at ascii-elisp-regexp)) + (set var-sym "Elisp") + (ascii-char-matched 1)) + ;; ASCII + (t + (set var-sym nil) + code)))) + + +(defvar ascii-sep-len 0) +(defvar ascii-charset-base 0) + + +(defun ascii-show-table (code ascii-p) + (let ((buffer (ascii-get-buffer code)) + mess) + (and + ;; adjust ascii window + (cond ((get-buffer-window buffer) + t) + ((>= (window-height) (+ ascii-window-size ascii-window-size)) + (set-window-buffer + (split-window nil (- (window-height) ascii-window-size)) + buffer) + t) + (t + (ascii-off) + (message "Window height too small for ASCII window.") + (ding) + nil) + ) + ;; adjust overlay + (let ((code (ascii-code code 'mess)) + (window (get-buffer-window ascii-buffer-name)) + (old-window (selected-window))) + (save-excursion + (and window + (select-window window)) + (set-buffer ascii-buffer-name) + (let ((pos (aref ascii-position code)) + beg end) + (goto-char (point-min)) + (forward-line (1- (aref pos 0))) + (if (and (> code 127) (/= ascii-charset-base 127)) + (save-match-data + (re-search-forward + (format "\\\\%o %d %x \\(\\\\..\\)?." + code code code) + nil t) + (setq beg (match-beginning 0) + end (match-end 0))) + (let ((here (point)) + (bias (* (aref pos 3) ascii-sep-len))) + (setq end (+ (aref pos 2) here bias) + beg (+ (aref pos 1) here bias)))) + (if ascii-overlay + (move-overlay ascii-overlay beg end) + (setq ascii-overlay (make-overlay beg end))) + (overlay-put ascii-overlay 'face (if ascii-p + ascii-ascii-face + ascii-non-ascii-face)))) + (select-window old-window))) + mess)) + + +(defvar ascii-mark-display-code nil) +(defvar ascii-vector-code (make-vector 256 t)) + + +(defun ascii-display-code (code) + (or (eq ascii-mark-display-code ascii-display-code) + (let ((lis ascii-display-code) + (char 0) + end) + (setq ascii-mark-display-code ascii-display-code) + ;; turn off all `ascii-vector-code' + (while (<= char 255) + (aset ascii-vector-code char nil) + (setq char (1+ char))) + ;; turn on valid ranges + (while lis + (setq char (car lis) + lis (cdr lis) + end (cdr char) + char (car char)) + (and (<= 0 end) (<= end 255) + (<= 0 char) (<= char 255) + (while (<= char end) + (aset ascii-vector-code char t) + (setq char (1+ char))))))) + (aref ascii-vector-code code)) + + +(defun ascii-get-buffer (code) + (let ((base (- (following-char) (- code 127)))) + (or (if (= ascii-charset-base base) + (get-buffer ascii-buffer-name) + (setq ascii-charset-base base) + (let ((buffer (get-buffer ascii-buffer-name))) + (when buffer + (delete-windows-on buffer) + (kill-buffer buffer))) + nil) + (save-excursion + (save-match-data + (prog1 + ;; create buffer + (set-buffer (get-buffer-create ascii-buffer-name)) + (set-buffer-multibyte t) + (setq buffer-read-only nil + ascii-sep-len (1- (length ascii-table-separator))) + (erase-buffer) + ;; insert ascii table + (insert ascii-table) + (goto-char (point-min)) + (or (= base 127) + (save-excursion + (let ((char 127)) + ;; characters from 128 to 159 + (while (< (setq char (1+ char)) 160) + (when (search-forward + (format "\\%o %d %x " char char char) + nil t) + (delete-char 4) + (setq base (1+ base)) + (if (not (characterp base)) + (insert "? ") + (insert base) + (let ((cols (- (current-column) + (progn + (forward-char -1) + (current-column))))) + (when (< cols 4) + (forward-char 1) + (insert (cond ((= cols 3) " ") + ((= cols 2) " ") + (t " ") + ))))))) + ;; characters from 160 to 255 + (setq char (1- char)) + (while (< (setq char (1+ char)) 256) + (goto-char (point-min)) + (when (search-forward + (format "\\%o %d %x " char char char) + nil t) + (delete-char 1) + (setq base (1+ base)) + (if (not (characterp base)) + (insert "?") + (insert base) + (let ((cols (- (current-column) + (progn + (forward-char -1) + (current-column))))) + (when (> cols 1) + (forward-char 1) + (or (equal (following-char) ?\n) + (delete-char 1)))))))))) + ;; adjust column table separator + (save-excursion + (while (search-forward "||" nil t) + (replace-match ascii-table-separator t t))) + ;; adjust header separator + (let ((spaces (make-string (1+ ascii-sep-len) ?\ ))) + (save-excursion + (while (search-forward "|-" nil t) + (replace-match spaces t t)))) + (set-buffer-modified-p nil) + (setq buffer-read-only t))))))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(provide 'ascii) + + +;;; ascii.el ends here