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