I don't like nxhtml
|
@ -1,7 +1,7 @@
|
|||
(require 'naquadah-theme)
|
||||
(require 'autopair)
|
||||
|
||||
(load "autostart.el")
|
||||
;(load "autostart.el")
|
||||
|
||||
(autoload 'vala-mode
|
||||
"vala-mode" "A Major mode for editing Vala files" t)
|
||||
|
|
|
@ -1,5 +1,40 @@
|
|||
;;; 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
|
||||
;; 2008 Aaron S. Hawley
|
||||
|
||||
|
@ -7,10 +42,10 @@
|
|||
;; Author: Turadg Aleahmad, 1999-2004
|
||||
;; Keywords: php languages oop
|
||||
;; Created: 1999-05-17
|
||||
;; Modified: 2008-11-28 Fri
|
||||
;; Modified: 2008-01-25T22:25:26+0100 Fri
|
||||
;; 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.")
|
||||
|
||||
;;; License
|
||||
|
@ -58,6 +93,7 @@
|
|||
;; handy IDE-type features such as documentation search and a source
|
||||
;; and class browser.
|
||||
|
||||
|
||||
;;; Contributors: (in chronological order)
|
||||
|
||||
;; Juanjo, Torsten Martinsen, Vinai Kopp, Sean Champ, Doug Marcey,
|
||||
|
@ -66,36 +102,19 @@
|
|||
;; Sammartino, ppercot, Valentin Funk, Stig Bakken, Gregory Stark,
|
||||
;; Chris Morris, Nils Rennebarth, Gerrit Riessen, Eric Mc Sween,
|
||||
;; 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:
|
||||
|
||||
;; 1.5.0-nxhtml-1.88 (Lennart Borgman)
|
||||
;; Don't indent heredoc end mark
|
||||
;; 1.5.0-nxhtml-1.61 (Lennart Borgman)
|
||||
;; Added php-mode-to-use.
|
||||
;; 1.4.1a-nxhtml
|
||||
;; 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
|
||||
;; Support function keywords like public, private and the ampersand
|
||||
;; character for function-based commands. Support abstract, final,
|
||||
;; static, public, private and protected keywords in Imenu. Fix
|
||||
;; reversed order of Imenu entries. Use font-lock-preprocessor-face
|
||||
;; for PHP and ASP tags. Make php-mode-modified a literal value
|
||||
;; 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-nxhtml
|
||||
;; Added php-mode-to-use.
|
||||
|
||||
;; 1.4.1
|
||||
;; Modified `php-check-html-for-indentation' to check for multiple
|
||||
;; mode support libraries. (Lennart Borgman)
|
||||
;;
|
||||
;; 1.4
|
||||
;; Updated GNU GPL to version 3. Ported to Emacs 22 (CC mode
|
||||
|
@ -109,23 +128,36 @@
|
|||
;; Monnier to correct highlighting and indentation. (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:
|
||||
|
||||
(require 'add-log)
|
||||
(require 'speedbar)
|
||||
(require 'font-lock)
|
||||
(require 'cc-mode)
|
||||
(require 'cc-langs)
|
||||
(require 'custom)
|
||||
(require 'etags)
|
||||
(eval-when-compile
|
||||
(require 'regexp-opt))
|
||||
|
||||
|
||||
;; Local variables
|
||||
;;;###autoload
|
||||
(defgroup php nil
|
||||
"Major mode `php-mode' for editing PHP code."
|
||||
:prefix "php-"
|
||||
|
@ -137,7 +169,7 @@
|
|||
:group 'php)
|
||||
|
||||
(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]?\\)\""
|
||||
:type 'boolean
|
||||
:set (lambda (sym val)
|
||||
|
@ -148,7 +180,7 @@ Ignores php-file patterns option; fixed to expression \"\\.\\(inc\\|php[s34]?\\)
|
|||
:group 'php)
|
||||
|
||||
(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."
|
||||
:type 'boolean
|
||||
:set (lambda (sym val)
|
||||
|
@ -157,53 +189,51 @@ Turning this on will open it whenever `php-mode' is loaded."
|
|||
(speedbar 1)))
|
||||
: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/"
|
||||
"URL at which to find PHP manual.
|
||||
"URL at which to find PHP manual.\
|
||||
You can replace \"en\" with your ISO language code."
|
||||
:type 'string
|
||||
:group 'php)
|
||||
|
||||
(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
|
||||
:group 'php)
|
||||
|
||||
(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
|
||||
:group 'php)
|
||||
|
||||
(defcustom php-manual-path ""
|
||||
"Path to the directory which contains the PHP manual."
|
||||
"Path to the directory which contains the PHP manual"
|
||||
:type 'string
|
||||
: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
|
||||
(defcustom php-file-patterns '("\\.php[s34]?\\'" "\\.phtml\\'" "\\.inc\\'")
|
||||
"List of file patterns for which to automatically invoke `php-mode'."
|
||||
:type '(repeat (regexp :tag "Pattern"))
|
||||
:set-after '(php-mode-to-use)
|
||||
:set (lambda (sym val)
|
||||
(set-default sym val)
|
||||
(let ((php-file-patterns-temp val))
|
||||
(while php-file-patterns-temp
|
||||
(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)))))
|
||||
:group 'php)
|
||||
|
||||
|
@ -218,22 +248,56 @@ You can replace \"en\" with your ISO language code."
|
|||
:group 'php)
|
||||
|
||||
(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."
|
||||
:type 'boolean
|
||||
:group 'php)
|
||||
|
||||
(defconst php-mode-modified "2009-08-12"
|
||||
"PHP Mode build date.")
|
||||
|
||||
(defcustom php-mode-dollar-property-warning nil
|
||||
"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 ()
|
||||
"Display string describing the version of PHP mode."
|
||||
"Display string describing the version of PHP mode"
|
||||
(interactive)
|
||||
(message "PHP mode %s of %s"
|
||||
php-mode-version-number php-mode-modified))
|
||||
|
||||
(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.")
|
||||
|
||||
(defun php-beginning-of-defun (&optional arg)
|
||||
|
@ -264,23 +328,20 @@ See `php-beginning-of-defun'."
|
|||
(interactive "p")
|
||||
(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)
|
||||
;;(make-variable-buffer-local 'php-warned-bad-indent)
|
||||
|
||||
;; Do it but tell it is not good if html tags in buffer.
|
||||
(defun php-check-html-for-indentation ()
|
||||
(let ((html-tag-re "^\\s-*</?\\sw+.*?>")
|
||||
(let ((html-tag-re "</?\\sw+.*?>")
|
||||
(here (point)))
|
||||
(goto-char (line-beginning-position))
|
||||
(if (or (when (boundp 'mumamo-multi-major-mode) mumamo-multi-major-mode)
|
||||
;; Fix-me: no idea how to check for mmm or multi-mode
|
||||
(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)
|
||||
(if (not (or (re-search-forward html-tag-re (+ (point) 1000) t)
|
||||
(re-search-backward html-tag-re (- (point) 1000) t)))
|
||||
t
|
||||
(goto-char here)
|
||||
(setq php-warned-bad-indent t)
|
||||
;;(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))
|
||||
(base-msg
|
||||
(concat
|
||||
"Indentation fails badly with mixed HTML/PHP in the HTML part in
|
||||
plaín `php-mode'. To get indentation to work you must use an
|
||||
Emacs library that supports 'multiple major modes' in a buffer.
|
||||
Parts of the buffer will then be in `php-mode' and parts in for
|
||||
example `html-mode'. Known such libraries are:\n\t"
|
||||
"Indentation fails badly with mixed HTML/PHP in plaín\n"
|
||||
"`php-mode'. To get indentation to work you must use an Emacs\n"
|
||||
"library that supports 'multiple major modes' in a buffer. Parts\n"
|
||||
"of the buffer will then be in `php-mode' and parts in for example\n"
|
||||
"`html-mode'. Known such libraries are:\n\t"
|
||||
(mapconcat 'identity known-names ", ")
|
||||
"\n"
|
||||
(if available-multi-libs
|
||||
|
@ -341,104 +402,29 @@ example `html-mode'. Known such libraries are:\n\t"
|
|||
nil))))
|
||||
|
||||
(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))
|
||||
(funcall 'c-indent-region start end quiet)))
|
||||
|
||||
(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))
|
||||
(let ((here (point))
|
||||
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'."
|
||||
)
|
||||
(funcall 'c-indent-line)))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode php-mode c-mode "PHP"
|
||||
"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.
|
||||
;; HACK: Overwrite this syntax with rules to match <?php and others.
|
||||
;; (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))
|
||||
;; (c-lang-defconst c-block-stmt-1-kwds
|
||||
;; php php-block-stmt-1-kwds)
|
||||
(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-defvar c-block-stmt-2-kwds (c-lang-const c-block-stmt-2-kwds))
|
||||
;; (c-lang-defconst 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)
|
||||
|
||||
;; Specify that cc-mode recognize Javadoc comment style
|
||||
(set (make-local-variable 'c-doc-comment-style)
|
||||
'((php-mode . javadoc)))
|
||||
|
@ -447,6 +433,20 @@ This is was done due to the problem reported here:
|
|||
;; php php-class-decl-kwds)
|
||||
(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)
|
||||
(setq font-lock-defaults
|
||||
'((php-font-lock-keywords-1
|
||||
|
@ -455,11 +455,11 @@ This is was done due to the problem reported here:
|
|||
;; extreme/ugly for you.
|
||||
php-font-lock-keywords-3)
|
||||
nil ; KEYWORDS-ONLY
|
||||
t ; CASE-FOLD
|
||||
(("_" . "w")) ; SYNTAX-ALIST
|
||||
nil ; CASE-FOLD
|
||||
nil ; SYNTAX-ALIST
|
||||
nil)) ; SYNTAX-BEGIN
|
||||
(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
|
||||
;; 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-region-function 'php-cautious-indent-region)
|
||||
(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)
|
||||
'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)
|
||||
nil)
|
||||
(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)
|
||||
php-beginning-of-defun-regexp)
|
||||
|
||||
(run-hooks 'php-mode-hook))
|
||||
|
||||
|
||||
;; Make a menu keymap (with a prompt string)
|
||||
;; and make it the menu bar item's definition.
|
||||
(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
|
||||
[menu-bar php search-documentation]
|
||||
'("Search documentation" . php-search-documentation))
|
||||
|
||||
|
||||
;; 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 ()
|
||||
"Perform function completion on the text around point.
|
||||
Completes to the set of names listed in the current tags table
|
||||
|
@ -546,29 +541,27 @@ for \\[find-tag] (which see)."
|
|||
completion
|
||||
(php-functions (php-completion-table)))
|
||||
(if (not pattern) (message "Nothing to complete")
|
||||
(if (not (search-backward pattern nil t))
|
||||
(message "Can't complete here")
|
||||
(setq beg (point))
|
||||
(forward-char (length pattern))
|
||||
(setq completion (try-completion pattern php-functions nil))
|
||||
(cond ((eq completion t))
|
||||
((null completion)
|
||||
(message "Can't find completion for \"%s\"" pattern)
|
||||
(ding))
|
||||
((not (string= pattern completion))
|
||||
(delete-region beg (point))
|
||||
(insert completion))
|
||||
(t
|
||||
(message "Making completion list...")
|
||||
(with-output-to-temp-buffer "*Completions*"
|
||||
(display-completion-list
|
||||
(all-completions pattern php-functions)))
|
||||
(message "Making completion list...%s" "done")))))))
|
||||
(search-backward pattern)
|
||||
(setq beg (point))
|
||||
(forward-char (length pattern))
|
||||
(setq completion (try-completion pattern php-functions nil))
|
||||
(cond ((eq completion t))
|
||||
((null completion)
|
||||
(message "Can't find completion for \"%s\"" pattern)
|
||||
(ding))
|
||||
((not (string= pattern completion))
|
||||
(delete-region beg (point))
|
||||
(insert completion))
|
||||
(t
|
||||
(message "Making completion list...")
|
||||
(with-output-to-temp-buffer "*Completions*"
|
||||
(display-completion-list
|
||||
(all-completions pattern php-functions)))
|
||||
(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 ()
|
||||
"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
|
||||
(save-excursion (tags-verify-table tags-file-name))
|
||||
php-completion-table)
|
||||
|
@ -645,26 +638,25 @@ current `tags-file-name'."
|
|||
(point))))
|
||||
nil)))
|
||||
|
||||
|
||||
(defun php-show-arglist ()
|
||||
(interactive)
|
||||
(let* ((tagname (php-get-pattern))
|
||||
(buf (find-tag-noselect tagname nil nil))
|
||||
arglist)
|
||||
(let* ((tagname (php-get-pattern)) arglist)
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(set-buffer (find-tag-noselect tagname nil nil))
|
||||
(goto-char (point-min))
|
||||
(when (re-search-forward
|
||||
(format "function\\s-+%s\\s-*(\\([^{]*\\))" tagname)
|
||||
(format "function[ \t]+%s[ \t]*(\\([^{]*\\))" tagname)
|
||||
nil t)
|
||||
(setq arglist (buffer-substring-no-properties
|
||||
(match-beginning 1) (match-end 1)))))
|
||||
(if arglist
|
||||
(message "Arglist for %s: %s" tagname arglist)
|
||||
(message "Unknown function: %s" tagname))))
|
||||
|
||||
(message "Unknown function: %s" tagname))))
|
||||
|
||||
;; Define function documentation function
|
||||
(defun php-search-documentation ()
|
||||
"Search PHP documentation for the word at point."
|
||||
"Search PHP documentation for the word at the point."
|
||||
(interactive)
|
||||
(browse-url (concat php-search-url (current-word t))))
|
||||
|
||||
|
@ -693,13 +685,7 @@ current `tags-file-name'."
|
|||
(define-key php-mode-map
|
||||
'[(control .)]
|
||||
'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
|
||||
(eval-when-compile
|
||||
(regexp-opt
|
||||
|
@ -715,12 +701,6 @@ current `tags-file-name'."
|
|||
"PHP_LOCALSTATEDIR" "PHP_CONFIG_FILE_PATH"
|
||||
"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:
|
||||
"EXTR_OVERWRITE" "EXTR_SKIP" "EXTR_PREFIX_SAME"
|
||||
"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_"
|
||||
; "MCRYPT_ENCRYPT" "MCRYPT_DECRYPT" "MCRYPT_DEV_RANDOM"
|
||||
; "MCRYPT_DEV_URANDOM" "MCRYPT_RAND" "SWFBUTTON_HIT"
|
||||
; "SUNFUNCS_RET_STRING" "SUNFUNCS_RET_DOUBLE"
|
||||
; "SWFBUTTON_DOWN" "SWFBUTTON_OVER" "SWFBUTTON_UP"
|
||||
; "SWFBUTTON_MOUSEUPOUTSIDE" "SWFBUTTON_DRAGOVER"
|
||||
; "SWFBUTTON_DRAGOUT" "SWFBUTTON_MOUSEUP" "SWFBUTTON_MOUSEDOWN"
|
||||
|
@ -1073,7 +1052,7 @@ current `tags-file-name'."
|
|||
"endfor" "endforeach" "endif" "endswitch" "endwhile" "exit"
|
||||
"extends" "for" "foreach" "global" "if" "include" "include_once"
|
||||
"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")))
|
||||
"PHP keywords.")
|
||||
|
||||
|
@ -1100,19 +1079,19 @@ current `tags-file-name'."
|
|||
(list
|
||||
;; Fontify constants
|
||||
(cons
|
||||
(concat "[^_$]?\\<\\(" php-constants "\\)\\>[^_]?")
|
||||
'(1 font-lock-constant-face))
|
||||
(concat "\\<\\(" php-constants "\\)\\>")
|
||||
'font-lock-constant-face)
|
||||
|
||||
;; Fontify keywords
|
||||
(cons
|
||||
(concat "[^_$]?\\<\\(" php-keywords "\\)\\>[^_]?")
|
||||
'(1 font-lock-keyword-face))
|
||||
(concat "\\<\\(" php-keywords "\\)\\>")
|
||||
'font-lock-keyword-face)
|
||||
|
||||
;; 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))
|
||||
;; 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)
|
||||
(1 font-lock-constant-face)))
|
||||
|
||||
|
@ -1121,11 +1100,12 @@ current `tags-file-name'."
|
|||
'("\\<print\\>" . font-lock-keyword-face)
|
||||
|
||||
;; Fontify PHP tag
|
||||
(cons php-tags-key font-lock-preprocessor-face)
|
||||
'("<\\?\\(php\\)?" . font-lock-constant-face)
|
||||
'("\\?>" . font-lock-constant-face)
|
||||
|
||||
;; Fontify ASP-style tag
|
||||
'("<\\%\\(=\\)?" . font-lock-preprocessor-face)
|
||||
'("\\%>" . font-lock-preprocessor-face)
|
||||
'("<\\%\\(=\\)?" . font-lock-constant-face)
|
||||
'("\\%>" . font-lock-constant-face)
|
||||
|
||||
)
|
||||
"Subdued level highlighting for PHP mode.")
|
||||
|
@ -1136,33 +1116,33 @@ current `tags-file-name'."
|
|||
(list
|
||||
|
||||
;; class declaration
|
||||
'("\\<\\(class\\|interface\\)\\s-+\\(\\sw+\\)?"
|
||||
'("[^_]*\\<\\(class\\|interface\\)[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
|
||||
(1 font-lock-keyword-face) (2 font-lock-type-face nil t))
|
||||
;; handle several words specially, to include following word,
|
||||
;; thereby excluding it from unknown-symbol checks later
|
||||
;; FIX to handle implementing multiple
|
||||
;; 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))
|
||||
|
||||
;; function declaration
|
||||
'("\\<\\(function\\)\\s-+&?\\(\\sw+\\)\\s-*("
|
||||
'("\\<\\(function\\)\\s-+&?\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*("
|
||||
(1 font-lock-keyword-face)
|
||||
(2 font-lock-function-name-face nil t))
|
||||
|
||||
;; 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
|
||||
'("\\<\\(private\\|protected\\|public\\)\\s-+\\$?\\sw+"
|
||||
'("\\<\\(private\\|protected\\|public\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
|
||||
(1 font-lock-keyword-face))
|
||||
|
||||
;; method features
|
||||
'("^\\s-*\\(abstract\\|static\\|final\\)\\s-+\\$?\\sw+"
|
||||
'("^[ \t]*\\(abstract\\|static\\|final\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
|
||||
(1 font-lock-keyword-face))
|
||||
|
||||
;; variable features
|
||||
'("^\\s-*\\(static\\|const\\)\\s-+\\$?\\sw+"
|
||||
'("^[ \t]*\\(static\\|const\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
|
||||
(1 font-lock-keyword-face))
|
||||
))
|
||||
"Medium level highlighting for PHP mode.")
|
||||
|
@ -1170,62 +1150,114 @@ current `tags-file-name'."
|
|||
(defconst php-font-lock-keywords-3
|
||||
(append
|
||||
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
|
||||
;;'("</?\\sw+[^> ]*>" . font-lock-constant-face)
|
||||
;;'("</?\\sw+[^>]*" . font-lock-constant-face)
|
||||
;;'("<!DOCTYPE" . font-lock-constant-face)
|
||||
'("</?[a-z!:]+" . font-lock-constant-face)
|
||||
;; HTML >
|
||||
("<[^>]*\\(>\\)" (1 font-lock-constant-face))
|
||||
|
||||
;; HTML >
|
||||
'("<[^>]*\\(>\\)" (1 font-lock-constant-face))
|
||||
;; HTML tags
|
||||
("\\(<[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
|
||||
'("\\(<[a-z]+\\)[[:space:]]+\\([a-z:]+=\\)[^>]*?" (1 font-lock-constant-face) (2 font-lock-constant-face) )
|
||||
'("\"[[:space:]]+\\([a-z:]+=\\)" (1 font-lock-constant-face))
|
||||
;; HTML entities
|
||||
;;'("&\\w+;" . font-lock-variable-name-face)
|
||||
|
||||
;; HTML entities
|
||||
;;'("&\\w+;" . font-lock-variable-name-face)
|
||||
;; warn about '$' immediately after ->
|
||||
,@(if php-mode-dollar-property-warning
|
||||
'("\\$\\(?:\\sw\\|\\s_\\)+->\\s-*\\(\\$\\)\\(\\(?:\\sw\\|\\s_\\)+\\)"
|
||||
(1 font-lock-warning-face) (2 php-default-face)))
|
||||
|
||||
;; warn about '$' immediately after ->
|
||||
'("\\$\\sw+->\\s-*\\(\\$\\)\\(\\sw+\\)"
|
||||
(1 font-lock-warning-face) (2 php-default-face))
|
||||
;; warn about $word.word -- it could be a valid concatenation,
|
||||
;; but without any spaces we'll assume $word->word was meant.
|
||||
,@(if php-mode-dot-property-warning
|
||||
'("\\$\\(?:\\sw\\|\\s_\\)+\\(\\.\\)\\sw" 1 font-lock-warning-face))
|
||||
|
||||
;; warn about $word.word -- it could be a valid concatenation,
|
||||
;; but without any spaces we'll assume $word->word was meant.
|
||||
'("\\$\\sw+\\(\\.\\)\\sw"
|
||||
1 font-lock-warning-face)
|
||||
;; Warn about ==> instead of =>
|
||||
("==+>" . font-lock-warning-face)
|
||||
|
||||
;; Warn about ==> instead of =>
|
||||
'("==+>" . font-lock-warning-face)
|
||||
;; exclude casts from bare-word treatment (may contain spaces)
|
||||
(,(concat "(\\s-*\\(" php-types "\\)\\s-*)") 1 font-lock-type-face)
|
||||
|
||||
;; exclude casts from bare-word treatment (may contain spaces)
|
||||
`(,(concat "(\\s-*\\(" php-types "\\)\\s-*)")
|
||||
;; PHP5: function declarations may contain classes as parameters type
|
||||
(,(concat
|
||||
"[(,]\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-+&?\\$\\(?:\\sw\\|\\s_\\)+\\>")
|
||||
1 font-lock-type-face)
|
||||
|
||||
;; PHP5: function declarations may contain classes as parameters type
|
||||
`(,(concat "[(,]\\s-*\\(\\sw+\\)\\s-+&?\\$\\sw+\\>")
|
||||
1 font-lock-type-face)
|
||||
;; Fontify variables and function calls
|
||||
("\\$\\(this\\|that\\)\\W" (1 font-lock-constant-face nil nil))
|
||||
(,(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
|
||||
'("\\$\\(this\\|that\\)\\W" (1 font-lock-constant-face nil nil))
|
||||
`(,(concat "\\$\\(" php-superglobals "\\)\\W")
|
||||
(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
|
||||
,@(if php-mode-warn-on-unmatched
|
||||
'("\\<\\(?:\\sw\\|\\s_\\)+\\>" . font-lock-warning-face))
|
||||
|
||||
;; Warn on any words not already fontified
|
||||
'("\\<\\sw+\\>" . font-lock-warning-face)
|
||||
|
||||
))
|
||||
)
|
||||
)
|
||||
"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)
|
||||
|
||||
;;; php-mode.el ends here
|
|
@ -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>
|
||||
> <a href="http://sourceforge.net/softwaremap/">Find Software</a>
|
||||
> <a href="http://sourceforge.net/projects/php-mode/">php-mode</a>
|
||||
> SCM Repositories
|
||||
|
||||
|
||||
|
||||
> 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&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> <a href="/viewvc/php-mode/branches/?view=log" title="View directory revision log"><strong>3</strong></a></td>
|
||||
|
||||
<td> 7 years</td>
|
||||
<td> turadg</td>
|
||||
|
||||
|
||||
<td> 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> <a href="/viewvc/php-mode/tags/?view=log" title="View directory revision log"><strong>94</strong></a></td>
|
||||
|
||||
<td> 2 years</td>
|
||||
<td> ashawley</td>
|
||||
|
||||
|
||||
<td> 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> <a href="/viewvc/php-mode/trunk/?view=log" title="View directory revision log"><strong>97</strong></a></td>
|
||||
|
||||
<td> 2 years</td>
|
||||
<td> ashawley</td>
|
||||
|
||||
|
||||
<td> Require add-log to avoid byte compilation warning
|
||||
for add-log-current-defun-head…</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 © 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>
|
||||
|
||||
|
|
@ -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/
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -1 +0,0 @@
|
|||
c:\emacs\emacs-22.3\bin\emacs.exe -Q --debug-init -l autostart.el
|
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB |
|
@ -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 }
|
||||
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
|
||||
<typeId id="XHTML" uri="qtmstr-xhtml.rnc" />
|
||||
</locatingRules>
|
|
@ -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*
|
|
@ -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
|
|
@ -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)
|
|
@ -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 }?
|
||||
|
||||
|
|
@ -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
|
|
@ -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 }?
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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.
|
||||
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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" /> 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: "c:/emacs/p/070604/EmacsW32/nxml/util/" -*-
|
||||
Grep started at Fri Dec 28 22:54:06
|
||||
|
||||
grep -i -nH -e "hfy-tmpfont-stack" *.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 "%04d" (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 "hfy-tmpfont-stack" 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">"%04d"</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); "> M-x </span> hfyview-frame</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 694 B |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 241 B |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 974 B |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 489 B |
Before Width: | Height: | Size: 1.2 KiB |
|
@ -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); }
|
||||
|
|
@ -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;
|
||||
}
|