I don't like nxhtml

This commit is contained in:
Tom Willemsen 2011-03-23 11:14:27 +01:00
parent d4510153b1
commit 0d342f0aee
515 changed files with 308 additions and 130670 deletions

View file

@ -1,7 +1,7 @@
(require 'naquadah-theme) (require 'naquadah-theme)
(require 'autopair) (require 'autopair)
(load "autostart.el") ;(load "autostart.el")
(autoload 'vala-mode (autoload 'vala-mode
"vala-mode" "A Major mode for editing Vala files" t) "vala-mode" "A Major mode for editing Vala files" t)

View file

@ -1,5 +1,40 @@
;;; php-mode.el --- major mode for editing PHP code ;;; php-mode.el --- major mode for editing PHP code
;; This is a version of the php-mode from http://php-mode.sourceforge.net that
;; fixes a few bugs which make using php-mode much more palatable, namely:
;;
;; 1. New customisation options for some of the syntax highlighting
;; features. I personally use the 'Gauchy' level of syntax
;; highlighting -- I want variables and function calls fontified --
;; but there were several very annoying "features" in this level of
;; syntax highlighting, particularly the ones that warn you about
;; perfectly valid code. I've added:
;;
;; * `php-mode-dollar-property-warning', which, if non-nil, warns on
;; $foo->$bar. (Default is nil.)
;; * `php-mode-dot-property-warning', which, if non-nil, warns on
;; $foo.bar. (Default is nil.)
;; * `php-mode-warn-on-unmatches', which, if non-nil, warns on
;; "everything else". (Default is nil.)
;; * `php-mode-warn-if-mumamo-off', which, if nil, suppresses the
;; once-per-file warning about indenting with mumamo-mode turned
;; off. (Default is t)
;;
;; 2. Bugfix in `php-show-arglist': this function no longer jumps to the
;; function definition if that definition is in the current buffer.
;;
;; 3. Bugfix: 'class' keywords at the beginning of a line are now
;; correctly fontified.
;;
;; This has been submitted to the php-mode maintainer, but I've not yet had a
;; response.
;;
;; This was branched from the php-mode in nxhtml-mode, so if you have problems,
;; download the latest nxhtml-mode, and replace related/php-mode.el in the
;; nxhtml distribution with this file.
;;
;; -- David House, dmhouse@gmail.com
;; Copyright (C) 1999, 2000, 2001, 2003, 2004 Turadg Aleahmad ;; Copyright (C) 1999, 2000, 2001, 2003, 2004 Turadg Aleahmad
;; 2008 Aaron S. Hawley ;; 2008 Aaron S. Hawley
@ -7,10 +42,10 @@
;; Author: Turadg Aleahmad, 1999-2004 ;; Author: Turadg Aleahmad, 1999-2004
;; Keywords: php languages oop ;; Keywords: php languages oop
;; Created: 1999-05-17 ;; Created: 1999-05-17
;; Modified: 2008-11-28 Fri ;; Modified: 2008-01-25T22:25:26+0100 Fri
;; X-URL: http://php-mode.sourceforge.net/ ;; X-URL: http://php-mode.sourceforge.net/
(defconst php-mode-version-number "1.5.0-nxhtml-1.94" (defconst php-mode-version-number "1.4.1a-nxhtml"
"PHP Mode version number.") "PHP Mode version number.")
;;; License ;;; License
@ -58,6 +93,7 @@
;; handy IDE-type features such as documentation search and a source ;; handy IDE-type features such as documentation search and a source
;; and class browser. ;; and class browser.
;;; Contributors: (in chronological order) ;;; Contributors: (in chronological order)
;; Juanjo, Torsten Martinsen, Vinai Kopp, Sean Champ, Doug Marcey, ;; Juanjo, Torsten Martinsen, Vinai Kopp, Sean Champ, Doug Marcey,
@ -66,36 +102,19 @@
;; Sammartino, ppercot, Valentin Funk, Stig Bakken, Gregory Stark, ;; Sammartino, ppercot, Valentin Funk, Stig Bakken, Gregory Stark,
;; Chris Morris, Nils Rennebarth, Gerrit Riessen, Eric Mc Sween, ;; Chris Morris, Nils Rennebarth, Gerrit Riessen, Eric Mc Sween,
;; Ville Skytta, Giacomo Tesio, Lennart Borgman, Stefan Monnier, ;; Ville Skytta, Giacomo Tesio, Lennart Borgman, Stefan Monnier,
;; Aaron S. Hawley, Ian Eure, Bill Lovett, Dias Badekas, David House ;; Aaron S. Hawley, Ian Eure, Bill Lovett, David House
;;; Changelog: ;;; Changelog:
;; 1.5.0-nxhtml-1.88 (Lennart Borgman) ;; 1.4.1a-nxhtml
;; Don't indent heredoc end mark
;; 1.5.0-nxhtml-1.61 (Lennart Borgman)
;; Added php-mode-to-use.
;; Made underscore be part of identifiers. ;; Made underscore be part of identifiers.
;; Remove php-mode-to.
;; Make the indentation check only on current line.
;; Warn only once per session about indentation.
;; Tell if can't complete in `php-complete-function'.
;; Move back point after checking indentation in
;; `php-check-html-for-indentation'.
;; Add `c-at-vsemi-p-fn' etc after advice from Alan Mackenzie.
;; ;;
;; 1.5 ;; 1.4.1-nxhtml
;; Support function keywords like public, private and the ampersand ;; Added php-mode-to-use.
;; character for function-based commands. Support abstract, final,
;; static, public, private and protected keywords in Imenu. Fix ;; 1.4.1
;; reversed order of Imenu entries. Use font-lock-preprocessor-face ;; Modified `php-check-html-for-indentation' to check for multiple
;; for PHP and ASP tags. Make php-mode-modified a literal value ;; mode support libraries. (Lennart Borgman)
;; rather than a computed string. Add date and time constants of
;; PHP. (Dias Badekas) Fix false syntax highlighting of keywords
;; because of underscore character. Change HTML indentation warning
;; to match only HTML at the beginning of the line. Fix
;; byte-compiler warnings. Clean-up whitespace and audited style
;; consistency of code. Remove conditional bindings and XEmacs code
;; that likely does nothing.
;; ;;
;; 1.4 ;; 1.4
;; Updated GNU GPL to version 3. Ported to Emacs 22 (CC mode ;; Updated GNU GPL to version 3. Ported to Emacs 22 (CC mode
@ -109,23 +128,36 @@
;; Monnier to correct highlighting and indentation. (Lennart Borgman) ;; Monnier to correct highlighting and indentation. (Lennart Borgman)
;; Changed the highlighting of the HTML part. (Lennart Borgman) ;; Changed the highlighting of the HTML part. (Lennart Borgman)
;; ;;
;; See the ChangeLog file included with the source package. ;; 1.2
;; Implemented php-show-arglist, C-. (Engelke Eschner)
;; Implemented php-complete-function, M-tab (Engelke Eschner)
;; Re-enabled # comment detection in GNU Emacs (Urban Müller)
;; Fixed some keybindings and default settings (Engelke Eschner)
;;
;; 1.1
;; Added PHP5 support (Giacomo Tesio)
;; known problem: doesn't highlight after first 'implements'
;; Better XEmacs compatibility (imenu, regexp, and comments!) (Ville Skytta)
;; Improvement to php-conditional-key regexp (Eric Mc Sween)
;; 1.05
;; Incorporated speedbar defs by Gerrit Riessen
;; Add "foreach" to conditional introducing keywords (Nils Rennebarth)
;; Cleared the Changelog
;; Moved contribution credits into comments above
;;; Code: ;;; Code:
(require 'add-log)
(require 'speedbar) (require 'speedbar)
(require 'font-lock) (require 'font-lock)
(require 'cc-mode) (require 'cc-mode)
(require 'cc-langs)
(require 'custom) (require 'custom)
(require 'etags) (require 'etags)
(eval-when-compile (eval-when-compile
(require 'regexp-opt)) (require 'regexp-opt))
;; Local variables ;; Local variables
;;;###autoload
(defgroup php nil (defgroup php nil
"Major mode `php-mode' for editing PHP code." "Major mode `php-mode' for editing PHP code."
:prefix "php-" :prefix "php-"
@ -137,7 +169,7 @@
:group 'php) :group 'php)
(defcustom php-speedbar-config t (defcustom php-speedbar-config t
"When set to true automatically configures Speedbar to observe PHP files. "When set to true automatically configures Speedbar to observe PHP files.\
Ignores php-file patterns option; fixed to expression \"\\.\\(inc\\|php[s34]?\\)\"" Ignores php-file patterns option; fixed to expression \"\\.\\(inc\\|php[s34]?\\)\""
:type 'boolean :type 'boolean
:set (lambda (sym val) :set (lambda (sym val)
@ -148,7 +180,7 @@ Ignores php-file patterns option; fixed to expression \"\\.\\(inc\\|php[s34]?\\)
:group 'php) :group 'php)
(defcustom php-mode-speedbar-open nil (defcustom php-mode-speedbar-open nil
"Normally `php-mode' starts with the speedbar closed. "Normally `php-mode' starts with the speedbar closed.\
Turning this on will open it whenever `php-mode' is loaded." Turning this on will open it whenever `php-mode' is loaded."
:type 'boolean :type 'boolean
:set (lambda (sym val) :set (lambda (sym val)
@ -157,53 +189,51 @@ Turning this on will open it whenever `php-mode' is loaded."
(speedbar 1))) (speedbar 1)))
:group 'php) :group 'php)
(defvar php-imenu-generic-expression
'(
("Private Methods"
"^\\s-*\\(?:\\(?:abstract\\|final\\)\\s-+\\)?private\\s-+\\(?:static\\s-+\\)?function\\s-+\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" 1)
("Protected Methods"
"^\\s-*\\(?:\\(?:abstract\\|final\\)\\s-+\\)?protected\\s-+\\(?:static\\s-+\\)?function\\s-+\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" 1)
("Public Methods"
"^\\s-*\\(?:\\(?:abstract\\|final\\)\\s-+\\)?public\\s-+\\(?:static\\s-+\\)?function\\s-+\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" 1)
("Classes"
"^\\s-*class\\s-+\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*" 1)
("All Functions"
"^\\s-*\\(?:\\(?:abstract\\|final\\|private\\|protected\\|public\\|static\\)\\s-+\\)*function\\s-+\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" 1)
)
"Imenu generic expression for PHP Mode. See `imenu-generic-expression'."
)
(defcustom php-manual-url "http://www.php.net/manual/en/" (defcustom php-manual-url "http://www.php.net/manual/en/"
"URL at which to find PHP manual. "URL at which to find PHP manual.\
You can replace \"en\" with your ISO language code." You can replace \"en\" with your ISO language code."
:type 'string :type 'string
:group 'php) :group 'php)
(defcustom php-search-url "http://www.php.net/" (defcustom php-search-url "http://www.php.net/"
"URL at which to search for documentation on a word." "URL at which to search for documentation on a word"
:type 'string :type 'string
:group 'php) :group 'php)
(defcustom php-completion-file "" (defcustom php-completion-file ""
"Path to the file which contains the function names known to PHP." "Path to the file which contains the function names known to PHP"
:type 'string :type 'string
:group 'php) :group 'php)
(defcustom php-manual-path "" (defcustom php-manual-path ""
"Path to the directory which contains the PHP manual." "Path to the directory which contains the PHP manual"
:type 'string :type 'string
:group 'php) :group 'php)
;;;###autoload
(defcustom php-mode-to-use
(progn
(require 'mumamo nil t)
(if (fboundp 'nxhtml-mumamo-turn-on)
'nxhtml-mumamo-turn-on
(if (fboundp 'html-mumamo-turn-on)
'html-mumamo-turn-on
'php-mode)))
"Major mode turn on function to use for php files."
:type 'function
:group 'php)
;;;###autoload ;;;###autoload
(defcustom php-file-patterns '("\\.php[s34]?\\'" "\\.phtml\\'" "\\.inc\\'") (defcustom php-file-patterns '("\\.php[s34]?\\'" "\\.phtml\\'" "\\.inc\\'")
"List of file patterns for which to automatically invoke `php-mode'." "List of file patterns for which to automatically invoke `php-mode'."
:type '(repeat (regexp :tag "Pattern")) :type '(repeat (regexp :tag "Pattern"))
:set-after '(php-mode-to-use)
:set (lambda (sym val) :set (lambda (sym val)
(set-default sym val) (set-default sym val)
(let ((php-file-patterns-temp val)) (let ((php-file-patterns-temp val))
(while php-file-patterns-temp (while php-file-patterns-temp
(add-to-list 'auto-mode-alist (add-to-list 'auto-mode-alist
(cons (car php-file-patterns-temp) 'php-mode)) (cons (car php-file-patterns-temp) php-mode-to-use))
(setq php-file-patterns-temp (cdr php-file-patterns-temp))))) (setq php-file-patterns-temp (cdr php-file-patterns-temp)))))
:group 'php) :group 'php)
@ -218,22 +248,56 @@ You can replace \"en\" with your ISO language code."
:group 'php) :group 'php)
(defcustom php-mode-force-pear nil (defcustom php-mode-force-pear nil
"Normally PEAR coding rules are enforced only when the filename contains \"PEAR.\" "Normally PEAR coding rules are enforced only when the filename contains \"PEAR\"\
Turning this on will force PEAR rules on all PHP files." Turning this on will force PEAR rules on all PHP files."
:type 'boolean :type 'boolean
:group 'php) :group 'php)
(defconst php-mode-modified "2009-08-12" (defcustom php-mode-dollar-property-warning nil
"PHP Mode build date.") "If non-`nil', warn about expressions like $foo->$bar where you
might have meant $foo->bar. Defaults to `nil' since this is valid
code."
:type 'boolean
:group 'php)
(defcustom php-mode-dot-property-warning nil
"If non-`nil', wan about expressions like $foo.bar, which could
be a valid concatenation (if bar were a constant, or interpreted
as an unquoted string), but it's more likely you meant $foo->bar."
:type 'boolean
:group 'php)
(defcustom php-mode-warn-on-unmatched nil
"If non-`nil', use `font-lock-warning-face' on any expression
that isn't matched by the other font lock regular expressions."
:type 'boolean
:group 'php)
(defcustom php-warn-if-mumamo-off t
"Warn once per buffer if you try to indent a buffer without
mumamo-mode turned on. Detects if there are any HTML tags in the
buffer before warning, but this is not very smart; e.g. if you
have any tags inside a PHP string, it will be fooled."
:type '(choice (const :tag "Warn" t) (const "Don't warn" nil))
:group 'php)
(eval-when-compile
(defconst php-mode-modified
(save-excursion
(and
(re-search-backward "^;; Modified: \\(.*\\)" nil 'noerror)
(match-string-no-properties 1)))
"PHP Mode version number."))
(defun php-mode-version () (defun php-mode-version ()
"Display string describing the version of PHP mode." "Display string describing the version of PHP mode"
(interactive) (interactive)
(message "PHP mode %s of %s" (message "PHP mode %s of %s"
php-mode-version-number php-mode-modified)) php-mode-version-number php-mode-modified))
(defconst php-beginning-of-defun-regexp (defconst php-beginning-of-defun-regexp
"^\\s-*\\(?:\\(?:abstract\\|final\\|private\\|protected\\|public\\|static\\)\\s-+\\)*function\\s-+&?\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" "^\\s *function\\s +&?\\(\\(\\sw\\|\\s_\\)+\\)\\s *("
"Regular expression for a PHP function.") "Regular expression for a PHP function.")
(defun php-beginning-of-defun (&optional arg) (defun php-beginning-of-defun (&optional arg)
@ -264,23 +328,20 @@ See `php-beginning-of-defun'."
(interactive "p") (interactive "p")
(php-beginning-of-defun (- (or arg 1)))) (php-beginning-of-defun (- (or arg 1))))
(defvar php-completion-table nil
"Obarray of tag names defined in current tags table and functions know to PHP.")
(defvar php-warned-bad-indent nil) (defvar php-warned-bad-indent nil)
;;(make-variable-buffer-local 'php-warned-bad-indent) ;;(make-variable-buffer-local 'php-warned-bad-indent)
;; Do it but tell it is not good if html tags in buffer. ;; Do it but tell it is not good if html tags in buffer.
(defun php-check-html-for-indentation () (defun php-check-html-for-indentation ()
(let ((html-tag-re "^\\s-*</?\\sw+.*?>") (let ((html-tag-re "</?\\sw+.*?>")
(here (point))) (here (point)))
(goto-char (line-beginning-position)) (if (not (or (re-search-forward html-tag-re (+ (point) 1000) t)
(if (or (when (boundp 'mumamo-multi-major-mode) mumamo-multi-major-mode) (re-search-backward html-tag-re (- (point) 1000) t)))
;; Fix-me: no idea how to check for mmm or multi-mode t
(save-match-data
(not (or (re-search-forward html-tag-re (line-end-position) t)
(re-search-backward html-tag-re (line-beginning-position) t)))))
(progn
(goto-char here)
t)
(goto-char here) (goto-char here)
(setq php-warned-bad-indent t) (setq php-warned-bad-indent t)
;;(setq php-warned-bad-indent nil) ;;(setq php-warned-bad-indent nil)
@ -296,11 +357,11 @@ See `php-beginning-of-defun'."
(available-names (mapcar (lambda (lib) (car lib)) available-multi-libs)) (available-names (mapcar (lambda (lib) (car lib)) available-multi-libs))
(base-msg (base-msg
(concat (concat
"Indentation fails badly with mixed HTML/PHP in the HTML part in "Indentation fails badly with mixed HTML/PHP in plaín\n"
plaín `php-mode'. To get indentation to work you must use an "`php-mode'. To get indentation to work you must use an Emacs\n"
Emacs library that supports 'multiple major modes' in a buffer. "library that supports 'multiple major modes' in a buffer. Parts\n"
Parts of the buffer will then be in `php-mode' and parts in for "of the buffer will then be in `php-mode' and parts in for example\n"
example `html-mode'. Known such libraries are:\n\t" "`html-mode'. Known such libraries are:\n\t"
(mapconcat 'identity known-names ", ") (mapconcat 'identity known-names ", ")
"\n" "\n"
(if available-multi-libs (if available-multi-libs
@ -341,104 +402,29 @@ example `html-mode'. Known such libraries are:\n\t"
nil)))) nil))))
(defun php-cautious-indent-region (start end &optional quiet) (defun php-cautious-indent-region (start end &optional quiet)
(if (or php-warned-bad-indent (if (or (not php-warn-if-mumamo-off)
php-warned-bad-indent
(php-check-html-for-indentation)) (php-check-html-for-indentation))
(funcall 'c-indent-region start end quiet))) (funcall 'c-indent-region start end quiet)))
(defun php-cautious-indent-line () (defun php-cautious-indent-line ()
(if (or php-warned-bad-indent (if (or (not php-warn-if-mumamo-off)
php-warned-bad-indent
(php-check-html-for-indentation)) (php-check-html-for-indentation))
(let ((here (point)) (funcall 'c-indent-line)))
doit)
(move-beginning-of-line nil)
;; Don't indent heredoc end mark
(save-match-data
(unless (looking-at "[a-zA-Z0-9_]+;\n")
(setq doit t)))
(goto-char here)
(when doit
(funcall 'c-indent-line)))))
(defconst php-tags '("<?php" "?>" "<?" "<?="))
(defconst php-tags-key (regexp-opt php-tags))
(defconst php-block-stmt-1-kwds '("do" "else" "finally" "try"))
(defconst php-block-stmt-2-kwds
'("for" "if" "while" "switch" "foreach" "elseif" "catch all"))
(defconst php-block-stmt-1-key
(regexp-opt php-block-stmt-1-kwds))
(defconst php-block-stmt-2-key
(regexp-opt php-block-stmt-2-kwds))
(defconst php-class-decl-kwds '("class" "interface"))
(defconst php-class-key
(concat
"\\(" (regexp-opt php-class-decl-kwds) "\\)\\s-+"
(c-lang-const c-symbol-key c) ;; Class name.
"\\(\\s-+extends\\s-+" (c-lang-const c-symbol-key c) "\\)?" ;; Name of superclass.
"\\(\\s-+implements\\s-+[^{]+{\\)?")) ;; List of any adopted protocols.
(defun php-c-at-vsemi-p (&optional pos)
"Return t on html lines (including php region border), otherwise nil.
POS is a position on the line in question.
This is was done due to the problem reported here:
URL `https://answers.launchpad.net/nxhtml/+question/43320'"
(setq pos (or pos (point)))
(let ((here (point))
ret)
(save-match-data
(goto-char pos)
(beginning-of-line)
(setq ret (looking-at
(rx
(or (seq
bol
(0+ space)
"<"
(in "a-z\\?"))
(seq
;;(0+ anything)
(0+ not-newline)
(in "a-z\\?")
">"
(0+ space)
eol))))))
(goto-char here)
ret))
(defun php-c-vsemi-status-unknown-p ()
"See `php-c-at-vsemi-p'."
)
;;;###autoload ;;;###autoload
(define-derived-mode php-mode c-mode "PHP" (define-derived-mode php-mode c-mode "PHP"
"Major mode for editing PHP code.\n\n\\{php-mode-map}" "Major mode for editing PHP code.\n\n\\{php-mode-map}"
(c-add-language 'php-mode 'c-mode) ;; (c-add-language 'php-mode 'c-mode)
;; PHP doesn't have C-style macros. ;; (c-lang-defconst c-block-stmt-1-kwds
;; HACK: Overwrite this syntax with rules to match <?php and others. ;; php php-block-stmt-1-kwds)
;; (c-lang-defconst c-opt-cpp-start php php-tags-key)
;; (c-lang-defvar c-opt-cpp-start (c-lang-const c-opt-cpp-start))
(set (make-local-variable 'c-opt-cpp-start) php-tags-key)
;; (c-lang-defconst c-opt-cpp-start php php-tags-key)
;; (c-lang-defvar c-opt-cpp-start (c-lang-const c-opt-cpp-start))
(set (make-local-variable 'c-opt-cpp-prefix) php-tags-key)
(c-set-offset 'cpp-macro 0)
;; (c-lang-defconst c-block-stmt-1-kwds php php-block-stmt-1-kwds)
;; (c-lang-defvar c-block-stmt-1-kwds (c-lang-const c-block-stmt-1-kwds))
(set (make-local-variable 'c-block-stmt-1-key) php-block-stmt-1-key) (set (make-local-variable 'c-block-stmt-1-key) php-block-stmt-1-key)
;; (c-lang-defconst c-block-stmt-2-kwds php php-block-stmt-2-kwds) ;; (c-lang-defconst c-block-stmt-2-kwds
;; (c-lang-defvar c-block-stmt-2-kwds (c-lang-const c-block-stmt-2-kwds)) ;; php php-block-stmt-2-kwds)
(set (make-local-variable 'c-block-stmt-2-key) php-block-stmt-2-key) (set (make-local-variable 'c-block-stmt-2-key) php-block-stmt-2-key)
;; Specify that cc-mode recognize Javadoc comment style ;; Specify that cc-mode recognize Javadoc comment style
(set (make-local-variable 'c-doc-comment-style) (set (make-local-variable 'c-doc-comment-style)
'((php-mode . javadoc))) '((php-mode . javadoc)))
@ -447,6 +433,20 @@ This is was done due to the problem reported here:
;; php php-class-decl-kwds) ;; php php-class-decl-kwds)
(set (make-local-variable 'c-class-key) php-class-key) (set (make-local-variable 'c-class-key) php-class-key)
;; this line makes $ into punctuation instead of a word constituent
;; it used to be active, but it killed indenting of case lines that
;; begin with '$' (many do). If anyone has a solution to this
;; problem, please let me know. Of course, you're welcome to
;; uncomment this line in your installation.
; (modify-syntax-entry ?$ "." php-mode-syntax-table)
;; The above causes XEmacs to handle shell-style comments correctly,
;; but fails to work in GNU Emacs which fails to interpret \n as the
;; end of the comment.
(if (featurep 'xemacs) (progn
(modify-syntax-entry ?# "< b" php-mode-syntax-table)
(modify-syntax-entry ?\n "> b" php-mode-syntax-table)))
(make-local-variable 'font-lock-defaults) (make-local-variable 'font-lock-defaults)
(setq font-lock-defaults (setq font-lock-defaults
'((php-font-lock-keywords-1 '((php-font-lock-keywords-1
@ -455,11 +455,11 @@ This is was done due to the problem reported here:
;; extreme/ugly for you. ;; extreme/ugly for you.
php-font-lock-keywords-3) php-font-lock-keywords-3)
nil ; KEYWORDS-ONLY nil ; KEYWORDS-ONLY
t ; CASE-FOLD nil ; CASE-FOLD
(("_" . "w")) ; SYNTAX-ALIST nil ; SYNTAX-ALIST
nil)) ; SYNTAX-BEGIN nil)) ; SYNTAX-BEGIN
(modify-syntax-entry ?# "< b" php-mode-syntax-table) (modify-syntax-entry ?# "< b" php-mode-syntax-table)
;;(modify-syntax-entry ?_ "w" php-mode-syntax-table) (modify-syntax-entry ?_ "w" php-mode-syntax-table)
;; Electric behaviour must be turned off, they do not work since ;; Electric behaviour must be turned off, they do not work since
;; they can not find the correct syntax in embedded PHP. ;; they can not find the correct syntax in embedded PHP.
@ -496,8 +496,6 @@ This is was done due to the problem reported here:
(setq indent-line-function 'php-cautious-indent-line) (setq indent-line-function 'php-cautious-indent-line)
(setq indent-region-function 'php-cautious-indent-region) (setq indent-region-function 'php-cautious-indent-region)
(setq c-special-indent-hook nil) (setq c-special-indent-hook nil)
(setq c-at-vsemi-p-fn 'php-c-at-vsemi-p)
(setq c-vsemi-status-unknown-p 'php-c-vsemi-status-unknown-p)
(set (make-local-variable 'syntax-begin-function) (set (make-local-variable 'syntax-begin-function)
'c-beginning-of-syntax) 'c-beginning-of-syntax)
@ -508,12 +506,12 @@ This is was done due to the problem reported here:
(set (make-local-variable 'open-paren-in-column-0-is-defun-start) (set (make-local-variable 'open-paren-in-column-0-is-defun-start)
nil) nil)
(set (make-local-variable 'defun-prompt-regexp) (set (make-local-variable 'defun-prompt-regexp)
"^\\s-*function\\s-+&?\\s-*\\(\\(\\sw\\|\\s_\\)+\\)\\s-*") "^\\s *function\\s +&?\\(\\(\\sw\\|\\s_\\)+\\)\\s *")
(set (make-local-variable 'add-log-current-defun-header-regexp) (set (make-local-variable 'add-log-current-defun-header-regexp)
php-beginning-of-defun-regexp) php-beginning-of-defun-regexp)
(run-hooks 'php-mode-hook)) (run-hooks 'php-mode-hook))
;; Make a menu keymap (with a prompt string) ;; Make a menu keymap (with a prompt string)
;; and make it the menu bar item's definition. ;; and make it the menu bar item's definition.
(define-key php-mode-map [menu-bar] (make-sparse-keymap)) (define-key php-mode-map [menu-bar] (make-sparse-keymap))
@ -529,11 +527,8 @@ This is was done due to the problem reported here:
(define-key php-mode-map (define-key php-mode-map
[menu-bar php search-documentation] [menu-bar php search-documentation]
'("Search documentation" . php-search-documentation)) '("Search documentation" . php-search-documentation))
;; Define function name completion function ;; Define function name completion function
(defvar php-completion-table nil
"Obarray of tag names defined in current tags table and functions known to PHP.")
(defun php-complete-function () (defun php-complete-function ()
"Perform function completion on the text around point. "Perform function completion on the text around point.
Completes to the set of names listed in the current tags table Completes to the set of names listed in the current tags table
@ -546,29 +541,27 @@ for \\[find-tag] (which see)."
completion completion
(php-functions (php-completion-table))) (php-functions (php-completion-table)))
(if (not pattern) (message "Nothing to complete") (if (not pattern) (message "Nothing to complete")
(if (not (search-backward pattern nil t)) (search-backward pattern)
(message "Can't complete here") (setq beg (point))
(setq beg (point)) (forward-char (length pattern))
(forward-char (length pattern)) (setq completion (try-completion pattern php-functions nil))
(setq completion (try-completion pattern php-functions nil)) (cond ((eq completion t))
(cond ((eq completion t)) ((null completion)
((null completion) (message "Can't find completion for \"%s\"" pattern)
(message "Can't find completion for \"%s\"" pattern) (ding))
(ding)) ((not (string= pattern completion))
((not (string= pattern completion)) (delete-region beg (point))
(delete-region beg (point)) (insert completion))
(insert completion)) (t
(t (message "Making completion list...")
(message "Making completion list...") (with-output-to-temp-buffer "*Completions*"
(with-output-to-temp-buffer "*Completions*" (display-completion-list
(display-completion-list (all-completions pattern php-functions)))
(all-completions pattern php-functions))) (message "Making completion list...%s" "done"))))))
(message "Making completion list...%s" "done")))))))
;; Build php-completion-table on demand. The table includes the
;; PHP functions and the tags from the current tags-file-name
(defun php-completion-table () (defun php-completion-table ()
"Build variable `php-completion-table' on demand.
The table includes the PHP functions and the tags from the
current `tags-file-name'."
(or (and tags-file-name (or (and tags-file-name
(save-excursion (tags-verify-table tags-file-name)) (save-excursion (tags-verify-table tags-file-name))
php-completion-table) php-completion-table)
@ -645,26 +638,25 @@ current `tags-file-name'."
(point)))) (point))))
nil))) nil)))
(defun php-show-arglist () (defun php-show-arglist ()
(interactive) (interactive)
(let* ((tagname (php-get-pattern)) (let* ((tagname (php-get-pattern)) arglist)
(buf (find-tag-noselect tagname nil nil))
arglist)
(save-excursion (save-excursion
(set-buffer buf) (set-buffer (find-tag-noselect tagname nil nil))
(goto-char (point-min)) (goto-char (point-min))
(when (re-search-forward (when (re-search-forward
(format "function\\s-+%s\\s-*(\\([^{]*\\))" tagname) (format "function[ \t]+%s[ \t]*(\\([^{]*\\))" tagname)
nil t) nil t)
(setq arglist (buffer-substring-no-properties (setq arglist (buffer-substring-no-properties
(match-beginning 1) (match-end 1))))) (match-beginning 1) (match-end 1)))))
(if arglist (if arglist
(message "Arglist for %s: %s" tagname arglist) (message "Arglist for %s: %s" tagname arglist)
(message "Unknown function: %s" tagname)))) (message "Unknown function: %s" tagname))))
;; Define function documentation function ;; Define function documentation function
(defun php-search-documentation () (defun php-search-documentation ()
"Search PHP documentation for the word at point." "Search PHP documentation for the word at the point."
(interactive) (interactive)
(browse-url (concat php-search-url (current-word t)))) (browse-url (concat php-search-url (current-word t))))
@ -693,13 +685,7 @@ current `tags-file-name'."
(define-key php-mode-map (define-key php-mode-map
'[(control .)] '[(control .)]
'php-show-arglist) 'php-show-arglist)
;; Use the Emacs standard indentation binding. This may upset c-mode
;; which does not follow this at the moment, but I see no better
;; choice.
(define-key php-mode-map [?\t] 'indent-for-tab-command)
(defconst php-constants (defconst php-constants
(eval-when-compile (eval-when-compile
(regexp-opt (regexp-opt
@ -715,12 +701,6 @@ current `tags-file-name'."
"PHP_LOCALSTATEDIR" "PHP_CONFIG_FILE_PATH" "PHP_LOCALSTATEDIR" "PHP_CONFIG_FILE_PATH"
"PHP_EOL" "PHP_EOL"
;; date and time constants
"DATE_ATOM" "DATE_COOKIE" "DATE_ISO8601"
"DATE_RFC822" "DATE_RFC850" "DATE_RFC1036" "DATE_RFC1123"
"DATE_RFC2822" "DATE_RFC3339"
"DATE_RSS" "DATE_W3C"
;; from ext/standard: ;; from ext/standard:
"EXTR_OVERWRITE" "EXTR_SKIP" "EXTR_PREFIX_SAME" "EXTR_OVERWRITE" "EXTR_SKIP" "EXTR_PREFIX_SAME"
"EXTR_PREFIX_ALL" "EXTR_PREFIX_INVALID" "SORT_ASC" "SORT_DESC" "EXTR_PREFIX_ALL" "EXTR_PREFIX_INVALID" "SORT_ASC" "SORT_DESC"
@ -895,7 +875,6 @@ current `tags-file-name'."
; "MCAL_M_WEEKEND" "MCAL_M_ALLDAYS" "MCRYPT_" "MCRYPT_" ; "MCAL_M_WEEKEND" "MCAL_M_ALLDAYS" "MCRYPT_" "MCRYPT_"
; "MCRYPT_ENCRYPT" "MCRYPT_DECRYPT" "MCRYPT_DEV_RANDOM" ; "MCRYPT_ENCRYPT" "MCRYPT_DECRYPT" "MCRYPT_DEV_RANDOM"
; "MCRYPT_DEV_URANDOM" "MCRYPT_RAND" "SWFBUTTON_HIT" ; "MCRYPT_DEV_URANDOM" "MCRYPT_RAND" "SWFBUTTON_HIT"
; "SUNFUNCS_RET_STRING" "SUNFUNCS_RET_DOUBLE"
; "SWFBUTTON_DOWN" "SWFBUTTON_OVER" "SWFBUTTON_UP" ; "SWFBUTTON_DOWN" "SWFBUTTON_OVER" "SWFBUTTON_UP"
; "SWFBUTTON_MOUSEUPOUTSIDE" "SWFBUTTON_DRAGOVER" ; "SWFBUTTON_MOUSEUPOUTSIDE" "SWFBUTTON_DRAGOVER"
; "SWFBUTTON_DRAGOUT" "SWFBUTTON_MOUSEUP" "SWFBUTTON_MOUSEDOWN" ; "SWFBUTTON_DRAGOUT" "SWFBUTTON_MOUSEUP" "SWFBUTTON_MOUSEDOWN"
@ -1073,7 +1052,7 @@ current `tags-file-name'."
"endfor" "endforeach" "endif" "endswitch" "endwhile" "exit" "endfor" "endforeach" "endif" "endswitch" "endwhile" "exit"
"extends" "for" "foreach" "global" "if" "include" "include_once" "extends" "for" "foreach" "global" "if" "include" "include_once"
"next" "or" "require" "require_once" "return" "static" "switch" "next" "or" "require" "require_once" "return" "static" "switch"
"then" "var" "while" "xor" "throw" "catch" "try" "then" "var" "while" "xor" "private" "throw" "catch" "try"
"instanceof" "catch all" "finally"))) "instanceof" "catch all" "finally")))
"PHP keywords.") "PHP keywords.")
@ -1100,19 +1079,19 @@ current `tags-file-name'."
(list (list
;; Fontify constants ;; Fontify constants
(cons (cons
(concat "[^_$]?\\<\\(" php-constants "\\)\\>[^_]?") (concat "\\<\\(" php-constants "\\)\\>")
'(1 font-lock-constant-face)) 'font-lock-constant-face)
;; Fontify keywords ;; Fontify keywords
(cons (cons
(concat "[^_$]?\\<\\(" php-keywords "\\)\\>[^_]?") (concat "\\<\\(" php-keywords "\\)\\>")
'(1 font-lock-keyword-face)) 'font-lock-keyword-face)
;; Fontify keywords and targets, and case default tags. ;; Fontify keywords and targets, and case default tags.
(list "\\<\\(break\\|case\\|continue\\)\\>\\s-+\\(-?\\sw+\\)?" (list "\\<\\(break\\|case\\|continue\\)\\>[ \t]*\\(-?\\(?:\\sw\\|\\s_\\)+\\)?"
'(1 font-lock-keyword-face) '(2 font-lock-constant-face t t)) '(1 font-lock-keyword-face) '(2 font-lock-constant-face t t))
;; This must come after the one for keywords and targets. ;; This must come after the one for keywords and targets.
'(":" ("^\\s-+\\(\\sw+\\)\\s-+\\s-+$" '(":" ("^[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)[ \t]*:[ \t]*$"
(beginning-of-line) (end-of-line) (beginning-of-line) (end-of-line)
(1 font-lock-constant-face))) (1 font-lock-constant-face)))
@ -1121,11 +1100,12 @@ current `tags-file-name'."
'("\\<print\\>" . font-lock-keyword-face) '("\\<print\\>" . font-lock-keyword-face)
;; Fontify PHP tag ;; Fontify PHP tag
(cons php-tags-key font-lock-preprocessor-face) '("<\\?\\(php\\)?" . font-lock-constant-face)
'("\\?>" . font-lock-constant-face)
;; Fontify ASP-style tag ;; Fontify ASP-style tag
'("<\\%\\(=\\)?" . font-lock-preprocessor-face) '("<\\%\\(=\\)?" . font-lock-constant-face)
'("\\%>" . font-lock-preprocessor-face) '("\\%>" . font-lock-constant-face)
) )
"Subdued level highlighting for PHP mode.") "Subdued level highlighting for PHP mode.")
@ -1136,33 +1116,33 @@ current `tags-file-name'."
(list (list
;; class declaration ;; class declaration
'("\\<\\(class\\|interface\\)\\s-+\\(\\sw+\\)?" '("[^_]*\\<\\(class\\|interface\\)[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
(1 font-lock-keyword-face) (2 font-lock-type-face nil t)) (1 font-lock-keyword-face) (2 font-lock-type-face nil t))
;; handle several words specially, to include following word, ;; handle several words specially, to include following word,
;; thereby excluding it from unknown-symbol checks later ;; thereby excluding it from unknown-symbol checks later
;; FIX to handle implementing multiple ;; FIX to handle implementing multiple
;; currently breaks on "class Foo implements Bar, Baz" ;; currently breaks on "class Foo implements Bar, Baz"
'("\\<\\(new\\|extends\\|implements\\)\\s-+\\$?\\(\\sw+\\)" '("\\<\\(new\\|extends\\|implements\\)\\s-+\\$?\\(\\(?:\\sw\\|\\s_\\)+\\)"
(1 font-lock-keyword-face) (2 font-lock-type-face)) (1 font-lock-keyword-face) (2 font-lock-type-face))
;; function declaration ;; function declaration
'("\\<\\(function\\)\\s-+&?\\(\\sw+\\)\\s-*(" '("\\<\\(function\\)\\s-+&?\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*("
(1 font-lock-keyword-face) (1 font-lock-keyword-face)
(2 font-lock-function-name-face nil t)) (2 font-lock-function-name-face nil t))
;; class hierarchy ;; class hierarchy
'("\\<\\(self\\|parent\\)\\>" (1 font-lock-constant-face nil nil)) '("\\(self\\|parent\\)\\W" (1 font-lock-constant-face nil nil))
;; method and variable features ;; method and variable features
'("\\<\\(private\\|protected\\|public\\)\\s-+\\$?\\sw+" '("\\<\\(private\\|protected\\|public\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
(1 font-lock-keyword-face)) (1 font-lock-keyword-face))
;; method features ;; method features
'("^\\s-*\\(abstract\\|static\\|final\\)\\s-+\\$?\\sw+" '("^[ \t]*\\(abstract\\|static\\|final\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
(1 font-lock-keyword-face)) (1 font-lock-keyword-face))
;; variable features ;; variable features
'("^\\s-*\\(static\\|const\\)\\s-+\\$?\\sw+" '("^[ \t]*\\(static\\|const\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
(1 font-lock-keyword-face)) (1 font-lock-keyword-face))
)) ))
"Medium level highlighting for PHP mode.") "Medium level highlighting for PHP mode.")
@ -1170,62 +1150,114 @@ current `tags-file-name'."
(defconst php-font-lock-keywords-3 (defconst php-font-lock-keywords-3
(append (append
php-font-lock-keywords-2 php-font-lock-keywords-2
(list `(
;; <word> or </word> for HTML
;;'("</?\\sw+[^> ]*>" . font-lock-constant-face)
;;'("</?\\sw+[^>]*" . font-lock-constant-face)
;;'("<!DOCTYPE" . font-lock-constant-face)
("</?[a-z!:]+" . font-lock-constant-face)
;; <word> or </word> for HTML ;; HTML >
;;'("</?\\sw+[^> ]*>" . font-lock-constant-face) ("<[^>]*\\(>\\)" (1 font-lock-constant-face))
;;'("</?\\sw+[^>]*" . font-lock-constant-face)
;;'("<!DOCTYPE" . font-lock-constant-face)
'("</?[a-z!:]+" . font-lock-constant-face)
;; HTML > ;; HTML tags
'("<[^>]*\\(>\\)" (1 font-lock-constant-face)) ("\\(<[a-z]+\\)[[:space:]]+\\([a-z:]+=\\)[^>]*?" (1 font-lock-constant-face) (2 font-lock-constant-face) )
("\"[[:space:]]+\\([a-z:]+=\\)" (1 font-lock-constant-face))
;; HTML tags ;; HTML entities
'("\\(<[a-z]+\\)[[:space:]]+\\([a-z:]+=\\)[^>]*?" (1 font-lock-constant-face) (2 font-lock-constant-face) ) ;;'("&\\w+;" . font-lock-variable-name-face)
'("\"[[:space:]]+\\([a-z:]+=\\)" (1 font-lock-constant-face))
;; HTML entities ;; warn about '$' immediately after ->
;;'("&\\w+;" . font-lock-variable-name-face) ,@(if php-mode-dollar-property-warning
'("\\$\\(?:\\sw\\|\\s_\\)+->\\s-*\\(\\$\\)\\(\\(?:\\sw\\|\\s_\\)+\\)"
(1 font-lock-warning-face) (2 php-default-face)))
;; warn about '$' immediately after -> ;; warn about $word.word -- it could be a valid concatenation,
'("\\$\\sw+->\\s-*\\(\\$\\)\\(\\sw+\\)" ;; but without any spaces we'll assume $word->word was meant.
(1 font-lock-warning-face) (2 php-default-face)) ,@(if php-mode-dot-property-warning
'("\\$\\(?:\\sw\\|\\s_\\)+\\(\\.\\)\\sw" 1 font-lock-warning-face))
;; warn about $word.word -- it could be a valid concatenation, ;; Warn about ==> instead of =>
;; but without any spaces we'll assume $word->word was meant. ("==+>" . font-lock-warning-face)
'("\\$\\sw+\\(\\.\\)\\sw"
1 font-lock-warning-face)
;; Warn about ==> instead of => ;; exclude casts from bare-word treatment (may contain spaces)
'("==+>" . font-lock-warning-face) (,(concat "(\\s-*\\(" php-types "\\)\\s-*)") 1 font-lock-type-face)
;; exclude casts from bare-word treatment (may contain spaces) ;; PHP5: function declarations may contain classes as parameters type
`(,(concat "(\\s-*\\(" php-types "\\)\\s-*)") (,(concat
"[(,]\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-+&?\\$\\(?:\\sw\\|\\s_\\)+\\>")
1 font-lock-type-face) 1 font-lock-type-face)
;; PHP5: function declarations may contain classes as parameters type ;; Fontify variables and function calls
`(,(concat "[(,]\\s-*\\(\\sw+\\)\\s-+&?\\$\\sw+\\>") ("\\$\\(this\\|that\\)\\W" (1 font-lock-constant-face nil nil))
1 font-lock-type-face) (,(concat "\\$\\(" php-superglobals "\\)\\W")
(1 font-lock-constant-face nil nil)) ; $_GET & co
("\\$\\(\\(?:\\sw\\|\\s_\\)+\\)" (1 font-lock-variable-name-face)) ; $variable
("->\\(\\(?:\\sw\\|\\s_\\)+\\)" (1 font-lock-variable-name-face t t)) ; ->variable
("->\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" . (1 php-default-face t t)) ; ->function_call
("\\(\\(?:\\sw\\|\\s_\\)+\\)::\\(?:\\sw\\|\\s_\\)+\\s-*(?" . (1 font-lock-type-face)) ; class::member
("::\\(\\(?:\\sw\\|\\s_\\)+\\>[^(]\\)" . (1 php-default-face)) ; class::constant
("\\<\\(?:\\sw\\|\\s_\\)+\\s-*[[(]" . php-default-face) ; word( or word[
("\\<[0-9]+" . php-default-face) ; number (also matches word)
;; Fontify variables and function calls ;; Warn on any words not already fontified
'("\\$\\(this\\|that\\)\\W" (1 font-lock-constant-face nil nil)) ,@(if php-mode-warn-on-unmatched
`(,(concat "\\$\\(" php-superglobals "\\)\\W") '("\\<\\(?:\\sw\\|\\s_\\)+\\>" . font-lock-warning-face))
(1 font-lock-constant-face nil nil)) ;; $_GET & co
'("\\$\\(\\sw+\\)" (1 font-lock-variable-name-face)) ;; $variable
'("->\\(\\sw+\\)" (1 font-lock-variable-name-face t t)) ;; ->variable
'("->\\(\\sw+\\)\\s-*(" . (1 php-default-face t t)) ;; ->function_call
'("\\(\\sw+\\)::\\sw+\\s-*(?" . (1 font-lock-type-face)) ;; class::member
'("::\\(\\sw+\\>[^(]\\)" . (1 php-default-face)) ;; class::constant
'("\\<\\sw+\\s-*[[(]" . php-default-face) ;; word( or word[
'("\\<[0-9]+" . php-default-face) ;; number (also matches word)
;; Warn on any words not already fontified )
'("\\<\\sw+\\>" . font-lock-warning-face) )
))
"Gauchy level highlighting for PHP mode.") "Gauchy level highlighting for PHP mode.")
;; Define the imenu-generic-expression for PHP mode.
;; To use, execute M-x imenu, then click on Functions or Classes,
;; then select given function/class name to go to its definition.
;; [Contributed by Gerrit Riessen]
(defvar php-imenu-generic-expression
'(
("All Functions"
"^\\s-*function\\s-+\\([[:alnum:]_]+\\)\\s-*(" 1)
("Classes"
"^\\s-*class\\s-+\\([[:alnum:]_]+\\)\\s-*" 1)
("Public Methods"
"^\\s-*public function\\s-+\\([[:alnum:]_]+\\)\\s-*(" 1)
("Protected Methods"
"^\\s-*protected function\\s-+\\([[:alnum:]_]+\\)\\s-*(" 1)
("Private Methods"
"^\\s-*private function\\s-+\\([[:alnum:]_]+\\)\\s-*(" 1)
)
"Imenu generic expression for PHP Mode. See `imenu-generic-expression'."
)
(defconst php-block-stmt-1-kwds '("do" "else" "finally" "try"))
(defconst php-block-stmt-2-kwds
'("for" "if" "while" "switch" "foreach" "elseif" "catch all"))
(defconst php-block-stmt-1-key
(regexp-opt php-block-stmt-1-kwds))
(defconst php-block-stmt-2-key
(regexp-opt php-block-stmt-2-kwds))
(defconst php-class-decl-kwds '("class" "interface"))
(defconst php-class-key
(concat
"\\(" (regexp-opt php-class-decl-kwds) "\\)\\s +"
c-symbol-key ;; Class name.
"\\(\\s *extends\\s *" c-symbol-key "\\)?" ;; Name of superclass.
"\\(\\s *implements *[^{]+{\\)?")) ;; List of any adopted protocols.
;; Create "php-default-face" symbol for GNU Emacs so that both XEmacs
;; and GNU emacs can refer to the default face.
(unless (boundp 'php-default-face)
(defvar php-default-face 'php-default-face))
;; Create faces for XEmacs
(when (featurep 'xemacs)
(unless (boundp 'font-lock-keyword-face)
(copy-face 'bold 'font-lock-keyword-face))
(unless (boundp 'font-lock-constant-face)
(copy-face 'font-lock-keyword-face 'font-lock-constant-face)))
(provide 'php-mode) (provide 'php-mode)
;;; php-mode.el ends here ;;; php-mode.el ends here

View file

@ -1,291 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- ViewVC :: http://www.viewvc.org/ -->
<head>
<title>SourceForge.net Repository - [php-mode] Index of /</title>
<meta name="generator" content="ViewVC 1.1.6" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="The world's largest development and download repository of Open Source code and applications" />
<meta name="keywords" content="Open Source, Development, Developers, Projects, Downloads, OSTG, VA Software, SF.net, SourceForge" />
<title>SourceForge.net Repository - php-mode Index of /</title>
<link rel="shortcut icon" href="http://a.fsdn.com/con/img/favicon.ico" />
<link rel="stylesheet" href="http://a.fsdn.com/con/css/sf.min.css?1256826599" type="text/css" />
<link rel="stylesheet" href="/viewvc-static/styles.css" type="text/css" />
<style type="text/css"> .short-head #hd { background-position:0 -247px; } #hd .yui-b { height:47px; margin:0 auto; position:relative; text-align:left; width:74.923em; } pre.vc_log { margin:1em; }</style>
<!-- BEGIN: AdSolution-Tag 4.2: Global-Code [PLACE IN HTML-HEAD-AREA!] -->
<!-- DoubleClick Random Number -->
<script language="JavaScript" type="text/javascript">
dfp_ord=Math.random()*10000000000000000;
dfp_tile = 1;
</script>
<!-- End DoubleClick Random Number -->
<script type="text/javascript">
var google_page_url = 'http://sourceforge.net/projects/php-mode/';
var sourceforge_project_name = 'php-mode';
var sourceforge_project_description = '';
</script>
<!-- END: AdSolution-Tag 4.2: Global-Code -->
<!-- after META tags -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
</head>
<body class="short-head">
<!--[if IE 7]><div id="ie7only"><![endif]-->
<!--[if IE 6]><div id="ie6only"><![endif]-->
<!--[if IE]><div id="ieonly"><![endif]-->
<div id="doc3">
<div id="hd">
<div class="yui-b">
<div class="yui-gc">
<div class="yui-u first">
<a href="http://sourceforge.net/" class="logo">Find and develop open source software</a>
</div>
<div class="yui-u">
<div class="search">
<form action="http://sourceforge.net/search/" method="get" name="searchform" id="searchform">
<input type="hidden" name="type_of_search" value="soft" />
<input type="text" class="text clear hint" name="words" id="words" value="enter keyword" />
<span class="yui-button yui-push-button default"><span class="first-child"><button type="submit" value="Search">Search</button></span></span>
</form>
</div>
</div>
</div>
</div>
</div>
<div id="bd" class="inner-bd">
<div id="doc4" class="yui-t6">
<div id="breadcrumbs">
<a href="http://sourceforge.net/">SourceForge.net</a>
&gt; <a href="http://sourceforge.net/softwaremap/">Find Software</a>
&gt; <a href="http://sourceforge.net/projects/php-mode/">php-mode</a>
&gt; SCM Repositories
&gt; php-mode
</div>
<div id="project_nav_container">
<h1>SCM Repositories - <a href="http://sourceforge.net/projects/php-mode">php-mode</a></h1>
</div>
<hr class="clear">
<div class="yui-b">
<div id="fad83">
<!-- DoubleClick Ad Tag -->
<script type="text/javascript">
//<![CDATA[
document.write('<script src="http://ad.doubleclick.net/adj/ostg.sourceforge/pg_viewvc_p88_shortrec;pg=viewvc;tile='+dfp_tile+';tpc=php-mode;ord='+dfp_ord+'?" type="text/javascript"><\/script>');
dfp_tile++;
//]]>
</script>
<!-- End DoubleClick Ad Tag -->
</div>
</div>
<div id="yui-main">
<div class="yui-b">
<!-- you may insert repository access instructions here -->
<div class="sfBox">
<table class="auto">
<tr><td>Files shown:</td><td><strong>0</strong>
</td></tr>
<tr>
<td>Directory revision:</td>
<td><a href="/viewvc/php-mode?view=revision&amp;revision=97" title="Revision 97">97</a> (of <a href="/viewvc/php-mode?view=revision" title="Revision 97">97</a>)</td>
</tr>
<tr>
<td>Sticky Revision:</td>
<td><form method="get" action="/viewvc/php-mode" style="display: inline">
<div style="display: inline">
<input type="hidden" name="orig_pathtype" value="DIR"/><input type="hidden" name="orig_view" value="dir"/><input type="hidden" name="orig_path" value=""/><input type="hidden" name="view" value="redirect_pathrev"/>
<input type="text" name="pathrev" value="" size="6"/>
<input type="submit" value="Set" />
</div>
</form>
</td>
</tr>
</table>
</div>
</div>
</div>
<hr class="clear">
<div>
<p><a name="dirlist"></a></p>
<table cellspacing="1" cellpadding="2">
<thead>
<tr>
<th class="vc_header_sort" colspan="2">
<a href="/viewvc/php-mode/?sortdir=down#dirlist">File</a>
<img class="vc_sortarrow" alt=""
width="13" height="13"
src="/viewvc-static/images/up.png" />
</th>
<th class="vc_header">
<a href="/viewvc/php-mode/?sortby=rev#dirlist">Rev.</a>
</th>
<th class="vc_header">
<a href="/viewvc/php-mode/?sortby=date#dirlist">Age</a>
</th>
<th class="vc_header">
<a href="/viewvc/php-mode/?sortby=author#dirlist">Author</a>
</th>
<th class="vc_header">
<a href="/viewvc/php-mode/?sortby=log#dirlist">Last log entry</a>
</th>
</tr>
</thead>
<tbody>
<tr class="vc_row_even">
<td colspan="2">
<a name="branches" href="/viewvc/php-mode/branches/" title="View directory contents">
<img src="/viewvc-static/images/dir.png" alt="" class="vc_icon" />
branches/</a>
</td>
<td>&nbsp;<a href="/viewvc/php-mode/branches/?view=log" title="View directory revision log"><strong>3</strong></a></td>
<td>&nbsp;7 years</td>
<td>&nbsp;turadg</td>
<td>&nbsp;Initial import.
</td>
</tr>
<tr class="vc_row_odd">
<td colspan="2">
<a name="tags" href="/viewvc/php-mode/tags/" title="View directory contents">
<img src="/viewvc-static/images/dir.png" alt="" class="vc_icon" />
tags/</a>
</td>
<td>&nbsp;<a href="/viewvc/php-mode/tags/?view=log" title="View directory revision log"><strong>94</strong></a></td>
<td>&nbsp;2 years</td>
<td>&nbsp;ashawley</td>
<td>&nbsp;Remove typo tag.</td>
</tr>
<tr class="vc_row_even">
<td colspan="2">
<a name="trunk" href="/viewvc/php-mode/trunk/" title="View directory contents">
<img src="/viewvc-static/images/dir.png" alt="" class="vc_icon" />
trunk/</a>
</td>
<td>&nbsp;<a href="/viewvc/php-mode/trunk/?view=log" title="View directory revision log"><strong>97</strong></a></td>
<td>&nbsp;2 years</td>
<td>&nbsp;ashawley</td>
<td>&nbsp;Require add-log to avoid byte compilation warning
for add-log-current-defun-head&hellip;</td>
</tr>
</tbody>
</table>
<hr />
<p style="margin:0;"><a href="/viewvc/php-mode/?view=tar">Download GNU tarball</a></p>
<br />
</div>
</div>
</div>
<div id="ft">
<div class="yui-b">
<div class="yui-gb">
<div class="yui-u first" style="text-align: center;"> <a href="http://p.sf.net/sourceforge/support">SourceForge Help<a/> </div>
<div class="yui-u" style="text-align: center;"> <strong><a href="/viewvc-static/help_rootview.html">ViewVC Help</a></strong> </div>
<div class="yui-u" style="text-align: center;"> <a href="http://viewvc.tigris.org/">Powered by ViewVC 1.1.6</a> </div>
</div>
<p class="copyright">Copyright &copy; 2010 <a title="Network which provides and promotes Open Source software downloads, development, discussion and news." href="http://geek.net">Geeknet, Inc.</a> All rights reserved. <a href="http://p.sf.net/sourceforge/terms">Terms of Use</a></p>
</div>
</div>
</div>
<!--[if IE]></div><![endif]-->
<!--[if IE 6]></div><![endif]-->
<!--[if IE 7]></div><![endif]-->
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-32013-37");
pageTracker._setDomainName(".sourceforge.net");
pageTracker._trackPageview();
</script>
</body>
</html>

View file

@ -1,46 +0,0 @@
To install nXhtml put this in your .emacs:
(load "YOUR-PATH-TO/nxhtml/autostart.el")
where autostart.el is the file in the same directory as this
readme.txt file.
Note 1: If you are using Emacs+EmacsW32 then nXhtml is already
installed.
Note 2: If you are using Emacs 22 then you need to install nXml
separately. (It is included in Emacs 23.)
Note 3: You may optionally also byte compile nXhtml from the nXhtml
menu (recommended).
Files that are now in Emacs' development (CVS/Bazaar) repository
================================================================
Some files that were previously distributed with nXhtml are now in
Emacs' development repository. Distributing them also with nXhtml is
a bad idea since that can lead to that the wrong file is loaded. They
are therefore not distributed with nXhtml anymore.
Instead you can (if you do not have the files in your Emacs) in many
cases use the version from the repository. To do that you can
currently start from
http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/
Files you can download and use this way are for example
js.el (JavaScript, formerly called espresso.el)
htmlfontify.el
If you do that I suggest that you put these files in a special
directory and add that to load-path in your .emacs and make that
adding to load-path depend on your Emacs version so that they will not
be loaded when you have upgraded your Emacs.
Note that if you want to use nxml-mode (and it is not in your Emacs)
you should not download it from Emacs' development directory. Instead go to
http://www.thaiopensource.com/download/

View file

@ -1,137 +0,0 @@
;; find-recursive.el -- Find files recursively into a directory
;;
;; Copyright (C) 2001 Ovidiu Predescu
;;
;; Author: Ovidiu Predescu <ovidiu@cup.hp.com>
;; Date: March 26, 2001
;;
;; 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
;; 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, write to the Free Software
;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;;
;; Setup: put this file in your Lisp path and add the following line in
;; your .emacs:
;;
;; (require 'find-recursive)
;;
(require 'cl)
(defcustom find-recursive-exclude-files '(".*.class$" ".*~$" ".*.elc$")
"List of regular expressions of files to be excluded when recursively searching for files."
:type '(repeat (string :tag "File regexp")))
(defun find-file-recursively (file-regexp directory)
(interactive "sFile name to search for recursively: \nDIn directory: ")
(let ((directory (if (equal (substring directory -1) "/")
directory
(concat directory "/")))
(matches
(find-recursive-filter-out
find-recursive-exclude-files
(find-recursive-directory-relative-files directory "" file-regexp))))
(cond ((eq (length matches) 0) (message "No file(s) found!"))
((eq (length matches) 1)
(find-file (concat directory (car matches))))
(t
(run-with-timer 0.001 nil
(lambda ()
(dispatch-event
(make-event 'key-press '(key tab)))))
(let ((file (completing-read "Choose file: "
(mapcar 'list matches)
nil t)))
(if (or (eq file nil) (equal file ""))
(message "No file selected.")
(find-file (concat directory file))))))))
(defun find-recursive-directory-relative-files (directory
relative-directory
file-regexp)
(let* ((full-dir (concat directory "/" relative-directory))
(matches
(mapcar
(function (lambda (x)
(concat relative-directory x)))
(find-recursive-filter-out '(nil)
(directory-files full-dir nil
file-regexp nil t))))
(inner
(mapcar
(function
(lambda (dir)
(find-recursive-directory-relative-files directory
(concat relative-directory
dir "/")
file-regexp)))
(find-recursive-filter-out '(nil "\\." "\\.\\.")
(directory-files full-dir nil ".*"
nil 'directories)))))
(mapcar (function (lambda (dir) (setq matches (append matches dir))))
inner)
matches))
(defun find-recursive-filter-out (remove-list list)
"Remove all the elements in *remove-list* from *list*"
(if (eq list nil)
nil
(let ((elem (car list))
(rest (cdr list)))
(if (some
(lambda (regexp)
(if (or (eq elem nil) (eq regexp nil))
nil
(not (eq (string-match regexp elem) nil))))
remove-list)
(find-recursive-filter-out remove-list rest)
(cons elem (find-recursive-filter-out remove-list rest))))))
(defvar find-recursive-running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
(if find-recursive-running-xemacs
nil
(defadvice directory-files (after
directory-files-xemacs
(dirname &optional full match nosort files-only)
activate)
"Add an additional argument, FILES-ONLY to the list of arguments
for GNU Emacs. If the symbol is t, then only the files in the
directory will be returned. If FILES-ONLY is nil, then both files and
directories are selected. If FILES-ONLY is not nil and not t, then
only sundirectories are returned."
(setq ad-return-value
(cond ((null files-only) ad-return-value)
((eq files-only t)
(find-recursive-remove-if (lambda (f)
(file-directory-p
(concat dirname "/" f)))
ad-return-value))
(t
(find-recursive-remove-if (lambda (f)
(not (file-directory-p
(concat dirname "/" f))))
ad-return-value)))))
(defun find-recursive-remove-if (func list)
"Removes all elements satisfying FUNC from LIST."
(let ((result nil))
(while list
(if (not (funcall func (car list)))
(setq result (cons (car list) result)))
(setq list (cdr list)))
(nreverse result))))
(global-set-key [(control x) (meta f)] 'find-file-recursively)
(provide 'find-recursive)

View file

@ -1,712 +0,0 @@
;;; javascript.el --- Major mode for editing JavaScript source text
;; Copyright (C) 2006 Karl Landström
;; Author: Karl Landström <kland@comhem.se>
;; Maintainer: Karl Landström <kland@comhem.se>
;; Version: 2.0 Beta 8
;; Date: 2006-12-26
;; Keywords: languages, oop
;; This file 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 file 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., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;;
;; The main features of this JavaScript mode are syntactic
;; highlighting (enabled with `font-lock-mode' or
;; `global-font-lock-mode'), automatic indentation and filling of
;; comments.
;;
;; This package has (only) been tested with GNU Emacs 21.4 (the latest
;; stable release).
;;
;; Installation:
;;
;; Put this file in a directory where Emacs can find it (`C-h v
;; load-path' for more info). Then add the following lines to your
;; Emacs initialization file:
;;
;; (add-to-list 'auto-mode-alist '("\\.js\\'" . javascript-mode))
;; (autoload 'javascript-mode "javascript" nil t)
;;
;; General Remarks:
;;
;; This mode assumes that block comments are not nested inside block
;; comments and that strings do not contain line breaks.
;;
;; Exported names start with "javascript-" whereas private names start
;; with "js-".
;;
;; Changes:
;;
;; See javascript.el.changelog.
;;; Code:
(require 'cc-mode)
(require 'font-lock)
(require 'newcomment)
(defgroup javascript nil
"Customization variables for `javascript-mode'."
:tag "JavaScript"
:group 'languages)
(defcustom javascript-indent-level 4
"Number of spaces for each indentation step."
:type 'integer
:group 'javascript)
(defcustom javascript-auto-indent-flag t
"Automatic indentation with punctuation characters. If non-nil, the
current line is indented when certain punctuations are inserted."
:type 'boolean
:group 'javascript)
;; --- Keymap ---
(defvar javascript-mode-map nil
"Keymap used in JavaScript mode.")
(unless javascript-mode-map
(setq javascript-mode-map (make-sparse-keymap)))
(when javascript-auto-indent-flag
(mapc (lambda (key)
(define-key javascript-mode-map key 'javascript-insert-and-indent))
'("{" "}" "(" ")" ":" ";" ",")))
(defun javascript-insert-and-indent (key)
"Run command bound to key and indent current line. Runs the command
bound to KEY in the global keymap and indents the current line."
(interactive (list (this-command-keys)))
(call-interactively (lookup-key (current-global-map) key))
(indent-according-to-mode))
;; --- Syntax Table And Parsing ---
(defvar javascript-mode-syntax-table
(let ((table (make-syntax-table)))
(c-populate-syntax-table table)
;; The syntax class of underscore should really be `symbol' ("_")
;; but that makes matching of tokens much more complex as e.g.
;; "\\<xyz\\>" matches part of e.g. "_xyz" and "xyz_abc". Defines
;; it as word constituent for now.
(modify-syntax-entry ?_ "w" table)
table)
"Syntax table used in JavaScript mode.")
(defun js-re-search-forward-inner (regexp &optional bound count)
"Auxiliary function for `js-re-search-forward'."
(let ((parse)
(saved-point (point-min)))
(while (> count 0)
(re-search-forward regexp bound)
(setq parse (parse-partial-sexp saved-point (point)))
(cond ((nth 3 parse)
(re-search-forward
(concat "\\([^\\]\\|^\\)" (string (nth 3 parse)))
(save-excursion (end-of-line) (point)) t))
((nth 7 parse)
(forward-line))
((or (nth 4 parse)
(and (eq (char-before) ?\/) (eq (char-after) ?\*)))
(re-search-forward "\\*/"))
(t
(setq count (1- count))))
(setq saved-point (point))))
(point))
(defun js-re-search-forward (regexp &optional bound noerror count)
"Search forward but ignore strings and comments. Invokes
`re-search-forward' but treats the buffer as if strings and
comments have been removed."
(let ((saved-point (point))
(search-expr
(cond ((null count)
'(js-re-search-forward-inner regexp bound 1))
((< count 0)
'(js-re-search-backward-inner regexp bound (- count)))
((> count 0)
'(js-re-search-forward-inner regexp bound count)))))
(condition-case err
(eval search-expr)
(search-failed
(goto-char saved-point)
(unless noerror
(error (error-message-string err)))))))
(defun js-re-search-backward-inner (regexp &optional bound count)
"Auxiliary function for `js-re-search-backward'."
(let ((parse)
(saved-point (point-min)))
(while (> count 0)
(re-search-backward regexp bound)
(when (and (> (point) (point-min))
(save-excursion (backward-char) (looking-at "/[/*]")))
(forward-char))
(setq parse (parse-partial-sexp saved-point (point)))
(cond ((nth 3 parse)
(re-search-backward
(concat "\\([^\\]\\|^\\)" (string (nth 3 parse)))
(save-excursion (beginning-of-line) (point)) t))
((nth 7 parse)
(goto-char (nth 8 parse)))
((or (nth 4 parse)
(and (eq (char-before) ?/) (eq (char-after) ?*)))
(re-search-backward "/\\*"))
(t
(setq count (1- count))))))
(point))
(defun js-re-search-backward (regexp &optional bound noerror count)
"Search backward but ignore strings and comments. Invokes
`re-search-backward' but treats the buffer as if strings and
comments have been removed."
(let ((saved-point (point))
(search-expr
(cond ((null count)
'(js-re-search-backward-inner regexp bound 1))
((< count 0)
'(js-re-search-forward-inner regexp bound (- count)))
((> count 0)
'(js-re-search-backward-inner regexp bound count)))))
(condition-case err
(eval search-expr)
(search-failed
(goto-char saved-point)
(unless noerror
(error (error-message-string err)))))))
(defun js-continued-var-decl-list-p ()
"Return non-nil if point is inside a continued variable declaration
list."
(interactive)
(let ((start (save-excursion (js-re-search-backward "\\<var\\>" nil t))))
(and start
(save-excursion (re-search-backward "\n" start t))
(not (save-excursion
(js-re-search-backward
";\\|[^, \t][ \t]*\\(/[/*]\\|$\\)" start t))))))
;; --- Font Lock ---
(defun js-inside-param-list-p ()
"Return non-nil if point is inside a function parameter list."
(condition-case err
(save-excursion
(up-list -1)
(and (looking-at "(")
(progn (backward-word 1)
(or (looking-at "function")
(progn (backward-word 1) (looking-at "function"))))))
(error nil)))
(defconst js-function-heading-1-re
"^[ \t]*function[ \t]+\\(\\w+\\)"
"Regular expression matching the start of a function header.")
(defconst js-function-heading-2-re
"^[ \t]*\\(\\w+\\)[ \t]*:[ \t]*function\\>"
"Regular expression matching the start of a function entry in
an associative array.")
(defconst js-keyword-re
(regexp-opt '("abstract" "break" "case" "catch" "class" "const"
"continue" "debugger" "default" "delete" "do" "else"
"enum" "export" "extends" "final" "finally" "for"
"function" "goto" "if" "implements" "import" "in"
"instanceof" "interface" "native" "new" "package"
"private" "protected" "public" "return" "static"
"super" "switch" "synchronized" "this" "throw"
"throws" "transient" "try" "typeof" "var" "void"
"volatile" "while" "with"
"let") 'words)
"Regular expression matching any JavaScript keyword.")
(defconst js-basic-type-re
(regexp-opt '("boolean" "byte" "char" "double" "float" "int" "long"
"short" "void") 'words)
"Regular expression matching any predefined type in JavaScript.")
(defconst js-constant-re
(regexp-opt '("false" "null" "true") 'words)
"Regular expression matching any future reserved words in JavaScript.")
(defconst js-font-lock-keywords-1
(list
"\\<import\\>"
(list js-function-heading-1-re 1 font-lock-function-name-face)
(list js-function-heading-2-re 1 font-lock-function-name-face)
(list "[=(][ \t]*\\(/.*?[^\\]/\\w*\\)" 1 font-lock-string-face))
"Level one font lock.")
(defconst js-font-lock-keywords-2
(append js-font-lock-keywords-1
(list (list js-keyword-re 1 font-lock-keyword-face)
(cons js-basic-type-re font-lock-type-face)
(cons js-constant-re font-lock-constant-face)))
"Level two font lock.")
;; Limitations with variable declarations: There seems to be no
;; sensible way to highlight variables occuring after an initialized
;; variable in a variable list. For instance, in
;;
;; var x, y = f(a, b), z
;;
;; z will not be highlighted.
(defconst js-font-lock-keywords-3
(append
js-font-lock-keywords-2
(list
;; variable declarations
(list
(concat "\\<\\(const\\|var\\)\\>\\|" js-basic-type-re)
(list "\\(\\w+\\)[ \t]*\\([=;].*\\|,\\|/[/*]\\|$\\)"
nil
nil
'(1 font-lock-variable-name-face)))
;; continued variable declaration list
(list
(concat "^[ \t]*\\w+[ \t]*\\([,;=]\\|/[/*]\\|$\\)")
(list "\\(\\w+\\)[ \t]*\\([=;].*\\|,\\|/[/*]\\|$\\)"
'(if (save-excursion (backward-char) (js-continued-var-decl-list-p))
(backward-word 1)
(end-of-line))
'(end-of-line)
'(1 font-lock-variable-name-face)))
;; formal parameters
(list
(concat "\\<function\\>\\([ \t]+\\w+\\)?[ \t]*([ \t]*\\w")
(list "\\(\\w+\\)\\([ \t]*).*\\)?"
'(backward-char)
'(end-of-line)
'(1 font-lock-variable-name-face)))
;; continued formal parameter list
(list
(concat "^[ \t]*\\w+[ \t]*[,)]")
(list "\\w+"
'(if (save-excursion (backward-char) (js-inside-param-list-p))
(backward-word 1)
(end-of-line))
'(end-of-line)
'(0 font-lock-variable-name-face)))))
"Level three font lock.")
(defconst js-font-lock-keywords
'(js-font-lock-keywords-3 js-font-lock-keywords-1 js-font-lock-keywords-2
js-font-lock-keywords-3)
"See `font-lock-keywords'.")
;; --- Indentation ---
(defconst js-possibly-braceless-keyword-re
(regexp-opt
'("catch" "do" "else" "finally" "for" "if" "try" "while" "with" "let")
'words)
"Regular expression matching keywords that are optionally
followed by an opening brace.")
(defconst js-indent-operator-re
(concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|"
(regexp-opt '("in" "instanceof") 'words))
"Regular expression matching operators that affect indentation
of continued expressions.")
(defun js-looking-at-operator-p ()
"Return non-nil if text after point is an operator (that is not
a comma)."
(save-match-data
(and (looking-at js-indent-operator-re)
(or (not (looking-at ":"))
(save-excursion
(and (js-re-search-backward "[?:{]\\|\\<case\\>" nil t)
(looking-at "?")))))))
(defun js-continued-expression-p ()
"Returns non-nil if the current line continues an expression."
(save-excursion
(back-to-indentation)
(or (js-looking-at-operator-p)
(and (js-re-search-backward "\n" nil t)
(progn
(skip-chars-backward " \t")
(backward-char)
(and (> (point) (point-min))
(save-excursion (backward-char) (not (looking-at "[/*]/")))
(js-looking-at-operator-p)
(and (progn (backward-char)
(not (looking-at "++\\|--\\|/[/*]"))))))))))
(defun js-end-of-do-while-loop-p ()
"Returns non-nil if word after point is `while' of a do-while
statement, else returns nil. A braceless do-while statement
spanning several lines requires that the start of the loop is
indented to the same column as the current line."
(interactive)
(save-excursion
(save-match-data
(when (looking-at "\\s-*\\<while\\>")
(if (save-excursion
(skip-chars-backward "[ \t\n]*}")
(looking-at "[ \t\n]*}"))
(save-excursion
(backward-list) (backward-word 1) (looking-at "\\<do\\>"))
(js-re-search-backward "\\<do\\>" (point-at-bol) t)
(or (looking-at "\\<do\\>")
(let ((saved-indent (current-indentation)))
(while (and (js-re-search-backward "^[ \t]*\\<" nil t)
(/= (current-indentation) saved-indent)))
(and (looking-at "[ \t]*\\<do\\>")
(not (js-re-search-forward
"\\<while\\>" (point-at-eol) t))
(= (current-indentation) saved-indent)))))))))
(defun js-ctrl-statement-indentation ()
"Returns the proper indentation of the current line if it
starts the body of a control statement without braces, else
returns nil."
(save-excursion
(back-to-indentation)
(when (save-excursion
(and (not (looking-at "[{]"))
(progn
(js-re-search-backward "[[:graph:]]" nil t)
(forward-char)
(when (= (char-before) ?\)) (backward-list))
(skip-syntax-backward " ")
(skip-syntax-backward "w")
(looking-at js-possibly-braceless-keyword-re))
(not (js-end-of-do-while-loop-p))))
(save-excursion
(goto-char (match-beginning 0))
(+ (current-indentation) javascript-indent-level)))))
(defun js-proper-indentation (parse-status)
"Return the proper indentation for the current line."
(save-excursion
(back-to-indentation)
(let ((ctrl-stmt-indent (js-ctrl-statement-indentation))
(same-indent-p (looking-at "[]})]\\|\\<case\\>\\|\\<default\\>"))
(continued-expr-p (js-continued-expression-p)))
(cond (ctrl-stmt-indent)
((js-continued-var-decl-list-p)
(js-re-search-backward "\\<var\\>" nil t)
(+ (current-indentation) javascript-indent-level))
((nth 1 parse-status)
(goto-char (nth 1 parse-status))
(if (looking-at "[({[][ \t]*\\(/[/*]\\|$\\)")
(progn
(skip-syntax-backward " ")
(when (= (char-before) ?\)) (backward-list))
(back-to-indentation)
(cond (same-indent-p
(current-column))
(continued-expr-p
(+ (current-column) (* 2 javascript-indent-level)))
(t
(+ (current-column) javascript-indent-level))))
(unless same-indent-p
(forward-char)
(skip-chars-forward " \t"))
(current-column)))
(continued-expr-p javascript-indent-level)
(t 0)))))
(defun javascript-indent-line ()
"Indent the current line as JavaScript source text."
(interactive)
(let ((parse-status
(save-excursion (parse-partial-sexp (point-min) (point-at-bol))))
(offset (- (current-column) (current-indentation))))
(when (not (nth 8 parse-status))
(indent-line-to (js-proper-indentation parse-status))
(when (> offset 0) (forward-char offset)))))
;; --- Filling ---
;; FIXME: It should be possible to use the more sofisticated function
;; `c-fill-paragraph' in `cc-cmds.el' instead. However, just setting
;; `fill-paragraph-function' to `c-fill-paragraph' does not work;
;; inside `c-fill-paragraph', `fill-paragraph-function' evaluates to
;; nil!?
(defun js-backward-paragraph ()
"Move backward to start of paragraph. Postcondition: Point is at
beginning of buffer or the previous line contains only whitespace."
(forward-line -1)
(while (not (or (bobp) (looking-at "^[ \t]*$")))
(forward-line -1))
(when (not (bobp)) (forward-line 1)))
(defun js-forward-paragraph ()
"Move forward to end of paragraph. Postcondition: Point is at
end of buffer or the next line contains only whitespace."
(forward-line 1)
(while (not (or (eobp) (looking-at "^[ \t]*$")))
(forward-line 1))
(when (not (eobp)) (backward-char 1)))
(defun js-fill-block-comment-paragraph (parse-status justify)
"Fill current paragraph as a block comment. PARSE-STATUS is the
result of `parse-partial-regexp' from beginning of buffer to
point. JUSTIFY has the same meaning as in `fill-paragraph'."
(let ((offset (save-excursion
(goto-char (nth 8 parse-status)) (current-indentation))))
(save-excursion
(save-restriction
(narrow-to-region (save-excursion
(goto-char (nth 8 parse-status)) (point-at-bol))
(save-excursion
(goto-char (nth 8 parse-status))
(re-search-forward "*/")))
(narrow-to-region (save-excursion
(js-backward-paragraph)
(when (looking-at "^[ \t]*$") (forward-line 1))
(point))
(save-excursion
(js-forward-paragraph)
(when (looking-at "^[ \t]*$") (backward-char))
(point)))
(goto-char (point-min))
(while (not (eobp))
(delete-horizontal-space)
(forward-line 1))
(let ((fill-column (- fill-column offset))
(fill-paragraph-function nil))
(fill-paragraph justify))
;; In Emacs 21.4 as opposed to CVS Emacs 22,
;; `fill-paragraph' seems toadd a newline at the end of the
;; paragraph. Remove it!
(goto-char (point-max))
(when (looking-at "^$") (backward-delete-char 1))
(goto-char (point-min))
(while (not (eobp))
(indent-to offset)
(forward-line 1))))))
(defun js-sline-comment-par-start ()
"Return point at the beginning of the line where the current
single-line comment paragraph starts."
(save-excursion
(beginning-of-line)
(while (and (not (bobp))
(looking-at "^[ \t]*//[ \t]*[[:graph:]]"))
(forward-line -1))
(unless (bobp) (forward-line 1))
(point)))
(defun js-sline-comment-par-end ()
"Return point at end of current single-line comment paragraph."
(save-excursion
(beginning-of-line)
(while (and (not (eobp))
(looking-at "^[ \t]*//[ \t]*[[:graph:]]"))
(forward-line 1))
(unless (bobp) (backward-char))
(point)))
(defun js-sline-comment-offset (line)
"Return the column at the start of the current single-line
comment paragraph."
(save-excursion
(goto-line line)
(re-search-forward "//" (point-at-eol))
(goto-char (match-beginning 0))
(current-column)))
(defun js-sline-comment-text-offset (line)
"Return the column at the start of the text of the current
single-line comment paragraph."
(save-excursion
(goto-line line)
(re-search-forward "//[ \t]*" (point-at-eol))
(current-column)))
(defun js-at-empty-sline-comment-p ()
"Return non-nil if inside an empty single-line comment."
(and (save-excursion
(beginning-of-line)
(not (looking-at "^.*//.*[[:graph:]]")))
(save-excursion
(re-search-backward "//" (point-at-bol) t))))
(defun js-fill-sline-comments (parse-status justify)
"Fill current paragraph as a sequence of single-line comments.
PARSE-STATUS is the result of `parse-partial-regexp' from
beginning of buffer to point. JUSTIFY has the same meaning as in
`fill-paragraph'."
(when (not (js-at-empty-sline-comment-p))
(let* ((start (js-sline-comment-par-start))
(start-line (1+ (count-lines (point-min) start)))
(end (js-sline-comment-par-end))
(offset (js-sline-comment-offset start-line))
(text-offset (js-sline-comment-text-offset start-line)))
(save-excursion
(save-restriction
(narrow-to-region start end)
(goto-char (point-min))
(while (re-search-forward "^[ \t]*//[ \t]*" nil t)
(replace-match "")
(forward-line 1))
(let ((fill-paragraph-function nil)
(fill-column (- fill-column text-offset)))
(fill-paragraph justify))
;; In Emacs 21.4 as opposed to CVS Emacs 22,
;; `fill-paragraph' seems toadd a newline at the end of the
;; paragraph. Remove it!
(goto-char (point-max))
(when (looking-at "^$") (backward-delete-char 1))
(goto-char (point-min))
(while (not (eobp))
(indent-to offset)
(insert "//")
(indent-to text-offset)
(forward-line 1)))))))
(defun js-trailing-comment-p (parse-status)
"Return non-nil if inside a trailing comment. PARSE-STATUS is
the result of `parse-partial-regexp' from beginning of buffer to
point."
(save-excursion
(when (nth 4 parse-status)
(goto-char (nth 8 parse-status))
(skip-chars-backward " \t")
(not (bolp)))))
(defun js-block-comment-p (parse-status)
"Return non-nil if inside a block comment. PARSE-STATUS is the
result of `parse-partial-regexp' from beginning of buffer to
point."
(save-excursion
(save-match-data
(when (nth 4 parse-status)
(goto-char (nth 8 parse-status))
(looking-at "/\\*")))))
(defun javascript-fill-paragraph (&optional justify)
"If inside a comment, fill the current comment paragraph.
Trailing comments are ignored."
(interactive)
(let ((parse-status (parse-partial-sexp (point-min) (point))))
(when (and (nth 4 parse-status)
(not (js-trailing-comment-p parse-status)))
(if (js-block-comment-p parse-status)
(js-fill-block-comment-paragraph parse-status justify)
(js-fill-sline-comments parse-status justify))))
t)
;; --- Imenu ---
(defconst js-imenu-generic-expression
(list
(list
nil
"function\\s-+\\(\\w+\\)\\s-*("
1))
"Regular expression matching top level procedures. Used by imenu.")
;; --- Main Function ---
;;;###autoload
(defun javascript-mode ()
"Major mode for editing JavaScript source text.
Key bindings:
\\{javascript-mode-map}"
(interactive)
(kill-all-local-variables)
(use-local-map javascript-mode-map)
(set-syntax-table javascript-mode-syntax-table)
(set (make-local-variable 'indent-line-function) 'javascript-indent-line)
(set (make-local-variable 'font-lock-defaults) (list js-font-lock-keywords))
(set (make-local-variable 'parse-sexp-ignore-comments) t)
;; Comments
(setq comment-start "// ")
(setq comment-end "")
(set (make-local-variable 'fill-paragraph-function)
'javascript-fill-paragraph)
;; Make c-mark-function work
(setq c-nonsymbol-token-regexp "!=\\|%=\\|&[&=]\\|\\*[/=]\\|\\+[+=]\\|-[=-]\\|/[*/=]\\|<\\(?:<=\\|[<=]\\)\\|==\\|>\\(?:>\\(?:>=\\|[=>]\\)\\|[=>]\\)\\|\\^=\\||[=|]\\|[]!%&(-,./:-?[{-~^-]"
c-stmt-delim-chars "^;{}?:"
c-syntactic-ws-end "[ \n
\f/]"
c-syntactic-eol "\\(\\s \\|/\\*\\([^*\n
]\\|\\*[^/\n
]\\)*\\*/\\)*\\(\\(/\\*\\([^*\n
]\\|\\*[^/\n
]\\)*\\|\\\\\\)?$\\|//\\)")
;; Imenu
(setq imenu-case-fold-search nil)
(set (make-local-variable 'imenu-generic-expression)
js-imenu-generic-expression)
(setq major-mode 'javascript-mode)
(setq mode-name "JavaScript")
(run-hooks 'javascript-mode-hook))
(provide 'javascript-mode)
;;; javascript.el ends here

File diff suppressed because it is too large Load diff

View file

@ -1,194 +0,0 @@
;;; autostart.el --- Load nxhtml
;;
;; Author: By: Lennart Borgman
;; Created: Fri Dec 15 2006
;; Version:
;; Last-Updated: 2009-04-30 Thu
;; Keywords:
;; Compatibility:
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; 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 this program; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
;; Fix-me: Split out the definitions from this file so it can be
;; loaded during byte compilation.
;;(eval-when-compile (require 'web-vcs nil t))
;;(eval-when-compile (require 'nxhtml-web-vcs nil t))
(message "Nxml/Nxhtml Autostart.el loading ...")
(defconst nxhtml-autostart-trace nil)
(defsubst nxhtml-autostart-trace (format-string &rest args)
(when nxhtml-autostart-trace
(apply 'message format-string args)))
(defconst nxhtml-load-time-start (float-time))
;; Add this dir to load-path
(add-to-list 'load-path
(file-name-directory (or load-file-name
(when (boundp 'bytecomp-filename) bytecomp-filename)
buffer-file-name)))
(require 'nxhtml-base)
(eval-and-compile (when (fboundp 'nxml-mode)
(load (expand-file-name "etc/schema/schema-path-patch"
nxhtml-install-dir))))
;; (defun nxhtml-custom-load-and-get-value (symbol)
;; (custom-load-symbol symbol)
;; (symbol-value symbol))
(defun nxhtml-list-loaded-features (use-message)
(interactive (list t))
(let ((buf (when use-message ;(called-interactively-p)
(get-buffer-create "*nXhtml loaded features*"))))
(if buf
(with-current-buffer buf (erase-buffer))
(message "")
(message "=== Loaded at nxhtml/autostart.el end:"))
(dolist (feature '(
as-external
html-chklnk
html-imenu
html-move
html-pagetoc
html-quote
html-site
html-toc
html-upl
html-wtoc
inlimg
mumamo
nxhtml-bug
nxhtml-menu
nxhtml-mode
nxhtml-mumamo
nxhtml-strval
nxhtml
nxhtml-js
nxml-where
outline-magic
rngalt
tidy-xhtml
xhtml-help
))
(when (featurep feature)
(if buf
(with-current-buffer buf
(insert (format "(feature '%s)=%s\n" feature (featurep feature))))
(message "(feature '%s)=%s" feature (featurep feature)))))
(if buf
(display-buffer buf)
(message ""))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Code that will run on loading this file
(if (< emacs-major-version 23)
(unless (featurep 'autostart22)
(load (expand-file-name "autostart22" nxhtml-install-dir)))
;; Check that the nxml-mode included with Emacs is used. There
;; has been some problems on Debian with this.
(let ((nxml-mode-file (locate-library "nxml-mode"))
(help-file (locate-library "help")))
(unless (string= (expand-file-name ".." help-file)
(expand-file-name "../.." nxml-mode-file))
(error "Wrong nxml-mode=%s used, please use the one that comes with Emacs" nxml-mode-file))))
(let* ((util-dir (file-name-as-directory (expand-file-name "util" nxhtml-install-dir)))
(related-dir (file-name-as-directory (expand-file-name "related" nxhtml-install-dir)))
(nxhtml-dir (file-name-as-directory (expand-file-name "nxhtml" nxhtml-install-dir)))
;;(company-dir (file-name-as-directory (expand-file-name "util/nxhtml-company-mode" nxhtml-install-dir)))
(tests-dir (file-name-as-directory (expand-file-name "tests" nxhtml-install-dir))))
(add-to-list 'load-path nxhtml-dir)
(add-to-list 'load-path related-dir)
(add-to-list 'load-path util-dir)
(add-to-list 'load-path nxhtml-install-dir)
;;(add-to-list 'load-path company-dir)
(add-to-list 'load-path tests-dir)
(nxhtml-autostart-trace "... nXhtml loading %.1f seconds elapsed ..." (- (float-time) nxhtml-load-time-start))
;; Autoloading etc
;; (unless (featurep 'web-vcs)
;; (load (expand-file-name "web-vcs" nxhtml-install-dir) (not nxhtml-autoload-web)))
;; (when (catch 'miss
;; (dolist (file nxhtml-basic-files)
;; (let ((dl-file (expand-file-name file nxhtml-install-dir)))
;; (unless (file-exists-p dl-file)
;; (throw 'miss t))))
;; nil)
;; (nxhtml-setup-auto-download nxhtml-install-dir))
(unless (featurep 'web-autoload)
(load (expand-file-name "web-autoload" nxhtml-install-dir) (not nxhtml-autoload-web)))
(when nxhtml-autoload-web
(ad-activate 'require t))
;; Fix-me: Why must as-external be loaded? Why doesn't it work in batch?
;;(unless noninteractive (require 'as-external))
(unless (featurep 'nxhtml-loaddefs)
(load (expand-file-name "nxhtml-loaddefs" nxhtml-install-dir) nxhtml-autoload-web))
(nxhtml-autostart-trace "... nXhtml loading %.1f seconds elapsed ..." (- (float-time) nxhtml-load-time-start))
;; Turn on `nxhtml-menu-mode' unconditionally
(nxhtml-autostart-trace "Turn on `nxhtml-menu-mode' unconditionally")
(nxhtml-menu-mode 1)
(nxhtml-autostart-trace "... nXhtml loading %.1f seconds elapsed ..." (- (float-time) nxhtml-load-time-start))
;; Patch the rnc include paths
(when (fboundp 'rncpp-patch-xhtml-loader) (rncpp-patch-xhtml-loader))
(nxhtml-autostart-trace "... nXhtml loading %.1f seconds elapsed ..." (- (float-time) nxhtml-load-time-start))
;; Load nXhtml
(unless (featurep 'nxhtml-autoload)
(load (expand-file-name "nxhtml/nxhtml-autoload" nxhtml-install-dir))))
(nxhtml-autostart-trace "... nXhtml loading %.1f seconds elapsed ..." (- (float-time) nxhtml-load-time-start))
(unless (featurep 'nxhtml-autostart)
;; Provide the feature here to avoid loading looping on error.
(provide 'nxhtml-autostart)
;; Tell what have been loaded of nXhtml:
(when nxhtml-autostart-trace (nxhtml-list-loaded-features nil))
;; How long time did it all take?
(message "Nxml/Nxhtml Autostart.el loaded in %.1f seconds" (- (float-time) nxhtml-load-time-start)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; autostart.el ends here

View file

@ -1,71 +0,0 @@
;;; autostart22.el --- Example of autostart file for Emacs22
;;
;; Author: Lennart Borgman (lennart O borgman A gmail O com)
;; Created: 2009-01-01 Thu
;; Version:
;; Last-Updated: 2009-01-05 Mon
;; URL:
;; Keywords:
;; Compatibility:
;;
;; Features that might be required by this library:
;;
;; This file is for Emacs 22 only.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;; Change this file according to the path of your nxml-mode dir. If
;; you do not use nxml-mode then just use autostart.el.
;;
;; NOTICE: You need to enter the path to your nxml-mode installation
;; below.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; 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 this program; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
(let ((debug-on-error t))
(if (/= emacs-major-version 22)
(message "This file (autostart22.el) is for Emacs 22 only")
(defalias 'Custom-mode 'custom-mode)
(let* ((this-file (or load-file-name buffer-file-name))
(this-dir (file-name-directory this-file))
;; FIX-ME: Download nXml (since it is not included in Emacs
;; 22) and place the path to rng-auto.el in your downloaded
;; nXml HERE:
(rng-auto-file (or (locate-library "rng-auto.el")
"c:/emacs/u/081231/EmacsW32/nxhtml/nxml-mode-20041004/rng-auto.el")))
(unless (file-exists-p rng-auto-file)
(error "Can't find rng-auto.el, please edit %s" this-file))
(load rng-auto-file))))
(provide 'autostart22)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; autostart22.el ends here

View file

@ -1 +0,0 @@
c:\emacs\emacs-22.3\bin\emacs.exe -Q --debug-init -l autostart.el

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View file

@ -1,27 +0,0 @@
namespace py = "http://genshi.edgewall.org/"
genshi.expr-type = xsd:string { minLength = "1" }
genshi.with-type = xsd:string { minLength = "1" }
genshi.choose-type = xsd:string
genshi.def-type = xsd:string
genshi.xpath-type = xsd:anyURI
genshi.attrib = attribute py:if { genshi.expr-type }?,
attribute py:choose { genshi.choose-type }?,
attribute py:when { genshi.expr-type }?,
attribute py:otherwise { genshi.expr-type }?,
attribute py:for { genshi.expr-type }?,
attribute py:def { genshi.def-type }?,
attribute py:match { genshi.xpath-type }?,
attribute py:with { genshi.with-type }?,
attribute py:attrs { genshi.expr-type }?,
attribute py:content { genshi.expr-type }?,
attribute py:replace { genshi.expr-type }?,
attribute py:strip { genshi.expr-type }?
genshi.if.attlist = attribute expr { genshi.expr-type }
genshi.for.attlist = attribute each { genshi.expr-type }
genshi.def.attlist = attribute each { genshi.expr-type }
genshi.with.attlist = attribute vars { genshi.with-type }

View file

@ -1,3 +0,0 @@
<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
<typeId id="XHTML" uri="qtmstr-xhtml.rnc" />
</locatingRules>

View file

@ -1,84 +0,0 @@
default namespace = "http://genshi.edgewall.org/"
namespace py = "http://genshi.edgewall.org/"
include "xinclude.rnc"
# There's no way to just match the text part against a Genshi Python expression
# See: http://relaxng.org/compact-tutorial-20030326.html#id2814737
python.expression = text
genshi.expr-type = xsd:string { minLength = "1" }
genshi.xpath-type = xsd:anyURI
genshi.attrib =
attribute py:if { genshi.expr-type }?,
attribute py:choose { text }?,
attribute py:when { genshi.expr-type }?,
attribute py:otherwise { text }?,
attribute py:for { genshi.expr-type }?,
attribute py:def { genshi.expr-type }?,
attribute py:match { genshi.xpath-type}?,
attribute py:with { genshi.expr-type }?,
attribute py:attrs { genshi.expr-type }?,
attribute py:content { text }?,
attribute py:replace { genshi.expr-type }?,
attribute py:strip { text }?
genshi.if.attlist = attribute test { genshi.expr-type }
genshi.choose.attlist = attribute test { text }
genshi.when.attlist = attribute test { genshi.expr-type }
genshi.for.attlist = attribute each { genshi.expr-type }
genshi.def.attlist = attribute function { genshi.expr-type }
genshi.with.attlist = attribute vars { genshi.expr-type }
genshi.replace.attlist = attribute value { genshi.expr-type }
genshi.match.attlist =
attribute path { genshi.xpath-type },
attribute buffer { "true" | "false" }?,
attribute once { "true" | "false" }?,
attribute recursive { "true" | "false" }?
genshi.choose =
element py:choose { genshi.choose.attlist,
genshi.model
}
genshi.when =
element py:when { genshi.when.attlist,
genshi.model
}
genshi.otherwise =
element py:otherwise {
genshi.model
}
genshi.if =
element py:if { genshi.if.attlist,
genshi.model
}
genshi.for =
element py:for { genshi.for.attlist,
genshi.model
}
genshi.def =
element py:def { genshi.def.attlist,
genshi.model
}
genshi.with =
element py:with { genshi.with.attlist,
genshi.model
}
genshi.match =
element py:match { genshi.match.attlist,
genshi.model
}
genshi.replace =
element py:replace { genshi.replace.attlist,
genshi.model
}
genshi.allowed.children = text
genshi.class = genshi.if | genshi.choose | genshi.when | genshi.otherwise
| genshi.for | genshi.def | genshi.with | genshi.match | genshi.replace
| python.expression
| xi.include
genshi.model = genshi.class* | genshi.allowed.children*

View file

@ -1,74 +0,0 @@
include "xhtml-loader.rnc"
MjtAll.attrib =
attribute mjt.def { Text.datatype }?,
attribute mjt.when { Text.datatype }?,
attribute mjt.otherwise { Text.datatype }?,
attribute mjt.for { Text.datatype }?,
attribute mjt.if { Text.datatype }?,
attribute mjt.elif { Text.datatype }?,
attribute mjt.else { Text.datatype }?,
attribute mjt.script { Text.datatype }?,
attribute mjt.choose { Text.datatype }?,
attribute mjt.replace { Text.datatype }?,
attribute mjt.content { Text.datatype }?,
attribute mjt.strip { Text.datatype }?,
attribute mjt.src { Text.datatype }?,
attribute mjt.style { Text.datatype }?,
attribute mjt.class { Text.datatype }?,
attribute mjt.id { Text.datatype }?,
attribute mjt.attrs { Text.datatype }?,
attribute mjt.task { Text.datatype }?
a.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?
area.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?
form.attlist &=
attribute mjt.onreset { Script.datatype }?,
attribute mjt.onsubmit { Script.datatype }?
body.attlist &=
attribute mjt.onload { Script.datatype }?,
attribute mjt.onunload { Script.datatype }?
label.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?
input.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onchange { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?,
attribute mjt.onselect { Script.datatype }?
select.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onchange { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?
textarea.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onchange { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?,
attribute mjt.onselect { Script.datatype }?
button.attlist &=
attribute mjt.onblur { Script.datatype }?,
attribute mjt.onfocus { Script.datatype }?
MjtEvents.attrib =
attribute mjt.onclick { Script.datatype }?,
attribute mjt.ondblclick { Script.datatype }?,
attribute mjt.onmousedown { Script.datatype }?,
attribute mjt.onmouseup { Script.datatype }?,
attribute mjt.onmouseover { Script.datatype }?,
attribute mjt.onmousemove { Script.datatype }?,
attribute mjt.onmouseout { Script.datatype }?,
attribute mjt.onkeypress { Script.datatype }?,
attribute mjt.onkeydown { Script.datatype }?,
attribute mjt.onkeyup { Script.datatype }?
Common.attrib &= MjtAll.attrib
CommonIdRequired.attrib &= MjtAll.attrib
Common.attrib &= MjtEvents.attrib
CommonIdRequired.attrib &= MjtEvents.attrib

View file

@ -1,37 +0,0 @@
--- nxml-mode-orig/xmltok.el 2005-10-16 15:32:53.000000000 -0400
+++ nxml-mode-erb/xmltok.el 2006-09-01 01:02:55.000000000 -0400
@@ -496,6 +496,9 @@
(xmltok+ (xmltok-g markup-declaration "!")
(xmltok-g comment-first-dash "-"
(xmltok-g comment-open "-") opt) opt))
+ (erb-section
+ (xmltok+ "%"
+ (xmltok-g erb-section-open "[^%]") opt))
(cdata-section
(xmltok+ "!"
(xmltok-g marked-section-open "\\[")
@@ -526,6 +529,7 @@
;; by default
or cdata-section
or comment
+ or erb-section
or processing-instruction))
(xmltok-defregexp
xmltok-attribute
@@ -693,6 +697,16 @@
nil
"]]>")
'not-well-formed)))
+ ((xmltok-after-lt start erb-section-open)
+ (setq xmltok-type
+ (if (re-search-forward "[^%]%>" nil t)
+ 'erb-section
+ (xmltok-add-error "No closing %>")
+ (xmltok-add-dependent 'xmltok-unclosed-reparse-p
+ nil
+ nil
+ "%>")
+ 'not-well-formed)))
((xmltok-after-lt start processing-instruction-question)
(xmltok-scan-after-processing-instruction-open))
((xmltok-after-lt start comment-open)

View file

@ -1,31 +0,0 @@
namespace py = "http://genshi.edgewall.org/"
genshi.expr-type = xsd:string { minLength = "1" }
genshi.with-type = xsd:string { minLength = "1" }
genshi.choose-type = xsd:string
genshi.def-type = xsd:string
genshi.xpath-type = xsd:anyURI
genshi.attrib = attribute py:if { genshi.expr-type }?,
attribute py:choose { genshi.choose-type }?,
attribute py:when { genshi.expr-type }?,
attribute py:otherwise { genshi.expr-type }?,
attribute py:for { genshi.expr-type }?,
attribute py:def { genshi.def-type }?,
attribute py:match { genshi.xpath-type }?,
attribute py:with { genshi.with-type }?,
attribute py:attrs { genshi.expr-type }?,
attribute py:content { genshi.expr-type }?,
attribute py:replace { genshi.expr-type }?,
attribute py:strip { genshi.expr-type }?
genshi.if.attlist = attribute test { genshi.expr-type }
genshi.for.attlist = attribute each { genshi.expr-type }
genshi.def.attlist = attribute function { genshi.expr-type }
genshi.with.attlist = attribute vars { genshi.with-type }
genshi.match.attlist = attribute path { genshi.xpath-type },
attribute buffer { genshi.expr-type }?,
attribute once { genshi.expr-type }?,
attribute recursive { genshi.expr-type }?

View file

@ -1,61 +0,0 @@
namespace py = "http://genshi.edgewall.org/"
namespace xi = "http://www.w3.org/2001/XInclude"
include "genshi.rnc"
include "xinclude.rnc"
include "xhtml-loader.rnc"
start |= head|body|p|\div|h1|h2|h3|h4|h5|h6|hr|pre|dl|ol|ul|table|form
Common.attrib &= genshi.attrib
head.attlist &= genshi.attrib
html.attlist &= genshi.attrib
Head.class = base | isindex | link | meta | script | title | style |
if-head | for-head | def-head | with-head
Head.model = Head.class*
head.content &= Head.model*
if-inline = element py:if { genshi.if.attlist, Inline.model }
if-block = element py:if { genshi.if.attlist, Block.model }
if-head = element py:if { genshi.if.attlist, Head.model }
for-inline = element py:for { genshi.for.attlist, Inline.model }
for-block = element py:for { genshi.for.attlist, Block.model }
for-head = element py:for { genshi.for.attlist, Head.model }
def-inline = element py:def { genshi.def.attlist, Inline.model }
def-block = element py:def { genshi.def.attlist, Block.model }
def-head = element py:def { genshi.def.attlist, Head.model }
with-inline = element py:with { genshi.with.attlist, Inline.model }
with-block = element py:with { genshi.with.attlist, Block.model }
with-head = element py:with { genshi.with.attlist, Head.model }
match-inline = element py:match { genshi.match.attlist, Inline.model }
match-block = element py:match { genshi.match.attlist, Block.model }
match-head = element py:match { genshi.match.attlist, Head.model }
Inline.class |= if-inline | for-inline | def-inline | with-inline | match-inline
Block.class |= if-block | for-block | def-block | with-block | match-block
xi-inline = element xi:include {
xinclude.include.attlist,
element xi:fallback { genshi.attrib,
(xi-inline | Inline.model)*
}?
}
xi-block = element xi:include { xinclude.include.attlist,
element xi:fallback { genshi.attrib,
(xi-block | Block.model)*
}?
}
xi-head = element xi:include { xinclude.include.attlist,
element xi:fallback { genshi.attrib,
(xi-head | Head.model)*
}?
}
Inline.class |= xi-inline
Block.class |= xi-block
Head.class |= xi-head

View file

@ -1,11 +0,0 @@
namespace xi = "http://www.w3.org/2001/XInclude"
namespace local = ""
xinclude.include.attlist =
attribute href { xsd:anyURI }?,
attribute parse { xsd:string }?,
attribute xpointer { xsd:string }?,
attribute encoding { xsd:string }?,
attribute accept { xsd:string }?,
attribute accept-language { xsd:string }?

View file

@ -1,58 +0,0 @@
namespace py = "http://genshi.edgewall.org/"
namespace xi = "http://www.w3.org/2001/XInclude"
include "genshi.rnc"
include "xinclude.rnc"
include "xhtml-loader.rnc"
start |= head|body|p|\div|h1|h2|h3|h4|h5|h6|hr|pre|dl|ol|ul|table|form
Common.attrib &= genshi.attrib
head.attlist &= genshi.attrib
html.attlist &= genshi.attrib
Head.class = base | isindex | link | meta | script | title | style |
if-head | for-head | def-head | with-head
Head.model = Head.class*
head.content &= Head.model*
if-inline = element py:if { genshi.if.attlist, Inline.model }
if-block = element py:if { genshi.if.attlist, Block.model }
if-head = element py:if { genshi.if.attlist, Head.model }
for-inline = element py:for { genshi.for.attlist, Inline.model }
for-block = element py:for { genshi.for.attlist, Block.model }
for-head = element py:for { genshi.for.attlist, Head.model }
def-inline = element py:def { genshi.def.attlist, Inline.model }
def-block = element py:def { genshi.def.attlist, Block.model }
def-head = element py:def { genshi.def.attlist, Head.model }
with-inline = element py:with { genshi.with.attlist, Inline.model }
with-block = element py:with { genshi.with.attlist, Block.model }
with-head = element py:with { genshi.with.attlist, Head.model }
Inline.class |= if-inline | for-inline | def-inline | with-inline
Block.class |= if-block | for-block | def-block | with-block
xi-inline = element xi:include {
xinclude.include.attlist,
element xi:fallback { genshi.attrib,
(xi-inline | Inline.model)*
}?
}
xi-block = element xi:include { xinclude.include.attlist,
element xi:fallback { genshi.attrib,
(xi-block | Block.model)*
}?
}
xi-head = element xi:include { xinclude.include.attlist,
element xi:fallback { genshi.attrib,
(xi-head | Head.model)*
}?
}
Inline.class |= xi-inline
Block.class |= xi-block
Head.class |= xi-head

View file

@ -1,66 +0,0 @@
default namespace = "http://www.w3.org/1999/xhtml"
include "genshi.rnc"
include "xhtml-loader.rnc" {
start = html | head | head.content | body | frameset | frame | noframes |
Block.class | Inline.class | Table.class | Form.extra.class | genshi.class
html = element html { html.attlist, (genshi.model | (head, (body | frameset | genshi.model))) }
frameset =
element frameset {
frameset.attlist,
(((frameset | frame)+ & noframes?) | genshi.model)
}
noframes = element noframes { noframes.attlist, (body | genshi.model) }
title = element title { title.attlist, (text | genshi.model)* }
script = element script { script.attlist, (text | genshi.model)* }
style = element style { style.attlist, (text | genshi.model)* }
dl = element dl { dl.attlist, ((dt | dd)+ | genshi.model) }
ol = element ol { ol.attlist, (li+ | genshi.model) }
ul = element ul { ul.attlist, (li+ | genshi.model) }
dir = element dir { dir.attlist, (li.noblock+ | genshi.model) }
menu = element menu { menu.attlist, (li.noblock+ | genshi.model) }
select = element select { select.attlist, ((option | optgroup)+ | genshi.model) }
option =
element option {
Common.attrib,
attribute selected { "selected" }?,
attribute value { text }?,
(text | genshi.model)*
}
textarea = element textarea { textarea.attlist, (text & genshi.model)* }
optgroup = element optgroup { optgroup.attlist, (option+ | genshi.model) }
table =
element table {
table.attlist,
(caption? | genshi.model),
(col* | colgroup* | genshi.model),
(((thead? | genshi.model),
(tfoot? | genshi.model),
(tbody+ | genshi.model)) | (tr+ | genshi.model))
}
colgroup = element colgroup { colgroup.attlist, (col* | genshi.model) }
tr = element tr { tr.attlist, ((th | td)+ | genshi.model) }
tbody = element tbody { tbody.attlist, (tr+ | genshi.model) }
thead = element thead { thead.attlist, (tr+ | genshi.model) }
tfoot = element tfoot { tfoot.attlist, (tr+ | genshi.model) }
}
Table.class = caption | colgroup | col | tbody | thead | tfoot | th | tr | td
Form.extra.class = option | optgroup | legend
Block.class |= genshi.class
Inline.class |= genshi.class
head.content &= genshi.class
Core.attrib &= genshi.attrib
html.attlist &= genshi.attrib
head.attlist &= genshi.attrib
title.attlist &= genshi.attrib
base.attlist &= genshi.attrib
meta.attlist &= genshi.attrib
script.attlist &= genshi.attrib
param.attlist &= genshi.attrib
Edit.attrib &= genshi.attrib
genshi.allowed.children |= html | head | head.content | body | frameset | frame
| noframes | Inline.class | Block.class | Table.class | Form.extra.class

View file

@ -1,95 +0,0 @@
;;; schema-path-patch.el --- Patch schema paths
;;
;; Author: Lennart Borgman (lennart O borgman A gmail O com)
;; Created: 2008-08-08T20:21:31+0200 Fri
;; Version: 0.2
;; Last-Updated: 2008-08-19T00:21:25+0200 Mon
;; URL:
;; Keywords:
;; Compatibility:
;;
;; Features that might be required by this library:
;;
;; Cannot open load file: schema-path-patch.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;; Schemas here may include parts from nxml and need to know the path.
;; This file can be used to patch the paths.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; 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 this program; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
(defvar rncpp-this-dir
(file-name-as-directory
(file-name-directory
(if load-file-name load-file-name buffer-file-name))))
(defun rncpp-get-nxml-schema-dir ()
;; First look for nxml-mode included with Emacs
(let ((schema-dir (file-name-as-directory
(expand-file-name "schema" data-directory))))
(unless (file-directory-p schema-dir)
;; This is an old nxml-mode, look for its schemas dir.
(let ((nxml-mode-dir (file-name-as-directory
(file-name-directory (locate-library "nxml-mode")))))
(setq schema-dir (file-name-as-directory
(expand-file-name "schema" nxml-mode-dir)))))
(unless (file-directory-p schema-dir)
(error "Can't find schema-dir=%s" schema-dir))
schema-dir))
;; Use xhtml-loader.rnc (an idea from Bryan Waite):
(defun rncpp-patch-xhtml-loader ()
"Patch xhtml-loader.rnc so genshi and mjt rnc files works."
;;(interactive)
(let* ((default-directory rncpp-this-dir)
(loader-path (expand-file-name "xhtml-loader.rnc"))
(loader-buf (find-buffer-visiting loader-path))
(schema-dir (rncpp-get-nxml-schema-dir))
(schema-relative-dir (file-relative-name schema-dir))
(loader-string (concat "include \""
schema-relative-dir
"xhtml.rnc\"\n")))
(when loader-buf (kill-buffer loader-buf))
(setq loader-buf (find-file-noselect loader-path))
(with-current-buffer loader-buf
(unless (file-exists-p loader-path)
(insert loader-string))
;; Test if correct
(if (string= (buffer-substring-no-properties (point-min) (point-max))
loader-string)
(message "xhtml-loader.rnc was ok")
(message "Patching xhtml-loader.rnc")
(delete-region (point-min) (point-max))
(insert loader-string))
(basic-save-buffer)
(kill-buffer (current-buffer)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; schema-path-patch.el ends here

View file

@ -1,35 +0,0 @@
default namespace = "http://www.w3.org/2001/XInclude"
namespace xi = "http://www.w3.org/2001/XInclude"
xi.include.attlist =
attribute href { xsd:anyURI }?,
attribute parse { "xml" | "text" }?,
attribute xpointer { xsd:string }?,
attribute encoding { xsd:string }?,
attribute accept { xsd:string }?,
attribute accept-language { xsd:string }?
xi.include.attlist.extra =
attribute * - xi.include.attlist { text }*
xi.include =
element xi:include {
xi.include.attlist,
xi.include.attlist.extra,
(xi.fallback? | xi.include.extra)*
}
xi.include.extra = notAllowed
xi.fallback.attlist =
attribute * { text }*
xi.fallback =
element xi:fallback {
xi.fallback.attlist,
(xi.include | xi.fallback.extra)*
}
xi.fallback.extra = notAllowed
xi.class = xi.include | xi.fallback

View file

@ -1,25 +0,0 @@
ROLLOVER_SPEC a {
/* Image */
display: block;
background: transparent url("IMG_URL") 0 0 no-repeat;
overflow: hidden;
width: IMG_WIDTHpx;
/* Text placement and size, etc */
CENTER_OR_PAD;
padding-top: PADDING_TOPpx;
font-size: FONT_SIZEpx;
padding-bottom: PADDING_BOTTOMpx;
text-decoration: none;
white-space: nowrap;
border: none;
margin: 0;
}
ROLLOVER_SPEC a:hover {
background-position: 0 -IMG_HEIGHT_2px;
}
ROLLOVER_SPEC li {
display: inline;
padding: 0;
margin: 0;
HOR_OR_VER;
}

View file

@ -1,894 +0,0 @@
# Recommended Identifier Profiles for IDN
# File: idnchars.txt
# Version: 2.0
# Generated: 2006-08-15, 04:35:10 GMT
# Checkin: $Revision: 1.11 $
#
# For documentation and usage, see http://www.unicode.org/reports/tr39/
#
# Allowed as output characters
002D ; output # (-) HYPHEN-MINUS
0030..0039 ; output # [10] (0..9) DIGIT ZERO..DIGIT NINE
0041..005A ; output # [26] (A..Z) LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
0061..007A ; output # [26] (a..z) LATIN SMALL LETTER A..LATIN SMALL LETTER Z
00B7 ; output # (·) MIDDLE DOT
00E0..00F6 ; output # [23] (à..ö) LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER O WITH DIAERESIS
00F8..00FF ; output # [8] (ø..ÿ) LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
0101 ; output # (ā) LATIN SMALL LETTER A WITH MACRON
0103 ; output # (ă) LATIN SMALL LETTER A WITH BREVE
0105 ; output # (ą) LATIN SMALL LETTER A WITH OGONEK
0107 ; output # (ć) LATIN SMALL LETTER C WITH ACUTE
0109 ; output # (ĉ) LATIN SMALL LETTER C WITH CIRCUMFLEX
010B ; output # (ċ) LATIN SMALL LETTER C WITH DOT ABOVE
010D ; output # (č) LATIN SMALL LETTER C WITH CARON
010F ; output # (ď) LATIN SMALL LETTER D WITH CARON
0111 ; output # (đ) LATIN SMALL LETTER D WITH STROKE
0113 ; output # (ē) LATIN SMALL LETTER E WITH MACRON
0115 ; output # (ĕ) LATIN SMALL LETTER E WITH BREVE
0117 ; output # (ė) LATIN SMALL LETTER E WITH DOT ABOVE
0119 ; output # (ę) LATIN SMALL LETTER E WITH OGONEK
011B ; output # (ě) LATIN SMALL LETTER E WITH CARON
011D ; output # (ĝ) LATIN SMALL LETTER G WITH CIRCUMFLEX
011F ; output # (ğ) LATIN SMALL LETTER G WITH BREVE
0121 ; output # (ġ) LATIN SMALL LETTER G WITH DOT ABOVE
0123 ; output # (ģ) LATIN SMALL LETTER G WITH CEDILLA
0125 ; output # (ĥ) LATIN SMALL LETTER H WITH CIRCUMFLEX
0127 ; output # (ħ) LATIN SMALL LETTER H WITH STROKE
0129 ; output # (ĩ) LATIN SMALL LETTER I WITH TILDE
012B ; output # (ī) LATIN SMALL LETTER I WITH MACRON
012D ; output # (ĭ) LATIN SMALL LETTER I WITH BREVE
012F ; output # (į) LATIN SMALL LETTER I WITH OGONEK
0131 ; output # (ı) LATIN SMALL LETTER DOTLESS I
0135 ; output # (ĵ) LATIN SMALL LETTER J WITH CIRCUMFLEX
0137..0138 ; output # [2] (ķ..ĸ) LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA
013A ; output # (ĺ) LATIN SMALL LETTER L WITH ACUTE
013C ; output # (ļ) LATIN SMALL LETTER L WITH CEDILLA
013E ; output # (ľ) LATIN SMALL LETTER L WITH CARON
0142 ; output # (ł) LATIN SMALL LETTER L WITH STROKE
0144 ; output # (ń) LATIN SMALL LETTER N WITH ACUTE
0146 ; output # (ņ) LATIN SMALL LETTER N WITH CEDILLA
0148 ; output # (ň) LATIN SMALL LETTER N WITH CARON
014B ; output # (ŋ) LATIN SMALL LETTER ENG
014D ; output # (ō) LATIN SMALL LETTER O WITH MACRON
014F ; output # (ŏ) LATIN SMALL LETTER O WITH BREVE
0151 ; output # (ő) LATIN SMALL LETTER O WITH DOUBLE ACUTE
0153 ; output # (œ) LATIN SMALL LIGATURE OE
0155 ; output # (ŕ) LATIN SMALL LETTER R WITH ACUTE
0157 ; output # (ŗ) LATIN SMALL LETTER R WITH CEDILLA
0159 ; output # (ř) LATIN SMALL LETTER R WITH CARON
015B ; output # (ś) LATIN SMALL LETTER S WITH ACUTE
015D ; output # (ŝ) LATIN SMALL LETTER S WITH CIRCUMFLEX
015F ; output # (ş) LATIN SMALL LETTER S WITH CEDILLA
0161 ; output # (š) LATIN SMALL LETTER S WITH CARON
0163 ; output # (ţ) LATIN SMALL LETTER T WITH CEDILLA
0165 ; output # (ť) LATIN SMALL LETTER T WITH CARON
0167 ; output # (ŧ) LATIN SMALL LETTER T WITH STROKE
0169 ; output # (ũ) LATIN SMALL LETTER U WITH TILDE
016B ; output # (ū) LATIN SMALL LETTER U WITH MACRON
016D ; output # (ŭ) LATIN SMALL LETTER U WITH BREVE
016F ; output # (ů) LATIN SMALL LETTER U WITH RING ABOVE
0171 ; output # (ű) LATIN SMALL LETTER U WITH DOUBLE ACUTE
0173 ; output # (ų) LATIN SMALL LETTER U WITH OGONEK
0175 ; output # (ŵ) LATIN SMALL LETTER W WITH CIRCUMFLEX
0177 ; output # (ŷ) LATIN SMALL LETTER Y WITH CIRCUMFLEX
017A ; output # (ź) LATIN SMALL LETTER Z WITH ACUTE
017C ; output # (ż) LATIN SMALL LETTER Z WITH DOT ABOVE
017E ; output # (ž) LATIN SMALL LETTER Z WITH CARON
0183 ; output # (ƃ) LATIN SMALL LETTER B WITH TOPBAR
0185 ; output # (ƅ) LATIN SMALL LETTER TONE SIX
0188 ; output # (ƈ) LATIN SMALL LETTER C WITH HOOK
018C ; output # (ƌ) LATIN SMALL LETTER D WITH TOPBAR
0192 ; output # (ƒ) LATIN SMALL LETTER F WITH HOOK
0195 ; output # (ƕ) LATIN SMALL LETTER HV
0199..019B ; output # [3] (ƙ..ƛ) LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE
019E ; output # (ƞ) LATIN SMALL LETTER N WITH LONG RIGHT LEG
01A1 ; output # (ơ) LATIN SMALL LETTER O WITH HORN
01A3 ; output # (ƣ) LATIN SMALL LETTER OI
01A5 ; output # (ƥ) LATIN SMALL LETTER P WITH HOOK
01A8 ; output # (ƨ) LATIN SMALL LETTER TONE TWO
01AD ; output # (ƭ) LATIN SMALL LETTER T WITH HOOK
01B0 ; output # (ư) LATIN SMALL LETTER U WITH HORN
01B4 ; output # (ƴ) LATIN SMALL LETTER Y WITH HOOK
01B6 ; output # (ƶ) LATIN SMALL LETTER Z WITH STROKE
01BD ; output # (ƽ) LATIN SMALL LETTER TONE FIVE
01CE ; output # (ǎ) LATIN SMALL LETTER A WITH CARON
01D0 ; output # (ǐ) LATIN SMALL LETTER I WITH CARON
01D2 ; output # (ǒ) LATIN SMALL LETTER O WITH CARON
01D4 ; output # (ǔ) LATIN SMALL LETTER U WITH CARON
01D6 ; output # (ǖ) LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D8 ; output # (ǘ) LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01DA ; output # (ǚ) LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01DC..01DD ; output # [2] (ǜ..ǝ) LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
01DF ; output # (ǟ) LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01E1 ; output # (ǡ) LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
01E3 ; output # (ǣ) LATIN SMALL LETTER AE WITH MACRON
01E5 ; output # (ǥ) LATIN SMALL LETTER G WITH STROKE
01E7 ; output # (ǧ) LATIN SMALL LETTER G WITH CARON
01E9 ; output # (ǩ) LATIN SMALL LETTER K WITH CARON
01EB ; output # (ǫ) LATIN SMALL LETTER O WITH OGONEK
01ED ; output # (ǭ) LATIN SMALL LETTER O WITH OGONEK AND MACRON
01EF..01F0 ; output # [2] (ǯ..ǰ) LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
01F5 ; output # (ǵ) LATIN SMALL LETTER G WITH ACUTE
01F9 ; output # (ǹ) LATIN SMALL LETTER N WITH GRAVE
01FB ; output # (ǻ) LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FD ; output # (ǽ) LATIN SMALL LETTER AE WITH ACUTE
01FF ; output # (ǿ) LATIN SMALL LETTER O WITH STROKE AND ACUTE
0201 ; output # (ȁ) LATIN SMALL LETTER A WITH DOUBLE GRAVE
0203 ; output # (ȃ) LATIN SMALL LETTER A WITH INVERTED BREVE
0205 ; output # (ȅ) LATIN SMALL LETTER E WITH DOUBLE GRAVE
0207 ; output # (ȇ) LATIN SMALL LETTER E WITH INVERTED BREVE
0209 ; output # (ȉ) LATIN SMALL LETTER I WITH DOUBLE GRAVE
020B ; output # (ȋ) LATIN SMALL LETTER I WITH INVERTED BREVE
020D ; output # (ȍ) LATIN SMALL LETTER O WITH DOUBLE GRAVE
020F ; output # (ȏ) LATIN SMALL LETTER O WITH INVERTED BREVE
0211 ; output # (ȑ) LATIN SMALL LETTER R WITH DOUBLE GRAVE
0213 ; output # (ȓ) LATIN SMALL LETTER R WITH INVERTED BREVE
0215 ; output # (ȕ) LATIN SMALL LETTER U WITH DOUBLE GRAVE
0217 ; output # (ȗ) LATIN SMALL LETTER U WITH INVERTED BREVE
0219 ; output # (ș) LATIN SMALL LETTER S WITH COMMA BELOW
021B ; output # (ț) LATIN SMALL LETTER T WITH COMMA BELOW
021F ; output # (ȟ) LATIN SMALL LETTER H WITH CARON
0223 ; output # (ȣ) LATIN SMALL LETTER OU
0225 ; output # (ȥ) LATIN SMALL LETTER Z WITH HOOK
0227 ; output # (ȧ) LATIN SMALL LETTER A WITH DOT ABOVE
0229 ; output # (ȩ) LATIN SMALL LETTER E WITH CEDILLA
022B ; output # (ȫ) LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022D ; output # (ȭ) LATIN SMALL LETTER O WITH TILDE AND MACRON
022F ; output # (ȯ) LATIN SMALL LETTER O WITH DOT ABOVE
0231 ; output # (ȱ) LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
0233 ; output # (ȳ) LATIN SMALL LETTER Y WITH MACRON
0253..0254 ; output # [2] (ɓ..ɔ) LATIN SMALL LETTER B WITH HOOK..LATIN SMALL LETTER OPEN O
0256..0257 ; output # [2] (ɖ..ɗ) LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
0259 ; output # (ə) LATIN SMALL LETTER SCHWA
025B ; output # (ɛ) LATIN SMALL LETTER OPEN E
0260 ; output # (ɠ) LATIN SMALL LETTER G WITH HOOK
0263 ; output # (ɣ) LATIN SMALL LETTER GAMMA
0268..0269 ; output # [2] (ɨ..ɩ) LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER IOTA
026F ; output # (ɯ) LATIN SMALL LETTER TURNED M
0272 ; output # (ɲ) LATIN SMALL LETTER N WITH LEFT HOOK
0275 ; output # (ɵ) LATIN SMALL LETTER BARRED O
0280 ; output # (ʀ) LATIN LETTER SMALL CAPITAL R
0283 ; output # (ʃ) LATIN SMALL LETTER ESH
0288 ; output # (ʈ) LATIN SMALL LETTER T WITH RETROFLEX HOOK
028A..028B ; output # [2] (ʊ..ʋ) LATIN SMALL LETTER UPSILON..LATIN SMALL LETTER V WITH HOOK
0292 ; output # (ʒ) LATIN SMALL LETTER EZH
0294 ; output # (ʔ) LATIN LETTER GLOTTAL STOP
0300..033F ; output # [64] (̀..̿) COMBINING GRAVE ACCENT..COMBINING DOUBLE OVERLINE
0342 ; output # (͂) COMBINING GREEK PERISPOMENI
0346..034E ; output # [9] (͆..͎) COMBINING BRIDGE ABOVE..COMBINING UPWARDS ARROW BELOW
0360..036F ; output # [16] (͠..ͯ) COMBINING DOUBLE TILDE..COMBINING LATIN SMALL LETTER X
0390 ; output # (ΐ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
03AC..03C1 ; output # [22] (ά..ρ) GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER RHO
03C3..03CE ; output # [12] (σ..ώ) GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
0430..045F ; output # [48] (а..џ) CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
0461 ; output # (ѡ) CYRILLIC SMALL LETTER OMEGA
0463 ; output # (ѣ) CYRILLIC SMALL LETTER YAT
0465 ; output # (ѥ) CYRILLIC SMALL LETTER IOTIFIED E
0467 ; output # (ѧ) CYRILLIC SMALL LETTER LITTLE YUS
0469 ; output # (ѩ) CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
046B ; output # (ѫ) CYRILLIC SMALL LETTER BIG YUS
046D ; output # (ѭ) CYRILLIC SMALL LETTER IOTIFIED BIG YUS
046F ; output # (ѯ) CYRILLIC SMALL LETTER KSI
0471 ; output # (ѱ) CYRILLIC SMALL LETTER PSI
0473 ; output # (ѳ) CYRILLIC SMALL LETTER FITA
0475 ; output # (ѵ) CYRILLIC SMALL LETTER IZHITSA
0477 ; output # (ѷ) CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
0479 ; output # (ѹ) CYRILLIC SMALL LETTER UK
047B ; output # (ѻ) CYRILLIC SMALL LETTER ROUND OMEGA
047D ; output # (ѽ) CYRILLIC SMALL LETTER OMEGA WITH TITLO
047F ; output # (ѿ) CYRILLIC SMALL LETTER OT
0481 ; output # (ҁ) CYRILLIC SMALL LETTER KOPPA
048B ; output # (ҋ) CYRILLIC SMALL LETTER SHORT I WITH TAIL
048D ; output # (ҍ) CYRILLIC SMALL LETTER SEMISOFT SIGN
048F ; output # (ҏ) CYRILLIC SMALL LETTER ER WITH TICK
0491 ; output # (ґ) CYRILLIC SMALL LETTER GHE WITH UPTURN
0493 ; output # (ғ) CYRILLIC SMALL LETTER GHE WITH STROKE
0495 ; output # (ҕ) CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
0497 ; output # (җ) CYRILLIC SMALL LETTER ZHE WITH DESCENDER
0499 ; output # (ҙ) CYRILLIC SMALL LETTER ZE WITH DESCENDER
049B ; output # (қ) CYRILLIC SMALL LETTER KA WITH DESCENDER
049D ; output # (ҝ) CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
049F ; output # (ҟ) CYRILLIC SMALL LETTER KA WITH STROKE
04A1 ; output # (ҡ) CYRILLIC SMALL LETTER BASHKIR KA
04A3 ; output # (ң) CYRILLIC SMALL LETTER EN WITH DESCENDER
04A5 ; output # (ҥ) CYRILLIC SMALL LIGATURE EN GHE
04A7 ; output # (ҧ) CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
04A9 ; output # (ҩ) CYRILLIC SMALL LETTER ABKHASIAN HA
04AB ; output # (ҫ) CYRILLIC SMALL LETTER ES WITH DESCENDER
04AD ; output # (ҭ) CYRILLIC SMALL LETTER TE WITH DESCENDER
04AF ; output # (ү) CYRILLIC SMALL LETTER STRAIGHT U
04B1 ; output # (ұ) CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
04B3 ; output # (ҳ) CYRILLIC SMALL LETTER HA WITH DESCENDER
04B5 ; output # (ҵ) CYRILLIC SMALL LIGATURE TE TSE
04B7 ; output # (ҷ) CYRILLIC SMALL LETTER CHE WITH DESCENDER
04B9 ; output # (ҹ) CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
04BB ; output # (һ) CYRILLIC SMALL LETTER SHHA
04BD ; output # (ҽ) CYRILLIC SMALL LETTER ABKHASIAN CHE
04BF..04C0 ; output # [2] (ҿ..Ӏ) CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER..CYRILLIC LETTER PALOCHKA
04C2 ; output # (ӂ) CYRILLIC SMALL LETTER ZHE WITH BREVE
04C4 ; output # (ӄ) CYRILLIC SMALL LETTER KA WITH HOOK
04C6 ; output # (ӆ) CYRILLIC SMALL LETTER EL WITH TAIL
04C8 ; output # (ӈ) CYRILLIC SMALL LETTER EN WITH HOOK
04CA ; output # (ӊ) CYRILLIC SMALL LETTER EN WITH TAIL
04CC ; output # (ӌ) CYRILLIC SMALL LETTER KHAKASSIAN CHE
04CE ; output # (ӎ) CYRILLIC SMALL LETTER EM WITH TAIL
04D1 ; output # (ӑ) CYRILLIC SMALL LETTER A WITH BREVE
04D3 ; output # (ӓ) CYRILLIC SMALL LETTER A WITH DIAERESIS
04D5 ; output # (ӕ) CYRILLIC SMALL LIGATURE A IE
04D7 ; output # (ӗ) CYRILLIC SMALL LETTER IE WITH BREVE
04D9 ; output # (ә) CYRILLIC SMALL LETTER SCHWA
04DB ; output # (ӛ) CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
04DD ; output # (ӝ) CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
04DF ; output # (ӟ) CYRILLIC SMALL LETTER ZE WITH DIAERESIS
04E1 ; output # (ӡ) CYRILLIC SMALL LETTER ABKHASIAN DZE
04E3 ; output # (ӣ) CYRILLIC SMALL LETTER I WITH MACRON
04E5 ; output # (ӥ) CYRILLIC SMALL LETTER I WITH DIAERESIS
04E7 ; output # (ӧ) CYRILLIC SMALL LETTER O WITH DIAERESIS
04E9 ; output # (ө) CYRILLIC SMALL LETTER BARRED O
04EB ; output # (ӫ) CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
04ED ; output # (ӭ) CYRILLIC SMALL LETTER E WITH DIAERESIS
04EF ; output # (ӯ) CYRILLIC SMALL LETTER U WITH MACRON
04F1 ; output # (ӱ) CYRILLIC SMALL LETTER U WITH DIAERESIS
04F3 ; output # (ӳ) CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
04F5 ; output # (ӵ) CYRILLIC SMALL LETTER CHE WITH DIAERESIS
04F9 ; output # (ӹ) CYRILLIC SMALL LETTER YERU WITH DIAERESIS
0501 ; output # (ԁ) CYRILLIC SMALL LETTER KOMI DE
0503 ; output # (ԃ) CYRILLIC SMALL LETTER KOMI DJE
0505 ; output # (ԅ) CYRILLIC SMALL LETTER KOMI ZJE
0507 ; output # (ԇ) CYRILLIC SMALL LETTER KOMI DZJE
0509 ; output # (ԉ) CYRILLIC SMALL LETTER KOMI LJE
050B ; output # (ԋ) CYRILLIC SMALL LETTER KOMI NJE
050D ; output # (ԍ) CYRILLIC SMALL LETTER KOMI SJE
050F ; output # (ԏ) CYRILLIC SMALL LETTER KOMI TJE
0561..0586 ; output # [38] (ա..ֆ) ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LETTER FEH
0591..05A1 ; output # [17] (֑..֡) HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
05A3..05B9 ; output # [23] (֣..ֹ) HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
05BB..05BD ; output # [3] (ֻ..ֽ) HEBREW POINT QUBUTS..HEBREW POINT METEG
05BF ; output # (ֿ) HEBREW POINT RAFE
05C1..05C2 ; output # [2] (ׁ..ׂ) HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
05C4 ; output # (ׄ) HEBREW MARK UPPER DOT
05D0..05EA ; output # [27] (א..ת) HEBREW LETTER ALEF..HEBREW LETTER TAV
05F0..05F2 ; output # [3] (װ..ײ) HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
0621..063A ; output # [26] (ء..غ) ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
0641..0655 ; output # [21] (ف..ٕ) ARABIC LETTER FEH..ARABIC HAMZA BELOW
0660..0669 ; output # [10] (٠..٩) ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
0670..0674 ; output # [5] (ٰ..ٴ) ARABIC LETTER SUPERSCRIPT ALEF..ARABIC LETTER HIGH HAMZA
0679..068D ; output # [21] (ٹ..ڍ) ARABIC LETTER TTEH..ARABIC LETTER DDAHAL
068F..06D3 ; output # [69] (ڏ..ۓ) ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
06D5..06DC ; output # [8] (ە..ۜ) ARABIC LETTER AE..ARABIC SMALL HIGH SEEN
06DF..06E8 ; output # [10] (۟..ۨ) ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH NOON
06EA..06ED ; output # [4] (۪..ۭ) ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
06F0..06FC ; output # [13] (۰..ۼ) EXTENDED ARABIC-INDIC DIGIT ZERO..ARABIC LETTER GHAIN WITH DOT BELOW
0710..072C ; output # [29] (ܐ..ܬ) SYRIAC LETTER ALAPH..SYRIAC LETTER TAW
0730..073F ; output # [16] (ܰ..ܿ) SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
0780..07B1 ; output # [50] (ހ..ޱ) THAANA LETTER HAA..THAANA LETTER NAA
0901..0903 ; output # [3] (ँ..) DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN VISARGA
0905..0939 ; output # [53] (अ..ह) DEVANAGARI LETTER A..DEVANAGARI LETTER HA
093C..094D ; output # [18] (़..्) DEVANAGARI SIGN NUKTA..DEVANAGARI SIGN VIRAMA
0950..0954 ; output # [5] (ॐ..॔) DEVANAGARI OM..DEVANAGARI ACUTE ACCENT
0960..0963 ; output # [4] (ॠ..ॣ) DEVANAGARI LETTER VOCALIC RR..DEVANAGARI VOWEL SIGN VOCALIC LL
0966..096F ; output # [10] (..९) DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
0981..0983 ; output # [3] (ঁ..ঃ) BENGALI SIGN CANDRABINDU..BENGALI SIGN VISARGA
0985..098C ; output # [8] (অ..ঌ) BENGALI LETTER A..BENGALI LETTER VOCALIC L
098F..0990 ; output # [2] (এ..ঐ) BENGALI LETTER E..BENGALI LETTER AI
0993..09A8 ; output # [22] (ও..ন) BENGALI LETTER O..BENGALI LETTER NA
09AA..09B0 ; output # [7] (প..র) BENGALI LETTER PA..BENGALI LETTER RA
09B2 ; output # (ল) BENGALI LETTER LA
09B6..09B9 ; output # [4] (শ..হ) BENGALI LETTER SHA..BENGALI LETTER HA
09BC ; output # (়) BENGALI SIGN NUKTA
09BE..09C4 ; output # [7] (া..ৄ) BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN VOCALIC RR
09C7..09C8 ; output # [2] (ে..ৈ) BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
09CB..09CD ; output # [3] (ো..্) BENGALI VOWEL SIGN O..BENGALI SIGN VIRAMA
09D7 ; output # (ৗ) BENGALI AU LENGTH MARK
09E0..09E3 ; output # [4] (ৠ..ৣ) BENGALI LETTER VOCALIC RR..BENGALI VOWEL SIGN VOCALIC LL
09E6..09F1 ; output # [12] (..ৱ) BENGALI DIGIT ZERO..BENGALI LETTER RA WITH LOWER DIAGONAL
0A02 ; output # (ਂ) GURMUKHI SIGN BINDI
0A05..0A0A ; output # [6] (ਅ..ਊ) GURMUKHI LETTER A..GURMUKHI LETTER UU
0A0F..0A10 ; output # [2] (ਏ..ਐ) GURMUKHI LETTER EE..GURMUKHI LETTER AI
0A13..0A28 ; output # [22] (ਓ..ਨ) GURMUKHI LETTER OO..GURMUKHI LETTER NA
0A2A..0A30 ; output # [7] (ਪ..ਰ) GURMUKHI LETTER PA..GURMUKHI LETTER RA
0A32 ; output # (ਲ) GURMUKHI LETTER LA
0A35 ; output # (ਵ) GURMUKHI LETTER VA
0A38..0A39 ; output # [2] (ਸ..ਹ) GURMUKHI LETTER SA..GURMUKHI LETTER HA
0A3C ; output # (਼) GURMUKHI SIGN NUKTA
0A3E..0A42 ; output # [5] (ਾ..ੂ) GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN UU
0A47..0A48 ; output # [2] (ੇ..ੈ) GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
0A4B..0A4D ; output # [3] (ੋ..੍) GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
0A5C ; output # (ੜ) GURMUKHI LETTER RRA
0A66..0A74 ; output # [15] (..ੴ) GURMUKHI DIGIT ZERO..GURMUKHI EK ONKAR
0A81..0A83 ; output # [3] (ઁ..) GUJARATI SIGN CANDRABINDU..GUJARATI SIGN VISARGA
0A85..0A8B ; output # [7] (અ..ઋ) GUJARATI LETTER A..GUJARATI LETTER VOCALIC R
0A8D ; output # (ઍ) GUJARATI VOWEL CANDRA E
0A8F..0A91 ; output # [3] (એ..ઑ) GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
0A93..0AA8 ; output # [22] (ઓ..ન) GUJARATI LETTER O..GUJARATI LETTER NA
0AAA..0AB0 ; output # [7] (પ..ર) GUJARATI LETTER PA..GUJARATI LETTER RA
0AB2..0AB3 ; output # [2] (લ..ળ) GUJARATI LETTER LA..GUJARATI LETTER LLA
0AB5..0AB9 ; output # [5] (વ..હ) GUJARATI LETTER VA..GUJARATI LETTER HA
0ABC..0AC5 ; output # [10] (઼..ૅ) GUJARATI SIGN NUKTA..GUJARATI VOWEL SIGN CANDRA E
0AC7..0AC9 ; output # [3] (ે..ૉ) GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN CANDRA O
0ACB..0ACD ; output # [3] (ો..્) GUJARATI VOWEL SIGN O..GUJARATI SIGN VIRAMA
0AD0 ; output # (ૐ) GUJARATI OM
0AE0 ; output # (ૠ) GUJARATI LETTER VOCALIC RR
0AE6..0AEF ; output # [10] (..૯) GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
0B01..0B03 ; output # [3] (ଁ..) ORIYA SIGN CANDRABINDU..ORIYA SIGN VISARGA
0B05..0B0C ; output # [8] (ଅ..ଌ) ORIYA LETTER A..ORIYA LETTER VOCALIC L
0B0F..0B10 ; output # [2] (ଏ..ଐ) ORIYA LETTER E..ORIYA LETTER AI
0B13..0B28 ; output # [22] (ଓ..ନ) ORIYA LETTER O..ORIYA LETTER NA
0B2A..0B30 ; output # [7] (ପ..ର) ORIYA LETTER PA..ORIYA LETTER RA
0B32..0B33 ; output # [2] (ଲ..ଳ) ORIYA LETTER LA..ORIYA LETTER LLA
0B36..0B39 ; output # [4] (ଶ..ହ) ORIYA LETTER SHA..ORIYA LETTER HA
0B3C..0B43 ; output # [8] (଼..ୃ) ORIYA SIGN NUKTA..ORIYA VOWEL SIGN VOCALIC R
0B47..0B48 ; output # [2] (େ..ୈ) ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4D ; output # [3] (ୋ..୍) ORIYA VOWEL SIGN O..ORIYA SIGN VIRAMA
0B56..0B57 ; output # [2] (ୖ..ୗ) ORIYA AI LENGTH MARK..ORIYA AU LENGTH MARK
0B5F..0B61 ; output # [3] (ୟ..ୡ) ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
0B66..0B6F ; output # [10] (..୯) ORIYA DIGIT ZERO..ORIYA DIGIT NINE
0B82..0B83 ; output # [2] (ஂ..ஃ) TAMIL SIGN ANUSVARA..TAMIL SIGN VISARGA
0B85..0B8A ; output # [6] (அ..ஊ) TAMIL LETTER A..TAMIL LETTER UU
0B8E..0B90 ; output # [3] (எ..ஐ) TAMIL LETTER E..TAMIL LETTER AI
0B92..0B95 ; output # [4] (ஒ..க) TAMIL LETTER O..TAMIL LETTER KA
0B99..0B9A ; output # [2] (ங..ச) TAMIL LETTER NGA..TAMIL LETTER CA
0B9C ; output # (ஜ) TAMIL LETTER JA
0B9E..0B9F ; output # [2] (ஞ..ட) TAMIL LETTER NYA..TAMIL LETTER TTA
0BA3..0BA4 ; output # [2] (ண..த) TAMIL LETTER NNA..TAMIL LETTER TA
0BA8..0BAA ; output # [3] (ந..ப) TAMIL LETTER NA..TAMIL LETTER PA
0BAE..0BB5 ; output # [8] (ம..வ) TAMIL LETTER MA..TAMIL LETTER VA
0BB7..0BB9 ; output # [3] (ஷ..ஹ) TAMIL LETTER SSA..TAMIL LETTER HA
0BBE..0BC2 ; output # [5] (ா..ூ) TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN UU
0BC6..0BC8 ; output # [3] (ெ..ை) TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
0BCA..0BCD ; output # [4] (ொ..்) TAMIL VOWEL SIGN O..TAMIL SIGN VIRAMA
0BD7 ; output # (ௗ) TAMIL AU LENGTH MARK
0BE7..0BEF ; output # [9] (௧..௯) TAMIL DIGIT ONE..TAMIL DIGIT NINE
0C01..0C03 ; output # [3] (ఁ..ః) TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
0C05..0C0C ; output # [8] (అ..ఌ) TELUGU LETTER A..TELUGU LETTER VOCALIC L
0C0E..0C10 ; output # [3] (ఎ..ఐ) TELUGU LETTER E..TELUGU LETTER AI
0C12..0C28 ; output # [23] (ఒ..న) TELUGU LETTER O..TELUGU LETTER NA
0C2A..0C33 ; output # [10] (ప..ళ) TELUGU LETTER PA..TELUGU LETTER LLA
0C35..0C39 ; output # [5] (వ..హ) TELUGU LETTER VA..TELUGU LETTER HA
0C3E..0C44 ; output # [7] (ా..ౄ) TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN VOCALIC RR
0C46..0C48 ; output # [3] (ె..ై) TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
0C4A..0C4D ; output # [4] (ొ..్) TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
0C55..0C56 ; output # [2] (ౕ..ౖ) TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
0C60..0C61 ; output # [2] (ౠ..ౡ) TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
0C66..0C6F ; output # [10] (..౯) TELUGU DIGIT ZERO..TELUGU DIGIT NINE
0C82..0C83 ; output # [2] (..ಃ) KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
0C85..0C8C ; output # [8] (ಅ..ಌ) KANNADA LETTER A..KANNADA LETTER VOCALIC L
0C8E..0C90 ; output # [3] (ಎ..ಐ) KANNADA LETTER E..KANNADA LETTER AI
0C92..0CA8 ; output # [23] (ಒ..ನ) KANNADA LETTER O..KANNADA LETTER NA
0CAA..0CB3 ; output # [10] (ಪ..ಳ) KANNADA LETTER PA..KANNADA LETTER LLA
0CB5..0CB9 ; output # [5] (ವ..ಹ) KANNADA LETTER VA..KANNADA LETTER HA
0CBE..0CC4 ; output # [7] (ಾ..ೄ) KANNADA VOWEL SIGN AA..KANNADA VOWEL SIGN VOCALIC RR
0CC6..0CC8 ; output # [3] (ೆ..ೈ) KANNADA VOWEL SIGN E..KANNADA VOWEL SIGN AI
0CCA..0CCD ; output # [4] (ೊ..್) KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA
0CD5..0CD6 ; output # [2] (ೕ..ೖ) KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
0CE0..0CE1 ; output # [2] (ೠ..ೡ) KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CE6..0CEF ; output # [10] (..೯) KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0D02..0D03 ; output # [2] (..ഃ) MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
0D05..0D0C ; output # [8] (അ..ഌ) MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; output # [3] (എ..ഐ) MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D28 ; output # [23] (ഒ..ന) MALAYALAM LETTER O..MALAYALAM LETTER NA
0D2A..0D39 ; output # [16] (പ..ഹ) MALAYALAM LETTER PA..MALAYALAM LETTER HA
0D3E..0D43 ; output # [6] (ാ..ൃ) MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN VOCALIC R
0D46..0D48 ; output # [3] (െ..ൈ) MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
0D4A..0D4D ; output # [4] (ൊ..്) MALAYALAM VOWEL SIGN O..MALAYALAM SIGN VIRAMA
0D57 ; output # (ൗ) MALAYALAM AU LENGTH MARK
0D60..0D61 ; output # [2] (ൠ..ൡ) MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
0D66..0D6F ; output # [10] (..൯) MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
0D82..0D83 ; output # [2] (..ඃ) SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; output # [18] (අ..ඖ) SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; output # [24] (ක..න) SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
0DB3..0DBB ; output # [9] (ඳ..ර) SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
0DBD ; output # (ල) SINHALA LETTER DANTAJA LAYANNA
0DC0..0DC6 ; output # [7] (ව..ෆ) SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
0DCA ; output # (්) SINHALA SIGN AL-LAKUNA
0DCF..0DD4 ; output # [6] (ා..ු) SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; output # (ූ) SINHALA VOWEL SIGN DIGA PAA-PILLA
0DD8..0DDF ; output # [8] (ෘ..ෟ) SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
0DF2..0DF3 ; output # [2] (ෲ..ෳ) SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
0E01..0E32 ; output # [50] (ก..า) THAI CHARACTER KO KAI..THAI CHARACTER SARA AA
0E34..0E3A ; output # [7] (ิ..ฺ) THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
0E40..0E4E ; output # [15] (เ..๎) THAI CHARACTER SARA E..THAI CHARACTER YAMAKKAN
0E50..0E59 ; output # [10] (..๙) THAI DIGIT ZERO..THAI DIGIT NINE
0E81..0E82 ; output # [2] (ກ..ຂ) LAO LETTER KO..LAO LETTER KHO SUNG
0E84 ; output # (ຄ) LAO LETTER KHO TAM
0E87..0E88 ; output # [2] (ງ..ຈ) LAO LETTER NGO..LAO LETTER CO
0E8A ; output # (ຊ) LAO LETTER SO TAM
0E8D ; output # (ຍ) LAO LETTER NYO
0E94..0E97 ; output # [4] (ດ..ທ) LAO LETTER DO..LAO LETTER THO TAM
0E99..0E9F ; output # [7] (ນ..ຟ) LAO LETTER NO..LAO LETTER FO SUNG
0EA1..0EA3 ; output # [3] (ມ..ຣ) LAO LETTER MO..LAO LETTER LO LING
0EA5 ; output # (ລ) LAO LETTER LO LOOT
0EA7 ; output # (ວ) LAO LETTER WO
0EAA..0EAB ; output # [2] (ສ..ຫ) LAO LETTER SO SUNG..LAO LETTER HO SUNG
0EAD..0EB2 ; output # [6] (ອ..າ) LAO LETTER O..LAO VOWEL SIGN AA
0EB4..0EB9 ; output # [6] (ິ..ູ) LAO VOWEL SIGN I..LAO VOWEL SIGN UU
0EBB..0EBD ; output # [3] (ົ..ຽ) LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN NYO
0EC0..0EC4 ; output # [5] (ເ..ໄ) LAO VOWEL SIGN E..LAO VOWEL SIGN AI
0EC6 ; output # (ໆ) LAO KO LA
0EC8..0ECD ; output # [6] (່..ໍ) LAO TONE MAI EK..LAO NIGGAHITA
0ED0..0ED9 ; output # [10] (..໙) LAO DIGIT ZERO..LAO DIGIT NINE
0F00 ; output # (ༀ) TIBETAN SYLLABLE OM
0F18..0F19 ; output # [2] (༘..༙) TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
0F20..0F29 ; output # [10] (༠..༩) TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
0F35 ; output # (༵) TIBETAN MARK NGAS BZUNG NYI ZLA
0F37 ; output # (༷) TIBETAN MARK NGAS BZUNG SGOR RTAGS
0F39 ; output # (༹) TIBETAN MARK TSA -PHRU
0F3E..0F42 ; output # [5] (༾..ག) TIBETAN SIGN YAR TSHES..TIBETAN LETTER GA
0F44..0F47 ; output # [4] (ང..ཇ) TIBETAN LETTER NGA..TIBETAN LETTER JA
0F49..0F4C ; output # [4] (ཉ..ཌ) TIBETAN LETTER NYA..TIBETAN LETTER DDA
0F4E..0F51 ; output # [4] (ཎ..ད) TIBETAN LETTER NNA..TIBETAN LETTER DA
0F53..0F56 ; output # [4] (ན..བ) TIBETAN LETTER NA..TIBETAN LETTER BA
0F58..0F5B ; output # [4] (མ..ཛ) TIBETAN LETTER MA..TIBETAN LETTER DZA
0F5D..0F68 ; output # [12] (ཝ..ཨ) TIBETAN LETTER WA..TIBETAN LETTER A
0F6A ; output # (ཪ) TIBETAN LETTER FIXED-FORM RA
0F71..0F72 ; output # [2] (ཱ..ི) TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I
0F74 ; output # (ུ) TIBETAN VOWEL SIGN U
0F7A..0F80 ; output # [7] (ེ..ྀ) TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN REVERSED I
0F82..0F84 ; output # [3] (ྂ..྄) TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
0F86..0F8B ; output # [6] (྆..ྋ) TIBETAN SIGN LCI RTAGS..TIBETAN SIGN GRU MED RGYINGS
0F90..0F92 ; output # [3] (ྐ..ྒ) TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER GA
0F94..0F97 ; output # [4] (ྔ..ྗ) TIBETAN SUBJOINED LETTER NGA..TIBETAN SUBJOINED LETTER JA
0F99..0F9C ; output # [4] (ྙ..ྜ) TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER DDA
0F9E..0FA1 ; output # [4] (ྞ..ྡ) TIBETAN SUBJOINED LETTER NNA..TIBETAN SUBJOINED LETTER DA
0FA3..0FA6 ; output # [4] (ྣ..ྦ) TIBETAN SUBJOINED LETTER NA..TIBETAN SUBJOINED LETTER BA
0FA8..0FAB ; output # [4] (ྨ..ྫ) TIBETAN SUBJOINED LETTER MA..TIBETAN SUBJOINED LETTER DZA
0FAD..0FB8 ; output # [12] (ྭ..ྸ) TIBETAN SUBJOINED LETTER WA..TIBETAN SUBJOINED LETTER A
0FBA..0FBC ; output # [3] (ྺ..ྼ) TIBETAN SUBJOINED LETTER FIXED-FORM WA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
0FC6 ; output # (࿆) TIBETAN SYMBOL PADMA GDAN
1000..1021 ; output # [34] (က..အ) MYANMAR LETTER KA..MYANMAR LETTER A
1023..1027 ; output # [5] (ဣ..ဧ) MYANMAR LETTER I..MYANMAR LETTER E
1029..102A ; output # [2] (ဩ..ဪ) MYANMAR LETTER O..MYANMAR LETTER AU
102C..1032 ; output # [7] (ာ..ဲ) MYANMAR VOWEL SIGN AA..MYANMAR VOWEL SIGN AI
1036..1039 ; output # [4] (ံ..္) MYANMAR SIGN ANUSVARA..MYANMAR SIGN VIRAMA
1040..1049 ; output # [10] (..၉) MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
1050..1059 ; output # [10] (ၐ..ၙ) MYANMAR LETTER SHA..MYANMAR VOWEL SIGN VOCALIC LL
10A0..10C5 ; output # [38] (Ⴀ..Ⴥ) GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
10D0..10F0 ; output # [33] (ა..ჰ) GEORGIAN LETTER AN..GEORGIAN LETTER HAE
10F7..10F8 ; output # [2] (ჷ..ჸ) GEORGIAN LETTER YN..GEORGIAN LETTER ELIFI
1200..1206 ; output # [7] (..ሆ) ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO
1208..1246 ; output # [63] (ለ..ቆ) ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO
1248 ; output # (ቈ) ETHIOPIC SYLLABLE QWA
124A..124D ; output # [4] (ቊ..ቍ) ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
1250..1256 ; output # [7] (ቐ..ቖ) ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
1258 ; output # (ቘ) ETHIOPIC SYLLABLE QHWA
125A..125D ; output # [4] (ቚ..ቝ) ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
1260..1286 ; output # [39] (በ..ኆ) ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO
1288 ; output # (ኈ) ETHIOPIC SYLLABLE XWA
128A..128D ; output # [4] (ኊ..ኍ) ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
1290..12AE ; output # [31] (ነ..ኮ) ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO
12B0 ; output # (ኰ) ETHIOPIC SYLLABLE KWA
12B2..12B5 ; output # [4] (ኲ..ኵ) ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
12B8..12BE ; output # [7] (ኸ..ኾ) ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
12C0 ; output # (ዀ) ETHIOPIC SYLLABLE KXWA
12C2..12C5 ; output # [4] (ዂ..ዅ) ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
12C8..12CE ; output # [7] (ወ..ዎ) ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO
12D0..12D6 ; output # [7] (..ዖ) ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O
12D8..12EE ; output # [23] (ዘ..ዮ) ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO
12F0..130E ; output # [31] (ደ..ጎ) ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO
1310 ; output # (ጐ) ETHIOPIC SYLLABLE GWA
1312..1315 ; output # [4] (ጒ..ጕ) ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
1318..131E ; output # [7] (ጘ..ጞ) ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO
1320..1346 ; output # [39] (ጠ..ፆ) ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO
1348..135A ; output # [19] (ፈ..ፚ) ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA
1369..1371 ; output # [9] (፩..፱) ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
13A0..13F4 ; output # [85] (..) CHEROKEE LETTER A..CHEROKEE LETTER YV
1401..166C ; output # [620] (ᐁ..ᙬ) CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
166F..1676 ; output # [8] (ᙯ..ᙶ) CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA
1780..17A2 ; output # [35] (ក..អ) KHMER LETTER KA..KHMER LETTER QA
17A5..17A7 ; output # [3] (ឥ..ឧ) KHMER INDEPENDENT VOWEL QI..KHMER INDEPENDENT VOWEL QU
17A9..17B3 ; output # [11] (ឩ..ឳ) KHMER INDEPENDENT VOWEL QUU..KHMER INDEPENDENT VOWEL QAU
17B6..17D0 ; output # [27] (ា..័) KHMER VOWEL SIGN AA..KHMER SIGN SAMYOK SANNYA
17D2 ; output # (្) KHMER SIGN COENG
17D7 ; output # (ៗ) KHMER SIGN LEK TOO
17DC ; output # (ៜ) KHMER SIGN AVAKRAHASANYA
17E0..17E9 ; output # [10] (០..៩) KHMER DIGIT ZERO..KHMER DIGIT NINE
1810..1819 ; output # [10] (᠐..᠙) MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
1820..1877 ; output # [88] (ᠠ..ᡷ) MONGOLIAN LETTER A..MONGOLIAN LETTER MANCHU ZHA
1880..18A9 ; output # [42] (ᢀ..ᢩ) MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI DAGALGA
1E01 ; output # (ḁ) LATIN SMALL LETTER A WITH RING BELOW
1E03 ; output # (ḃ) LATIN SMALL LETTER B WITH DOT ABOVE
1E05 ; output # (ḅ) LATIN SMALL LETTER B WITH DOT BELOW
1E07 ; output # (ḇ) LATIN SMALL LETTER B WITH LINE BELOW
1E09 ; output # (ḉ) LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
1E0B ; output # (ḋ) LATIN SMALL LETTER D WITH DOT ABOVE
1E0D ; output # (ḍ) LATIN SMALL LETTER D WITH DOT BELOW
1E0F ; output # (ḏ) LATIN SMALL LETTER D WITH LINE BELOW
1E11 ; output # (ḑ) LATIN SMALL LETTER D WITH CEDILLA
1E13 ; output # (ḓ) LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
1E15 ; output # (ḕ) LATIN SMALL LETTER E WITH MACRON AND GRAVE
1E17 ; output # (ḗ) LATIN SMALL LETTER E WITH MACRON AND ACUTE
1E19 ; output # (ḙ) LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
1E1B ; output # (ḛ) LATIN SMALL LETTER E WITH TILDE BELOW
1E1D ; output # (ḝ) LATIN SMALL LETTER E WITH CEDILLA AND BREVE
1E1F ; output # (ḟ) LATIN SMALL LETTER F WITH DOT ABOVE
1E21 ; output # (ḡ) LATIN SMALL LETTER G WITH MACRON
1E23 ; output # (ḣ) LATIN SMALL LETTER H WITH DOT ABOVE
1E25 ; output # (ḥ) LATIN SMALL LETTER H WITH DOT BELOW
1E27 ; output # (ḧ) LATIN SMALL LETTER H WITH DIAERESIS
1E29 ; output # (ḩ) LATIN SMALL LETTER H WITH CEDILLA
1E2B ; output # (ḫ) LATIN SMALL LETTER H WITH BREVE BELOW
1E2D ; output # (ḭ) LATIN SMALL LETTER I WITH TILDE BELOW
1E2F ; output # (ḯ) LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
1E31 ; output # (ḱ) LATIN SMALL LETTER K WITH ACUTE
1E33 ; output # (ḳ) LATIN SMALL LETTER K WITH DOT BELOW
1E35 ; output # (ḵ) LATIN SMALL LETTER K WITH LINE BELOW
1E37 ; output # (ḷ) LATIN SMALL LETTER L WITH DOT BELOW
1E39 ; output # (ḹ) LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
1E3B ; output # (ḻ) LATIN SMALL LETTER L WITH LINE BELOW
1E3D ; output # (ḽ) LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
1E3F ; output # (ḿ) LATIN SMALL LETTER M WITH ACUTE
1E41 ; output # (ṁ) LATIN SMALL LETTER M WITH DOT ABOVE
1E43 ; output # (ṃ) LATIN SMALL LETTER M WITH DOT BELOW
1E45 ; output # (ṅ) LATIN SMALL LETTER N WITH DOT ABOVE
1E47 ; output # (ṇ) LATIN SMALL LETTER N WITH DOT BELOW
1E49 ; output # (ṉ) LATIN SMALL LETTER N WITH LINE BELOW
1E4B ; output # (ṋ) LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
1E4D ; output # (ṍ) LATIN SMALL LETTER O WITH TILDE AND ACUTE
1E4F ; output # (ṏ) LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
1E51 ; output # (ṑ) LATIN SMALL LETTER O WITH MACRON AND GRAVE
1E53 ; output # (ṓ) LATIN SMALL LETTER O WITH MACRON AND ACUTE
1E55 ; output # (ṕ) LATIN SMALL LETTER P WITH ACUTE
1E57 ; output # (ṗ) LATIN SMALL LETTER P WITH DOT ABOVE
1E59 ; output # (ṙ) LATIN SMALL LETTER R WITH DOT ABOVE
1E5B ; output # (ṛ) LATIN SMALL LETTER R WITH DOT BELOW
1E5D ; output # (ṝ) LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
1E5F ; output # (ṟ) LATIN SMALL LETTER R WITH LINE BELOW
1E61 ; output # (ṡ) LATIN SMALL LETTER S WITH DOT ABOVE
1E63 ; output # (ṣ) LATIN SMALL LETTER S WITH DOT BELOW
1E65 ; output # (ṥ) LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
1E67 ; output # (ṧ) LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
1E69 ; output # (ṩ) LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
1E6B ; output # (ṫ) LATIN SMALL LETTER T WITH DOT ABOVE
1E6D ; output # (ṭ) LATIN SMALL LETTER T WITH DOT BELOW
1E6F ; output # (ṯ) LATIN SMALL LETTER T WITH LINE BELOW
1E71 ; output # (ṱ) LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
1E73 ; output # (ṳ) LATIN SMALL LETTER U WITH DIAERESIS BELOW
1E75 ; output # (ṵ) LATIN SMALL LETTER U WITH TILDE BELOW
1E77 ; output # (ṷ) LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
1E79 ; output # (ṹ) LATIN SMALL LETTER U WITH TILDE AND ACUTE
1E7B ; output # (ṻ) LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
1E7D ; output # (ṽ) LATIN SMALL LETTER V WITH TILDE
1E7F ; output # (ṿ) LATIN SMALL LETTER V WITH DOT BELOW
1E81 ; output # (ẁ) LATIN SMALL LETTER W WITH GRAVE
1E83 ; output # (ẃ) LATIN SMALL LETTER W WITH ACUTE
1E85 ; output # (ẅ) LATIN SMALL LETTER W WITH DIAERESIS
1E87 ; output # (ẇ) LATIN SMALL LETTER W WITH DOT ABOVE
1E89 ; output # (ẉ) LATIN SMALL LETTER W WITH DOT BELOW
1E8B ; output # (ẋ) LATIN SMALL LETTER X WITH DOT ABOVE
1E8D ; output # (ẍ) LATIN SMALL LETTER X WITH DIAERESIS
1E8F ; output # (ẏ) LATIN SMALL LETTER Y WITH DOT ABOVE
1E91 ; output # (ẑ) LATIN SMALL LETTER Z WITH CIRCUMFLEX
1E93 ; output # (ẓ) LATIN SMALL LETTER Z WITH DOT BELOW
1E95..1E99 ; output # [5] (ẕ..ẙ) LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER Y WITH RING ABOVE
1EA1 ; output # (ạ) LATIN SMALL LETTER A WITH DOT BELOW
1EA3 ; output # (ả) LATIN SMALL LETTER A WITH HOOK ABOVE
1EA5 ; output # (ấ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
1EA7 ; output # (ầ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
1EA9 ; output # (ẩ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
1EAB ; output # (ẫ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
1EAD ; output # (ậ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
1EAF ; output # (ắ) LATIN SMALL LETTER A WITH BREVE AND ACUTE
1EB1 ; output # (ằ) LATIN SMALL LETTER A WITH BREVE AND GRAVE
1EB3 ; output # (ẳ) LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
1EB5 ; output # (ẵ) LATIN SMALL LETTER A WITH BREVE AND TILDE
1EB7 ; output # (ặ) LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
1EB9 ; output # (ẹ) LATIN SMALL LETTER E WITH DOT BELOW
1EBB ; output # (ẻ) LATIN SMALL LETTER E WITH HOOK ABOVE
1EBD ; output # (ẽ) LATIN SMALL LETTER E WITH TILDE
1EBF ; output # (ế) LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EC1 ; output # (ề) LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC3 ; output # (ể) LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC5 ; output # (ễ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC7 ; output # (ệ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC9 ; output # (ỉ) LATIN SMALL LETTER I WITH HOOK ABOVE
1ECB ; output # (ị) LATIN SMALL LETTER I WITH DOT BELOW
1ECD ; output # (ọ) LATIN SMALL LETTER O WITH DOT BELOW
1ECF ; output # (ỏ) LATIN SMALL LETTER O WITH HOOK ABOVE
1ED1 ; output # (ố) LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED3 ; output # (ồ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED5 ; output # (ổ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED7 ; output # (ỗ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED9 ; output # (ộ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1EDB ; output # (ớ) LATIN SMALL LETTER O WITH HORN AND ACUTE
1EDD ; output # (ờ) LATIN SMALL LETTER O WITH HORN AND GRAVE
1EDF ; output # (ở) LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
1EE1 ; output # (ỡ) LATIN SMALL LETTER O WITH HORN AND TILDE
1EE3 ; output # (ợ) LATIN SMALL LETTER O WITH HORN AND DOT BELOW
1EE5 ; output # (ụ) LATIN SMALL LETTER U WITH DOT BELOW
1EE7 ; output # (ủ) LATIN SMALL LETTER U WITH HOOK ABOVE
1EE9 ; output # (ứ) LATIN SMALL LETTER U WITH HORN AND ACUTE
1EEB ; output # (ừ) LATIN SMALL LETTER U WITH HORN AND GRAVE
1EED ; output # (ử) LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
1EEF ; output # (ữ) LATIN SMALL LETTER U WITH HORN AND TILDE
1EF1 ; output # (ự) LATIN SMALL LETTER U WITH HORN AND DOT BELOW
1EF3 ; output # (ỳ) LATIN SMALL LETTER Y WITH GRAVE
1EF5 ; output # (ỵ) LATIN SMALL LETTER Y WITH DOT BELOW
1EF7 ; output # (ỷ) LATIN SMALL LETTER Y WITH HOOK ABOVE
1EF9 ; output # (ỹ) LATIN SMALL LETTER Y WITH TILDE
1F00..1F07 ; output # [8] (ἀ..ἇ) GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
1F10..1F15 ; output # [6] (ἐ..ἕ) GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
1F20..1F27 ; output # [8] (ἠ..ἧ) GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
1F30..1F37 ; output # [8] (ἰ..ἷ) GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
1F40..1F45 ; output # [6] (ὀ..ὅ) GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
1F50..1F57 ; output # [8] (ὐ..ὗ) GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
1F60..1F67 ; output # [8] (ὠ..ὧ) GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
1F70 ; output # (ὰ) GREEK SMALL LETTER ALPHA WITH VARIA
1F72 ; output # (ὲ) GREEK SMALL LETTER EPSILON WITH VARIA
1F74 ; output # (ὴ) GREEK SMALL LETTER ETA WITH VARIA
1F76 ; output # (ὶ) GREEK SMALL LETTER IOTA WITH VARIA
1F78 ; output # (ὸ) GREEK SMALL LETTER OMICRON WITH VARIA
1F7A ; output # (ὺ) GREEK SMALL LETTER UPSILON WITH VARIA
1F7C ; output # (ὼ) GREEK SMALL LETTER OMEGA WITH VARIA
1FB0..1FB1 ; output # [2] (ᾰ..ᾱ) GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH MACRON
1FB6 ; output # (ᾶ) GREEK SMALL LETTER ALPHA WITH PERISPOMENI
1FC6 ; output # (ῆ) GREEK SMALL LETTER ETA WITH PERISPOMENI
1FD0..1FD2 ; output # [3] (ῐ..ῒ) GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
1FD6..1FD7 ; output # [2] (ῖ..ῗ) GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
1FE0..1FE2 ; output # [3] (ῠ..ῢ) GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
1FE4..1FE7 ; output # [4] (ῤ..ῧ) GREEK SMALL LETTER RHO WITH PSILI..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
1FF6 ; output # (ῶ) GREEK SMALL LETTER OMEGA WITH PERISPOMENI
2132 ; output # (Ⅎ) TURNED CAPITAL F
3005..3007 ; output # [3] (々..) IDEOGRAPHIC ITERATION MARK..IDEOGRAPHIC NUMBER ZERO
3041..3096 ; output # [86] (ぁ..ゖ) HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
3099..309A ; output # [2] (゙..゚) COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
309D..309E ; output # [2] (ゝ..ゞ) HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
30A1..30FE ; output # [94] (ァ..ヾ) KATAKANA LETTER SMALL A..KATAKANA VOICED ITERATION MARK
3105..312C ; output # [40] (ㄅ..ㄬ) BOPOMOFO LETTER B..BOPOMOFO LETTER GN
31A0..31B7 ; output # [24] (ㆠ..ㆷ) BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
31F0..31FF ; output # [16] (ㇰ..ㇿ) KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3447 ; output # (㑇) CJK UNIFIED IDEOGRAPH-3447
3473 ; output # (㑳) CJK UNIFIED IDEOGRAPH-3473
34E4 ; output # (㓤) CJK UNIFIED IDEOGRAPH-34E4
3577 ; output # (㕷) CJK UNIFIED IDEOGRAPH-3577
359E ; output # (㖞) CJK UNIFIED IDEOGRAPH-359E
35A1 ; output # (㖡) CJK UNIFIED IDEOGRAPH-35A1
35AD ; output # (㖭) CJK UNIFIED IDEOGRAPH-35AD
35BF ; output # (㖿) CJK UNIFIED IDEOGRAPH-35BF
35CE ; output # (㗎) CJK UNIFIED IDEOGRAPH-35CE
35F3 ; output # (㗳) CJK UNIFIED IDEOGRAPH-35F3
35FE ; output # (㗾) CJK UNIFIED IDEOGRAPH-35FE
360E ; output # (㘎) CJK UNIFIED IDEOGRAPH-360E
361A ; output # (㘚) CJK UNIFIED IDEOGRAPH-361A
3918 ; output # (㤘) CJK UNIFIED IDEOGRAPH-3918
3960 ; output # (㥠) CJK UNIFIED IDEOGRAPH-3960
396E ; output # (㥮) CJK UNIFIED IDEOGRAPH-396E
39CF..39D0 ; output # [2] (㧏..㧐) CJK UNIFIED IDEOGRAPH-39CF..CJK UNIFIED IDEOGRAPH-39D0
39DF ; output # (㧟) CJK UNIFIED IDEOGRAPH-39DF
39F8 ; output # (㧸) CJK UNIFIED IDEOGRAPH-39F8
39FE ; output # (㧾) CJK UNIFIED IDEOGRAPH-39FE
3A18 ; output # (㨘) CJK UNIFIED IDEOGRAPH-3A18
3A52 ; output # (㩒) CJK UNIFIED IDEOGRAPH-3A52
3A67 ; output # (㩧) CJK UNIFIED IDEOGRAPH-3A67
3A73 ; output # (㩳) CJK UNIFIED IDEOGRAPH-3A73
3B39 ; output # (㬹) CJK UNIFIED IDEOGRAPH-3B39
3B4E ; output # (㭎) CJK UNIFIED IDEOGRAPH-3B4E
3C6E ; output # (㱮) CJK UNIFIED IDEOGRAPH-3C6E
3CE0 ; output # (㳠) CJK UNIFIED IDEOGRAPH-3CE0
3DE7 ; output # (㷧) CJK UNIFIED IDEOGRAPH-3DE7
3DEB ; output # (㷫) CJK UNIFIED IDEOGRAPH-3DEB
3E74 ; output # (㹴) CJK UNIFIED IDEOGRAPH-3E74
3ED0 ; output # (㻐) CJK UNIFIED IDEOGRAPH-3ED0
4056 ; output # (䁖) CJK UNIFIED IDEOGRAPH-4056
4065 ; output # (䁥) CJK UNIFIED IDEOGRAPH-4065
406A ; output # (䁪) CJK UNIFIED IDEOGRAPH-406A
40BB ; output # (䂻) CJK UNIFIED IDEOGRAPH-40BB
40DF ; output # (䃟) CJK UNIFIED IDEOGRAPH-40DF
4137 ; output # (䄷) CJK UNIFIED IDEOGRAPH-4137
415F ; output # (䅟) CJK UNIFIED IDEOGRAPH-415F
4337 ; output # (䌷) CJK UNIFIED IDEOGRAPH-4337
43AC ; output # (䎬) CJK UNIFIED IDEOGRAPH-43AC
43B1 ; output # (䎱) CJK UNIFIED IDEOGRAPH-43B1
43DD ; output # (䏝) CJK UNIFIED IDEOGRAPH-43DD
44D6 ; output # (䓖) CJK UNIFIED IDEOGRAPH-44D6
44EA ; output # (䓪) CJK UNIFIED IDEOGRAPH-44EA
4606 ; output # (䘆) CJK UNIFIED IDEOGRAPH-4606
464C ; output # (䙌) CJK UNIFIED IDEOGRAPH-464C
4661 ; output # (䙡) CJK UNIFIED IDEOGRAPH-4661
4723 ; output # (䜣) CJK UNIFIED IDEOGRAPH-4723
4729 ; output # (䜩) CJK UNIFIED IDEOGRAPH-4729
477C ; output # (䝼) CJK UNIFIED IDEOGRAPH-477C
478D ; output # (䞍) CJK UNIFIED IDEOGRAPH-478D
47F4 ; output # (䟴) CJK UNIFIED IDEOGRAPH-47F4
48B5 ; output # (䢵) CJK UNIFIED IDEOGRAPH-48B5
48BC ; output # (䢼) CJK UNIFIED IDEOGRAPH-48BC
48C5 ; output # (䣅) CJK UNIFIED IDEOGRAPH-48C5
48D3 ; output # (䣓) CJK UNIFIED IDEOGRAPH-48D3
4947 ; output # (䥇) CJK UNIFIED IDEOGRAPH-4947
497A ; output # (䥺) CJK UNIFIED IDEOGRAPH-497A
497D ; output # (䥽) CJK UNIFIED IDEOGRAPH-497D
4982..4983 ; output # [2] (䦂..䦃) CJK UNIFIED IDEOGRAPH-4982..CJK UNIFIED IDEOGRAPH-4983
4985..4986 ; output # [2] (䦅..䦆) CJK UNIFIED IDEOGRAPH-4985..CJK UNIFIED IDEOGRAPH-4986
499B ; output # (䦛) CJK UNIFIED IDEOGRAPH-499B
499F ; output # (䦟) CJK UNIFIED IDEOGRAPH-499F
49B6..49B7 ; output # [2] (䦶..䦷) CJK UNIFIED IDEOGRAPH-49B6..CJK UNIFIED IDEOGRAPH-49B7
49D1 ; output # (䧑) CJK UNIFIED IDEOGRAPH-49D1
4A12 ; output # (䨒) CJK UNIFIED IDEOGRAPH-4A12
4AB8 ; output # (䪸) CJK UNIFIED IDEOGRAPH-4AB8
4C77 ; output # (䱷) CJK UNIFIED IDEOGRAPH-4C77
4C7D ; output # (䱽) CJK UNIFIED IDEOGRAPH-4C7D
4C81 ; output # (䲁) CJK UNIFIED IDEOGRAPH-4C81
4C85 ; output # (䲅) CJK UNIFIED IDEOGRAPH-4C85
4C9F..4CA3 ; output # [5] (䲟..䲣) CJK UNIFIED IDEOGRAPH-4C9F..CJK UNIFIED IDEOGRAPH-4CA3
4CB3 ; output # (䲳) CJK UNIFIED IDEOGRAPH-4CB3
4D08 ; output # (䴈) CJK UNIFIED IDEOGRAPH-4D08
4D13..4D19 ; output # [7] (䴓..䴙) CJK UNIFIED IDEOGRAPH-4D13..CJK UNIFIED IDEOGRAPH-4D19
4DAE ; output # (䶮) CJK UNIFIED IDEOGRAPH-4DAE
4E00..9FA5 ; output # [20902] (一..龥) CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
A000..A48C ; output # [1165] (ꀀ..ꒌ) YI SYLLABLE IT..YI SYLLABLE YYR
AC00..D7A3 ; output # [11172] (가..힣) HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
FA0E..FA0F ; output # [2] (﨎..﨏) CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; output # (﨑) CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; output # [2] (﨓..﨔) CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
FA1F ; output # (﨟) CJK COMPATIBILITY IDEOGRAPH-FA1F
FA21 ; output # (﨡) CJK COMPATIBILITY IDEOGRAPH-FA21
FA23..FA24 ; output # [2] (﨣..﨤) CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
FA27..FA29 ; output # [3] (﨧..﨩) CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
2070E ; output # (𠜎) CJK UNIFIED IDEOGRAPH-2070E
20731 ; output # (𠜱) CJK UNIFIED IDEOGRAPH-20731
20779 ; output # (𠝹) CJK UNIFIED IDEOGRAPH-20779
20C53 ; output # (𠱓) CJK UNIFIED IDEOGRAPH-20C53
20C78 ; output # (𠱸) CJK UNIFIED IDEOGRAPH-20C78
20C96 ; output # (𠲖) CJK UNIFIED IDEOGRAPH-20C96
20CCF ; output # (𠳏) CJK UNIFIED IDEOGRAPH-20CCF
20CD5 ; output # (𠳕) CJK UNIFIED IDEOGRAPH-20CD5
20D15 ; output # (𠴕) CJK UNIFIED IDEOGRAPH-20D15
20D7C ; output # (𠵼) CJK UNIFIED IDEOGRAPH-20D7C
20D7F ; output # (𠵿) CJK UNIFIED IDEOGRAPH-20D7F
20E0E..20E0F ; output # [2] (𠸎..𠸏) CJK UNIFIED IDEOGRAPH-20E0E..CJK UNIFIED IDEOGRAPH-20E0F
20E77 ; output # (𠹷) CJK UNIFIED IDEOGRAPH-20E77
20E9D ; output # (𠺝) CJK UNIFIED IDEOGRAPH-20E9D
20EA2 ; output # (𠺢) CJK UNIFIED IDEOGRAPH-20EA2
20ED7 ; output # (𠻗) CJK UNIFIED IDEOGRAPH-20ED7
20EF9..20EFA ; output # [2] (𠻹..𠻺) CJK UNIFIED IDEOGRAPH-20EF9..CJK UNIFIED IDEOGRAPH-20EFA
20F2D..20F2E ; output # [2] (𠼭..𠼮) CJK UNIFIED IDEOGRAPH-20F2D..CJK UNIFIED IDEOGRAPH-20F2E
20F4C ; output # (𠽌) CJK UNIFIED IDEOGRAPH-20F4C
20FB4 ; output # (𠾴) CJK UNIFIED IDEOGRAPH-20FB4
20FBC ; output # (𠾼) CJK UNIFIED IDEOGRAPH-20FBC
20FEA ; output # (𠿪) CJK UNIFIED IDEOGRAPH-20FEA
2105C ; output # (𡁜) CJK UNIFIED IDEOGRAPH-2105C
2106F ; output # (𡁯) CJK UNIFIED IDEOGRAPH-2106F
21075..21076 ; output # [2] (𡁵..𡁶) CJK UNIFIED IDEOGRAPH-21075..CJK UNIFIED IDEOGRAPH-21076
2107B ; output # (𡁻) CJK UNIFIED IDEOGRAPH-2107B
210C1 ; output # (𡃁) CJK UNIFIED IDEOGRAPH-210C1
210C9 ; output # (𡃉) CJK UNIFIED IDEOGRAPH-210C9
211D9 ; output # (𡇙) CJK UNIFIED IDEOGRAPH-211D9
220C7 ; output # (𢃇) CJK UNIFIED IDEOGRAPH-220C7
227B5 ; output # (𢞵) CJK UNIFIED IDEOGRAPH-227B5
22AD5 ; output # (𢫕) CJK UNIFIED IDEOGRAPH-22AD5
22B43 ; output # (𢭃) CJK UNIFIED IDEOGRAPH-22B43
22BCA ; output # (𢯊) CJK UNIFIED IDEOGRAPH-22BCA
22C51 ; output # (𢱑) CJK UNIFIED IDEOGRAPH-22C51
22C55 ; output # (𢱕) CJK UNIFIED IDEOGRAPH-22C55
22CC2 ; output # (𢳂) CJK UNIFIED IDEOGRAPH-22CC2
22D08 ; output # (𢴈) CJK UNIFIED IDEOGRAPH-22D08
22D4C ; output # (𢵌) CJK UNIFIED IDEOGRAPH-22D4C
22D67 ; output # (𢵧) CJK UNIFIED IDEOGRAPH-22D67
22EB3 ; output # (𢺳) CJK UNIFIED IDEOGRAPH-22EB3
23CB7 ; output # (𣲷) CJK UNIFIED IDEOGRAPH-23CB7
244D3 ; output # (𤓓) CJK UNIFIED IDEOGRAPH-244D3
24DB8 ; output # (𤶸) CJK UNIFIED IDEOGRAPH-24DB8
24DEA ; output # (𤷪) CJK UNIFIED IDEOGRAPH-24DEA
2512B ; output # (𥄫) CJK UNIFIED IDEOGRAPH-2512B
26258 ; output # (𦉘) CJK UNIFIED IDEOGRAPH-26258
267CC ; output # (𦟌) CJK UNIFIED IDEOGRAPH-267CC
269F2 ; output # (𦧲) CJK UNIFIED IDEOGRAPH-269F2
269FA ; output # (𦧺) CJK UNIFIED IDEOGRAPH-269FA
27A3E ; output # (𧨾) CJK UNIFIED IDEOGRAPH-27A3E
2815D ; output # (𨅝) CJK UNIFIED IDEOGRAPH-2815D
28207 ; output # (𨈇) CJK UNIFIED IDEOGRAPH-28207
282E2 ; output # (𨋢) CJK UNIFIED IDEOGRAPH-282E2
28CCA ; output # (𨳊) CJK UNIFIED IDEOGRAPH-28CCA
28CCD ; output # (𨳍) CJK UNIFIED IDEOGRAPH-28CCD
28CD2 ; output # (𨳒) CJK UNIFIED IDEOGRAPH-28CD2
29D98 ; output # (𩶘) CJK UNIFIED IDEOGRAPH-29D98
# Total code points: 37201
# Not allowed at start of identifier
0300..033F ; nonstarting # [64] (̀..̿) COMBINING GRAVE ACCENT..COMBINING DOUBLE OVERLINE
0342 ; nonstarting # (͂) COMBINING GREEK PERISPOMENI
0345..034E ; nonstarting # [10] (ͅ..͎) COMBINING GREEK YPOGEGRAMMENI..COMBINING UPWARDS ARROW BELOW
0360..036F ; nonstarting # [16] (͠..ͯ) COMBINING DOUBLE TILDE..COMBINING LATIN SMALL LETTER X
0591..05A1 ; nonstarting # [17] (֑..֡) HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
05A3..05B9 ; nonstarting # [23] (֣..ֹ) HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
05BB..05BD ; nonstarting # [3] (ֻ..ֽ) HEBREW POINT QUBUTS..HEBREW POINT METEG
05BF ; nonstarting # (ֿ) HEBREW POINT RAFE
05C1..05C2 ; nonstarting # [2] (ׁ..ׂ) HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
05C4 ; nonstarting # (ׄ) HEBREW MARK UPPER DOT
064B..0655 ; nonstarting # [11] (ً..ٕ) ARABIC FATHATAN..ARABIC HAMZA BELOW
0670 ; nonstarting # (ٰ) ARABIC LETTER SUPERSCRIPT ALEF
06D6..06DC ; nonstarting # [7] (ۖ..ۜ) ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
06DF..06E4 ; nonstarting # [6] (۟..ۤ) ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
06E7..06E8 ; nonstarting # [2] (ۧ..ۨ) ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
06EA..06ED ; nonstarting # [4] (۪..ۭ) ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
0711 ; nonstarting # (ܑ) SYRIAC LETTER SUPERSCRIPT ALAPH
0730..073F ; nonstarting # [16] (ܰ..ܿ) SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
07A6..07B0 ; nonstarting # [11] (ަ..ް) THAANA ABAFILI..THAANA SUKUN
0901..0903 ; nonstarting # [3] (ँ..) DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN VISARGA
093C ; nonstarting # (़) DEVANAGARI SIGN NUKTA
093E..094D ; nonstarting # [16] (ा..्) DEVANAGARI VOWEL SIGN AA..DEVANAGARI SIGN VIRAMA
0951..0954 ; nonstarting # [4] (॑..॔) DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
0962..0963 ; nonstarting # [2] (ॢ..ॣ) DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
0981..0983 ; nonstarting # [3] (ঁ..ঃ) BENGALI SIGN CANDRABINDU..BENGALI SIGN VISARGA
09BC ; nonstarting # (়) BENGALI SIGN NUKTA
09BE..09C4 ; nonstarting # [7] (া..ৄ) BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN VOCALIC RR
09C7..09C8 ; nonstarting # [2] (ে..ৈ) BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
09CB..09CD ; nonstarting # [3] (ো..্) BENGALI VOWEL SIGN O..BENGALI SIGN VIRAMA
09D7 ; nonstarting # (ৗ) BENGALI AU LENGTH MARK
09E2..09E3 ; nonstarting # [2] (ৢ..ৣ) BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
0A02 ; nonstarting # (ਂ) GURMUKHI SIGN BINDI
0A3C ; nonstarting # (਼) GURMUKHI SIGN NUKTA
0A3E..0A42 ; nonstarting # [5] (ਾ..ੂ) GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN UU
0A47..0A48 ; nonstarting # [2] (ੇ..ੈ) GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
0A4B..0A4D ; nonstarting # [3] (ੋ..੍) GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
0A70..0A71 ; nonstarting # [2] (ੰ..ੱ) GURMUKHI TIPPI..GURMUKHI ADDAK
0A81..0A83 ; nonstarting # [3] (ઁ..) GUJARATI SIGN CANDRABINDU..GUJARATI SIGN VISARGA
0ABC ; nonstarting # (઼) GUJARATI SIGN NUKTA
0ABE..0AC5 ; nonstarting # [8] (ા..ૅ) GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN CANDRA E
0AC7..0AC9 ; nonstarting # [3] (ે..ૉ) GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN CANDRA O
0ACB..0ACD ; nonstarting # [3] (ો..્) GUJARATI VOWEL SIGN O..GUJARATI SIGN VIRAMA
0B01..0B03 ; nonstarting # [3] (ଁ..) ORIYA SIGN CANDRABINDU..ORIYA SIGN VISARGA
0B3C ; nonstarting # (଼) ORIYA SIGN NUKTA
0B3E..0B43 ; nonstarting # [6] (ା..ୃ) ORIYA VOWEL SIGN AA..ORIYA VOWEL SIGN VOCALIC R
0B47..0B48 ; nonstarting # [2] (େ..ୈ) ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4D ; nonstarting # [3] (ୋ..୍) ORIYA VOWEL SIGN O..ORIYA SIGN VIRAMA
0B56..0B57 ; nonstarting # [2] (ୖ..ୗ) ORIYA AI LENGTH MARK..ORIYA AU LENGTH MARK
0B82 ; nonstarting # (ஂ) TAMIL SIGN ANUSVARA
0BBE..0BC2 ; nonstarting # [5] (ா..ூ) TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN UU
0BC6..0BC8 ; nonstarting # [3] (ெ..ை) TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
0BCA..0BCD ; nonstarting # [4] (ொ..்) TAMIL VOWEL SIGN O..TAMIL SIGN VIRAMA
0BD7 ; nonstarting # (ௗ) TAMIL AU LENGTH MARK
0C01..0C03 ; nonstarting # [3] (ఁ..ః) TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
0C3E..0C44 ; nonstarting # [7] (ా..ౄ) TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN VOCALIC RR
0C46..0C48 ; nonstarting # [3] (ె..ై) TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
0C4A..0C4D ; nonstarting # [4] (ొ..్) TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
0C55..0C56 ; nonstarting # [2] (ౕ..ౖ) TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
0C82..0C83 ; nonstarting # [2] (..ಃ) KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
0CBE..0CC4 ; nonstarting # [7] (ಾ..ೄ) KANNADA VOWEL SIGN AA..KANNADA VOWEL SIGN VOCALIC RR
0CC6..0CC8 ; nonstarting # [3] (ೆ..ೈ) KANNADA VOWEL SIGN E..KANNADA VOWEL SIGN AI
0CCA..0CCD ; nonstarting # [4] (ೊ..್) KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA
0CD5..0CD6 ; nonstarting # [2] (ೕ..ೖ) KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
0D02..0D03 ; nonstarting # [2] (..ഃ) MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
0D3E..0D43 ; nonstarting # [6] (ാ..ൃ) MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN VOCALIC R
0D46..0D48 ; nonstarting # [3] (െ..ൈ) MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
0D4A..0D4D ; nonstarting # [4] (ൊ..്) MALAYALAM VOWEL SIGN O..MALAYALAM SIGN VIRAMA
0D57 ; nonstarting # (ൗ) MALAYALAM AU LENGTH MARK
0D82..0D83 ; nonstarting # [2] (..ඃ) SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0DCA ; nonstarting # (්) SINHALA SIGN AL-LAKUNA
0DCF..0DD4 ; nonstarting # [6] (ා..ු) SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; nonstarting # (ූ) SINHALA VOWEL SIGN DIGA PAA-PILLA
0DD8..0DDF ; nonstarting # [8] (ෘ..ෟ) SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
0DF2..0DF3 ; nonstarting # [2] (ෲ..ෳ) SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
0E31 ; nonstarting # (ั) THAI CHARACTER MAI HAN-AKAT
0E34..0E3A ; nonstarting # [7] (ิ..ฺ) THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
0E47..0E4E ; nonstarting # [8] (็..๎) THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
0EB1 ; nonstarting # (ັ) LAO VOWEL SIGN MAI KAN
0EB4..0EB9 ; nonstarting # [6] (ິ..ູ) LAO VOWEL SIGN I..LAO VOWEL SIGN UU
0EBB..0EBC ; nonstarting # [2] (ົ..ຼ) LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
0EC8..0ECD ; nonstarting # [6] (່..ໍ) LAO TONE MAI EK..LAO NIGGAHITA
0F18..0F19 ; nonstarting # [2] (༘..༙) TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
0F35 ; nonstarting # (༵) TIBETAN MARK NGAS BZUNG NYI ZLA
0F37 ; nonstarting # (༷) TIBETAN MARK NGAS BZUNG SGOR RTAGS
0F39 ; nonstarting # (༹) TIBETAN MARK TSA -PHRU
0F3E..0F3F ; nonstarting # [2] (༾..༿) TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
0F71..0F72 ; nonstarting # [2] (ཱ..ི) TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I
0F74 ; nonstarting # (ུ) TIBETAN VOWEL SIGN U
0F76 ; nonstarting # (ྲྀ) TIBETAN VOWEL SIGN VOCALIC R
0F78 ; nonstarting # (ླྀ) TIBETAN VOWEL SIGN VOCALIC L
0F7A..0F80 ; nonstarting # [7] (ེ..ྀ) TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN REVERSED I
0F82..0F84 ; nonstarting # [3] (ྂ..྄) TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
0F86..0F87 ; nonstarting # [2] (྆..྇) TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
0F90..0F97 ; nonstarting # [8] (ྐ..ྗ) TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
0F99..0FBC ; nonstarting # [36] (ྙ..ྼ) TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
0FC6 ; nonstarting # (࿆) TIBETAN SYMBOL PADMA GDAN
102C..1032 ; nonstarting # [7] (ာ..ဲ) MYANMAR VOWEL SIGN AA..MYANMAR VOWEL SIGN AI
1036..1039 ; nonstarting # [4] (ံ..္) MYANMAR SIGN ANUSVARA..MYANMAR SIGN VIRAMA
1056..1059 ; nonstarting # [4] (ၖ..ၙ) MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC LL
17B6..17D0 ; nonstarting # [27] (ា..័) KHMER VOWEL SIGN AA..KHMER SIGN SAMYOK SANNYA
17D2 ; nonstarting # (្) KHMER SIGN COENG
18A9 ; nonstarting # (ᢩ) MONGOLIAN LETTER ALI GALI DAGALGA
3099..309A ; nonstarting # [2] (゙..゚) COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
# Total code points: 524

View file

@ -1,59 +0,0 @@
Viper tutorial #0: Introduction
This Viper tutorial is based on the vi tutorial VILEARN. Some things
works differently in Emacs and corresponding parts of the tutorial has
been changed for this. There has also been added some basic
information about Emacs that are useful to get started if you already
are a vi user.
This tutorial is a hands-on-tutorial for Viper. If you want more
information about Viper, please read the VIPER-MANUAL.
Note that if you are using Viper you probably still want to know quite
a bit about Emacs to use Emacs efficiently. Therefore you can also
run the Emacs tutorial from here - with special support for
Viper. This is part 6 below. You should run this part also to get to
know which Emacs standard key bindings are shadowed by Viper.
The tutorial consists of these parts:
0 Introduction
(this file)
1 Basic Editing
Covers the handful of commands required to both navigate all
five tutorials and do basic editing.
2 Moving Efficiently
Covers all of the cursor positioning commands. These are the
commands used later as arguments to editing commands.
3 Cutting and Pasting
Introduces the first compound commands, numbering, and copy
buffers.
4 Inserting Techniques
Continues the discussion of compound commands, while completing
the list of insertion commands first discussed in tutorial one.
5 Tricks and Timesavers
This is less a tutorial than a description of common vi commands
which don't fit correctly into normal logic.
6 Emacs Tutorial for Viper Users
Even Viper users use a lot of keys from Emacs. Therefore you can
run the Emacs tutorial here too. It will show you which keys in
the tutorial that are changed because you are using Viper. This
depends of which Viper state you are in, vi state or some insert
state. If you switch Viper state the tutorial will immediately
show which keys are affected.
BUGS
Vilearn has the remark that it "Still doesn't cover variables, ex
commands, or tags. At least one more tutorial is necessary for a
complete introduction to vi." - I do not think you have to learn those
parts to use Viper. There are other ways to do these things in Emacs!
For more information about vilearn see the the README-FILE.

View file

@ -1,187 +0,0 @@
Viper tutorial #1: The Basics
This lesson lasts 10-15 minutes and teaches simple editing. Lines
which begin with >>> mark exercises you should try. When you
want to exit this tutorial type 'Z''Z' (type capital Z, twice).
When you type commands in vi they do not appear on the screen. If the
letters you type unexpectedly appear on the screen, press the ESC key.
BASIC CURSOR MOVEMENT
---------------------
To move through the tutorial use C-d (control d) and C-u (control u).
C-d Move DOWN one half-screen
(depress the control key and type d)
C-u Move UP one half-screen
(depress the control key and type u)
* EMACS-NOTICE: C-u is normally used in Emacs for UNIVERSAL-ARGUMENT.
You can in most cases use DIGIT-ARGUMENT instead.
>>> Now type C-d (control d) and C-u (control u) to move down and back up.
When you are done reading a screen, you are expected to type C-d to move
down to the next screen. You must remember to type C-d throughout the
tutorial.
To move the cursor line by line, or character by character, use the
four keys 'h', 'j', 'k', and 'l'.
'h' Move left one character
'j' Move down one line
'k' Move up one line
'l' Move right one character
You will notice that these keys are in a straight line on the
keyboard. Study the diagram below showing the function of h, j, k, l.
UP
....... ....... ....... .......
: : : : : : : :
LEFT : h : : j : : k : : l : RIGHT
:.....: :.....: :.....: :.....:
DOWN
>>> Now type 'j' or 'k' a few times to bring the cursor to this line.
>>> Try moving off the right end of a line using 'l' . Notice that
>>> vi will not allow you to move off the end of the line using 'l' .
>>> Likewise, you cannot use 'h' and 'l' on a blank line.
>>> Try moving past the bottom of the screen using 'j' . Notice how
>>> how the screen scrolls downward.
>>> Now practice using 'k' to move up, and 'h' to move left.
DELETION
--------
To delete characters and lines, use 'x' and 'd''d'.
'x' X-OUT one character
'd''d' DELETE one line
To undo your changes, use 'u'.
'u' UNDO last change only
>>> Delete this SCRAP line. Move to this line with 'j' or 'k' , now type 'd''d' .
>>> Try undoing the deletion with 'u' .
>>> Move to this line and x-out the Y's with 'x' : "whY ask whY?"
>>> Try undoing the deletion with 'u' . Try typing 'u' several times.
>>> Notice that 'u' only undoes the last change.
* EMACS-NOTICE: In Viper you can use the repeat command '.' (just a dot)
to undo more changes. This goes in both direction, ie undoing and
redoing. Typing just 'u' changes direction.
Here are more lines on which to practice deleting and undoing (use: 'd''d' 'x' 'u' )
Emacs is a nice creation. Emacs is a nice creation.
Emacs is a nice creation. Emacs is a nice creation.
Emacs is a nice creation. Emacs is a nice creation.
QUIT COMMANDS
-------------
(DO NOT QUIT the tutorial at this time.)
To quit a file without saving any changes you have made (for instance,
with the 'd''d' or 'x' commands) use :q!<RETURN> . To quit and save your
changes, use 'Z''Z' . When you are editing your own files, you normally
use 'Z''Z' to quit.
:q!<RETURN> QUIT without saving changes
(type a colon, then the letter q, then an
exclamation point, and press RETURN)
'Z''Z' Exit and save any changes
(type capital Z, twice)
INSERTION
---------
You enter insert mode with 'i' or 'o' . Anything you type during insert
mode appears on the screen. When you are done inserting, press ESC
to exit insert mode. Type C-[ (control [ ), if you do not have an ESC key.
'o' OPEN a line for inserting text
'i' INSERT starting at the cursor
ESC ESCAPE from insert mode
During insert mode, use your erase character (usually backspace or
delete) to delete mistakes. The characters you delete will remain on
the screen until you press ESC.
>>> Insert your name and phone number below the next blank line. To do this:
>>> Open a line below using 'o' .
>>> Type your first and last name. Press RETURN.
>>> Then type your phone number and press ESC.
>>> Use 'x' to erase part of your phone number.
>>> Type the date below your phone number. To do this:
>>> Open another line using 'o' .
>>> Type the date and press ESC.
>>> Type 'u' to undo the insertion.
>>> Insert a nickname between your first and last names, using 'i'. To do this:
>>> Move the cursor to the spot between your names using 'h', 'j', 'k', 'l'.
>>> Press 'i' .
>>> Type the nickname, use DELETE or BACKSPACE to erase any typos.
>>> Then press ESC.
On some computers, a line may be longer than the width of the screen.
This means that a very long line may appear to be two lines on the
screen. This happens when you keep typing without pressing RETURN at
the edge of the screen. To avoid any confusion when you're inserting
text, be sure to press RETURN before reaching the right edge of the
screen.
SUMMARY
-------
These are the vi commands you should know after tutorial #1:
C-d Move DOWN one half-screen
(depress the control key and type d)
C-u Move UP one half-screen
(depress the control key and type u)
'h' Move left one character
'j' Move down one line
'k' Move up one line
'l' Move right one character
'd''d' DELETE one line
'x' X-OUT one character
'u' UNDO last change
:q!<RETURN> QUIT without saving changes
(type a colon, then the letter q, then an
exclamation point, and press RETURN)
'Z''Z' Exit and save any changes
(type capital Z, twice)
'o' OPEN a line for inserting text
'i' INSERT starting at the cursor
ESC ESCAPE from insert mode
You are now prepared to do simple editing on your own files. Practice
using vi for a few days. Then take the second vi tutorial to learn
more powerful and useful vi commands.
Copyright (c) 1992 Jill Kliger and Wesley Craig. All Rights Reserved.

View file

@ -1,269 +0,0 @@
Viper tutorial #2: Moving Through Files Efficiently
This lesson lasts 15-20 minutes. The material taught here is used in
tutorial #3: Cutting and Pasting. Lines which begin with >>> mark
exercises you should try. When you want to exit this tutorial type 'Z''Z'.
WORDS
-----
There are many ways to move from one word to another. Consider these:
'w' Move to the beginning of the next WORD
'e' Move to the END of the next word
'b' Move BACK to the beginning to the previous word
For 'w', 'e', and 'b', a word is delimited by any non-alphanumeric
character. The capitalized versions, 'W', 'E', and 'B', also move from word
to word. The difference is that for 'W', 'E', and 'B', a word is delimited
by any blank space.
>>> Try out 'w', 'b', 'e', on the lines provided below.
>>> Next practice using 'B', 'W', 'b', 'E' on the lines provided below.
EX-PER-IMENT on these lines;test moving back &forth.
EX-PER-IMENT on these lines;test moving back &forth.
ON THE LINE
-----------
You can move immediately to any point on the current line.
'$' Move to the end of the line
'^' Move to the first non-white character on the line
'0' Move to the first column on the line (column zero)
#'|' Move to an exact column on the line (column #) e.g. 5| 12|
>>> Experiment with '$' and '^' on the line provided below. Notice
>>> that '^' moves to the first non-white character, not the beginning.
This is a PRACTICE LINE. There is white space at the front. END
'0' (zero) will always take you to the far left edge of the screen.
#'|' (number vertical-bar) is for moving to an explicit column on a line.
Just type any number 1-80 and press | . For example: 5| 20| 30|
Note that you can't move beyond the last column on a line.
FINDING CHARACTERS
------------------
Often you want to move to a specific letter or character on a line.
'f' char FIND the next occurrence of char on the line
't' char Move 'TIL the next occurrence of char on the line
'F' char FIND the previous occurrence of char on the line
'T' char Move 'TIL the previous occurrence of char on the line
';' Repeat the last f, t, F, or T
',' Reverse the last f, t, F, or T
'f' and 'F' land on the character. 't' and 'T' land next to the character.
'f' and 't' move forward, while 'F' and 'T' move backward.
If the specified character is not on the line, vi will beep.
>>> Move to the beginning of the line below, and try out these commands:
>>> 'f'e 'f'E ';' ';' ',' ',' 't'@ 'T'P 't'e 't'E ',' ';' ',' ';'
"PRACTICE line?" "Each and Every?" "Find thE char@cter and move to it.END
MATCHING
--------
vi has a handy way to determine if (), {}, and [] pairs match up.
'%' Move to matching () or {} or []
>>> On the practice lines below, move your cursor over a (,),{,},[, or ].
>>> Then type '%' .
[TRY THIS. ((Whether) the pairs match up is the question.) [One]
pair is incomplete]. Can you tell {which one? ]} END
WINDOW POSITIONS
----------------
You can move the cursor to the top, middle, or bottom of the vi window.
'H' Move to the HIGHEST position in the window
'M' Move to the MIDDLE position in the window
'L' Move to the LOWEST position in the window
>>> Try out these commands: type H then M and L and then M again.
MARKING LOCATIONS
-----------------
You can mark positions in the file and return to them.
'm' char MARK this location and name it char
''' char (quote character) return to line named char
'''''' (quote quote) return from last movement
char can be any lower case letter, a-z. A mark persists until you:
1) use the same char to mark another location
or 2) delete the marked line
>>> Move to this line and type ma to mark it a
>>> Move to this line and type mb to mark it b
>>> Move to this line and type mz to mark it z
>>> Type 'a to return to line a
>>> Type 'b to return to line b
>>> Type 'z to return to line z
Certain commands can move you large distances. These commands cause
your last position to be remembered in the special mark named ' (quote).
To move to this special mark, just type '' (quote quote).
>>> Try this: 'b to return to line b, and then '' to return here.
GO TO A LINE
------------
'G' GO to the last line in the file
#'G' GO to line #. (e.g., 3G , 5G , 124G )
Read these directions carefully:
>>> Type '1''G' to go to the top of the file, and then '''''' (quote quote)
>>> to return here.
>>> Now try 'G' to go to the end of the file, and then '''''' to return here.
BLOCKS OF TEXT
--------------
It is often convenient to move through files jumping from one block of
text to the next. To do this use braces and parentheses:
'{' (left brace) Move to the beginning of a paragraph
'}' (right brace) Move to the end of a paragraph
'(' (left paren) Move to the beginning of a sentence
')' (right paren) Move to the beginning of the next sentence
>>> Experiment with '}' and '{' on the two paragraphs provided below.
>>> Note that paragraphs are separated by a blank line.
EXPERIMENT on this first paragraph. The quick brown fox jumped
over the seven lazy dogs. The fox must have been very large to
jump over seven dogs!
EXPERIMENT on this second paragraph. The quick brown dog
jumped over the seven lazy foxes. The dog didn't have to be nearly
as large, since foxes aren't too big.
>>> Try out ')' and '(' on the two paragraphs provided above.
>>> Notice that sentences are separated by two blank spaces.
C programmers find it useful to move by sections, since sections may be
delimited by a left brace in the first column. By placing the opening
brace of a C subroutine in the first column, you can move to the top of
the next subroutine, using '[''[' and ']'']' .
'[''[' Move to the beginning of a section
']'']' Move to the end of a section
Note that if vi does not find a left brace at the far left, it will
move to the top or bottom of the file.
>>> Now try ']'']' then ']'']' and '[''[' on the subroutines provided below:
main()
{
helloworld();
}
helloworld()
{
printf( "Hello world\n" );
}
SEARCHING
---------
This enables you to jump to the next occurrence of a string in a file.
To initially find the string use:
'/'string Find string looking forward
'?'string Find string looking backward
To find additional occurrences of the string type:
'n' Repeat last / or ? command
'N' Reverse last / or ? command
vi may search past the bottom of the file and then start again at the top.
(Or, vi may search past the top and then start again at the bottom.)
>>> You are going to search for a string, find the next three
>>> occurrences. Then flip directions and find the string until you
>>> return to this location. To do this:
>>> Type '/''t''h''e' then press RETURN.
>>> Type 'n' three times.
>>> Type 'N' until you return to this location.
* EMACS-NOTICE: Emacs has very powerful SEARCH-COMMANDS which you may
want to use in parallell to those above. One of the first you want
to try is probably C-s (ISEARCH-FORWARD).
SUMMARY
-------
'w' Move to the beginning of the next WORD
'e' Move to the END of the next word
'b' Move BACK to the beginning to the previous word
'$' Move to the end of the line
'^' Move to the first non-white character on the line
'0' Move to the first column on the line (column zero)
#'|' Move to an exact column on the line (column #) e.g. 5| 12|
'f' char FIND the next occurrence of char on the line
't' char Move 'TIL the next occurrence of char on the line
'F' char FIND the previous occurrence of char on the line
'T' char Move 'TIL the previous occurrence of char on the line
';' Repeat the last f, t, F, or T
',' Reverse the last f, t, F, or T
'%' Show matching () or {} or []
'H' Move to the HIGHEST position in the window
'M' Move to the MIDDLE position in the window
'L' Move to the LOWEST position in the window
'm' char MARK this location and name it char
''' char (quote character) return to line named char
'''''' (quote quote) return from last movement
'G' GO to the last line in the file
#'G' GO to line #. (e.g., 3G , 5G , 175G )
'{' (left brace) Move to the beginning of a paragraph
'}' (right brace) Move to the end of a paragraph
'(' (left paren) Move to the beginning of a sentence
')' (right paren) Move to the beginning of the next sentence
'[''[' Move to the beginning of a section
']'']' Move to the end of a section
'/'string Find string looking forward
'?'string Find string looking backward
'n' Repeat last / or ? command
'N' Reverse last / or ? command
You should now be able to move around files very efficiently. These
commands are especially useful if you are using vi over a slow modem.
Practice the material in this lesson for a few days and then take
either the third vi tutorial to learn how to copy, cut, and paste, or
the forth vi tutorial to learn additional insertion techniques.
Copyright (c) 1992 Jill Kliger and Wesley Craig. All Rights Reserved.

View file

@ -1,318 +0,0 @@
Viper tutorial #3: Copying, Cutting, and Pasting
This lesson lasts 15-20 minutes. This tutorial assumes full knowledge
of tutorial #1, and familiarity with tutorial #2. Lines which begin
with >>> mark exercises you should try.
When you want to exit this tutorial type 'Z''Z' to exit and save your
changes. Or type :q!<RETURN> to exit without saving changes.
Remember that typing u will UNDO your last change.
CUTTING TEXT
------------
The delete command can be combined with any of the movement commands
taught throughout tutorial #2. The resulting command is of the form:
'd'movement DELETE to where the movement command specifies
Consider the following examples:
'd''w' DELETE to the beginning of the next WORD
'd''$' DELETE to the end of the line
'd'')' DELETE to the beginning of the next sentence
'd''t'e DELETE 'TIL the next e
'd''d' DELETE a line (dd is a special case of the d command)
>>> Experiment with 'd''w' 'd''$' 'd'')' 'd''t'e 'd''d' on the paragraph provided below:
PRACTICE here. Now is the time for all good users to learn the
editor. The quick brown fox jumped over the seven lazy fish. Now
is the time for all good users to learn the editor. The quick
brown computer jumped over the seven lazy users. END PRACTICE
* EMACS-NOTICE: In Viper you can also use 'r' and 'R' for Emacs region and
Viper line extended region. This is very convenient together with
CUA-MODE where the region is visible (it is usually called the
selected text or something similar in other applications).
PASTING TEXT
------------
When text is deleted it is put into a buffer which contains the most
recently deleted text. To paste the contents of this buffer elsewhere
in the file use the p or P command.
'P' (upper p) PUT the contents of the buffer before the cursor
'p' (lower p) PUT the contents of the buffer after the cursor
>>> Try this sequence of commands on the practice lines below:
>>> 'd''d' to delete one line
>>> 'j' to move down a line
>>> 'p' (lower p) to PUT the deleted text after the cursor
>>> '}' to move to the end of the paragraph
>>> 'P' (upper p) to PUT the deleted text before the cursor
PRACTICE line. Cut and Paste this line to the bottom of the
paragraph. Here is some filler, feel free to cut and paste the
text in this practice region. Remember that u undoes the last
action. END OF PRACTICE
>>> Try this sequence of commands at the beginning of a word:
>>> 'd''w' 'w' 'P'
The fastest way to swap two letters is to type: 'x''p'
>>> Use xp to correct the misspelled words below:
PRACTICE. Thier weird quiet recieved an inconvenient shriek.
Thier belief is that to recieve grief from nieghbors outwieghs
all else. Biege skies lead to wierd science. END.
NUMBERING
---------
Consider cutting and pasting 3 words. Based on previous exercises you
would type 'd''w' , move to the new location, and type 'p' , and repeat
this procedure twice more. There is an easier way to do this:
>>> Using the practice lines below, try the following sequence of commands:
>>> Move to the beginning of the first sentence.
>>> Type 'd''3''w' to DELETE 3 WORDS.
>>> Type 'w' to move ahead one WORD.
>>> Type 'P' (upper p) to PUT the three words before the cursor.
PRACTICE Numbering vi commands is easy to do. Now is the time for
all good users to learn the editor. The quick brown fox jumped
over the seven lazy dogs. Numbering vi commands is easy to do.
Now is the time for all good users to learn the editor. END PRACTICE
>>> Type 'd''2''d' to DELETE 2 lines, using the practice paragraph above.
>>> Move to the top of the paragraph.
>>> Type 'p' (lower p) to PUT the two lines after of the cursor.
Numbering also works for movement commands.
>>> Now try '4''w' to move ahead 4 WORDs, on the lines provided above.
>>> Then use '3''b' to move BACK 3 words.
When you type '4''w' THINK "4 words", when you type d4w think "delete 4
words". In general, we can write
#movement repeat movement # times
d#movement DELETE to where the #movement command specifies
COPYING TEXT
------------
The YANK command works just like the DELETE command, except 'y' is used
instead of 'd' .
'y'movement YANK to where the movement command specifies
YANK and DELETE are identical except that YANK only copies the specified
text into the buffer.
>>> Try this sequence of commands on the practice lines below:
>>> 'y''y' to YANK a line (yy is a special case of the y command)
>>> '3''j' to move down 3 lines
>>> 'p' (lower p) to PUT the yanked text after the cursor
PRACTICE line. Copy and Paste this line to the bottom of the
paragraph. Here is some filler, feel free to copy and paste the
text in this practice region. Remember that u undoes the last
action. END OF PRACTICE
Please note that copy, cutting, and pasting large blocks of text may
significantly alter the tutorial file. Remember that you can always get
a new copy of the tutorial file and that u UNDOes your last change.
Here are some examples which show the similarity between y and d .
'y''w' YANK to the beginning of the next WORD
'y''$' YANK to the end of the line
'y'')' YANK to the beginning of the next sentence
'y''t'e YANK 'TIL the next e
'y''y' YANK a line
Here are some more examples using commands from tutorial #2.
'y''L' YANK from here to the lowest point of the window
'y''/'and YANK from here to the word "and"
'y''2''}' YANK 2 paragraphs
'y''''a YANK from here to the marked line "a" (mark line first)
>>> Experiment with 'y''w' 'y''t'e 'y''4''w' 'y''2''}' 'y''3''y' and 'y''$' on the paragraph
>>> provided below. Copy text AND use 'p' or 'P' to paste it.
PRACTICE line. Copy and Paste this line to the bottom of the
paragraph. Here is some filler, feel free to copy and paste
the text in this practice region. Remember that u undoes the
last action. END OF PRACTICE
NUMBERED BUFFERS
----------------
In all of the previous pasting exercises you've used the "un-named"
buffer. The un-named buffer contains the text you most recently cut or
copied. When you make a new cut or copy, the old contents of the
un-named buffer are moved to one of the "numbered" buffers. The
buffers are numbered 1-9. Each time you cut or copy text,
vi saves your current cut or copy in a buffer #1
vi saves your 2nd to last cut or copy in a buffer #2
The cut or copy before that is saved in a buffer #3 ...
vi saves your 8th oldest cut or copy in a buffer #8
vi saves your 9th oldest cut or copy in a buffer #9
Note that buffer #1 is the same as the un-named buffer. Here's how to
paste from the numbered buffers:
"#P (upper p) PUT contents of buffer # before the cursor
"#p (lower p) PUT contents of buffer # after the cursor
For example:
"1p PUT buffer 1 after the cursor
"7p PUT buffer 7 after the cursor
>>> Delete this 1st line with dd
>>> Delete this 2nd line with dd
>>> Delete this 3rd block with d2d
>>> (2nd half of block 3)
>>> Delete this 4th block with dd
>>> Now type "1p "2p "3p "4p
If you are using vi and have made accidental deletions, just PUT the
contents of each numbered buffer to recover the deleted text.
NAMED BUFFERS
-------------
vi maintains the un-named and numbered buffers automatically. You can
maintain your own buffers named a-z. That is, you can cut or copy text
into buffer x and later paste the text from buffer x.
'"'aDELETE DELETE text into buffer a
"aYANK YANK text into buffer a
"aPUT PUT text from buffer a
Note, don't actually type 'DELETE', 'YANK', or 'PUT'; type one of the
DELETE commands, YANK commands, or PUT commands. See the examples below:
"ad} DELETE paragraph into buffer a
"by3y YANK 3 lines into buffer b
"cy200G YANK to line 200 into buffer c
"dp PUT buffer d after the cursor
"zP PUT buffer z before the cursor
The contents of a named buffer are lost if:
1) you store new text in a buffer with the same name
or 2) you quit vi (using 'Z''Z' or :q!<RETURN> )
>>> Delete this START line into buffer a by typing "add
>>> Paste buffer a by typing "ap
>>> Delete this INTERMEDIATE line into buffer b by typing "bdd
>>> Paste buffer b by typing "bp
To put new material into buffer a
>>> Delete this FINAL line into buffer a by typing "add
>>> Paste buffer a by typing "ap
SAVING WITHOUT QUITTING
-----------------------
With ZZ you save changes and kill the current buffer. (In vi you also
exit with 'Z''Z'.) With :w you can save and not quit vi. It is a safe
practice to save changes to a file regularly. This reduces re-typing
in the event your computer crashes.
:w<RETURN> WRITE contents of the file (without quitting)
(type a colon, type w , then press the RETURN key)
>>> Try :w now. Note the message at the bottom of the screen.
PASTING BETWEEN FILES
---------------------
* EMACS-NOTICE: In Emacs there are no problems editing several
files. You can however do it in the more complicated vi way below if
you really want to ;-)
This is an extremely useful procedure in vi. Only one new command is
required for pasting between files, the EDIT command
:e filename<RETURN> Begin EDITing the file called "filename"
The EDIT command allows you to edit another file without quitting vi.
This is useful since named buffers are lost when you quit vi.
Let's say you want to copy 6 lines from the file called "3temp" into
this file which is named "3cutpaste":
(Note that "3temp" has already been created for you)
1) WRITE "3cutpaste". vi will not allow :w (press RETURN)
you to edit another file without first
saving any changes you've made.
2) EDIT "3temp" without quitting vi. :e 3temp (press RETURN)
3) YANK 6 lines from "3temp". "ay6y
4) Return to "3cutpaste". :e 3cutpaste (press RETURN)
5) PUT from buffer a "ap
Note that the un-named and numbered buffers are lost when the EDIT
command is used. Only named buffers are preserved with EDIT.
>>> Follow the 5-step procedure outlined above. Don't be concerned
>>> with remembering all 5 steps, the instructions are repeated in
>>> "3temp". Paste the text from "3temp" near this line of this file,
>>> "3cutpaste".
You can use this 5-step procedure on any two files, with any cutting or
copying action (here, y6y is the example).
SUMMARY
-------
#movement repeat movement # times
* EMACS-NOTICE: You may also use 'r' or 'R' in Viper.
'd'movement DELETE to where "movement" command specifies
'd'#movement DELETE to where the #movement command specifies
(e.g. 'd''w' 'd''3''w' )
'y'movement YANK to where "movement" command specifies
'y'#movement YANK to where the #movement command specifies
(e.g. 'y''w' 'y''3''w' )
'P' (upper p) PUT the contents of the buffer before the cursor
'p' (lower p) PUT the contents of the buffer after the cursor
'"'#P (upper p) PUT contents of buffer # before the cursor
'"'#p (lower p) PUT contents of buffer # after the cursor
(e.g. '"''2''p' '"''7''P' )
'"'aDELETE DELETE text into buffer a
'"'aYANK YANK text into buffer a
'"'aPUT PUT text from named buffer a
(Note, don't actually type 'DELETE', 'YANK', or 'PUT';
type one of the DELETE commands, YANK commands, or PUT
commands, e.g. '"''a''d''}' '"''b''y''3''y' '"''c''y''2''0''0''G' '"''d''p' '"''z''P' )
:w<RETURN> WRITE contents of the file (without quitting)
(type a colon, type w , then press the RETURN key)
:e filename<RETURN> Begin EDITing the file called "filename"
You are now prepared to handle all cutting, copying and pasting tasks
which may arise. If you practice what you've learned you'll find editing
in vi to be fast and convenient.
Copyright (c) 1992 Jill Kliger and Wesley Craig. All Rights Reserved.

View file

@ -1,180 +0,0 @@
Viper tutorial #4: Insertion Techniques
This lesson lasts 5-10 minutes. This tutorial assumes full knowledge
of tutorial #1, and familiarity with tutorial #2. Lines which begin
with >>> mark exercises you should try. When you want to exit this
tutorial type 'Z''Z' .
SIMPLE INSERTION
----------------
You spend most of your time in vi inserting text. As you might expect,
there are several commands to begin insertion.
'o' OPEN a line below the cursor
'O' OPEN a line above the cursor
'i' INSERT starting before the cursor
'I' INSERT at the beginning of the line
'a' APPEND starting after the cursor
'A' APPEND at the end of the line
Remember to type ESC to leave insert mode. If you don't have an ESC key
type C-[ (control [ ).
ESC ESCAPE from insert mode
>>> Move the cursor to this line. Type 'O' , enter your name. Press ESC.
>>> Next type 'o' , enter the date. Press ESC.
Note that 'O' opens the line above and puts you in insert mode,
while 'o' opens the line below and also puts you in insert mode.
>>> Type 'a' on any line above, enter your name. Press ESC. Do the
>>> same for 'A'.
>>> Read the following. Your goal is to take the sentence fragment below:
BROWN FOX OVER THE SEVEN LAZY
>>> and convert it to
THE QUICK BROWN FOX JUMPED OVER THE SEVEN LAZY DOGS.
>>> To do this type:
>>> 'I' to insert THE QUICK (then press ESC)
>>> move the cursor to after the X in FOX
>>> 'a' to insert JUMPED (then press ESC)
>>> 'A' to insert DOGS. (then press ESC)
>>> Now move to the sentence fragment and make the changes outlined above.
JOINING LINES
-------------
Often it is convenient to join two short lines into one line. There
are several ways to do this. The easiest is the J command. Other
methods will be explored in tutorial #5.
'J' JOIN two lines
>>> Go to the first line in the block below. Type J. Type J again.
Example: NOW IS THE TIME
the walrus said
TO THINK OF MANY THINGS
In the event that joining lines creates a line which exceeds the width
of the screen, you can break the line by typing i and pressing RETURN.
SUBSTITUTING TEXT
-----------------
Substituting combines the delete command and the insert command into a
single step.
#'s' SUBSTITUTE for # characters
#'S' SUBSTITUTE for # whole lines
In order to substitute text you have to know how much text you want to
delete. Consider the following examples:
'3''s' SUBSTITUTE the next 3 characters for what will be typed
'7''s' SUBSTITUTE the next 7 characters for what will be typed
>>> Change the SAMPLE DEFINITION below. To do this:
>>> move the cursor to the T in TWO
>>> type '3's
>>> type FOUR then press ESC
SAMPLE DEFINITION: A string quartet is defined to be
a group of TWO musicians.
REPLACING TEXT
--------------
The 'r' and 'R' commands allow you to directly type over existing text.
'r' REPLACE character (NO need to press ESC)
'R' enter over-type mode
>>> Correct each of the TYPOs on the sample line below. To do this:
>>> move the cursor to the misspelled character
>>> type 'r'
>>> type the correct character
SAMPLE: maintanence conveniance complience applience dilagent
>>> Use the over-type command, 'R' , on the sample line above.
>>> Type 'R' then type the name of a local restaurant. Press ESC.
CHANGING TEXT
-------------
The change command combines insertion, deletion, and the movement
commands. (Recall that the movement commands were taught in tutorial
#2.) Change is probably more useful than replace or substitute. The
general form of the change command is:
'c'movement CHANGE to where the movement command specifies
Consider the following examples:
'c''w' CHANGE to the beginning of the next WORD
'c''$' CHANGE to the end of the line
'c'')' CHANGE to the beginning of the next sentence
'c''t'e CHANGE 'TIL the next e
'c''3''w' CHANGE the next 3 WORDS
'c''c' CHANGE a line (cc is a special case of the c command)
'c''}' CHANGE to the end of the paragraph
>>> Follow these steps:
>>> 1. move to the desired location in the practice paragraph below
>>> 2. type 'c''w' (change to the beginning of the next WORD)
>>> 3. type your name
>>> 4. press ESC
PRACTICE here. Now is the time for all good users to learn the
editor. The quick red fox jumped over the seven lazy fish. Now
is the time for all good users to learn the editor. The quick
brown computer jumped over the seven lazy users. END PRACTICE
>>> Experiment by using a variety of options for step #2. Try
>>> out 'c''$' 'c'')' 'c''t'e 'c''3''w' 'c''c' 'c''}' on the practice paragraph above.
Note that the change command follows the same pattern as the delete
and yank commands which were explored in tutorial #3.
SUMMARY
-------
'o' OPEN a line below the cursor
'O' OPEN a line above the cursor
'i' INSERT starting before the cursor
'I' INSERT at the beginning of the line
'a' APPEND starting after the cursor
'A' APPEND at the end of the line
ESC ESCAPE from insert mode
'J' JOIN two lines
#'s' SUBSTITUTE for # characters
#'S' SUBSTITUTE for # whole lines
'r' REPLACE character (NO need to press ESC)
'R' enter over-type mode
'c'movement CHANGE to where the movement commands specifies
(e.g. 'c''3''w' 'c''$' 'c''c' )
These commands should improve your ability to insert text efficiently.
The next tutorials deal with advanced commands and tricks which can
further speed up your editing.
Copyright (c) 1992 Jill Kliger and Wesley Craig. All Rights Reserved.

View file

@ -1,229 +0,0 @@
Viper tutorial #5: Tricks and Timesavers
This lesson lasts 10-15 minutes. You should have a strong
understanding of tutorials #1-3 before working through these timesaving
techniques. Lines which begin with >>> mark exercises you should
try. When you want to exit this tutorial type 'Z''Z' .
CASE CONVERSION
---------------
When you want to change an upper-case character to a lower-case
character (or lower-case to upper-case) there is a single command which
does both:
'~' (tilde) Convert case of current character
>>> Move the cursor to be OVER the first character in the example
>>> line below. Press '~' until you have changed the case of the
>>> entire line. ( '~' will advance to the right automatically).
bOB WENT TO pARIS, fRANCE, TO SEE THE #1 CYCLING EVENT. end.
Note that '~' only affects alphabetic characters.
UNDOING
-------
* EMACS-NOTICE: Uppercase U does the same thing as lowercase u in
Viper so this part of the tutorial which was about U has been
removed.
REPEAT LAST COMMAND
-------------------
Often you want to make the same change at multiple locations in the
file. To help accomplish this, vi remembers your previous action.
'.' (dot) repeat last change
>>> Go through the example below changing "FISH" to "TOAD":
>>> Go to the "F" in the first instance of "FISH"
>>> To change the word: type 'c''w' then type TOAD then press ESC
>>> Move the cursor to "F" in the second occurence of "FISH"
>>> Type '.' (dot)
>>> Move the cursor to "F" in the final occurence of "FISH"
>>> Type '.' (dot)
>>> Now move the cursor to each occurence of "CROW"; Type '.' (dot)
EXAMPLE: The FISH fed the cat. The CROW fed the cat. Example
text is FISH to make interesting. The man fed the CROW. The
worm fed the FISH. Example text is hard to make CROW. END.
>>> Go through the example above deleting all occurences of "TOAD":
>>> Move to the beginning of the EXAMPLE paragraph above.
>>> Type '/''T''O''A''D' and press RETURN (recall tutorial #2)
>>> Delete the word by typing 'd''w'
>>> Type 'n' to move to the next occurence of "TOAD"
>>> Type '.' (dot) to repeat the dw command
>>> Use 'n''.' to delete the remaining "TOAD"s
Note that '.' only repeats changes, not cursor movements.
* EMACS-NOTICE: In Emacs '.' also repeat undo and redo.
* EMACS-NOTICE: Emacs KEYBOARD-MACROS are very powerful for repeating
whole sequences of keyboard commands.
WINDOW ACTIONS
--------------
You are already familiar with the C-u (depress the control key and
type u) and C-d commands from tutorial #1.
C-d Move DOWN one half-screen
C-u Move UP one half-screen
There are several related commands:
C-f Move FORWARD one full-screen
C-b Move BACKWARD one full-screen
C-e Move the window down one line without moving cursor
C-y Move the window up one line without moving cursor
The C-e and C-y commands may seem obscure; however, notice that on
the keyboard, e and y are close to d and u respectively. This
should help you remember that C-e moves DOWN, and C-y moves UP.
Recall the 'H' 'M' 'L' (HIGH MIDDLE LOW) window commands from Tutorial 2.
Consider a scenario where you want to yank from the current line to a
line near the top of the window. You could use C-e and C-y to
position the text in the window before you use the yH command.
The 'z' command also moves the window without moving your cursor:
'z'<RETURN> Position the current line to top of window
'z''.' Position the current line to middle of window
'z''-' Position the current line to bottom of window
>>> Move to this line. Type 'z' and press RETURN. Notice that
>>> this text and the cursor have moved to the top of the window.
>>> Try 'z''-' and 'z''.' also.
FILE AND DISPLAY CONTROL
------------------------
* EMACS-NOTICE: In vi C-g shows the status of the current file, but
C-g in Emacs in most situation stops what Emacs is doing. To get
information about the current file you can use C-c C-g instead when
Viper is in vi state.
* EMACS-NOTICE: In vi C-l refreshes the screen, but C-l in Emacs calls
the command recenter.
SUSPENDING VI
-------------
* EMACS-NOTICE: In vi C-z suspends vi. However in Viper C-z is by
default the VIPER-TOGGLE-KEY. To suspend or iconify Emacs use C-x
C-z.
BANG COMMAND
------------
* EMACS-NOTICE: Emacs has builtin commands to sort etc.
The exclamation point, '!' (aka BANG), command allows you to feed text
to any Unix command. The output of the Unix command replaces the
original text. Here is a useful Unix command to use from within vi:
!}fmt Format the paragraph, joining and filling lines to
produce output lines of up to 72 characters
>>> Move to the example paragraph below. Type !}fmt and press
>>> RETURN. Notice the paragraph will be reformatted such that
>>> the lines are of approximately equal length.
EXAMPLE:
So we grow together,
Like to a double cherry, seeming parted,
But yet an union in partition;
Two lovely berries moulded on one stem;
So, with two seeming bodies, but one heart;
END.
Another useful command is:
!}sort Sort lines of a paragraph alphabetically
>>> Move to the example text below. Type !}sort and press RETURN.
OBERON king of the fairies.
PUCK or Robin Goodfellow.
HERMIA daughter to Egeus, in love with Lysander.
HELENA in love with Demetrius.
LYSANDER in love with Hermia.
DEMETRIUS in love with Hermia.
Remember, any Unix command may be used this way.
SHIFTING TEXT
-------------
It is possible to shift large blocks of text right and left with the '>'
and '<' commands.
'>'movement Shift right to where the movement command specifies
'<'movement Shift left to where the movement command specifies
These commands work like the 'd' command. For example:
'>''}' Shift right to the end of the paragraph
'<''}' Shift left to the end of the paragraph
'>''>' Shift the current line right
'<''<' Shift the current line left
>>> Move the cursor to the first line of the paragraph below.
>>> Type '>''>' and '<''<' to shift the line back and forth. Next
>>> try '>''}' to shift the paragraph to the right, then '<''}' to shift
>>> it left, then type '.' until all four lines start at the left edge.
THIS IS THE FIRST LINE OF EXAMPLE TEXT
IS
EXAMPLE
TEXT END
SUMMARY
-------
'~' (tilde) Convert case of current character
'U' * EMACS-NOTICE: Same as lowercase u undo in Viper.
'.' (dot) repeat last change
C-d Move DOWN one half-screen
(depress the control key and type d)
C-u Move UP one half-screen
(depress the control key and type u)
C-f Move FORWARD one full-screen
C-b Move BACKWARD one full-screen
C-e Move the window down one line without moving cursor
C-y Move the window up one line without moving cursor
'z'<RETURN> Position the current line to top of window
'z''.' Position the current line to middle of window
'z''-' Position the current line to bottom of window
C-c C-g Show status of current file
C-l Recenter
'!'}fmt Format the paragraph, joining and filling lines to
produce output lines of up to 72 characters
'!'}sort Sort lines of a paragraph alphabetically
'>'movement Shift right to where the movement command specifies
'<'movement Shift left to where the movement command specifies
These commands should significantly speed up your editing. Have a nice
day. Tutorial 6 contains even more nifty commands.
Copyright (c) 1992 Jill Kliger and Wesley Craig. All Rights Reserved.

View file

@ -1,49 +0,0 @@
Viper Tutorial README
=====================
To install the Viper tutorial you must do two things:
1) Put viper-tutorial.el in your Emacs load-path.
2) Put the tutorial files (0intro, 1basics etc) in subdirectory to
where you put viper-tutorial.el with the name viper-tut.
Optionally you may put those file any where and customize the
option viper-tut-directory.
The tutorial is started by
M-x viper-tutorial RET
Viper tutorial is based on vilearn version 1.0 which was downloaded
from http://vilearn.org.
Below is the original readme from vilearn. Note that the only part
that applies here is the copyright notice.
---------------------------------------------------
This is version 1.0 of vilearn, an interactive vi tutorial.
Copyright (c) 1992 Jill Kliger and Wesley Craig. All Rights Reserved.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appears in all copies and that
the copyright notice, this permission notice, and an explicit record of
any local changes, appear in supporting documentation. This software
is supplied as is without expressed or implied warranties of any kind.
To install, edit the Makefile and type
make install
We have a mailing list, vilearn-admins@terminator.rs.itd.umich.edu. To
be added to the list, send mail to vilearn-admins-request. The list is
intended to discuss the tutorials, coordinate projects relating to
them, and provide help to those who may need it.
Wesley Craig & Jill Kliger
1317 Packard Street vilearn@terminator.rs.itd.umich.edu
Ann Arbor, MI 48104

View file

@ -1,131 +0,0 @@
*
* tutorial 1 FILENAME: 1basics
* basics
*
C-d down
C-u up
h left
j down
k up
l right
dd delete line
x x-out character
u undo
:q! force quit
ZZ good bye
o open
i insert
*
* tutorial 2 FILENAME: 2moving
* objects, finds & marks
*
w W word
b B back
e E end
{ } paragraph
( ) sentence
[ ] sections
$ end of line
^ first non-white
| column
0 beginning of line
f F find
t T to
; repeat fFtT
, reverse fFtT
G goto
H high
M middle
L low
n N next
? / regex
% match
' move to marked line
m mark
*
* tutorial 3 FILENAME: 3cutpaste & 3temp
*
* cutting, pasting, buffers, and files
*
d D deletes
y Y yank
p P put
" buffer
:e edit
*
* tutorial 4 FILENAME: 4inserting
* insertion
*
a A append
c C change
i I insert
o O open
r R replace
s S substitute
J join
*
* tutorial 5 FILENAME: 5tricks
* tricks
*
~ case
u U undo
. do again
C-b back
C-f forward
C-e down line
C-y up line
z zero
C-g status
C-l refresh
C-z suspend
C-t pop tag proposed
C-] follow tag proposed
! command
< > shift
*
* tutorial 6 PROPOSED
* commands from hell
*
: colon commands
Q quit
C-r redraw
@ execute buffer as macro
& like :&
C-t shift (insert)
C-d unshift (insert)

View file

@ -1,150 +0,0 @@
;;; nxhtml-base.el --- The very, very basic vars...
;;
;; Author: Lennart Borgman (lennart O borgman A gmail O com)
;; Created: 2010-01-13 Wed
;; Version:
;; Last-Updated:
;; URL:
;; Keywords:
;; Compatibility:
;;
;; Features that might be required by this library:
;;
;; None
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;; Things that always must be loaded and that are often necessary when
;; byte compiling.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; 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, 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; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
;;(eval-when-compile (require 'web-vcs nil t))
(eval-when-compile (require 'flymake-js nil t))
(eval-when-compile (require 'flymake-css nil t))
(eval-when-compile (require 'flymake-java-1 nil t))
(defconst nxhtml-menu:version "2.08")
(setq message-log-max t)
(setq debug-on-error t)
(defconst nxhtml-install-dir
(file-name-directory (or load-file-name
(when (boundp 'bytecomp-filename) bytecomp-filename)
buffer-file-name))
"Installation directory for nXhtml.")
(define-minor-mode nxhtml-autoload-web
"If on download elisp files from web when they are needed.
If t then during `require' nXhtml elisp files can be downloaded
from the nXhtml repository on the web. This will currently
download the development sources, latest version.
Other files that are used by a command may also be downloaded.
Note that files are not updated automatically. You have to use
`nxhtml-update-existing-files' for that."
:global t
;;:lighter (propertize " nX" 'face 'font-lock-comment-face)
:lighter " nX"
:group 'nxhtml)
(defun nxhtml-autoload (fun src &optional docstring interactive type)
"Generalized `autoload'. May setup autoload from the web.
If `nxhtml-autoload-web' is t then setup autoloading from the web.
Otherwise setup for normal local autoloading."
(if nxhtml-autoload-web
(progn
;; Do not require this until we really need it.
(require 'web-autoload)
(web-autoload fun src docstring interactive type))
(let ((file src))
(when (listp file)
(setq file (file-name-nondirectory (nth 2 file))))
(autoload fun file docstring interactive type))))
;; Fix-me: web autoload defcustoms.
;;
;; I have no good idea how to fix this. It looks like I have to
;; defadvice `custom-load-symbol'. I thought that should not be
;; necessary since it does (require load) on line 605 but the web
;; autoload does not start. Why? Hm, you never know since it is inside
;; a (condition-case nil ...).
;;
;; Ah, found it. The require is only done if custom loads contains a
;; symbol, not a string. So I changed this to a symbol instead in
;; nxhtml-loaddefs.el. Maybe `load' instead of `require' should be
;; advised?
;; What a hell is this below? Have things been rewritten in custom or
;; did I mix somethintg?
(defun nxhtml-custom-autoload (symbol load &optional noset)
"Like `custom-autoload', but also run :set for defcustoms etc."
;; Fix-me: is-boundp is currently always t because of the order in
;; loaddefs. Hm, so this worked just by chance...
(let* ((is-boundp (prog1 (boundp symbol)
(custom-autoload symbol load noset)))
(standard (get symbol 'standard-value))
(saved (get symbol 'saved-value))
;; Fix-me: property custom-set etc are not available
(custom-set (get symbol 'custom-set))
(custom-initialize (get symbol 'custom-initialize))
(set (or custom-set 'custom-set-default))) ;; Fix-me: initialize
(setq custom-set t) ;; Not available here
(when (or custom-initialize
(and saved
(not (equal (car saved) (symbol-value symbol)))
custom-set))
(funcall set symbol (car saved))
(custom-load-symbol symbol))))
(defun flymake-init-load-flymakemsg ()
(require 'flymakemsg))
(define-minor-mode nxhtml-flymake-setup
"Let nXhtml add some addtions to flymake.
This adds support for CSS and JavaScript files.
It also adds showing of errors in minibuffer when point is on
them.
If you turn this off you must restart Emacs for it to take
effect."
:group 'nxhtml
:group 'flymake
(when nxhtml-flymake-setup
(flymake-js-load)
(flymake-css-load)
(flymake-java-1-load)
(add-hook 'flymake-mode-hook 'flymake-init-load-flymakemsg)))
(provide 'nxhtml-base)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; nxhtml-base.el ends here

File diff suppressed because it is too large Load diff

View file

@ -1,689 +0,0 @@
;;; nxhtml-web-vcs.el --- nXhtml things for web-vcs.el
;;
;; Author: Lennart Borgman (lennart O borgman A gmail O com)
;; Created: 2010-01-13 Wed
;; Version:
;; Last-Updated:
;; URL:
;; Keywords:
;; Compatibility:
;;
;; Features that might be required by this library:
;;
;; None
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; 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, 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; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
(eval-when-compile (require 'cl))
(eval-when-compile (require 'nxhtml-base nil t))
;;(eval-when-compile (require 'nxhtmlmaint nil t))
(eval-when-compile (require 'web-vcs nil t))
(defvar nxhtml-web-vcs-file (or load-file-name
(when (boundp 'bytecomp-filename) bytecomp-filename)
buffer-file-name)
"This file.")
(defun nxhtml-require-base ()
(require 'nxhtml-base nil t)
(unless (featurep 'nxhtml-base)
;; At startup, need to load it by hand.
(let ((load-path load-path))
(add-to-list 'load-path (file-name-directory nxhtml-web-vcs-file))
(require 'nxhtml-base))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Repository URL
;;(nxhtml-default-download-directory)
(defun nxhtml-default-download-directory ()
(let* ((ur (expand-file-name "" "~"))
(ur-len (length ur))
(full (if (and (boundp 'nxhtml-install-dir)
nxhtml-install-dir)
nxhtml-install-dir
(file-name-as-directory
(expand-file-name ""
(web-vcs-default-download-directory)))))
(full-len (length full)))
(if (and (> full-len ur-len)
(string= ur (substring full 0 ur-len)))
(concat "~" (substring full ur-len))
full)))
(defun nxhtml-web-vcs-read-dl-dir (prompt)
"Return current nXhtml install dir or read dir."
(or (and (boundp 'nxhtml-install-dir)
nxhtml-install-dir)
(let* ((pr (concat
"A directory named 'nxhtml' will be created below the root you give."
"\n"
prompt))
(root (read-directory-name pr (nxhtml-default-download-directory))))
(when root
(expand-file-name "nxhtml" root)))))
;;(call-interactively 'nxhtml-setup-install)
;; (read-key "Prompt: ")
;; (y-or-n-p "Prompt")
;;;###autoload
(defun nxhtml-setup-install (way)
"Setup and start nXhtml installation.
This is for installation and updating directly from the nXhtml
development sources.
There are two different ways to install:
(1) Download all at once: `nxhtml-setup-download-all'
(2) Automatically download part by part: `nxhtml-setup-auto-download'
You can convert between those ways by calling this function again.
You can also do this by setting the option `nxhtml-autoload-web' yourself.
When you have nXhtml installed you can update it:
(3) Update new files in nXhtml: `nxhtml-update-existing-files'
To learn more about nXhtml visit its home page at URL
`http://www.emacswiki.com/NxhtmlMode/'.
If you want to test auto download \(but not use it further) there
is a special function for that, you answer T here:
(T) Test automatic download part by part: `nxhtml-setup-test-auto-download'
======
*Note*
If you want to download a zip file with latest released version instead then
please see URL `http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html'."
(interactive (let ((curr-cfg (current-window-configuration)))
(describe-function 'nxhtml-setup-install)
(select-window (get-buffer-window (help-buffer)))
(delete-other-windows)
(list
(let* ((key nil)
(has-nxhtml (and (boundp 'nxhtml-install-dir) nxhtml-install-dir))
(current-way (if has-nxhtml
(if (and (boundp 'nxhtml-autoload-web)
nxhtml-autoload-web)
"Your current setup is to download part by part from the web."
"Your current setup it to download all of nXhtml at once.")
"(You have not currently installed nXhtml.)"))
(prompt (concat "Setup nXhtml install."
"\n" current-way
"\n"
"\n(1) Download whole at once, or (2) part by part as needed"
(if has-nxhtml "\n(3) Update your existing nXhtml" "")
"\n(T) For temporary testing downloading part by part"
"\n"
"\n(? for help, q to quit): "))
(allowed-keys (if has-nxhtml
'(?1 ?2 ?3 ?T ?q 7)
'(?1 ?2 ?T ?q 7)))
(please nil))
(while (not (member key allowed-keys))
(if (not (member key '(??)))
(when key
(unless please
(setq prompt (concat "Please answer with one of the alternatives.\n\n"
prompt))
(setq please t)))
(describe-function 'nxhtml-setup-install)
(select-window (get-buffer-window (help-buffer)))
(delete-other-windows))
(setq key (web-vcs-read-key prompt))
;;(message "key = %S" key) (sit-for 1)
)
(case key
(7 (set-window-configuration curr-cfg)
nil)
(?1 'whole)
(?2 'part-by-part)
(?3 'update-existing)
(?T 'test-part-by-part)
)))))
(message "")
(case way
(whole (call-interactively 'nxhtml-setup-download-all))
(part-by-part (call-interactively 'nxhtml-setup-auto-download))
(update-existing (call-interactively 'nxhtml-update-existing-files))
(test-part-by-part (call-interactively 'nxhtml-setup-test-auto-download))
((eq nil way) nil)
(t (error "Unknown way = %S" way))))
(defvar nxhtml-basic-files '(
"nxhtml-base.el"
"nxhtml-loaddefs.el"
"web-autoload.el"
"etc/schema/schema-path-patch.el"
"nxhtml/nxhtml-autoload.el"
"autostart.el"
))
;;;###autoload
(defun nxhtml-setup-auto-download (dl-dir)
"Set up to autoload nXhtml files from the web.
This function will download some initial files and then setup to
download the rest when you need them.
Files will be downloaded under the directory root you specify in
DL-DIR.
Note that files will not be upgraded automatically. The auto
downloading is just for files you are missing. (This may change a
bit in the future.) If you want to upgrade those files that you
have downloaded you can just call `nxhtml-update-existing-files'.
You can easily switch between this mode of downloading or
downloading the whole of nXhtml by once. To switch just call the
command `nxhtml-setup-install'.
See also the command `nxhtml-setup-download-all'.
Note: If your nXhtml is to old you can't use this function
directly. You have to upgrade first, se the function
above. Version 2.07 or above is good for this."
(interactive (progn
(describe-function 'nxhtml-setup-auto-download)
(select-window (get-buffer-window (help-buffer)))
(delete-other-windows)
(nxhtml-check-convert-to-part-by-part)
(list
(progn
(when (and (boundp 'nxhtml-autoload-web)
(not nxhtml-autoload-web))
(unless (yes-or-no-p "Convert to updating nXhtml part by part? ")
(throw 'command-level nil)))
(nxhtml-web-vcs-read-dl-dir "Download nXhtml part by part to directory: ")))))
(catch 'command-level
(if (not dl-dir)
(unless (with-no-warnings (called-interactively-p))
(error "dl-dir should be a directory"))
(nxhtml-check-convert-to-part-by-part)
(when (and (boundp 'nxhtml-install-dir)
nxhtml-install-dir)
(unless (string= (file-truename dl-dir)
(file-truename nxhtml-install-dir))
(error "Download dir must be same as nxhtml-install-dir=%S" nxhtml-install-dir)))
(let* (;; Need some files:
(web-vcs-el-src (concat (file-name-sans-extension web-vcs-el-this) ".el"))
(web-vcs-el (expand-file-name (file-name-nondirectory web-vcs-el-src)
dl-dir))
(vcs 'lp)
(base-url (nxhtml-download-root-url nil))
(byte-comp (if (boundp 'web-autoload-autocompile)
web-autoload-autocompile
t))
(has-nxhtml (and (boundp 'nxhtml-install-dir)
nxhtml-install-dir))
(web-vcs-folder-cache nil))
(setq nxhtml-install-dir dl-dir)
(let ((root (file-name-directory dl-dir)))
(unless (file-exists-p root)
(unless (yes-or-no-p (format "Directory %S does not exist, create it? " root))
(error "Aborted by user"))))
(make-directory dl-dir t)
(setq message-log-max t)
(view-echo-area-messages)
(message "")
(message "")
(web-vcs-message-with-face 'web-vcs-green "==== Starting nXhtml part by part state ====")
(message "has-nxhtml=%s" has-nxhtml)
;; Fix-me: First copy this file and web-vcs.el to its destination:
(unless (string= (file-truename dl-dir)
(file-truename (file-name-directory nxhtml-web-vcs-file)))
(dolist (f (list web-vcs-el-src nxhtml-web-vcs-file))
(copy-file f (expand-file-name (file-name-nondirectory f) dl-dir)
'ok-overwrite)))
(when byte-comp (web-vcs-byte-compile-newer-file web-vcs-el t))
;; Get basic file list:
(catch 'web-autoload-comp-restart
;;(let ((file-mask (regexp-opt nxhtml-basic-files)))
;; (web-vcs-get-missing-matching-files vcs base-url dl-dir file-mask))
(dolist (f nxhtml-basic-files)
(web-vcs-get-missing-matching-files vcs base-url dl-dir f))
;; Autostart.el has not run yet, add download dir to load-path.
(let ((load-path (cons (file-name-directory web-vcs-el) load-path)))
(when byte-comp
(dolist (file nxhtml-basic-files)
(let ((el-file (expand-file-name file dl-dir)))
(web-vcs-byte-compile-newer-file el-file nil)))))
(let ((autostart-file (expand-file-name "autostart" dl-dir)))
;;(ad-deactivate 'require)
(web-vcs-set&save-option 'nxhtml-autoload-web t)
(web-vcs-log nil nil "* nXhtml: Download Part by Part as Needed\n")
(load autostart-file)
(unless (ad-is-active 'require) (ad-activate 'require))
(web-vcs-log-save)
(web-vcs-message-with-face 'web-vcs-green "==== Basic files for nXhtml part by part are now installed ====")
(web-vcs-display-messages t)
(unless has-nxhtml (nxhtml-add-loading-to-custom-file autostart-file t))))))))
;;(call-interactively 'nxhtml-download)
;;;###autoload
(defun nxhtml-setup-download-all (dl-dir)
"Download or update all of nXhtml.
You can download all if nXhtml with this command.
To update existing files use `nxhtml-update-existing-files'.
If you want to download only those files you are actually using
then call `nxhtml-setup-auto-download' instead.
See the command `nxhtml-setup-install' for a convenient way to
call these commands.
For more information about auto download of nXhtml files see
`nxhtml-setup-auto-download'."
(interactive (progn
(describe-function 'nxhtml-setup-auto-download)
(select-window (get-buffer-window (help-buffer)))
(delete-other-windows)
;;(nxhtml-check-convert-to-part-by-part)
(list
(nxhtml-web-vcs-read-dl-dir "Download whole nXhtml to directory: "))))
(let ((root (file-name-directory dl-dir)))
(unless (file-exists-p root)
(unless (yes-or-no-p (format "Directory %S does not exist, create it? " root))
(error "Aborted by user"))))
(make-directory dl-dir t)
(let ((msg (concat "Downloading nXhtml through Launchpad web interface will take rather long\n"
"time (5-15 minutes) so you may want to do it in a separate Emacs session.\n\n"
"Do you want to download using this Emacs session? "
)))
(if (not (y-or-n-p msg))
(message "Aborted")
(setq message-log-max t)
(let ((do-byte (y-or-n-p "Do you want to byte compile the files after downloading? ")))
(nxhtml-download-1 dl-dir nil do-byte)))))
(defun nxhtml-download-1 (dl-dir revision do-byte)
"Download nXhtml to directory DL-DIR.
If REVISION is nil download latest revision, otherwise the
specified one.
If DO-BYTE is non-nil byte compile nXhtml after download."
(let* ((has-nxhtml (and (boundp 'nxhtml-install-dir)
nxhtml-install-dir))
(base-url nxhtml-web-vcs-base-url)
(files-url (concat base-url "files/"))
;;(revs-url (concat base-url "changes/"))
(rev-part (if revision (number-to-string revision) "head%3A/"))
(full-root-url (concat files-url rev-part))
(web-vcs-folder-cache nil)
(web-autoload-paranoid nil))
;;(nxhtml-require-base)
(when (web-vcs-get-files-from-root 'lp full-root-url dl-dir)
(web-vcs-display-messages t)
(web-vcs-log nil nil "* nXhtml: Download All\n")
(web-vcs-set&save-option 'nxhtml-autoload-web nil)
(message "")
(web-vcs-message-with-face 'web-vcs-green "==== Starting downloading whole nXhtml ====")
(let ((autostart-file (expand-file-name "autostart" dl-dir)))
(load autostart-file)
(web-vcs-log-save)
(web-vcs-message-with-face 'web-vcs-green "==== All files for nXhtml are now installed ====")
(nxhtmlmaint-byte-recompile)
(unless has-nxhtml (nxhtml-add-loading-to-custom-file autostart-file nil))))))
(defun nxhtml-check-convert-to-part-by-part ()
(when (and (boundp 'nxhtml-install-dir)
nxhtml-install-dir)
(unless (and (boundp 'nxhtml-autoload-web)
nxhtml-autoload-web)
(if (not (boundp 'nxhtml-menu:version))
(error "nxhtml-install-dir set but no version found")
(unless (string-match "[\.0-9]+" nxhtml-menu:version)
(error "Can't find current version nxhtml-menu:version=%S" nxhtml-menu:version))
(let* ((ver-str (match-string 0 nxhtml-menu:version))
(ver-num (string-to-number ver-str)))
(when (< ver-num 2.07)
(web-vcs-message-with-face 'web-vcs-red "Too old nXhtml for download part by part.")
(throw 'command-level nil)))))))
;;(directory-files default-directory nil "\\el$")
;;(directory-files default-directory nil "[^#~]$")
;;;###autoload
(defun nxhtml-update-existing-files ()
"Update existing nXhtml files from the development sources.
Only files you already have will be updated.
Note that this works both if you have setup nXhtml to auto
download files as you need them or if you have downloaded all of
nXhtml at once.
For more information about installing and updating nXhtml see the
command `nxhtml-setup-install'."
;; Fix-me: download new files too if you are not auto downloading.
(interactive)
(when (y-or-n-p "Do you want to update your nXhtml files? ")
(message "")
(web-vcs-display-messages t)
(web-vcs-message-with-face 'web-vcs-yellow "*\nStarting updating your nXhtml files.\n*\n")
(message nil)
(web-vcs-clear-folder-cache)
(let ((vcs 'lp)
(base-url (nxhtml-download-root-url nil))
(dl-dir nxhtml-install-dir)
web-vcs-folder-cache)
(setq dl-dir (file-name-as-directory dl-dir))
(web-vcs-update-existing-files vcs base-url dl-dir dl-dir)
(web-vcs-clear-folder-cache))
(display-buffer (get-buffer-create "*Compile-Log*"))
(nxhtmlmaint-byte-recompile)
(web-vcs-log-save)
(web-vcs-message-with-face 'web-vcs-yellow "*\nFinished updating your nXhtml files.\n*\n")
(message nil)))
;;(nxhtml-maybe-download-files (expand-file-name "nxhtml/doc/img/" nxhtml-install-dir) nil)
;;;###autoload
(defun nxhtml-get-missing-files (sub-dir file-name-list)
(let (file-mask
(root-url (nxhtml-download-root-url nil))
files-regexp
(full-dir (expand-file-name sub-dir nxhtml-install-dir))
miss-names)
(if file-name-list
(progn
(dolist (f file-name-list)
(let ((full-f (expand-file-name f full-dir)))
(unless (file-exists-p full-f)
(setq miss-names (cons f miss-names)))))
(setq files-regexp (regexp-opt miss-names)))
(setq files-regexp ".*"))
;;(unless (file-exists-p full-dir) (make-directory full-dir t))
(setq file-mask
(concat (file-relative-name (file-name-as-directory full-dir)
nxhtml-install-dir)
files-regexp))
(let ((web-vcs-folder-cache nil))
(web-vcs-get-missing-matching-files 'lp root-url nxhtml-install-dir
file-mask))))
;; Fix-me: Does not work, Emacs Bug
;; Maybe use wget? http://gnuwin32.sourceforge.net/packages/wget.htm
;; http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=5103
;; (nxhtml-get-release-revision)
(defun nxhtml-get-release-revision ()
"Get revision number for last release."
(let* ((all-rev-url "http://code.launchpad.net/%7Enxhtml/nxhtml/main")
(url-buf (url-retrieve-synchronously all-rev-url))
(vcs-rec (or (assq 'lp web-vcs-links-regexp)
(error "Does not know web-vcs 'lp")))
(rel-ver-regexp (nth 6 vcs-rec))
)
(message "%S" url-buf)
(with-current-buffer url-buf
(when (re-search-forward rel-ver-regexp nil t)
(match-string 1)))))
;;;###autoload
(defun nxhtml-byte-compile-file (file &optional load)
(let ((extra-load-path (when nxhtml-install-dir
(mapcar (lambda (p)
(file-name-as-directory
(expand-file-name p nxhtml-install-dir)))
'("tests" "related" "nxhtml" "util" ".")))))
;; (message "nxhtml-byte-compile-file:extra-load-path=%s" extra-load-path)
(web-vcs-byte-compile-file file load extra-load-path)))
;; fix-me: change web-vcs-byte-compile-file instead
;;;###autoload
(defun nxhtml-byte-recompile-file (file &optional load)
"Byte recompile FILE file if necessary.
For more information see `nxhtml-byte-compile-file'.
Loading is done if recompiled and LOAD is t."
(interactive (list (buffer-file-name)
t))
(let ((elc-file (byte-compile-dest-file file)))
(if (file-newer-than-file-p file elc-file)
(nxhtml-byte-compile-file file load)
(message "Byte compilation of this file is up to date."))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Add to custom file
(defvar nxhtml-handheld-wincfg nil)
(defun nxhtml-handheld-restore-wincg ()
(when nxhtml-handheld-wincfg
(set-window-configuration nxhtml-handheld-wincfg)
(setq nxhtml-handheld-wincfg nil)))
;;(nxhtml-handheld-add-loading-to-custom-file "TEST-ME")
(defun nxhtml-handheld-add-loading-to-custom-file (file-to-load)
(setq nxhtml-handheld-wincfg (current-window-configuration))
(delete-other-windows)
(let ((info-buf (get-buffer-create "Information about how to add nXhtml to (custom-file)"))
(load-str (format "(load %S)" file-to-load)))
(with-current-buffer info-buf
(add-hook 'kill-buffer-hook 'nxhtml-handheld-restore-wincg nil t)
(insert "Insert the following line to (custom-file), ie the file in the other window:\n\n")
(let ((here (point)))
(insert " "
(propertize load-str 'face 'secondary-selection)
"\n")
(copy-region-as-kill here (point))
(insert "\nThe line above is in the clipboard so you can just paste it where you want it.\n")
(insert "When ready kill this buffer.")
(goto-char here))
(setq buffer-read-only t)
(set-buffer-modified-p nil))
(set-window-buffer (selected-window) info-buf)
(find-file-other-window (custom-file))))
;; (nxhtml-add-loading-to-custom-file "test-file")
(defun nxhtml-add-loading-to-custom-file (file-to-load part-by-part)
(message "")
(require 'cus-edit)
(if (not (condition-case nil (custom-file) (error nil)))
(progn
(message "\n\n")
(web-vcs-message-with-face
'web-vcs-red
(concat "Since you have started this Emacs session without running your init files"
"\nthey are unknown and the installation can not add the statement below."
"\nTo finish the setup of nXhtml you must add"
"\n\n (load %S)"
"\n\nto your custom-file if you have not done it yet."
"\nYou must also customize the variable `nxhtml-autoload-web' to tell that"
(if part-by-part
"\nyou want to download nXhml files as you need them."
"\nyou do not want to allow automatic downloading of nXhtml files."
)
"\n")
file-to-load)
(message "")
(web-vcs-display-messages t))
(let ((prompt (concat "Basic setup of nXhtml is done, but it must be loaded from (custom-file)."
"\nShould I add loading of nXhtml to (custom-file) for you? ")))
(if (yes-or-no-p prompt)
(nxhtml-add-loading-to-custom-file-auto file-to-load)
(if (yes-or-no-p "Should I guide you through how to do it? ")
(nxhtml-handheld-add-loading-to-custom-file file-to-load)
(web-vcs-message-with-face 'web-vcs-green
"OK. You need to add (load %S) to your init file" file-to-load))))))
;; Fix-me: really do this? Is it safe enough?
(defun nxhtml-add-loading-to-custom-file-auto (file-to-load)
(unless (file-name-absolute-p file-to-load)
(error "nxhtml-add-loading-to-custom-file: Not abs file name: %S" file-to-load))
(let ((old-buf (find-buffer-visiting (custom-file)))
(full-to-load (expand-file-name file-to-load)))
(with-current-buffer (or old-buf (find-file-noselect (custom-file)))
(save-restriction
(widen)
(catch 'done
(while (progn
(while (progn (skip-chars-forward " \t\n\^l")
(looking-at ";"))
(forward-line 1))
(not (eobp)))
(let ((start (point))
(form (read (current-buffer))))
(when (eq (nth 0 form) 'load)
(let* ((form-file (nth 1 form))
(full-form-file (expand-file-name form-file)))
(when (string= full-form-file full-to-load)
(throw 'done nil))
(when (and (string= (file-name-nondirectory full-form-file)
(file-name-nondirectory full-to-load))
(not (string= full-form-file full-to-load)))
(if (yes-or-no-p "Replace current nXhtml loading in (custom-file)? ")
(progn
(goto-char start) ;; at form start now
(forward-char (length "(load "))
(skip-chars-forward " \t\n\^l") ;; at start of string
(setq start (point))
(setq form (read (current-buffer)))
(delete-region start (point))
(insert (format "%S" full-to-load))
(basic-save-buffer))
(web-vcs-message-with-face 'web-vcs-red "Can't continue then")
(web-vcs-display-messages t)
(throw 'command-level nil)))))))
;; At end of file
(insert (format "\n(load %S)\n" file-to-load))
(basic-save-buffer))
(unless old-buf (kill-buffer old-buf))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; Start Testing function
(defun emacs-Q-no-nxhtml (&rest args)
(let* ((old-env-load-path (getenv "EMACSLOADPATH"))
sub-env-load-path
(elp-list (or (when old-env-load-path
;;(split-string old-env-load-path ";"))
(split-string old-env-load-path path-separator))
load-path))
(sub-elp-list nil)
ret
(this-emacs-exe (locate-file invocation-name
(list invocation-directory)
exec-suffixes)))
(dolist (p elp-list)
(when (file-exists-p p)
(unless (string= nxhtml-install-dir p)
(let* ((dir (file-name-directory p))
(last (file-name-nondirectory p))
(last-dir (file-name-nondirectory
(directory-file-name dir))))
(unless (and (string= "nxhtml" last-dir)
(member last '("util" "test" "nxhtml" "related" "alt")))
(setq sub-elp-list (cons p sub-elp-list)))))))
;;(setq sub-env-load-path (mapconcat 'identity (reverse sub-elp-list) ";"))
(setq sub-env-load-path (mapconcat 'identity (reverse sub-elp-list) path-separator))
(setenv "EMACSLOADPATH" sub-env-load-path)
(setq ret (apply 'call-process this-emacs-exe nil 0 nil "-Q" args))
(setenv "EMACSLOADPATH" old-env-load-path)
ret))
;; (call-interactively-p 'nxhtml-setup-test-auto-download)
;; (nxhtml-setup-test-auto-download "c:/test2/")
(defun nxhtml-setup-test-auto-download (test-dir)
"Test autoload in a new emacs, started with 'emacs -Q'.
You can choose where to download the files and just delete them
when you have tested enough."
(interactive (list (read-directory-name "Directory for test of auto download of nXhtml: ")))
(let ((this-dir (file-name-directory web-vcs-el-this))
(this-name (file-name-nondirectory web-vcs-el-this))
that-file)
(when (and (file-exists-p test-dir)
(not (y-or-n-p (format "Directory %S exists, really test there? " test-dir))))
(error "Aborted"))
(unless (file-exists-p test-dir) (make-directory test-dir))
(setq that-file (expand-file-name this-name test-dir))
(when (file-exists-p that-file) (delete-file that-file))
(copy-file web-vcs-el-this that-file)
(emacs-Q-no-nxhtml "-l" that-file "-f" "nxhtml-setup-test-auto-download-do-it-here")))
(defun nxhtml-setup-test-auto-download-do-it-here ()
"Helper for `nxhtml-setup-test-auto-down-load'."
(let ((this-dir (file-name-directory web-vcs-el-this)))
(nxhtml-setup-auto-download this-dir)))
(defun web-vcs-check-if-modified ()
(let (
(t1 (format-time-string "%Y-%m-%dT%T%z" (date-to-time "2010-01-01 18:20")))
(t2 (format-time-string "%Y-%m-%dT%T%z" (date-to-time "Mon, 28 Dec 2009 08:57:44 GMT")))
(url-request-extra-headers
(list
(cons "If-Modified-Since"
(format-time-string
;;"%Y-%m-%dT%T%z"
"%a, %e %b %Y %H:%M:%S GMT"
(nth 5 (file-attributes "c:/test/temp.el" )))
)))
xb)
(setq xb (url-retrieve-synchronously "http://www.emacswiki.org/emacs/download/anything.el"))
(switch-to-buffer xb)
))
;; (emacs-Q-no-nxhtml "web-vcs.el" "-l" "c:/test/d27/web-autostart.el")
;; (emacs-Q-no-nxhtml "web-vcs.el" "-l" "c:/test/d27/autostart.el")
;; (emacs-Q-no-nxhtml "web-vcs.el" "-f" "eval-buffer" "-f" "nxhtml-temp-setup-auto-download")
;; (emacs-Q-no-nxhtml "-l" "c:/test/d27/web-vcs" "-l" "c:/test/d27/nxhtml-web-vcs" "-f" "nxhtml-temp-setup-auto-download")
;; (emacs-Q-no-nxhtml "-l" "c:/test/d27/nxhtml-web-vcs" "-f" "nxhtml-temp-setup-auto-download")
;; (emacs-Q-no-nxhtml "--geometry=200x50+100+100" "-l" "c:/test/d27/web-vcs" "-f" "web-vcs-nxhtml")
(defun nxhtml-temp-setup-auto-download ()
;;(when (fboundp 'w32-send-sys-command) (w32-send-sys-command #xf030) (sit-for 2))
(set-frame-size (selected-frame)
(/ 1024 (frame-char-width))
(/ 512 (frame-char-height))
)
(tool-bar-mode -1)
(set-frame-position (selected-frame) 100 50)
(when (y-or-n-p "Do nXhtml? ")
(view-echo-area-messages)
(setq truncate-lines t)
(split-window-horizontally)
(let ((load-path (cons default-directory load-path)))
(require 'web-vcs))
;(nxhtml-setup-auto-download "c:/test/d27")
(call-interactively 'nxhtml-setup-auto-download)
))
;;;;;; End Testing function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(provide 'nxhtml-web-vcs)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; nxhtml-web-vcs.el ends here

View file

@ -1,17 +0,0 @@
2006-04-26 <lennart.borgman.073@student.lu.se>
* nxhtml.el (nxhtml-insert-skeleton-if-empty)
(nxhtml-insert-frame-skeleton): New functions.
2006-04-25 <lennart.borgman.073@student.lu.se>
* nxhtml.el (nxhtml-coding-systems-complete)
(nxhtml-script-url-predicate, nxhtml-script-completion-pattern)
(nxhtml-image-url-predicate, nxhtml-image-completion-pattern)
(nxhtml-mailto-predicate, nxhtml-predicate-error)
(nxhtml-in-xml-attribute-value-regex)
(nxhtml-read-mail-url-history, nxhtml-read-web-url-history)
(nxhtml-read-url-history, nxhtml-read-url-type)
(nxhtml-read-url-type-help, nxhtml-read-url)
(rng-complete-attribute-value): New entries for completion.

View file

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>nXhtml Short Tour</title>
<script type="text/javascript" src="js/smoothgallery/scripts/mootools.js"></script>
<script type="text/javascript" src="js/smoothgallery/scripts/jd.gallery.js"></script>
<link rel="stylesheet" href="js/smoothgallery/css/layout.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="js/smoothgallery/css/jd.gallery.css" type="text/css" media="screen"/>
<style type="text/css" media="screen">
/* <![CDATA[ */
#myGallery {
width: 660px;
height: 500px;
}
/* ]] */
</style>
</head>
<body>
<script type="text/javascript">
function startGallery() {
var myGallery = new gallery($('myGallery'), {
timed: true,
delay: 5000,
embedLinks: false,
showArrows: true,
showCarousel: true,
showInfopane: true,
showDescription: true,
});
}
window.onDomReady(startGallery);
</script>
<div id="myGallery"><!-- SmoothGallery -->
<div class="imageElement">
<h3>Popup completion</h3>
<p>nXhtml can use popup style completion too (for XHTML)</p>
<a href="#" title="open image" class="open"></a>
<img src="img/popup-compl.png" class="full" alt="Popup completion" />
<img src="img/popup-compl.png" class="thumbnail" alt="Popup completion (thumbnail)" />
<div>
<p>
more about popup
</p>
<p>
more about popup
</p>
</div>
</div>
<div class="imageElement">
<h3>Emacs style completion</h3>
<p>Emacs default style for completion uses the minibuffer and an Emacs window</p>
<a href="#" title="open image" class="open"></a>
<img src="img/emacs-style-completion.png" class="full" alt="Emacs style completion" />
<img src="img/emacs-style-completion.png" class="thumbnail" alt="Emacs style completion (thumbnail)" />
<div>du</div>
</div>
</div>
<div id="DescriptionDiv"
style="
text-align: center;
">
desc div
</div>
</body>
</html>

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
How to Convert to XHTML
</title>
<link href="nxhtml.css" rel="StyleSheet" type="text/css" />
</head>
<body>
<h1>
How to Convert to XHTML
</h1>
<p>
With nxhtml-mode you can edit XHTML documents, but not HTML
dito. So what do you do with your old HTML documents? The
answer is simple: You convert them to XHTML! There is today
not many reasons not to convert them to XHTML. You may say
"but what about old browsers?". Most users just do not have
old browsers today. Old browsers are too dangerous to use on the
Internet.
</p>
<p>
You can convert the documents easily from within nxhtml-mode
with <a href= "http://tidy.sourceforge.net/">Tidy</a>. However
Tidy does not come with nxhtml, you have to install it yourself.
</p>
<p>
When Tidy is called from Emacs you can do a whole directory tree
at once. When a buffer is in nxhtml-mode (and tidy.el is found)
there is an entry on the menus called <b>Tidy</b> from which you
can access tidy and set the options for it. Note especially the
<b>Quick Options Settings</b> where you can set options for
converting to XHTML easily.
</p>
</body>
</html>

View file

@ -1,424 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
--></style>
<style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.comment-face-1419 { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.comment-face-1419 a { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.comment-delimiter-face-1418 { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.comment-delimiter-face-1418 a { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.help-argument-name-1420 { color: rgb(0, 0, 255); font-style: italic; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-size: 10pt; text-decoration: none; }
span.help-argument-name-1420 a { color: rgb(0, 0, 255); font-style: italic; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-size: 10pt; text-decoration: underline; }
span.button-0004 { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
span.button-0004 a { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.completion-tooltip-face-1437 { color: rgb(0, 0, 0); background: rgb(255, 255, 255); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.completion-tooltip-face-1437 a { color: rgb(0, 0, 0); background: rgb(255, 255, 255); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.completion-dynamic-face-1436 { color: rgb(0, 0, 0); background: rgb(255, 165, 0); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.completion-dynamic-face-1436 a { color: rgb(0, 0, 0); background: rgb(255, 165, 0); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.compilation-warning-1435 { color: rgb(255, 165, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; font-size: 10pt; text-decoration: none; }
span.compilation-warning-1435 a { color: rgb(255, 165, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.compilation-line-number-1434 { color: rgb(184, 134, 11); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.compilation-line-number-1434 a { color: rgb(184, 134, 11); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.compilation-info-1433 { color: rgb(0, 205, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; font-size: 10pt; text-decoration: none; }
span.compilation-info-1433 a { color: rgb(0, 205, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.compilation-error-1430 { color: rgb(255, 0, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; font-size: 10pt; text-decoration: none; }
span.compilation-error-1430 a { color: rgb(255, 0, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.compilation-column-number-1429 { color: rgb(34, 139, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.compilation-column-number-1429 a { color: rgb(34, 139, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.comint-highlight-prompt-1428 { color: rgb(0, 0, 139); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.comint-highlight-prompt-1428 a { color: rgb(0, 0, 139); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.button-0004 { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
span.button-0004 a { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.default-0273 { color: rgb(250, 235, 215); font-size: 105%; text-decoration: none; }
span.default-0273 a { color: rgb(250, 235, 215); font-size: 105%; text-decoration: underline; }
span.default-0272 { background: rgb(250, 235, 215); font-size: 105%; text-decoration: none; }
span.default-0272 a { background: rgb(250, 235, 215); font-size: 105%; text-decoration: underline; }
span.default-0271 { color: rgb(250, 240, 230); font-size: 105%; text-decoration: none; }
span.default-0271 a { color: rgb(250, 240, 230); font-size: 105%; text-decoration: underline; }
span.default-0270 { background: rgb(250, 240, 230); font-size: 105%; text-decoration: none; }
span.default-0270 a { background: rgb(250, 240, 230); font-size: 105%; text-decoration: underline; }
span.default-0269 { color: rgb(253, 245, 230); font-size: 105%; text-decoration: none; }
span.default-0269 a { color: rgb(253, 245, 230); font-size: 105%; text-decoration: underline; }
span.default-0268 { background: rgb(253, 245, 230); font-size: 105%; text-decoration: none; }
span.default-0268 a { background: rgb(253, 245, 230); font-size: 105%; text-decoration: underline; }
span.default-0267 { color: rgb(255, 250, 240); font-size: 105%; text-decoration: none; }
span.default-0267 a { color: rgb(255, 250, 240); font-size: 105%; text-decoration: underline; }
span.default-0266 { background: rgb(255, 250, 240); font-size: 105%; text-decoration: none; }
span.default-0266 a { background: rgb(255, 250, 240); font-size: 105%; text-decoration: underline; }
span.default-0265 { color: rgb(220, 220, 220); font-size: 105%; text-decoration: none; }
span.default-0265 a { color: rgb(220, 220, 220); font-size: 105%; text-decoration: underline; }
span.default-0264 { background: rgb(220, 220, 220); font-size: 105%; text-decoration: none; }
span.default-0264 a { background: rgb(220, 220, 220); font-size: 105%; text-decoration: underline; }
span.default-0263 { color: rgb(245, 245, 245); font-size: 105%; text-decoration: none; }
span.default-0263 a { color: rgb(245, 245, 245); font-size: 105%; text-decoration: underline; }
span.default-0262 { background: rgb(245, 245, 245); font-size: 105%; text-decoration: none; }
span.default-0262 a { background: rgb(245, 245, 245); font-size: 105%; text-decoration: underline; }
span.default-0261 { color: rgb(248, 248, 255); font-size: 105%; text-decoration: none; }
span.default-0261 a { color: rgb(248, 248, 255); font-size: 105%; text-decoration: underline; }
span.default-0260 { background: rgb(248, 248, 255); font-size: 105%; text-decoration: none; }
span.default-0260 a { background: rgb(248, 248, 255); font-size: 105%; text-decoration: underline; }
span.default-0259 { color: rgb(255, 250, 250); font-size: 105%; text-decoration: none; }
span.default-0259 a { color: rgb(255, 250, 250); font-size: 105%; text-decoration: underline; }
span.default-0258 { background: rgb(255, 250, 250); font-size: 105%; text-decoration: none; }
span.default-0258 a { background: rgb(255, 250, 250); font-size: 105%; text-decoration: underline; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.default-1432 { text-decoration: underline; color: rgb(176, 48, 96); font-weight: 700; font-size: 164%; }
span.default-1432 a { text-decoration: underline; color: rgb(176, 48, 96); font-weight: 700; font-size: 164%; }
span.default-1431 { color: rgb(176, 48, 96); font-weight: 700; font-size: 164%; text-decoration: none; }
span.default-1431 a { color: rgb(176, 48, 96); font-weight: 700; font-size: 164%; text-decoration: underline; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.custom-button-0022 { border-width: 1px; border-style: outset; color: rgb(0, 0, 0); background: rgb(211, 211, 211); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.custom-button-0022 a { border-width: 1px; border-style: outset; color: rgb(0, 0, 0); background: rgb(211, 211, 211); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.bold-0248 { background: rgb(173, 255, 47); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.bold-0248 a { background: rgb(173, 255, 47); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.match-1438 { background: rgb(255, 255, 0); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.match-1438 a { background: rgb(255, 255, 0); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.underline-1413 { color: rgb(184, 134, 11); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; text-decoration: underline; font-size: 10pt; }
span.underline-1413 a { color: rgb(184, 134, 11); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; text-decoration: underline; font-size: 10pt; }
span.underline-0219 { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
span.underline-0219 a { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
span.underline-1412 { color: rgb(0, 205, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; text-decoration: underline; font-size: 10pt; }
span.underline-1412 a { color: rgb(0, 205, 0); font-weight: 700; font-family: outline-courier new; font-stretch: normal; font-style: normal; text-decoration: underline; font-size: 10pt; }
--></style><style type="text/css"><!--
body { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.default a { font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.comment-face-1419 { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.comment-face-1419 a { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.comment-delimiter-face-1418 { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.comment-delimiter-face-1418 a { color: rgb(178, 34, 34); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.string-face-1441 { color: rgb(188, 143, 143); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.string-face-1441 a { color: rgb(188, 143, 143); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.match-1438 { background: rgb(255, 255, 0); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: none; }
span.match-1438 a { background: rgb(255, 255, 0); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; text-decoration: underline; }
span.keyword-face-1440 { color: rgb(160, 32, 240); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: none; }
span.keyword-face-1440 a { color: rgb(160, 32, 240); font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; font-size: 10pt; text-decoration: underline; }
span.underline-1439 { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
span.underline-1439 a { text-decoration: underline; font-family: outline-courier new; font-stretch: normal; font-weight: 500; font-style: normal; color: rgb(0, 0, 0); font-size: 10pt; }
--></style>
</head>
<body style="background: #000000; color: #ff9900; padding:2em; margin:4em; margin-top:2em;">
<h1>Example of htmlfontify.el output</h1>
<p style="font-size: 1.3em; width: 35em;">
The following is an example of the output you can get with htmlfontify.el.
The version used here is shipped with <a href="nxhtml.html" style="color: #ffbb33; ">nXhtml</a>.
(A new version from the original author is on its way.)
</p>
<table border="0" cellpadding="0" cellspacing="0" style="border: solid rgb(0, 84, 227); width:44.800000000000004em; background:white;">
<tr>
<td style="background-color:rgb(0, 84, 227); color:rgb(255, 255, 255);border: none; padding:4px; vertical-align: middle;"><img alt="Emacs Icon (patched)" src="img/emacsP16.png" width="16" height="16" />&nbsp;&nbsp;Emacs - Frame Dump</td>
</tr>
<tr>
<td style="vertical-align:top;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td style="vertical-align:top;"><table border="0" cellpadding="0" cellspacing="0">
<tr><td style="vertical-align:top;"><div style="width:22.514999999999997em; height:15.079999999999998em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<pre><span class="comment-delimiter-face-1418">;; </span><span class="comment-face-1419">This buffer is for notes you don't want to save, and for Lisp evaluation.
</span><span class="comment-delimiter-face-1418">;; </span><span class="comment-face-1419">If you want to create a file, visit that file with C-x C-f,
</span><span class="comment-delimiter-face-1418">;; </span><span class="comment-face-1419">then enter the text in that file's own buffer.
</span>
</pre>
</div>
<div style="width:22.515em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)-- <b>*scratch*</b> (Lisp Interaction Abbrev hs) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
<td style="vertical-align:top;"><div style="width:23.084999999999997em; height:15.079999999999998em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre>cadr is a compiled Lisp function in `<span class="button-0004">subr.el</span>'.
(cadr <span class="help-argument-name-1420">x</span>)
Return the car of the cdr of <span class="help-argument-name-1420">x</span>.
<span class="button-0004">[back]</span>
</pre>
</div>
<div style="width:23.085em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)%% <b>*Help*</b> (Help View Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="vertical-align:top;"><table border="0" cellpadding="0" cellspacing="0">
<tr><td style="vertical-align:top;"><div style="width:22.514999999999997em; height:12.76em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre><span class="button-0004">comint-highlight-prompt</span> <span class="comint-highlight-prompt-1428">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">compilation-column-number</span> <span class="compilation-column-number-1429">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">compilation-error</span> <span class="compilation-error-1430">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">compilation-info</span> <span class="compilation-info-1433">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">compilation-line-number</span> <span class="compilation-line-number-1434">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">compilation-warning</span> <span class="compilation-warning-1435">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">completion-dynamic-face</span> <span class="completion-dynamic-face-1436">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span class="button-0004">completion-tooltip-face</span> <span class="completion-tooltip-face-1437">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
</pre>
<div style="margin-top:2em; color: red; text-align: center; "> Truncated to line 11 - 19! </div>
</div>
<div style="width:22.515em; color:rgb(0, 0, 0); background:rgb(191, 191, 191); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)%% <b>*Faces*</b> (Help View Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
<td style="vertical-align:top;"><div style="width:23.084999999999997em; height:12.76em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre><span class="default-0258">snow </span><span class="default-0259"> snow </span>#fffafa
<span class="default-0260">ghost white </span><span class="default-0261"> GhostWhite </span>#f8f8ff
<span class="default-0262">white smoke </span><span class="default-0263"> WhiteSmoke </span>#f5f5f5
<span class="default-0264">gainsboro </span><span class="default-0265"> gainsboro </span>#dcdcdc
<span class="default-0266">floral white </span><span class="default-0267"> FloralWhite </span>#fffaf0
<span class="default-0268">old lace </span><span class="default-0269"> OldLace </span>#fdf5e6
<span class="default-0270">linen </span><span class="default-0271"> linen </span>#faf0e6
<span class="default-0272">antique white </span><span class="default-0273"> AntiqueWhite </span>#faebd7
</pre>
<div style="margin-top:2em; color: red; text-align: center; "> Truncated to line 1 - 9! </div>
</div>
<div style="width:23.085em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)%% <b>*Colors*</b> (Help View Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="vertical-align:top;"><div style="width:47.025em; height:12.76em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre><span class="default-1431">________________________
</span><span class="default-1432">Program and Value Search</span>
When you use Emacs on MS Windows you sometimes want to fetch values
and program locations from MS Windows. Many of these values are
stored in the MS Windows Registry. Since Emacs is written to be used
on many platforms (with the emphasis on GPL platforms) the effort to
let Emacs read the Registry directly has not been made. Below you can
</pre>
<div style="margin-top:2em; color: red; text-align: center; "> Truncated to line 29 - 37! </div>
</div>
<div style="width:47.025em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)** <b>*Customize EmacsW32*</b> (Custom Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
</tr>
<tr>
<td style="vertical-align:top;"><div style="width:47.025em; height:12.76em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre> Add quick printing to File menu (htmlize-view-print-visible): <span class="bold-0248">t</span>
Keep default print entries in File menu (w32-print-menu-show-print): <span class="bold-0248">nil</span>
Keep default ps print entries in File menu (w32-print-menu-show-ps-print): <span class="bold-0248">nil</span>
Use keyboard Window keys as Emacs META (w32-meta-style): <span class="bold-0248">w32-lr</span>
Underlined accelerators in menu bar (menuacc-active): <span class="bold-0248">t</span>
Inferior shell + path for unix style programs (w32shell-shell): <span class="bold-0248">cmd</span>
<span class="custom-button-0022"> Set all to w32 style! </span> <span class="custom-button-0022"> Reset all to default! </span> <span class="custom-button-0022"> Customize EmacsW32 ... </span>
</pre>
<div style="margin-top:2em; color: red; text-align: center; "> Truncated to line 13 - 21! </div>
</div>
<div style="width:47.025em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)** <b>*Customize EmacsW32*</b> (Custom Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
</tr>
<tr>
<td style="vertical-align:top;"><table border="0" cellpadding="0" cellspacing="0">
<tr><td style="vertical-align:top;"><div style="width:22.514999999999997em; height:12.76em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre>-*- mode: grep; default-directory: &quot;c:/emacs/p/070604/EmacsW32/nxml/util/&quot; -*-
Grep started at Fri Dec 28 22:54:06
grep -i -nH -e &quot;hfy-tmpfont-stack&quot; *.el
<span class="underline-1412">htmlfontify.el</span><span class="underline-0219">:</span><span class="underline-1413">596</span><span class="underline-0219">:</span>(defvar <span class="match-1438">hfy-tmpfont-stack</span> nil
<span class="underline-1412">htmlfontify.el</span><span class="underline-0219">:</span><span class="underline-1413">999</span><span class="underline-0219">:</span> (entry (assoc key <span class="match-1438">hfy-tmpfont-stack</span>))
<span class="underline-1412">htmlfontify.el</span><span class="underline-0219">:</span><span class="underline-1413">1003</span><span class="underline-0219">:</span> (setq tag (format &quot;%04d&quot; (length <span class="match-1438">hfy-tmpfont-stack</span>))
<span class="underline-1412">htmlfontify.el</span><span class="underline-0219">:</span><span class="underline-1413">1005</span><span class="underline-0219">:</span> <span class="match-1438">hfy-tmpfont-stack</span> (cons entry <span class="match-1438">hfy-tmpfont-stack</span>)))
</pre>
<div style="margin-top:2em; color: red; text-align: center; "> Truncated to line 1 - 9! </div>
</div>
<div style="width:22.515em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)%% <b>*grep*</b> (Grep Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
<td style="vertical-align:top;"><div style="width:23.084999999999997em; height:12.76em; border: 1px solid rgb(212, 208, 200); overflow:auto; padding:4px;">
<script type="text/javascript">
// <![CDATA[
function getObj(name) {
if (document.getElementById) {
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
}
function hfy_toggle_display(name) {
var x = new getObj("hfy_invis_" + name);
var flag = x.style.display == 'inline';
x.style.display = (flag) ? 'none' : 'inline'
}
// ]]>
</script>
<pre><span class="underline-1439">5 matches for &quot;hfy-tmpfont-stack&quot; in buffer: htmlfontify.el
</span> 596:(<span class="keyword-face-1440">defvar</span> <span class="match-1438">hfy-tmpfont-stack</span> nil
999: (entry (assoc key <span class="match-1438">hfy-tmpfont-stack</span>))
1003: (setq tag (format <span class="string-face-1441">&quot;%04d&quot;</span> (length <span class="match-1438">hfy-tmpfont-stack</span>))
1005: <span class="match-1438">hfy-tmpfont-stack</span> (cons entry <span class="match-1438">hfy-tmpfont-stack</span>)))
1228: <span class="comment-delimiter-face-1418">;;</span><span class="comment-face-1419">(</span><span class="match-1438">hfy-tmpfont-stack</span><span class="comment-face-1419"> nil)</span>
</pre>
</div>
<div style="width:23.085em; color:rgb(51, 51, 51); background:rgb(229, 229, 229); white-space:pre; overflow:hidden; font-family:monospace;">-- (Unix)%% <b>*Occur*</b> (Occur Abbrev) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding:1px; color:rgb(0,0,0); ">
<span style="background:rgb(255, 215, 0); color:rgb(0,0,0); ">&nbsp;M-x </span>&nbsp;hfyview-frame</td>
</tr>
</table>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,238 +0,0 @@
#myGallery
{
width: 460px;
height: 345px;
z-index:5;
display: none;
border: 1px solid #000;
}
.jdGallery
{
overflow: hidden;
position: relative;
}
.jdGallery img
{
border: 0;
margin: 0;
}
.jdGallery .slideElement
{
width: 100%;
height: 100%;
background-color: #000;
background-repeat: no-repeat;
}
.jdGallery .loadingElement
{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
background-color: #000;
background-repeat: no-repeat;
background-position: center center;
background-image: url('img/loading-bar-black.gif');
}
.jdGallery .slideInfoZone
{
position: absolute;
z-index: 10;
width: 100%;
margin: 0px;
left: 0;
bottom: 0;
height: 40px;
background: #333;
color: #fff;
text-indent: 0;
overflow: hidden;
}
* html .jdGallery .slideInfoZone
{
bottom: -1px;
}
.jdGallery .slideInfoZone h2
{
padding: 0;
font-size: 80%;
margin: 0;
margin: 2px 5px;
font-weight: bold;
color: inherit;
}
.jdGallery .slideInfoZone p
{
padding: 0;
font-size: 80%;
margin: 2px 5px;
color: #eee;
}
.jdGallery div.carouselContainer
{
position: absolute;
height: 135px;
width: 100%;
z-index: 10;
margin: 0px;
left: 0;
top: 0;
}
.jdGallery a.carouselBtn
{
position: absolute;
bottom: 0;
right: 30px;
height: 20px;
/*width: 100px; background: url('img/carousel_btn.gif') no-repeat;*/
text-align: center;
padding: 0 10px;
font-size: 13px;
background: #333;
color: #fff;
cursor: pointer;
}
.jdGallery .carousel
{
position: absolute;
width: 100%;
margin: 0px;
left: 0;
top: 0;
height: 115px;
background: #333;
color: #fff;
text-indent: 0;
overflow: hidden;
}
.jdGallery .carousel .carouselWrapper
{
position: absolute;
width: 100%;
height: 78px;
top: 10px;
left: 0;
overflow: hidden;
}
.jdGallery .carousel .carouselInner
{
position: relative;
}
.jdGallery .carousel .carouselInner .thumbnail
{
cursor: pointer;
background: #000;
background-position: center center;
float: left;
border: solid 1px #fff;
}
.jdGallery .carousel .label
{
font-size: 13px;
position: absolute;
bottom: 5px;
left: 10px;
padding: 0;
margin: 0;
}
.jdGallery .carousel .label .number
{
color: #b5b5b5;
}
.jdGallery a
{
font-size: 100%;
text-decoration: none;
color: inherit;
}
.jdGallery a.right, .jdGallery a.left
{
position: absolute;
height: 99%;
width: 25%;
cursor: pointer;
z-index:10;
filter:alpha(opacity=20);
-moz-opacity:0.2;
-khtml-opacity: 0.2;
opacity: 0.2;
}
* html .jdGallery a.right, * html .jdGallery a.left
{
filter:alpha(opacity=50);
}
.jdGallery a.right:hover, .jdGallery a.left:hover
{
filter:alpha(opacity=80);
-moz-opacity:0.8;
-khtml-opacity: 0.8;
opacity: 0.8;
}
.jdGallery a.left
{
left: 0;
top: 0;
background: url('img/fleche1.png') no-repeat center left;
}
* html .jdGallery a.left { background: url('img/fleche1.gif') no-repeat center left; }
.jdGallery a.right
{
right: 0;
top: 0;
background: url('img/fleche2.png') no-repeat center right;
}
* html .jdGallery a.right { background: url('img/fleche2.gif') no-repeat center right; }
.jdGallery a.open
{
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.withArrows a.open
{
position: absolute;
top: 0;
left: 25%;
height: 99%;
width: 50%;
cursor: pointer;
z-index: 10;
background: none;
-moz-opacity:0.8;
-khtml-opacity: 0.8;
opacity: 0.8;
}
.withArrows a.open:hover { background: url('img/open.png') no-repeat center center; }
* html .withArrows a.open:hover { background: url('img/open.gif') no-repeat center center;
filter:alpha(opacity=80); }

View file

@ -1,91 +0,0 @@
body {
color: #ccc;
font-family: "Trebuchet MS", "Lucida Grande", Arial, Helvetica, sans-serif;
margin: 0 auto;
padding: 0;
font-size: 1.0em;
background: #111 url('../images/bg/gradient1.gif') top left repeat-x;
}
h1
{
color: #fff;
font-size: 47px;
font-weight: bolder;
margin: 0 40px;
padding: 0.08em 0;
}
h1 sup
{
color: #ddd;
}
h1 a
{
color: #fff;
text-decoration: none;
}
h1 .company, h1 a .company
{
color: #d01a71;
}
h2
{
color: #ddd;
font-size: 2.5em;
}
h3
{
color: #fff;
font-size: 1.5em;
}
h4
{
font-size: 1.3em;
}
.content
{
margin: 0 20px;
}
.content a
{
color: #fff;
}
.content p.linkage
{
margin-top: 2em;
text-align: right;
font-size: 1.7em;
color: #ddd;
}
.content p.linkage a { color: #fff; }
/*.content p.linkage a
{
color: #fff;
background: url('../images/bg/biglink_off.gif') center right no-repeat;
padding: 10px 20px;
text-decoration: none;
}
.content p.linkage a:hover
{
background: url('../images/bg/biglink_on.gif') center right no-repeat;
font-style: italic;
}*/
#myGallery
{
text-align: left;
margin: 0 auto;
}

Some files were not shown because too many files have changed in this diff Show more