commit/cc-mode: acm: Fix C++ fontification problems 500 bytes after
typing a space, and other bugs
7 years, 8 months
Bitbucket
1 new commit in cc-mode:
https://bitbucket.org/xemacs/cc-mode/commits/715fefb0bc0a/
Changeset: 715fefb0bc0a
User: acm
Date: 2017-03-30 19:45:48+00:00
Summary: Fix C++ fontification problems 500 bytes after typing a space, and other bugs
Also implement the "asymmetric space" rule for fontifying otherwise ambiguous
declarations/expressions.
* cc-engine.el (c-before-change-check-<>-operators): Don't set c-new-BEG or
c-new-END when there is no need.
(c-forward-decl-or-cast-1): Add "CASE 17.5" to implement the "asymmetric
space" rule.
* cc-fonts.el (c-get-fontification-context): New function, extracted from
c-font-lock-declarations. Add to this function processing to make `context'
'decl for lines contained within parens when these are also declarations.
(c-font-lock-declarations): Call the newly extracted function above in place
of inline code.
* cc-mode.el (c-fl-decl-start): Set point before calling c-literal-start.
* cc-vars.el (c-asymmetry-fontification-flag): New user option.
* cc-mode.texi (Misc Font Locking): New node documenting the new "asymmetric
fontification" rule, including the variable c-asymmetric-fontification-flag.
Affected #: 5 files
diff -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 -r 715fefb0bc0a5083da72adb687f97289371cb017 cc-engine.el
--- a/cc-engine.el
+++ b/cc-engine.el
@@ -6252,9 +6252,9 @@
(eq (char-before) ?<))
(c-backward-token-2)
(when (eq (char-after) ?<)
- (c-clear-<-pair-props-if-match-after beg)))
+ (c-clear-<-pair-props-if-match-after beg)
+ (setq new-beg (point))))
(c-forward-syntactic-ws)
- (setq new-beg (point))
;; ...Then the ones with < before end and > after end.
(goto-char (if end-lit-limits (cdr end-lit-limits) end))
@@ -6263,9 +6263,9 @@
(eq (char-before) ?>))
(c-end-of-current-token)
(when (eq (char-before) ?>)
- (c-clear->-pair-props-if-match-before end (1- (point)))))
+ (c-clear->-pair-props-if-match-before end (1- (point)))
+ (setq new-end (point))))
(c-backward-syntactic-ws)
- (setq new-end (point))
;; Extend the fontification region, if needed.
(and new-beg
@@ -8863,7 +8863,29 @@
;; it as a declaration if "a" has been used as a type
;; somewhere else (if it's a known type we won't get here).
(setq maybe-expression t)
- (throw 'at-decl-or-cast t)))
+ (throw 'at-decl-or-cast t))
+
+ ;; CASE 17.5
+ (when (and c-asymmetry-fontification-flag
+ got-prefix-before-parens
+ at-type
+ (or (not got-suffix)
+ at-decl-start))
+ (let ((space-before-id
+ (save-excursion
+ (goto-char name-start)
+ (or (bolp) (memq (char-before) '(?\ ?\t)))))
+ (space-after-type
+ (save-excursion
+ (goto-char type-start)
+ (and (c-forward-type)
+ (progn (c-backward-syntactic-ws) t)
+ (or (eolp)
+ (memq (char-after) '(?\ ?\t)))))))
+ (when (not (eq (not space-before-id)
+ (not space-after-type)))
+ (setq maybe-expression t)
+ (throw 'at-decl-or-cast t)))))
;; CASE 18
(when (and (not (memq context '(nil top)))
diff -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 -r 715fefb0bc0a5083da72adb687f97289371cb017 cc-fonts.el
--- a/cc-fonts.el
+++ b/cc-fonts.el
@@ -1116,6 +1116,124 @@
(setq pos (point)))))) ; acts to make the `while' form continue.
nil)
+(defun c-get-fontification-context (match-pos not-front-decl &optional toplev)
+ ;; Return a cons (CONTEXT . RESTRICTED-<>-ARGLISTS) for MATCH-POS.
+ ;; NOT-FRONT-DECL is non-nil when a declaration later in the buffer than
+ ;; MATCH-POS has already been parsed. TOPLEV is non-nil when MATCH-POS is
+ ;; known to be at "top level", i.e. outside any braces, or directly inside a
+ ;; namespace, class, etc.
+ ;;
+ ;; CONTEXT is the fontification context of MATCH-POS, and is one of the
+ ;; following:
+ ;; 'decl In a comma-separated declaration context (typically
+ ;; inside a function declaration arglist).
+ ;; '<> In an angle bracket arglist.
+ ;; 'arglist Some other type of arglist.
+ ;; 'top Some other context and point is at the top-level (either
+ ;; outside any braces or directly inside a class or namespace,
+ ;; etc.)
+ ;; nil Some other context or unknown context. Includes
+ ;; within the parens of an if, for, ... construct.
+ ;; 'not-decl Definitely not in a declaration.
+ ;;
+ ;; RESTRICTED-<>-ARGLISTS is non-nil when a scan of template/generic
+ ;; arguments lists (i.e. lists enclosed by <...>) is more strict about what
+ ;; characters it allows within the list.
+ (let ((type (and (> match-pos (point-min))
+ (c-get-char-property (1- match-pos) 'c-type))))
+ (cond ((not (memq (char-before match-pos) '(?\( ?, ?\[ ?< ?{)))
+ (cons (and toplev 'top) nil))
+ ;; A control flow expression or a decltype
+ ((and (eq (char-before match-pos) ?\()
+ (save-excursion
+ (goto-char match-pos)
+ (backward-char)
+ (c-backward-token-2)
+ (or (looking-at c-block-stmt-2-key)
+ (looking-at c-block-stmt-1-2-key)
+ (looking-at c-typeof-key))))
+ (cons nil t))
+ ;; Near BOB.
+ ((<= match-pos (point-min))
+ (cons 'arglist t))
+ ;; Got a cached hit in a declaration arglist.
+ ((eq type 'c-decl-arg-start)
+ (cons 'decl nil))
+ ;; We're inside (probably) a brace list.
+ ((eq type 'c-not-decl)
+ (cons 'not-decl nil))
+ ;; Inside a C++11 lambda function arglist.
+ ((and (c-major-mode-is 'c++-mode)
+ (eq (char-before match-pos) ?\()
+ (save-excursion
+ (goto-char match-pos)
+ (c-backward-token-2)
+ (and
+ (c-safe (goto-char (scan-sexps (point) -1)))
+ (c-looking-at-c++-lambda-capture-list))))
+ (c-put-char-property (1- match-pos) 'c-type
+ 'c-decl-arg-start)
+ (cons 'decl nil))
+ ;; We're inside a brace list.
+ ((and (eq (char-before match-pos) ?{)
+ (save-excursion
+ (goto-char (1- match-pos))
+ (consp
+ (c-looking-at-or-maybe-in-bracelist))))
+ (c-put-char-property (1- match-pos) 'c-type
+ 'c-not-decl)
+ (cons 'not-decl nil))
+ ;; We're inside an "ordinary" open brace.
+ ((eq (char-before match-pos) ?{)
+ (cons (and toplev 'top) nil))
+ ;; Inside an angle bracket arglist.
+ ((or (eq type 'c-<>-arg-sep)
+ (eq (char-before match-pos) ?<))
+ (cons '<> nil))
+ ;; Got a cached hit in some other type of arglist.
+ (type
+ (cons 'arglist t))
+ (not-front-decl
+ ;; The point is within the range of a previously
+ ;; encountered type decl expression, so the arglist
+ ;; is probably one that contains declarations.
+ ;; However, if `c-recognize-paren-inits' is set it
+ ;; might also be an initializer arglist.
+ ;;
+ ;; The result of this check is cached with a char
+ ;; property on the match token, so that we can look
+ ;; it up again when refontifying single lines in a
+ ;; multiline declaration.
+ (c-put-char-property (1- match-pos)
+ 'c-type 'c-decl-arg-start)
+ (cons 'decl nil))
+ ;; Got an open paren preceded by an arith operator.
+ ((and (eq (char-before match-pos) ?\()
+ (save-excursion
+ (and (zerop (c-backward-token-2 2))
+ (looking-at c-arithmetic-op-regexp))))
+ (cons nil nil))
+ ;; At start of a declaration inside a declaration paren.
+ ((save-excursion
+ (and (memq (char-before match-pos) '(?\( ?\,))
+ (c-go-up-list-backward match-pos)
+ (eq (char-after) ?\()
+ (let ((type (c-get-char-property (point) 'c-type)))
+ (or (memq type '(c-decl-arg-start c-decl-type-start))
+ (and
+ (progn (c-backward-syntactic-ws) t)
+ (c-back-over-compound-identifier)
+ (progn
+ (c-backward-syntactic-ws)
+ (or (bobp)
+ (progn
+ (setq type (c-get-char-property (1- (point))
+ 'c-type))
+ (memq type '(c-decl-arg-start
+ c-decl-type-start))))))))))
+ (cons 'decl nil))
+ (t (cons 'arglist t)))))
+
(defun c-font-lock-declarations (limit)
;; Fontify all the declarations, casts and labels from the point to LIMIT.
;; Assumes that strings and comments have been fontified already.
@@ -1230,95 +1348,15 @@
;; "<" for the sake of C++-style template arglists.
;; Ignore "(" when it's part of a control flow construct
;; (e.g. "for (").
- (let ((type (and (> match-pos (point-min))
- (c-get-char-property (1- match-pos) 'c-type))))
- (cond ((not (memq (char-before match-pos) '(?\( ?, ?\[ ?< ?{)))
- (setq context (and toplev 'top)
- c-restricted-<>-arglists nil))
- ;; A control flow expression or a decltype
- ((and (eq (char-before match-pos) ?\()
- (save-excursion
- (goto-char match-pos)
- (backward-char)
- (c-backward-token-2)
- (or (looking-at c-block-stmt-2-key)
- (looking-at c-block-stmt-1-2-key)
- (looking-at c-typeof-key))))
- (setq context nil
- c-restricted-<>-arglists t))
- ;; Near BOB.
- ((<= match-pos (point-min))
- (setq context 'arglist
- c-restricted-<>-arglists t))
- ;; Got a cached hit in a declaration arglist.
- ((eq type 'c-decl-arg-start)
- (setq context 'decl
- c-restricted-<>-arglists nil))
- ;; We're inside (probably) a brace list.
- ((eq type 'c-not-decl)
- (setq context 'not-decl
- c-restricted-<>-arglists nil))
- ;; Inside a C++11 lambda function arglist.
- ((and (c-major-mode-is 'c++-mode)
- (eq (char-before match-pos) ?\()
- (save-excursion
- (goto-char match-pos)
- (c-backward-token-2)
- (and
- (c-safe (goto-char (scan-sexps (point) -1)))
- (c-looking-at-c++-lambda-capture-list))))
- (setq context 'decl
- c-restricted-<>-arglists nil)
- (c-put-char-property (1- match-pos) 'c-type
- 'c-decl-arg-start))
- ;; We're inside a brace list.
- ((and (eq (char-before match-pos) ?{)
- (save-excursion
- (goto-char (1- match-pos))
- (consp
- (c-looking-at-or-maybe-in-bracelist))))
- (setq context 'not-decl
- c-restricted-<>-arglists nil)
- (c-put-char-property (1- match-pos) 'c-type
- 'c-not-decl))
- ;; We're inside an "ordinary" open brace.
- ((eq (char-before match-pos) ?{)
- (setq context (and toplev 'top)
- c-restricted-<>-arglists nil))
- ;; Inside an angle bracket arglist.
- ((or (eq type 'c-<>-arg-sep)
- (eq (char-before match-pos) ?<))
- (setq context '<>
- c-restricted-<>-arglists nil))
- ;; Got a cached hit in some other type of arglist.
- (type
- (setq context 'arglist
- c-restricted-<>-arglists t))
- ((if inside-macro
- (< match-pos max-type-decl-end-before-token)
- (< match-pos max-type-decl-end))
- ;; The point is within the range of a previously
- ;; encountered type decl expression, so the arglist
- ;; is probably one that contains declarations.
- ;; However, if `c-recognize-paren-inits' is set it
- ;; might also be an initializer arglist.
- (setq context 'decl
- c-restricted-<>-arglists nil)
- ;; The result of this check is cached with a char
- ;; property on the match token, so that we can look
- ;; it up again when refontifying single lines in a
- ;; multiline declaration.
- (c-put-char-property (1- match-pos)
- 'c-type 'c-decl-arg-start))
- ;; Got an open paren preceded by an arith operator.
- ((and (eq (char-before match-pos) ?\()
- (save-excursion
- (and (zerop (c-backward-token-2 2))
- (looking-at c-arithmetic-op-regexp))))
- (setq context nil
- c-restricted-<>-arglists nil))
- (t (setq context 'arglist
- c-restricted-<>-arglists t))))
+ (let ((got-context
+ (c-get-fontification-context
+ match-pos
+ (< match-pos (if inside-macro
+ max-type-decl-end-before-token
+ max-type-decl-end))
+ toplev)))
+ (setq context (car got-context)
+ c-restricted-<>-arglists (cdr got-context)))
;; Check we haven't missed a preceding "typedef".
(when (not (looking-at c-typedef-key))
diff -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 -r 715fefb0bc0a5083da72adb687f97289371cb017 cc-mode.el
--- a/cc-mode.el
+++ b/cc-mode.el
@@ -1339,6 +1339,7 @@
;; This function is called indirectly from font locking stuff - either from
;; c-after-change (to prepare for after-change font-locking) or from font
;; lock context (etc.) fontification.
+ (goto-char pos)
(let ((lit-start (c-literal-start))
(new-pos pos)
capture-opener
diff -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 -r 715fefb0bc0a5083da72adb687f97289371cb017 cc-mode.texi
--- a/cc-mode.texi
+++ b/cc-mode.texi
@@ -280,10 +280,11 @@
Font Locking
-* Font Locking Preliminaries::
-* Faces::
-* Doc Comments::
-* AWK Mode Font Locking::
+* Font Locking Preliminaries::
+* Faces::
+* Doc Comments::
+* Misc Font Locking::
+* AWK Mode Font Locking::
Configuration Basics
@@ -1819,10 +1820,11 @@
sections apply to the other languages.
@menu
-* Font Locking Preliminaries::
-* Faces::
-* Doc Comments::
-* AWK Mode Font Locking::
+* Font Locking Preliminaries::
+* Faces::
+* Doc Comments::
+* Misc Font Locking::
+* AWK Mode Font Locking::
@end menu
@@ -2028,7 +2030,7 @@
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node Doc Comments, AWK Mode Font Locking, Faces, Font Locking
+@node Doc Comments, Misc Font Locking, Faces, Font Locking
@comment node-name, next, previous, up
@section Documentation Comments
@cindex documentation comments
@@ -2104,9 +2106,63 @@
If you add support for another doc comment style, please consider
contributing it - send a note to @email{bug-cc-mode@(a)gnu.org}.
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+@node Misc Font Locking, AWK Mode Font Locking, Doc Comments, Font Locking
+@comment node-name, next, previous, up
+@section Miscellaneous Font Locking
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+In some languages, particularly in C++, there are constructs which are
+syntactically ambiguous---they could be either declarations or
+expressions, and @ccmode{} cannot tell for sure which. Often such a
+construct is one of the operators @samp{*} or @samp{&} surrounded by
+two identifiers.
+
+Experience shows that very often when such a construct is a
+declaration it will be written with the operator touching exactly one
+of the identifiers, like:
+
+@example
+foo *bar
+@end example
+or
+@example
+foo& bar
+@end example
+
+. Whether such code is fontified depends on the setting of
+@code{c-asymmetry-fontification-flag}.
+
+@defvar c-asymmetry-fontification-flag
+@vindex asymmetry-fontification-flag (c-)
+When @code{c-asymmetry-fontification-flag} is non-nil (which it is by
+default), code like the above, with white space either before or after
+the operator, but not both, is fontified as a declaration. When the
+variable is nil, such a construct gets the default face.
+@end defvar
+
+When the construct is an expression there will often be white space
+both before and after the operator or there will be no white space
+around it at all, like:
+
+@example
+foo * bar
+@end example
+or
+@example
+foo&bar
+@end example
+.
+
+Such code is not fontified as a declaration. (Typically, the
+identifiers don't get a non-default face.)
+
+For clarity's sake, we emphasize that the ``asymmetry'' rule in this
+section only applies when CC Mode cannot disambiguate a construct in
+any other way.
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node AWK Mode Font Locking, , Doc Comments, Font Locking
+@node AWK Mode Font Locking, , Misc Font Locking, Font Locking
@comment node-name, next, previous, up
@section AWK Mode Font Locking
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 -r 715fefb0bc0a5083da72adb687f97289371cb017 cc-vars.el
--- a/cc-vars.el
+++ b/cc-vars.el
@@ -1633,6 +1633,18 @@
:type 'c-extra-types-widget
:group 'c)
+(defcustom c-asymmetry-fontification-flag t
+ "Whether to fontify certain ambiguous constructs by white space asymmetry.
+
+In the fontification engine, it is sometimes impossible to determine
+whether a construct is a declaration or an expression. This happens
+particularly in C++, due to ambiguities in the language. When such a
+construct is like \"foo * bar\" or \"foo &bar\", and this variable is non-nil
+(the default), the construct will be fontified as a declaration if there is
+white space either before or after the operator, but not both."
+ :type 'boolean
+ :group 'c)
+
(defvar c-noise-macro-with-parens-name-re "\\<\\>")
(defvar c-noise-macro-name-re "\\<\\>")
Repository URL: https://bitbucket.org/xemacs/cc-mode/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
commit/mail-lib: 3 new changesets
7 years, 9 months
Bitbucket
3 new commits in mail-lib:
https://bitbucket.org/xemacs/mail-lib/commits/7c59d90e8c39/
Changeset: 7c59d90e8c39
User: kehoea
Date: 2017-03-22 20:43:34+00:00
Summary: Sync with current GNU version of mail-extr.el
2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
* mail-extr.el:
* mail-extr.el (if):
* mail-extr.el (mail-extr-guess-middle-initial):
* mail-extr.el (mail-extr-ignore-single-names):
* mail-extr.el (mail-extr-ignore-realname-equals-mailbox-name): New.
* mail-extr.el (mail-extr-full-name-prefixes):
* mail-extr.el (mail-extr-@-binds-tighter-than-!):
* mail-extr.el (mail-extr-mangle-uucp):
* mail-extr.el (mail-extr-all-letters-but-separators):
* mail-extr.el (mail-extr-first-letters):
* mail-extr.el (mail-extr-last-letters): Removed.
* mail-extr.el (mail-extr-last-letter): New.
* mail-extr.el (mail-extr-hz-embedded-gb-encoded-chinese-pattern):
* mail-extr.el (lambda):
* mail-extr.el (mailextr-cbeg):
* mail-extr.el (cbeg): Removed.
* mail-extr.el (cend): Removed.
* mail-extr.el (mailextr-cbeg): New.
* mail-extr.el (mailextr-cend): New.
* mail-extr.el (mail-extr-all-top-level-domains)): New.
* mail-extr.el (mail-extract-address-components):
* mail-extr.el (mail-extr-voodoo):
* mail-extr.el (mail-extr-disable-voodoo): New.
* mail-extr.el (mail-extr-all-top-level-domains):
Sync with current GNU version of this file.
Affected #: 2 files
diff -r 93e16a72245c5ed1f649b92b905c117bec1e35fc -r 7c59d90e8c3957eb3dc3ac85e732c42ac448ed1f ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * mail-extr.el:
+ * mail-extr.el (if):
+ * mail-extr.el (mail-extr-guess-middle-initial):
+ * mail-extr.el (mail-extr-ignore-single-names):
+ * mail-extr.el (mail-extr-ignore-realname-equals-mailbox-name): New.
+ * mail-extr.el (mail-extr-full-name-prefixes):
+ * mail-extr.el (mail-extr-@-binds-tighter-than-!):
+ * mail-extr.el (mail-extr-mangle-uucp):
+ * mail-extr.el (mail-extr-all-letters-but-separators):
+ * mail-extr.el (mail-extr-first-letters):
+ * mail-extr.el (mail-extr-last-letters): Removed.
+ * mail-extr.el (mail-extr-last-letter): New.
+ * mail-extr.el (mail-extr-hz-embedded-gb-encoded-chinese-pattern):
+ * mail-extr.el (lambda):
+ * mail-extr.el (mailextr-cbeg):
+ * mail-extr.el (cbeg): Removed.
+ * mail-extr.el (cend): Removed.
+ * mail-extr.el (mailextr-cbeg): New.
+ * mail-extr.el (mailextr-cend): New.
+ * mail-extr.el (mail-extr-all-top-level-domains)): New.
+ * mail-extr.el (mail-extract-address-components):
+ * mail-extr.el (mail-extr-voodoo):
+ * mail-extr.el (mail-extr-disable-voodoo): New.
+ * mail-extr.el (mail-extr-all-top-level-domains):
+ Sync with current GNU version of this file.
+
2016-11-20 Aidan Kehoe <kehoea(a)parhasard.net>
* mail-abbrevs.el (mail-aliases-setup):
diff -r 93e16a72245c5ed1f649b92b905c117bec1e35fc -r 7c59d90e8c3957eb3dc3ac85e732c42ac448ed1f mail-extr.el
--- a/mail-extr.el
+++ b/mail-extr.el
@@ -1,30 +1,27 @@
;;; mail-extr.el --- extract full name and address from RFC 822 mail header
-;; Copyright (C) 1991, 1992, 1993, 1994, 1997, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1991-1994, 1997, 2001-2017 Free Software Foundation,
+;; Inc.
;; Author: Joe Wells <jbw(a)cs.bu.edu>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel(a)gnu.org
;; Keywords: mail
-
-;; This file is part of XEmacs.
+;; Package: mail-utils
-;; XEmacs is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
-;; XEmacs is distributed in the hope that it will be useful,
+;; GNU Emacs 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 XEmacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Synched up with: Emacs 21.3 CVS as of 2004-06-10.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
@@ -211,6 +208,10 @@
;;; Code:
+(eval-and-compile
+ (if (featurep 'xemacs) ;; Purespace obsolete in XEmacs.
+ (define-compiler-macro purecopy (&whole form argument) argument)))
+
(defgroup mail-extr nil
"Extract full name and address from RFC 822 mail header."
:prefix "mail-extr-"
@@ -222,17 +223,25 @@
;;
(defcustom mail-extr-guess-middle-initial nil
- "*Whether to try to guess middle initial from mail address.
+ "Whether to try to guess middle initial from mail address.
If true, then when we see an address like \"John Smith <jqs(a)host.com>\"
we will assume that \"John Q. Smith\" is the fellow's name."
:type 'boolean
:group 'mail-extr)
(defcustom mail-extr-ignore-single-names nil
- "*Whether to ignore a name that is just a single word.
+ "Whether to ignore a name that is just a single word.
If true, then when we see an address like \"Idiot <dumb(a)stupid.com>\"
we will act as though we couldn't find a full name in the address."
:type 'boolean
+ :version "22.1"
+ :group 'mail-extr)
+
+(defcustom mail-extr-ignore-realname-equals-mailbox-name t
+"Whether to ignore a name that is equal to the mailbox name.
+If true, then when the address is like \"Single <single(a)address.com>\"
+we will act as though we couldn't find a full name in the address."
+ :type 'boolean
:group 'mail-extr)
;; Matches a leading title that is not part of the name (does not
@@ -240,19 +249,19 @@
(defcustom mail-extr-full-name-prefixes
(purecopy
"\\(Prof\\|D[Rr]\\|Mrs?\\|Rev\\|Rabbi\\|SysOp\\|LCDR\\)\\.?[ \t\n]")
- "*Matches prefixes to the full name that identify a person's position.
+ "Matches prefixes to the full name that identify a person's position.
These are stripped from the full name because they do not contribute to
uniquely identifying the person."
:type 'regexp
:group 'mail-extr)
(defcustom mail-extr-@-binds-tighter-than-! nil
- "*Whether the local mail transport agent looks at ! before @."
+ "Whether the local mail transport agent looks at ! before @."
:type 'boolean
:group 'mail-extr)
(defcustom mail-extr-mangle-uucp nil
- "*Whether to throw away information in UUCP addresses
+ "Whether to throw away information in UUCP addresses
by translating things like \"foo!bar!baz@host\" into \"baz(a)bar.UUCP\"."
:type 'boolean
:group 'mail-extr)
@@ -280,9 +289,11 @@
;; Yes, there are weird people with digits in their names.
;; You will also notice the consideration for the
;; Swedish/Finnish/Norwegian character set.
-;; XEmacs: Add \200-\376 range (not \377 due to bug (?) in search.c...).
(defconst mail-extr-all-letters-but-separators
- (purecopy "][A-Za-z{|}'~0-9`\200-\376")) ;; XEmacs
+ (if (string-match "[[:alnum:]]" "z")
+ (purecopy "][[:alnum:]{|}'~`")
+ ;; XEmacs; support builds without [:alnum:]
+ "][A-Za-z{|}'~0-9`\200-\376"))
;; Any character that can occur in a name in an RFC822 address including
;; the separator (hyphen and possibly period) for multipart names.
@@ -292,11 +303,16 @@
;; Any character that can start a name.
;; Keep this set as minimal as possible.
-(defconst mail-extr-first-letters (purecopy "A-Za-z")) ;; XEmacs
+(defconst mail-extr-first-letters (if (string-match "[[:alpha:]]" "z")
+ ;; XEmacs; see above.
+ (purecopy "[:alpha:]")
+ "A-Za-z"))
;; Any character that can end a name.
;; Keep this set as minimal as possible.
-(defconst mail-extr-last-letters (purecopy "[A-Za-z`'.")) ;; XEmacs
+(defconst mail-extr-last-letters (if (string-match "[[:alpha:]]" "z")
+ (purecopy "[:alpha:]`'.")
+ (purecopy "[A-Za-z]`'."))) ;; XEmacs
(defconst mail-extr-leading-garbage "\\W+")
@@ -325,7 +341,7 @@
;; Matches an embedded or leading nickname that should be removed.
;; (defconst mail-extr-nickname-pattern
;; (purecopy
-;; (format "\\([ .]\\|\\`\\)[\"'`\[\(]\\([ .%s]+\\)[\]\"'\)] "
+;; (format "\\([ .]\\|\\`\\)[\"'`[(]\\([ .%s]+\\)[]\"')] "
;; mail-extr-all-letters)))
;; Matches the occurrence of a generational name suffix, and the last
@@ -391,7 +407,7 @@
;; Matches ham radio call signs.
;; Help from: Mat Maessen N2NJZ <maessm(a)rpi.edu>, Mark Feit
;; <mark(a)era.com>, Michael Covington <mcovingt(a)ai.uga.edu>.
-;; Examples: DX504 DX515 K5MRU K8DHK KA9WGN KA9WGN KD3FU KD6EUI KD6HBW
+;; Examples: DX504 DX515 K5MRU K8DHK KA9WGN KD3FU KD6EUI KD6HBW
;; KE9TV KF0NV N1API N3FU N3GZE N3IGS N4KCC N7IKQ N9HHU W4YHF W6ANK WA2SUH
;; WB7VZI N2NJZ NR3G KJ4KK AB4UM AL7NI KH6OH WN3KBT N4TMI W1A N0NZO
(defconst mail-extr-ham-call-sign-pattern
@@ -452,7 +468,7 @@
;; mode from GB back to ASCII. (Note that the escape-from-GB code '~}'
;; ($7E7D) is outside the defined GB range.)
(defconst mail-extr-hz-embedded-gb-encoded-chinese-pattern
- (purecopy "~{\\([^~].\\|~[^\}]\\)+~}"))
+ (purecopy "~{\\([^~].\\|~[^}]\\)+~}"))
;; The leading optional lowercase letters are for a bastardized version of
;; the encoding, as is the optional nature of the final slash.
@@ -539,8 +555,8 @@
(?\t " ")
(?\r " ")
(?\n " ")
- (?\( "\(\)")
- (?\) "\)\(")
+ (?\( "()")
+ (?\) ")(")
(?\\ "\\"))
(mail-extr-address-domain-literal-syntax-table
(?\000 ?\377 "w")
@@ -549,8 +565,8 @@
(?\t " ")
(?\r " ")
(?\n " ")
- (?\[ "\(\]") ;??????
- (?\] "\)\[") ;??????
+ (?\[ "(]") ;??????
+ (?\] ")[") ;??????
(?\\ "\\"))
(mail-extr-address-text-comment-syntax-table
(?\000 ?\377 "w")
@@ -559,16 +575,16 @@
(?\t " ")
(?\r " ")
(?\n " ")
- (?\( "\(\)")
- (?\) "\)\(")
- (?\[ "\(\]")
- (?\] "\)\[")
- (?\{ "\(\}")
- (?\} "\)\{")
+ (?\( "()")
+ (?\) ")(")
+ (?\[ "(]")
+ (?\] ")[")
+ (?\{ "(}")
+ (?\} "){")
(?\\ "\\")
(?\" "\"")
- ;; (?\' "\)\`")
- ;; (?\` "\(\'")
+ ;; (?\' ")`")
+ ;; (?\` "('")
)
(mail-extr-address-text-syntax-table
(?\000 ?\177 ".")
@@ -687,15 +703,17 @@
;;
(defvar disable-initial-guessing-flag) ; dynamic assignment
-(defvar cbeg) ; dynamic assignment
-(defvar cend) ; dynamic assignment
+(defvar mailextr-cbeg) ; dynamic assignment
+(defvar mailextr-cend) ; dynamic assignment
+(defvar mail-extr-all-top-level-domains) ; Defined below.
;;;###autoload
(defun mail-extract-address-components (address &optional all)
"Given an RFC-822 address ADDRESS, extract full name and canonical address.
-Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
-If no name can be extracted, FULL-NAME will be nil. Also see
-`mail-extr-ignore-single-names'.
+Returns a list of the form (FULL-NAME CANONICAL-ADDRESS). If no
+name can be extracted, FULL-NAME will be nil. Also see
+`mail-extr-ignore-single-names' and
+`mail-extr-ignore-realname-equals-mailbox-name'.
If the optional argument ALL is non-nil, then ADDRESS can contain zero
or more recipients, separated by commas, and we return a list of
@@ -756,7 +774,8 @@
record-pos-symbol
first-real-pos last-real-pos
phrase-beg phrase-end
- cbeg cend ; dynamically set from -voodoo
+ ;; Dynamically set in mail-extr-voodoo.
+ mailextr-cbeg mailextr-cend
quote-beg quote-end
atom-beg atom-end
mbox-beg mbox-end
@@ -790,19 +809,19 @@
((eq char ?\()
(set-syntax-table mail-extr-address-comment-syntax-table)
;; only record the first non-empty comment's position
- (if (and (not cbeg)
+ (if (and (not mailextr-cbeg)
(save-excursion
(forward-char 1)
(mail-extr-skip-whitespace-forward)
(not (eq ?\) (char-after (point))))))
- (setq cbeg (point)))
+ (setq mailextr-cbeg (point)))
;; TODO: don't record if unbalanced
(or (mail-extr-safe-move-sexp 1)
(forward-char 1))
(set-syntax-table mail-extr-address-syntax-table)
- (if (and cbeg
- (not cend))
- (setq cend (point))))
+ (if (and mailextr-cbeg
+ (not mailextr-cend))
+ (setq mailextr-cend (point))))
;; quoted text
((eq char ?\")
;; only record the first non-empty quote's position
@@ -843,7 +862,7 @@
(setq char ?\() ; HAVE I NO SHAME??
)
;; record the position of various interesting chars, determine
- ;; legality later.
+ ;; validity later.
((setq record-pos-symbol
(cdr (assq char
'((?< . <-pos) (?> . >-pos) (?@ . @-pos)
@@ -855,9 +874,9 @@
((eq char ?.)
(forward-char 1))
((memq char '(
- ;; comment terminator illegal
+ ;; comment terminator invalid
?\)
- ;; domain literal terminator illegal
+ ;; domain literal terminator invalid
?\]
;; \ allowed only within quoted strings,
;; domain literals, and comments
@@ -866,7 +885,17 @@
(mail-extr-nuke-char-at (point))
(forward-char 1))
(t
- (forward-word 1)))
+ ;; Do `(forward-word 1)', recognizing non-ASCII characters
+ ;; except Latin-1 nbsp as words.
+ (while (progn
+ (skip-chars-forward "^\000-\177\240")
+ (and (not (eobp))
+ (eq ?w (char-syntax (char-after)))
+ (progn
+ (forward-word 1) ; (forward-word-strictly 1)
+ (and (not (eobp))
+ (> (char-after) ?\177)
+ (not (eq (char-after) ?\240)))))))))
(or (eq char ?\()
;; At the end of first address of a multiple address header.
(and (eq char ?,)
@@ -978,10 +1007,10 @@
(> last-real-pos (1+ group-\;-pos))
(setq last-real-pos (1+ group-\;-pos)))
;; *** This may be wrong:
- (and cend
- (> cend group-\;-pos)
- (setq cend nil
- cbeg nil))
+ (and mailextr-cend
+ (> mailextr-cend group-\;-pos)
+ (setq mailextr-cend nil
+ mailextr-cbeg nil))
(and quote-end
(> quote-end group-\;-pos)
(setq quote-end nil
@@ -1212,8 +1241,8 @@
(narrow-to-region phrase-beg phrase-end))
;; Example: fml(a)foo.bar.dom (First M. Last)
- (cbeg
- (narrow-to-region (1+ cbeg) (1- cend))
+ (mailextr-cbeg
+ (narrow-to-region (1+ mailextr-cbeg) (1- mailextr-cend))
(mail-extr-undo-backslash-quoting (point-min) (point-max))
;; Deal with spacing problems
@@ -1295,7 +1324,7 @@
)
(t
(setq atom-beg (point))
- (forward-word 1)
+ (forward-word) ; (forward-word-strictly 1)
(setq atom-end (point))
(goto-char atom-beg)
(save-restriction
@@ -1389,24 +1418,26 @@
(insert (upcase mi) ". ")))
;; Nuke name if it is the same as mailbox name.
- (let ((buffer-length (- (point-max) (point-min)))
- (i 0)
- (names-match-flag t))
- (when (and (> buffer-length 0)
- (eq buffer-length (- mbox-end mbox-beg)))
- (goto-char (point-max))
- (insert-buffer-substring canonicalization-buffer
- mbox-beg mbox-end)
- (while (and names-match-flag
- (< i buffer-length))
- (or (eq (downcase (char-after (+ i (point-min))))
- (downcase
- (char-after (+ i buffer-length (point-min)))))
- (setq names-match-flag nil))
- (setq i (1+ i)))
- (delete-region (+ (point-min) buffer-length) (point-max))
- (if names-match-flag
- (narrow-to-region (point) (point)))))
+ (when mail-extr-ignore-single-names
+ (let ((buffer-length (- (point-max) (point-min)))
+ (i 0)
+ (names-match-flag t))
+ (when (and (> buffer-length 0)
+ (eq buffer-length (- mbox-end mbox-beg)))
+ (goto-char (point-max))
+ (insert-buffer-substring canonicalization-buffer
+ mbox-beg mbox-end)
+ (while (and names-match-flag
+ (< i buffer-length))
+ (or (eq (downcase (char-after (+ i (point-min))))
+ (downcase
+ (char-after (+ i buffer-length (point-min)))))
+ (setq names-match-flag nil))
+ (setq i (1+ i)))
+ (delete-region (+ (point-min) buffer-length) (point-max))
+ (and names-match-flag
+ mail-extr-ignore-realname-equals-mailbox-name
+ (narrow-to-region (point) (point))))))
;; Nuke name if it's just one word.
(goto-char (point-min))
@@ -1436,374 +1467,401 @@
(if all (nreverse value-list) (car value-list))
))
-(defun mail-extr-voodoo (mbox-beg mbox-end canonicalization-buffer)
- (let ((word-count 0)
- (case-fold-search nil)
- mixed-case-flag lower-case-flag ;;upper-case-flag
- suffix-flag last-name-comma-flag
- ;;cbeg cend
- initial
- begin-again-flag
- drop-this-word-if-trailing-flag
- drop-last-word-if-trailing-flag
- word-found-flag
- this-word-beg last-word-beg
- name-beg name-end
- name-done-flag
- )
- (save-excursion
- (set-syntax-table mail-extr-address-text-syntax-table)
-
- ;; Get rid of comments.
- (goto-char (point-min))
- (while (not (eobp))
- ;; Initialize for this iteration of the loop.
- (skip-chars-forward "^({[\"'`")
- (let ((cbeg (point)))
- (set-syntax-table mail-extr-address-text-comment-syntax-table)
- (if (memq (following-char) '(?\' ?\`))
- (search-forward "'" nil 'move
- (if (eq ?\' (following-char)) 2 1))
- (or (mail-extr-safe-move-sexp 1)
- (goto-char (point-max))))
- (set-syntax-table mail-extr-address-text-syntax-table)
- (when (eq (char-after cbeg) ?\()
- ;; Delete the comment itself.
- (delete-region cbeg (point))
- ;; Canonicalize whitespace where the comment was.
- (skip-chars-backward " \t")
- (if (looking-at "\\([ \t]+$\\|[ \t]+,\\)")
- (replace-match "")
- (setq cbeg (point))
- (skip-chars-forward " \t")
- (if (bobp)
- (delete-region (point) cbeg)
- (just-one-space))))))
+(defcustom mail-extr-disable-voodoo "\\cj"
+ "If it is a regexp, names matching it will never be modified.
+If it is neither nil nor a string, modifying of names will never take
+place. It affects how `mail-extract-address-components' works."
+ :type '(choice (regexp :size 0)
+ (const :tag "Always enabled" nil)
+ (const :tag "Always disabled" t))
+ :group 'mail-extr)
- ;; This was moved above.
- ;; Fix . used as space
- ;; But it belongs here because it occurs not only as
- ;; rypens(a)reks.uia.ac.be (Piet.Rypens)
- ;; but also as
- ;; "Piet.Rypens" <rypens(a)reks.uia.ac.be>
- ;;(goto-char (point-min))
- ;;(while (re-search-forward mail-extr-bad-dot-pattern nil t)
- ;; (replace-match "\\1 \\2" t))
-
- (unless (search-forward " " nil t)
- (goto-char (point-min))
- (cond ((search-forward "_" nil t)
- ;; Handle the *idiotic* use of underlines as spaces.
- ;; Example: fml(a)foo.bar.dom (First_M._Last)
- (goto-char (point-min))
- (while (search-forward "_" nil t)
- (replace-match " " t)))
- ((search-forward "." nil t)
- ;; Fix . used as space
- ;; Example: danj1(a)cb.att.com (daniel.jacobson)
- (goto-char (point-min))
- (while (re-search-forward mail-extr-bad-dot-pattern nil t)
- (replace-match "\\1 \\2" t)))))
-
- ;; Loop over the words (and other junk) in the name.
- (goto-char (point-min))
- (while (not name-done-flag)
+(defun mail-extr-voodoo (mbox-beg mbox-end canonicalization-buffer)
+ (unless (and mail-extr-disable-voodoo
+ (or (not (stringp mail-extr-disable-voodoo))
+ (progn
+ (goto-char (point-min))
+ (re-search-forward mail-extr-disable-voodoo nil t))))
+ (let ((word-count 0)
+ (case-fold-search nil)
+ mixed-case-flag lower-case-flag ;;upper-case-flag
+ suffix-flag last-name-comma-flag
+ initial
+ begin-again-flag
+ drop-this-word-if-trailing-flag
+ drop-last-word-if-trailing-flag
+ word-found-flag
+ this-word-beg last-word-beg
+ name-beg name-end
+ name-done-flag
+ )
+ (save-excursion
+ (set-syntax-table mail-extr-address-text-syntax-table)
- (when word-found-flag
- ;; Last time through this loop we skipped over a word.
- (setq last-word-beg this-word-beg)
- (setq drop-last-word-if-trailing-flag
- drop-this-word-if-trailing-flag)
- (setq word-found-flag nil))
+ ;; Get rid of comments.
+ (goto-char (point-min))
+ (while (not (eobp))
+ ;; Initialize for this iteration of the loop.
+ (skip-chars-forward "^({[\"'`")
+ (let ((cbeg (point))) ;; Not used dynamically in this sexp
+ (set-syntax-table mail-extr-address-text-comment-syntax-table)
+ (if (memq (following-char) '(?\' ?\`))
+ (search-forward "'" nil 'move
+ (if (eq ?\' (following-char)) 2 1))
+ (or (mail-extr-safe-move-sexp 1)
+ (goto-char (point-max))))
+ (set-syntax-table mail-extr-address-text-syntax-table)
+ (when (eq (char-after cbeg) ?\()
+ ;; Delete the comment itself.
+ (delete-region cbeg (point))
+ ;; Canonicalize whitespace where the comment was.
+ (skip-chars-backward " \t")
+ (if (looking-at "\\([ \t]+$\\|[ \t]+,\\)")
+ (replace-match "")
+ (setq cbeg (point))
+ (skip-chars-forward " \t")
+ (if (bobp)
+ (delete-region (point) cbeg)
+ (just-one-space))))))
- (when begin-again-flag
- ;; Last time through the loop we found something that
- ;; indicates we should pretend we are beginning again from
- ;; the start.
- (setq word-count 0)
- (setq last-word-beg nil)
- (setq drop-last-word-if-trailing-flag nil)
- (setq mixed-case-flag nil)
- (setq lower-case-flag nil)
- ;; (setq upper-case-flag nil)
- (setq begin-again-flag nil))
+ ;; This was moved above.
+ ;; Fix . used as space
+ ;; But it belongs here because it occurs not only as
+ ;; rypens(a)reks.uia.ac.be (Piet.Rypens)
+ ;; but also as
+ ;; "Piet.Rypens" <rypens(a)reks.uia.ac.be>
+ ;;(goto-char (point-min))
+ ;;(while (re-search-forward mail-extr-bad-dot-pattern nil t)
+ ;; (replace-match "\\1 \\2" t))
- ;; Initialize for this iteration of the loop.
- (mail-extr-skip-whitespace-forward)
- (if (eq word-count 0) (narrow-to-region (point) (point-max)))
- (setq this-word-beg (point))
- (setq drop-this-word-if-trailing-flag nil)
+ (unless (search-forward " " nil t)
+ (goto-char (point-min))
+ (cond ((search-forward "_" nil t)
+ ;; Handle the *idiotic* use of underlines as spaces.
+ ;; Example: fml(a)foo.bar.dom (First_M._Last)
+ (goto-char (point-min))
+ (while (search-forward "_" nil t)
+ (replace-match " " t)))
+ ((search-forward "." nil t)
+ ;; Fix . used as space
+ ;; Example: danj1(a)cb.att.com (daniel.jacobson)
+ (goto-char (point-min))
+ (while (re-search-forward mail-extr-bad-dot-pattern nil t)
+ (replace-match "\\1 \\2" t)))))
- ;; Decide what to do based on what we are looking at.
- (cond
+ ;; Loop over the words (and other junk) in the name.
+ (goto-char (point-min))
+ (while (not name-done-flag)
- ;; Delete title
- ((and (eq word-count 0)
- (looking-at mail-extr-full-name-prefixes))
- (goto-char (match-end 0))
+ (when word-found-flag
+ ;; Last time through this loop we skipped over a word.
+ (setq last-word-beg this-word-beg)
+ (setq drop-last-word-if-trailing-flag
+ drop-this-word-if-trailing-flag)
+ (setq word-found-flag nil))
+
+ (when begin-again-flag
+ ;; Last time through the loop we found something that
+ ;; indicates we should pretend we are beginning again from
+ ;; the start.
+ (setq word-count 0)
+ (setq last-word-beg nil)
+ (setq drop-last-word-if-trailing-flag nil)
+ (setq mixed-case-flag nil)
+ (setq lower-case-flag nil)
+ ;; (setq upper-case-flag nil)
+ (setq begin-again-flag nil))
+
+ ;; Initialize for this iteration of the loop.
+ (mail-extr-skip-whitespace-forward)
+ (if (eq word-count 0) (narrow-to-region (point) (point-max)))
+ (setq this-word-beg (point))
+ (setq drop-this-word-if-trailing-flag nil)
+
+ ;; Decide what to do based on what we are looking at.
+ (cond
+
+ ;; Delete title
+ ((and (eq word-count 0)
+ (looking-at mail-extr-full-name-prefixes))
+ (goto-char (match-end 0))
+ (narrow-to-region (point) (point-max)))
+
+ ;; Stop after name suffix
+ ((and (>= word-count 2)
+ (looking-at mail-extr-full-name-suffix-pattern))
+ (mail-extr-skip-whitespace-backward)
+ (setq suffix-flag (point))
+ (if (eq ?, (following-char))
+ (forward-char 1)
+ (insert ?,))
+ ;; Enforce at least one space after comma
+ (or (eq ?\ (following-char))
+ (insert ?\ ))
+ (mail-extr-skip-whitespace-forward)
+ (cond ((memq (following-char) '(?j ?J ?s ?S))
+ (capitalize-word 1)
+ (if (eq (following-char) ?.)
+ (forward-char 1)
+ (insert ?.)))
+ (t
+ (upcase-word 1)))
+ (setq word-found-flag t)
+ (setq name-done-flag t))
+
+ ;; Handle SCA names
+ ((looking-at "MKA \\(.+\\)") ; "Mundanely Known As"
+ (goto-char (match-beginning 1))
+ (narrow-to-region (point) (point-max))
+ (setq begin-again-flag t))
+
+ ;; Check for initial last name followed by comma
+ ((and (eq ?, (following-char))
+ (eq word-count 1))
+ (forward-char 1)
+ (setq last-name-comma-flag t)
+ (or (eq ?\ (following-char))
+ (insert ?\ )))
+
+ ;; Stop before trailing comma-separated comment
+ ;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
+ ;; *** This case is redundant???
+ ;;((eq ?, (following-char))
+ ;; (setq name-done-flag t))
+
+ ;; Delete parenthesized/quoted comment/nickname
+ ((memq (following-char) '(?\( ?\{ ?\[ ?\" ?\' ?\`))
+ (setq mailextr-cbeg (point))
+ (set-syntax-table mail-extr-address-text-comment-syntax-table)
+ (cond ((memq (following-char) '(?\' ?\`))
+ (or (search-forward "'" nil t
+ (if (eq ?\' (following-char)) 2 1))
+ (delete-char 1)))
+ (t
+ (or (mail-extr-safe-move-sexp 1)
+ (goto-char (point-max)))))
+ (set-syntax-table mail-extr-address-text-syntax-table)
+ (setq mailextr-cend (point))
+ (cond
+ ;; Handle case of entire name being quoted
+ ((and (eq word-count 0)
+ (looking-at " *\\'")
+ (>= (- mailextr-cend mailextr-cbeg) 2))
+ (narrow-to-region (1+ mailextr-cbeg) (1- mailextr-cend))
+ (goto-char (point-min)))
+ (t
+ ;; Handle case of quoted initial
+ (if (and (or (= 3 (- mailextr-cend mailextr-cbeg))
+ (and (= 4 (- mailextr-cend mailextr-cbeg))
+ (eq ?. (char-after (+ 2 mailextr-cbeg)))))
+ (not (looking-at " *\\'")))
+ (setq initial (char-after (1+ mailextr-cbeg)))
+ (setq initial nil))
+ (delete-region mailextr-cbeg mailextr-cend)
+ (if initial
+ (insert initial ". ")))))
+
+ ;; Handle *Stupid* VMS date stamps
+ ((looking-at mail-extr-stupid-vms-date-stamp-pattern)
+ (replace-match "" t))
+
+ ;; Handle Chinese characters.
+ ((looking-at mail-extr-hz-embedded-gb-encoded-chinese-pattern)
+ (goto-char (match-end 0))
+ (setq word-found-flag t))
+
+ ;; Skip initial garbage characters.
+ ;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
+ ((and (eq word-count 0)
+ (looking-at mail-extr-leading-garbage))
+ (goto-char (match-end 0))
+ ;; *** Skip backward over these???
+ ;; (skip-chars-backward "& \"")
+ (narrow-to-region (point) (point-max)))
+
+ ;; Various stopping points
+ ((or
+
+ ;; Stop before ALL CAPS acronyms, if preceded by mixed-case
+ ;; words. Example: XT-DEM.
+ (and (>= word-count 2)
+ mixed-case-flag
+ (looking-at mail-extr-weird-acronym-pattern)
+ (not (looking-at mail-extr-roman-numeral-pattern)))
+
+ ;; Stop before trailing alternative address
+ (looking-at mail-extr-alternative-address-pattern)
+
+ ;; Stop before trailing comment not introduced by comma
+ ;; THIS CASE MUST BE AFTER AN EARLIER CASE.
+ (looking-at mail-extr-trailing-comment-start-pattern)
+
+ ;; Stop before telephone numbers
+ (and (>= word-count 1)
+ (looking-at mail-extr-telephone-extension-pattern)))
+ (setq name-done-flag t))
+
+ ;; Delete ham radio call signs
+ ((looking-at mail-extr-ham-call-sign-pattern)
+ (delete-region (match-beginning 0) (match-end 0)))
+
+ ;; Fixup initials
+ ((looking-at mail-extr-initial-pattern)
+ (or (eq (following-char) (upcase (following-char)))
+ (setq lower-case-flag t))
+ (forward-char 1)
+ (if (eq ?. (following-char))
+ (forward-char 1)
+ (insert ?.))
+ (or (eq ?\ (following-char))
+ (insert ?\ ))
+ (setq word-found-flag t))
+
+ ;; Handle BITNET LISTSERV list names.
+ ((and (eq word-count 0)
+ (looking-at mail-extr-listserv-list-name-pattern))
+ (narrow-to-region (match-beginning 1) (match-end 1))
+ (setq word-found-flag t)
+ (setq name-done-flag t))
+
+ ;; Handle & substitution, when & is last and is not first.
+ ((and (> word-count 0)
+ (eq ?\ (preceding-char))
+ (eq (following-char) ?&)
+ (eq (1+ (point)) (point-max)))
+ (delete-char 1)
+ (capitalize-region
+ (point)
+ (progn
+ (insert-buffer-substring canonicalization-buffer
+ mbox-beg mbox-end)
+ (point)))
+ (setq disable-initial-guessing-flag t)
+ (setq word-found-flag t))
+
+ ;; Handle & between names, as in "Bob & Susie".
+ ((and (> word-count 0) (eq (following-char) ?\&))
+ (setq name-beg (point))
+ (setq name-end (1+ name-beg))
+ (setq word-found-flag t)
+ (goto-char name-end))
+
+ ;; Regular name words
+ ((looking-at mail-extr-name-pattern)
+ (setq name-beg (point))
+ (setq name-end (match-end 0))
+
+ ;; Certain words will be dropped if they are at the end.
+ (and (>= word-count 2)
+ (not lower-case-flag)
+ (or
+ ;; Trailing 4-or-more letter lowercase words preceded by
+ ;; mixed case or uppercase words will be dropped.
+ (looking-at (load-time-value
+ (if (string-match "[[:lower:]]" "z")
+ "[[:lower:]]\\{4,\\}[ \t]*\\'"
+ ;; XEmacs 21.4
+ "[a-z][a-z][a-z][a-z]+[ \t]*\\'")))
+ ;; Drop a trailing word which is terminated with a period.
+ (eq ?. (char-after (1- name-end))))
+ (setq drop-this-word-if-trailing-flag t))
+
+ ;; Set the flags that indicate whether we have seen a lowercase
+ ;; word, a mixed case word, and an uppercase word.
+ (if (re-search-forward
+ (load-time-value (if (string-match "[[:lower:]]" "z")
+ "[[:lower:]]"
+ ;; XEmacs 21.4
+ "[a-z]"))
+ name-end t)
+ (if (progn
+ (goto-char name-beg)
+ (re-search-forward
+ (load-time-value (if (string-match "[[:upper:]]" "Z")
+ "[[:upper:]]"
+ ;; XEmacs 21.4
+ "[A-Z]"))
+ name-end t))
+ (setq mixed-case-flag t)
+ (setq lower-case-flag t))
+ ;; (setq upper-case-flag t)
+ )
+
+ (goto-char name-end)
+ (setq word-found-flag t))
+
+ ;; Allow a number as a word, if it doesn't mean anything else.
+ ((looking-at "[0-9]+\\>")
+ (setq name-beg (point))
+ (setq name-end (match-end 0))
+ (goto-char name-end)
+ (setq word-found-flag t))
+
+ (t
+ (setq name-done-flag t)
+ ))
+
+ ;; Count any word that we skipped over.
+ (if word-found-flag
+ (setq word-count (1+ word-count))))
+
+ ;; If the last thing in the name is 2 or more periods, or one or more
+ ;; other sentence terminators (but not a single period) then keep them
+ ;; and the preceding word. This is for the benefit of whole sentences
+ ;; in the name field: it's better behavior than dropping the last word
+ ;; of the sentence...
+ (if (and (not suffix-flag)
+ (looking-at "\\(\\.+\\|[?!;:.][?!;:.]+\\|[?!;:][?!;:.]*\\)\\'"))
+ (goto-char (setq suffix-flag (point-max))))
+
+ ;; Drop everything after point and certain trailing words.
+ (narrow-to-region (point-min)
+ (or (and drop-last-word-if-trailing-flag
+ last-word-beg)
+ (point)))
+
+ ;; Xerox's mailers SUCK!!!!!!
+ ;; We simply refuse to believe that any last name is PARC or ADOC.
+ ;; If it looks like that is the last name, that there is no meaningful
+ ;; here at all. Actually I guess it would be best to map patterns
+ ;; like foo.hoser(a)xerox.com into foo(a)hoser.xerox.com, but I don't
+ ;; actually know that that is what's going on.
+ (unless suffix-flag
+ (goto-char (point-min))
+ (let ((case-fold-search t))
+ (if (looking-at "[-A-Za-z_]+[. ]\\(PARC\\|ADOC\\)\\'")
+ (erase-buffer))))
+
+ ;; If last name first put it at end (but before suffix)
+ (when last-name-comma-flag
+ (goto-char (point-min))
+ (search-forward ",")
+ (setq name-end (1- (point)))
+ (goto-char (or suffix-flag (point-max)))
+ (or (eq ?\ (preceding-char))
+ (insert ?\ ))
+ (insert-buffer-substring (current-buffer) (point-min) name-end)
+ (goto-char name-end)
+ (skip-chars-forward "\t ,")
(narrow-to-region (point) (point-max)))
- ;; Stop after name suffix
- ((and (>= word-count 2)
- (looking-at mail-extr-full-name-suffix-pattern))
- (mail-extr-skip-whitespace-backward)
- (setq suffix-flag (point))
- (if (eq ?, (following-char))
- (forward-char 1)
- (insert ?,))
- ;; Enforce at least one space after comma
- (or (eq ?\ (following-char))
- (insert ?\ ))
- (mail-extr-skip-whitespace-forward)
- (cond ((memq (following-char) '(?j ?J ?s ?S))
- (capitalize-word 1)
- (if (eq (following-char) ?.)
- (forward-char 1)
- (insert ?.)))
- (t
- (upcase-word 1)))
- (setq word-found-flag t)
- (setq name-done-flag t))
-
- ;; Handle SCA names
- ((looking-at "MKA \\(.+\\)") ; "Mundanely Known As"
- (goto-char (match-beginning 1))
- (narrow-to-region (point) (point-max))
- (setq begin-again-flag t))
-
- ;; Check for initial last name followed by comma
- ((and (eq ?, (following-char))
- (eq word-count 1))
- (forward-char 1)
- (setq last-name-comma-flag t)
- (or (eq ?\ (following-char))
- (insert ?\ )))
-
- ;; Stop before trailing comma-separated comment
- ;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
- ;; *** This case is redundant???
- ;;((eq ?, (following-char))
- ;; (setq name-done-flag t))
-
- ;; Delete parenthesized/quoted comment/nickname
- ((memq (following-char) '(?\( ?\{ ?\[ ?\" ?\' ?\`))
- (setq cbeg (point))
- (set-syntax-table mail-extr-address-text-comment-syntax-table)
- (cond ((memq (following-char) '(?\' ?\`))
- (or (search-forward "'" nil t
- (if (eq ?\' (following-char)) 2 1))
- (delete-char 1)))
- (t
- (or (mail-extr-safe-move-sexp 1)
- (goto-char (point-max)))))
- (set-syntax-table mail-extr-address-text-syntax-table)
- (setq cend (point))
- (cond
- ;; Handle case of entire name being quoted
- ((and (eq word-count 0)
- (looking-at " *\\'")
- (>= (- cend cbeg) 2))
- (narrow-to-region (1+ cbeg) (1- cend))
- (goto-char (point-min)))
- (t
- ;; Handle case of quoted initial
- (if (and (or (= 3 (- cend cbeg))
- (and (= 4 (- cend cbeg))
- (eq ?. (char-after (+ 2 cbeg)))))
- (not (looking-at " *\\'")))
- (setq initial (char-after (1+ cbeg)))
- (setq initial nil))
- (delete-region cbeg cend)
- (if initial
- (insert initial ". ")))))
-
- ;; Handle *Stupid* VMS date stamps
- ((looking-at mail-extr-stupid-vms-date-stamp-pattern)
- (replace-match "" t))
-
- ;; Handle Chinese characters.
- ((looking-at mail-extr-hz-embedded-gb-encoded-chinese-pattern)
- (goto-char (match-end 0))
- (setq word-found-flag t))
-
- ;; Skip initial garbage characters.
- ;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
- ((and (eq word-count 0)
- (looking-at mail-extr-leading-garbage))
- (goto-char (match-end 0))
- ;; *** Skip backward over these???
- ;; (skip-chars-backward "& \"")
- (narrow-to-region (point) (point-max)))
-
- ;; Various stopping points
- ((or
-
- ;; Stop before ALL CAPS acronyms, if preceded by mixed-case
- ;; words. Example: XT-DEM.
- (and (>= word-count 2)
- mixed-case-flag
- (looking-at mail-extr-weird-acronym-pattern)
- (not (looking-at mail-extr-roman-numeral-pattern)))
-
- ;; Stop before trailing alternative address
- (looking-at mail-extr-alternative-address-pattern)
-
- ;; Stop before trailing comment not introduced by comma
- ;; THIS CASE MUST BE AFTER AN EARLIER CASE.
- (looking-at mail-extr-trailing-comment-start-pattern)
-
- ;; Stop before telephone numbers
- (and (>= word-count 1)
- (looking-at mail-extr-telephone-extension-pattern)))
- (setq name-done-flag t))
-
- ;; Delete ham radio call signs
- ((looking-at mail-extr-ham-call-sign-pattern)
- (delete-region (match-beginning 0) (match-end 0)))
-
- ;; Fixup initials
- ((looking-at mail-extr-initial-pattern)
- (or (eq (following-char) (upcase (following-char)))
- (setq lower-case-flag t))
- (forward-char 1)
- (if (eq ?. (following-char))
- (forward-char 1)
- (insert ?.))
- (or (eq ?\ (following-char))
- (insert ?\ ))
- (setq word-found-flag t))
+ ;; Delete leading and trailing junk characters.
+ ;; *** This is probably completely unneeded now.
+ ;;(goto-char (point-max))
+ ;;(skip-chars-backward mail-extr-non-end-name-chars)
+ ;;(if (eq ?. (following-char))
+ ;; (forward-char 1))
+ ;;(narrow-to-region (point)
+ ;; (progn
+ ;; (goto-char (point-min))
+ ;; (skip-chars-forward mail-extr-non-begin-name-chars)
+ ;; (point)))
- ;; Handle BITNET LISTSERV list names.
- ((and (eq word-count 0)
- (looking-at mail-extr-listserv-list-name-pattern))
- (narrow-to-region (match-beginning 1) (match-end 1))
- (setq word-found-flag t)
- (setq name-done-flag t))
-
- ;; Handle & substitution, when & is last and is not first.
- ((and (> word-count 0)
- (eq ?\ (preceding-char))
- (eq (following-char) ?&)
- (eq (1+ (point)) (point-max)))
- (delete-char 1)
- (capitalize-region
- (point)
- (progn
- (insert-buffer-substring canonicalization-buffer
- mbox-beg mbox-end)
- (point)))
- (setq disable-initial-guessing-flag t)
- (setq word-found-flag t))
-
- ;; Handle & between names, as in "Bob & Susie".
- ((and (> word-count 0) (eq (following-char) ?\&))
- (setq name-beg (point))
- (setq name-end (1+ name-beg))
- (setq word-found-flag t)
- (goto-char name-end))
-
- ;; Regular name words
- ((looking-at mail-extr-name-pattern)
- (setq name-beg (point))
- (setq name-end (match-end 0))
-
- ;; Certain words will be dropped if they are at the end.
- (and (>= word-count 2)
- (not lower-case-flag)
- (or
- ;; Trailing 4-or-more letter lowercase words preceded by
- ;; mixed case or uppercase words will be dropped.
- (looking-at "[a-z][a-z][a-z][a-z]+[ \t]*\\'") ;; XEmacs
- ;; Drop a trailing word which is terminated with a period.
- (eq ?. (char-after (1- name-end))))
- (setq drop-this-word-if-trailing-flag t))
-
- ;; Set the flags that indicate whether we have seen a lowercase
- ;; word, a mixed case word, and an uppercase word.
- (if (re-search-forward "[a-z]" name-end t)
- (if (progn
- (goto-char name-beg)
- (re-search-forward "[A-Z]" name-end t))
- (setq mixed-case-flag t)
- (setq lower-case-flag t))
-;; (setq upper-case-flag t)
- )
-
- (goto-char name-end)
- (setq word-found-flag t))
-
- ;; Allow a number as a word, if it doesn't mean anything else.
- ((looking-at "[0-9]+\\>")
- (setq name-beg (point))
- (setq name-end (match-end 0))
- (goto-char name-end)
- (setq word-found-flag t))
-
- (t
- (setq name-done-flag t)
- ))
-
- ;; Count any word that we skipped over.
- (if word-found-flag
- (setq word-count (1+ word-count))))
-
- ;; If the last thing in the name is 2 or more periods, or one or more
- ;; other sentence terminators (but not a single period) then keep them
- ;; and the preceding word. This is for the benefit of whole sentences
- ;; in the name field: it's better behavior than dropping the last word
- ;; of the sentence...
- (if (and (not suffix-flag)
- (looking-at "\\(\\.+\\|[?!;:.][?!;:.]+\\|[?!;:][?!;:.]*\\)\\'"))
- (goto-char (setq suffix-flag (point-max))))
-
- ;; Drop everything after point and certain trailing words.
- (narrow-to-region (point-min)
- (or (and drop-last-word-if-trailing-flag
- last-word-beg)
- (point)))
-
- ;; Xerox's mailers SUCK!!!!!!
- ;; We simply refuse to believe that any last name is PARC or ADOC.
- ;; If it looks like that is the last name, that there is no meaningful
- ;; here at all. Actually I guess it would be best to map patterns
- ;; like foo.hoser(a)xerox.com into foo(a)hoser.xerox.com, but I don't
- ;; actually know that that is what's going on.
- (unless suffix-flag
+ ;; Compress whitespace
(goto-char (point-min))
- (let ((case-fold-search t))
- (if (looking-at "[-A-Za-z_]+[. ]\\(PARC\\|ADOC\\)\\'")
- (erase-buffer))))
-
- ;; If last name first put it at end (but before suffix)
- (when last-name-comma-flag
- (goto-char (point-min))
- (search-forward ",")
- (setq name-end (1- (point)))
- (goto-char (or suffix-flag (point-max)))
- (or (eq ?\ (preceding-char))
- (insert ?\ ))
- (insert-buffer-substring (current-buffer) (point-min) name-end)
- (goto-char name-end)
- (skip-chars-forward "\t ,")
- (narrow-to-region (point) (point-max)))
-
- ;; Delete leading and trailing junk characters.
- ;; *** This is probably completely unneeded now.
- ;;(goto-char (point-max))
- ;;(skip-chars-backward mail-extr-non-end-name-chars)
- ;;(if (eq ?. (following-char))
- ;; (forward-char 1))
- ;;(narrow-to-region (point)
- ;; (progn
- ;; (goto-char (point-min))
- ;; (skip-chars-forward mail-extr-non-begin-name-chars)
- ;; (point)))
-
- ;; Compress whitespace
- (goto-char (point-min))
- (while (re-search-forward "[ \t\n]+" nil t)
- (replace-match (if (eobp) "" " ") t))
- )))
+ (while (re-search-forward "[ \t\n]+" nil t)
+ (replace-match (if (eobp) "" " ") t))
+ ))))
@@ -1822,7 +1880,7 @@
;; http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/...
;; http://www.iana.org/domain-names.htm
;; http://www.iana.org/cctld/cctld-whois.htm
-;; Latest change: Mon Jul 8 14:21:59 CEST 2002
+;; Latest change: 2007/11/15
(defconst mail-extr-all-top-level-domains
(let ((ob (make-vector 739 0)))
@@ -1835,6 +1893,7 @@
(nth 1 x))))
'(
;; ISO 3166 codes:
+ ("ac" "Ascension Island")
("ad" "Andorra")
("ae" "United Arab Emirates")
("af" "Afghanistan")
@@ -1850,6 +1909,7 @@
("at" "Austria" "The Republic of %s")
("au" "Australia")
("aw" "Aruba")
+ ("ax" "Aland Islands")
("az" "Azerbaijan")
("ba" "Bosnia-Herzegovina")
("bb" "Barbados")
@@ -1860,6 +1920,7 @@
("bh" "Bahrain")
("bi" "Burundi")
("bj" "Benin")
+ ("bl" "Saint Barthelemy")
("bm" "Bermuda")
("bn" "Brunei Darussalam")
("bo" "Bolivia" "Republic of %s")
@@ -1901,6 +1962,7 @@
("er" "Eritrea")
("es" "Spain" "The Kingdom of %s")
("et" "Ethiopia")
+ ("eu" "European Union")
("fi" "Finland" "The Republic of %s")
("fj" "Fiji")
("fk" "Falkland Islands (Malvinas)")
@@ -1912,6 +1974,7 @@
("gd" "Grenada")
("ge" "Georgia")
("gf" "French Guiana")
+ ("gg" "Guernsey")
("gh" "Ghana")
("gi" "Gibraltar")
("gl" "Greenland")
@@ -1926,7 +1989,7 @@
("gw" "Guinea-Bissau")
("gy" "Guyana")
("hk" "Hong Kong")
- ("hm" "Heard Island and Mcdonald Islands")
+ ("hm" "Heard Island and McDonald Islands")
("hn" "Honduras")
("hr" "Croatia" "Croatia (Hrvatska)")
("ht" "Haiti")
@@ -1941,6 +2004,7 @@
("ir" "Iran" "Islamic Republic of %s")
("is" "Iceland" "The Republic of %s")
("it" "Italy" "The Italian Republic")
+ ("je" "Jersey")
("jm" "Jamaica")
("jo" "Jordan")
("jp" "Japan")
@@ -1969,6 +2033,8 @@
("ma" "Morocco")
("mc" "Monaco")
("md" "Moldova" "The Republic of %s")
+ ("me" "Montenegro")
+ ("mf" "Saint Martin (French part)")
("mg" "Madagascar")
("mh" "Marshall Islands")
("mk" "Macedonia" "The Former Yugoslav Republic of %s")
@@ -2017,6 +2083,7 @@
("qa" "Qatar")
("re" "Reunion (Fr.)") ; In .fr domain
("ro" "Romania")
+ ("rs" "Serbia")
("ru" "Russia" "Russian Federation")
("rw" "Rwanda")
("sa" "Saudi Arabia")
@@ -2080,15 +2147,21 @@
("zw" "Zimbabwe" "Republic of %s")
;; Generic Domains:
("aero" t "Air Transport Industry")
+ ("asia" t "Pan-Asia and Asia Pacific community")
("biz" t "Businesses")
+ ("cat" t "Catalan language and culture")
("com" t "Commercial")
("coop" t "Cooperative Associations")
("info" t "Info")
+ ("jobs" t "Employment")
+ ("mobi" t "Mobile products")
("museum" t "Museums")
("name" t "Individuals")
("net" t "Network")
("org" t "Non-profit Organization")
- ;;("pro" t "Credentialed professionals")
+ ("pro" t "Credentialed professionals")
+ ("tel" t "Contact data")
+ ("travel" t "Travel industry")
;;("bitnet" t "Because It's Time NET")
("gov" t "United States Government")
("edu" t "Educational")
@@ -2128,5 +2201,4 @@
(provide 'mail-extr)
-;;; arch-tag: 7785fade-1073-4ed6-b4f6-28db34a7982d
;;; mail-extr.el ends here
https://bitbucket.org/xemacs/mail-lib/commits/d85eeaca795d/
Changeset: d85eeaca795d
User: kehoea
Date: 2017-03-22 21:55:55+00:00
Summary: Make `mail-extr-all-top-level-domains' into a hash-table literal, mail-extr.el
ChangeLog addition:
2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
* mail-extr.el:
* mail-extr.el (require):
* mail-extr.el (mail-extract-address-components):
* mail-extr.el (mail-extr-all-top-level-domains):
* mail-extr.el (what-domain):
Make `mail-extr-all-top-level-domains' into a hash-table literal
created at macro-expansion time, rather than an obarray created at
load time, for the sake of not calling #'format a bunch of times
at load time, something that recently started complaining about
extra arguments on debug XEmacs builds. This also gives a slight
speedup.
Use the hash table functions in order to do this.
Handle those versions of XEmacs where #'completing-read isn't
compatible with a hash-table COLLECTION within
Affected #: 2 files
diff -r 7c59d90e8c3957eb3dc3ac85e732c42ac448ed1f -r d85eeaca795d9c459be7f6b369b8a544a7de56d5 ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * mail-extr.el:
+ * mail-extr.el (require):
+ * mail-extr.el (mail-extract-address-components):
+ * mail-extr.el (mail-extr-all-top-level-domains):
+ * mail-extr.el (what-domain):
+ Make `mail-extr-all-top-level-domains' into a hash-table literal
+ created at macro-expansion time, rather than an obarray created at
+ load time, for the sake of not calling #'format a bunch of times
+ at load time, something that recently started complaining about
+ extra arguments on debug XEmacs builds. This also gives a slight
+ speedup.
+ Use the hash table functions in order to do this.
+ Handle those versions of XEmacs where #'completing-read isn't
+ compatible with a hash-table COLLECTION within
+
2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
* mail-extr.el:
diff -r 7c59d90e8c3957eb3dc3ac85e732c42ac448ed1f -r d85eeaca795d9c459be7f6b369b8a544a7de56d5 mail-extr.el
--- a/mail-extr.el
+++ b/mail-extr.el
@@ -212,6 +212,8 @@
(if (featurep 'xemacs) ;; Purespace obsolete in XEmacs.
(define-compiler-macro purecopy (&whole form argument) argument)))
+(eval-when-compile (require 'cl))
+
(defgroup mail-extr nil
"Extract full name and address from RFC 822 mail header."
:prefix "mail-extr-"
@@ -1201,10 +1203,8 @@
(setq \.-pos (eq ?. (preceding-char))))
(when (and \.-pos
;; #### string consing
- (let ((s (intern-soft
- (buffer-substring domain-pos (point))
- mail-extr-all-top-level-domains)))
- (and s (get s 'domain-name))))
+ (gethash (buffer-substring domain-pos (point))
+ mail-extr-all-top-level-domains))
(narrow-to-region (point-min) (point))
(goto-char (car temp))
(delete-char 1)
@@ -1883,308 +1883,315 @@
;; Latest change: 2007/11/15
(defconst mail-extr-all-top-level-domains
- (let ((ob (make-vector 739 0)))
- (mapc
- (lambda (x)
- (put (intern (downcase (car x)) ob)
- 'domain-name
- (if (nth 2 x)
- (format (nth 2 x) (nth 1 x))
- (nth 1 x))))
- '(
- ;; ISO 3166 codes:
- ("ac" "Ascension Island")
- ("ad" "Andorra")
- ("ae" "United Arab Emirates")
- ("af" "Afghanistan")
- ("ag" "Antigua and Barbuda")
- ("ai" "Anguilla")
- ("al" "Albania")
- ("am" "Armenia")
- ("an" "Netherlands Antilles")
- ("ao" "Angola")
- ("aq" "Antarctica") ; continent
- ("ar" "Argentina" "Argentine Republic")
- ("as" "American Samoa")
- ("at" "Austria" "The Republic of %s")
- ("au" "Australia")
- ("aw" "Aruba")
- ("ax" "Aland Islands")
- ("az" "Azerbaijan")
- ("ba" "Bosnia-Herzegovina")
- ("bb" "Barbados")
- ("bd" "Bangladesh")
- ("be" "Belgium" "The Kingdom of %s")
- ("bf" "Burkina Faso")
- ("bg" "Bulgaria")
- ("bh" "Bahrain")
- ("bi" "Burundi")
- ("bj" "Benin")
- ("bl" "Saint Barthelemy")
- ("bm" "Bermuda")
- ("bn" "Brunei Darussalam")
- ("bo" "Bolivia" "Republic of %s")
- ("br" "Brazil" "The Federative Republic of %s")
- ("bs" "Bahamas")
- ("bt" "Bhutan")
- ("bv" "Bouvet Island")
- ("bw" "Botswana")
- ("by" "Belarus")
- ("bz" "Belize")
- ("ca" "Canada")
- ("cc" "Cocos (Keeling) Islands")
- ("cd" "Congo" "The Democratic Republic of the %s")
- ("cf" "Central African Republic")
- ("cg" "Congo")
- ("ch" "Switzerland" "The Swiss Confederation")
- ("ci" "Ivory Coast") ; Cote D'ivoire
- ("ck" "Cook Islands")
- ("cl" "Chile" "The Republic of %s")
- ("cm" "Cameroon") ; In .fr domain
- ("cn" "China" "The People's Republic of %s")
- ("co" "Colombia")
- ("cr" "Costa Rica" "The Republic of %s")
- ("cu" "Cuba")
- ("cv" "Cape Verde")
- ("cx" "Christmas Island")
- ("cy" "Cyprus")
- ("cz" "Czech Republic")
- ("de" "Germany")
- ("dj" "Djibouti")
- ("dk" "Denmark")
- ("dm" "Dominica")
- ("do" "Dominican Republic" "The %s")
- ("dz" "Algeria")
- ("ec" "Ecuador" "The Republic of %s")
- ("ee" "Estonia")
- ("eg" "Egypt" "The Arab Republic of %s")
- ("eh" "Western Sahara")
- ("er" "Eritrea")
- ("es" "Spain" "The Kingdom of %s")
- ("et" "Ethiopia")
- ("eu" "European Union")
- ("fi" "Finland" "The Republic of %s")
- ("fj" "Fiji")
- ("fk" "Falkland Islands (Malvinas)")
- ("fm" "Micronesia" "Federated States of %s")
- ("fo" "Faroe Islands")
- ("fr" "France")
- ("ga" "Gabon")
- ("gb" "United Kingdom")
- ("gd" "Grenada")
- ("ge" "Georgia")
- ("gf" "French Guiana")
- ("gg" "Guernsey")
- ("gh" "Ghana")
- ("gi" "Gibraltar")
- ("gl" "Greenland")
- ("gm" "Gambia")
- ("gn" "Guinea")
- ("gp" "Guadeloupe (Fr.)")
- ("gq" "Equatorial Guinea")
- ("gr" "Greece" "The Hellenic Republic (%s)")
- ("gs" "South Georgia and The South Sandwich Islands")
- ("gt" "Guatemala")
- ("gu" "Guam (U.S.)")
- ("gw" "Guinea-Bissau")
- ("gy" "Guyana")
- ("hk" "Hong Kong")
- ("hm" "Heard Island and McDonald Islands")
- ("hn" "Honduras")
- ("hr" "Croatia" "Croatia (Hrvatska)")
- ("ht" "Haiti")
- ("hu" "Hungary" "The Hungarian Republic")
- ("id" "Indonesia")
- ("ie" "Ireland")
- ("il" "Israel" "The State of %s")
- ("im" "Isle of Man" "The %s") ; NOT in ISO 3166-1 of 2001-02-26
- ("in" "India" "The Republic of %s")
- ("io" "British Indian Ocean Territory")
- ("iq" "Iraq")
- ("ir" "Iran" "Islamic Republic of %s")
- ("is" "Iceland" "The Republic of %s")
- ("it" "Italy" "The Italian Republic")
- ("je" "Jersey")
- ("jm" "Jamaica")
- ("jo" "Jordan")
- ("jp" "Japan")
- ("ke" "Kenya")
- ("kg" "Kyrgyzstan")
- ("kh" "Cambodia")
- ("ki" "Kiribati")
- ("km" "Comoros")
- ("kn" "Saint Kitts and Nevis")
- ("kp" "Korea (North)" "Democratic People's Republic of Korea")
- ("kr" "Korea (South)" "Republic of Korea")
- ("kw" "Kuwait")
- ("ky" "Cayman Islands")
- ("kz" "Kazakhstan")
- ("la" "Lao People's Democratic Republic")
- ("lb" "Lebanon")
- ("lc" "Saint Lucia")
- ("li" "Liechtenstein")
- ("lk" "Sri Lanka" "The Democratic Socialist Republic of %s")
- ("lr" "Liberia")
- ("ls" "Lesotho")
- ("lt" "Lithuania")
- ("lu" "Luxembourg")
- ("lv" "Latvia")
- ("ly" "Libyan Arab Jamahiriya")
- ("ma" "Morocco")
- ("mc" "Monaco")
- ("md" "Moldova" "The Republic of %s")
- ("me" "Montenegro")
- ("mf" "Saint Martin (French part)")
- ("mg" "Madagascar")
- ("mh" "Marshall Islands")
- ("mk" "Macedonia" "The Former Yugoslav Republic of %s")
- ("ml" "Mali")
- ("mm" "Myanmar")
- ("mn" "Mongolia")
- ("mo" "Macao")
- ("mp" "Northern Mariana Islands")
- ("mq" "Martinique")
- ("mr" "Mauritania")
- ("ms" "Montserrat")
- ("mt" "Malta")
- ("mu" "Mauritius")
- ("mv" "Maldives")
- ("mw" "Malawi")
- ("mx" "Mexico" "The United Mexican States")
- ("my" "Malaysia")
- ("mz" "Mozambique")
- ("na" "Namibia")
- ("nc" "New Caledonia (Fr.)")
- ("ne" "Niger") ; In .fr domain
- ("nf" "Norfolk Island")
- ("ng" "Nigeria")
- ("ni" "Nicaragua" "The Republic of %s")
- ("nl" "Netherlands" "The Kingdom of the %s")
- ("no" "Norway" "The Kingdom of %s")
- ("np" "Nepal") ; Via .in domain
- ("nr" "Nauru")
- ("nu" "Niue")
- ("nz" "New Zealand")
- ("om" "Oman")
- ("pa" "Panama")
- ("pe" "Peru")
- ("pf" "French Polynesia")
- ("pg" "Papua New Guinea")
- ("ph" "Philippines" "The Republic of the %s")
- ("pk" "Pakistan")
- ("pl" "Poland")
- ("pm" "Saint Pierre and Miquelon")
- ("pn" "Pitcairn")
- ("pr" "Puerto Rico (U.S.)")
- ("ps" "Palestinian Territory, Occupied")
- ("pt" "Portugal" "The Portuguese Republic")
- ("pw" "Palau")
- ("py" "Paraguay")
- ("qa" "Qatar")
- ("re" "Reunion (Fr.)") ; In .fr domain
- ("ro" "Romania")
- ("rs" "Serbia")
- ("ru" "Russia" "Russian Federation")
- ("rw" "Rwanda")
- ("sa" "Saudi Arabia")
- ("sb" "Solomon Islands")
- ("sc" "Seychelles")
- ("sd" "Sudan")
- ("se" "Sweden" "The Kingdom of %s")
- ("sg" "Singapore" "The Republic of %s")
- ("sh" "Saint Helena")
- ("si" "Slovenia")
- ("sj" "Svalbard and Jan Mayen") ; In .no domain
- ("sk" "Slovakia" "The Slovak Republic")
- ("sl" "Sierra Leone")
- ("sm" "San Marino")
- ("sn" "Senegal")
- ("so" "Somalia")
- ("sr" "Suriname")
- ("st" "Sao Tome and Principe")
- ("su" "U.S.S.R." "The Union of Soviet Socialist Republics")
- ("sv" "El Salvador")
- ("sy" "Syrian Arab Republic")
- ("sz" "Swaziland")
- ("tc" "Turks and Caicos Islands")
- ("td" "Chad")
- ("tf" "French Southern Territories")
- ("tg" "Togo")
- ("th" "Thailand" "The Kingdom of %s")
- ("tj" "Tajikistan")
- ("tk" "Tokelau")
- ("tl" "East Timor")
- ("tm" "Turkmenistan")
- ("tn" "Tunisia")
- ("to" "Tonga")
- ("tp" "East Timor")
- ("tr" "Turkey" "The Republic of %s")
- ("tt" "Trinidad and Tobago")
- ("tv" "Tuvalu")
- ("tw" "Taiwan" "%s, Province of China")
- ("tz" "Tanzania" "United Republic of %s")
- ("ua" "Ukraine")
- ("ug" "Uganda")
- ("uk" "United Kingdom" "The %s of Great Britain and Northern Ireland")
- ("um" "United States Minor Outlying Islands")
- ("us" "United States" "The %s of America")
- ("uy" "Uruguay" "The Eastern Republic of %s")
- ("uz" "Uzbekistan")
- ("va" "Holy See (Vatican City State)")
- ("vc" "Saint Vincent and the Grenadines")
- ("ve" "Venezuela" "The Republic of %s")
- ("vg" "Virgin Islands, British")
- ("vi" "Virgin Islands, U.S.")
- ("vn" "Vietnam")
- ("vu" "Vanuatu")
- ("wf" "Wallis and Futuna")
- ("ws" "Samoa")
- ("ye" "Yemen")
- ("yt" "Mayotte")
- ("yu" "Yugoslavia" "Yugoslavia, AKA Serbia-Montenegro")
- ("za" "South Africa" "The Republic of %s")
- ("zm" "Zambia")
- ("zw" "Zimbabwe" "Republic of %s")
- ;; Generic Domains:
- ("aero" t "Air Transport Industry")
- ("asia" t "Pan-Asia and Asia Pacific community")
- ("biz" t "Businesses")
- ("cat" t "Catalan language and culture")
- ("com" t "Commercial")
- ("coop" t "Cooperative Associations")
- ("info" t "Info")
- ("jobs" t "Employment")
- ("mobi" t "Mobile products")
- ("museum" t "Museums")
- ("name" t "Individuals")
- ("net" t "Network")
- ("org" t "Non-profit Organization")
- ("pro" t "Credentialed professionals")
- ("tel" t "Contact data")
- ("travel" t "Travel industry")
- ;;("bitnet" t "Because It's Time NET")
- ("gov" t "United States Government")
- ("edu" t "Educational")
- ("mil" t "United States Military")
- ("int" t "International Treaties")
- ;;("nato" t "North Atlantic Treaty Organization")
- ("uucp" t "Unix to Unix CoPy")
- ;; Infrastructure Domains:
- ("arpa" t "Advanced Research Projects Agency (U.S. DoD)")
- ))
- ob))
-
+ ((macro
+ . (lambda (&rest details)
+ (let ((ob (make-hash-table :test 'equal)))
+ (mapc
+ (lambda (x)
+ (puthash (downcase (car x)) (if (find ?% (nth 2 x))
+ (format (nth 2 x) (nth 1 x))
+ (nth 1 x))
+ ob))
+ details)
+ ob)))
+ ;; ISO 3166 codes:
+ ("ac" "Ascension Island")
+ ("ad" "Andorra")
+ ("ae" "United Arab Emirates")
+ ("af" "Afghanistan")
+ ("ag" "Antigua and Barbuda")
+ ("ai" "Anguilla")
+ ("al" "Albania")
+ ("am" "Armenia")
+ ("an" "Netherlands Antilles")
+ ("ao" "Angola")
+ ("aq" "Antarctica") ; continent
+ ("ar" "Argentina" "Argentine Republic")
+ ("as" "American Samoa")
+ ("at" "Austria" "The Republic of %s")
+ ("au" "Australia")
+ ("aw" "Aruba")
+ ("ax" "Aland Islands")
+ ("az" "Azerbaijan")
+ ("ba" "Bosnia-Herzegovina")
+ ("bb" "Barbados")
+ ("bd" "Bangladesh")
+ ("be" "Belgium" "The Kingdom of %s")
+ ("bf" "Burkina Faso")
+ ("bg" "Bulgaria")
+ ("bh" "Bahrain")
+ ("bi" "Burundi")
+ ("bj" "Benin")
+ ("bl" "Saint Barthelemy")
+ ("bm" "Bermuda")
+ ("bn" "Brunei Darussalam")
+ ("bo" "Bolivia" "Republic of %s")
+ ("br" "Brazil" "The Federative Republic of %s")
+ ("bs" "Bahamas")
+ ("bt" "Bhutan")
+ ("bv" "Bouvet Island")
+ ("bw" "Botswana")
+ ("by" "Belarus")
+ ("bz" "Belize")
+ ("ca" "Canada")
+ ("cc" "Cocos (Keeling) Islands")
+ ("cd" "Congo" "The Democratic Republic of the %s")
+ ("cf" "Central African Republic")
+ ("cg" "Congo")
+ ("ch" "Switzerland" "The Swiss Confederation")
+ ("ci" "Ivory Coast") ; Cote D'ivoire
+ ("ck" "Cook Islands")
+ ("cl" "Chile" "The Republic of %s")
+ ("cm" "Cameroon") ; In .fr domain
+ ("cn" "China" "The People's Republic of %s")
+ ("co" "Colombia")
+ ("cr" "Costa Rica" "The Republic of %s")
+ ("cu" "Cuba")
+ ("cv" "Cape Verde")
+ ("cx" "Christmas Island")
+ ("cy" "Cyprus")
+ ("cz" "Czech Republic")
+ ("de" "Germany")
+ ("dj" "Djibouti")
+ ("dk" "Denmark")
+ ("dm" "Dominica")
+ ("do" "Dominican Republic" "The %s")
+ ("dz" "Algeria")
+ ("ec" "Ecuador" "The Republic of %s")
+ ("ee" "Estonia")
+ ("eg" "Egypt" "The Arab Republic of %s")
+ ("eh" "Western Sahara")
+ ("er" "Eritrea")
+ ("es" "Spain" "The Kingdom of %s")
+ ("et" "Ethiopia")
+ ("eu" "European Union")
+ ("fi" "Finland" "The Republic of %s")
+ ("fj" "Fiji")
+ ("fk" "Falkland Islands (Malvinas)")
+ ("fm" "Micronesia" "Federated States of %s")
+ ("fo" "Faroe Islands")
+ ("fr" "France")
+ ("ga" "Gabon")
+ ("gb" "United Kingdom")
+ ("gd" "Grenada")
+ ("ge" "Georgia")
+ ("gf" "French Guiana")
+ ("gg" "Guernsey")
+ ("gh" "Ghana")
+ ("gi" "Gibraltar")
+ ("gl" "Greenland")
+ ("gm" "Gambia")
+ ("gn" "Guinea")
+ ("gp" "Guadeloupe (Fr.)")
+ ("gq" "Equatorial Guinea")
+ ("gr" "Greece" "The Hellenic Republic (%s)")
+ ("gs" "South Georgia and The South Sandwich Islands")
+ ("gt" "Guatemala")
+ ("gu" "Guam (U.S.)")
+ ("gw" "Guinea-Bissau")
+ ("gy" "Guyana")
+ ("hk" "Hong Kong")
+ ("hm" "Heard Island and McDonald Islands")
+ ("hn" "Honduras")
+ ("hr" "Croatia" "Croatia (Hrvatska)")
+ ("ht" "Haiti")
+ ("hu" "Hungary" "The Hungarian Republic")
+ ("id" "Indonesia")
+ ("ie" "Ireland")
+ ("il" "Israel" "The State of %s")
+ ("im" "Isle of Man" "The %s") ; NOT in ISO 3166-1 of 2001-02-26
+ ("in" "India" "The Republic of %s")
+ ("io" "British Indian Ocean Territory")
+ ("iq" "Iraq")
+ ("ir" "Iran" "Islamic Republic of %s")
+ ("is" "Iceland" "The Republic of %s")
+ ("it" "Italy" "The Italian Republic")
+ ("je" "Jersey")
+ ("jm" "Jamaica")
+ ("jo" "Jordan")
+ ("jp" "Japan")
+ ("ke" "Kenya")
+ ("kg" "Kyrgyzstan")
+ ("kh" "Cambodia")
+ ("ki" "Kiribati")
+ ("km" "Comoros")
+ ("kn" "Saint Kitts and Nevis")
+ ("kp" "Korea (North)" "Democratic People's Republic of Korea")
+ ("kr" "Korea (South)" "Republic of Korea")
+ ("kw" "Kuwait")
+ ("ky" "Cayman Islands")
+ ("kz" "Kazakhstan")
+ ("la" "Lao People's Democratic Republic")
+ ("lb" "Lebanon")
+ ("lc" "Saint Lucia")
+ ("li" "Liechtenstein")
+ ("lk" "Sri Lanka" "The Democratic Socialist Republic of %s")
+ ("lr" "Liberia")
+ ("ls" "Lesotho")
+ ("lt" "Lithuania")
+ ("lu" "Luxembourg")
+ ("lv" "Latvia")
+ ("ly" "Libyan Arab Jamahiriya")
+ ("ma" "Morocco")
+ ("mc" "Monaco")
+ ("md" "Moldova" "The Republic of %s")
+ ("me" "Montenegro")
+ ("mf" "Saint Martin (French part)")
+ ("mg" "Madagascar")
+ ("mh" "Marshall Islands")
+ ("mk" "Macedonia" "The Former Yugoslav Republic of %s")
+ ("ml" "Mali")
+ ("mm" "Myanmar")
+ ("mn" "Mongolia")
+ ("mo" "Macao")
+ ("mp" "Northern Mariana Islands")
+ ("mq" "Martinique")
+ ("mr" "Mauritania")
+ ("ms" "Montserrat")
+ ("mt" "Malta")
+ ("mu" "Mauritius")
+ ("mv" "Maldives")
+ ("mw" "Malawi")
+ ("mx" "Mexico" "The United Mexican States")
+ ("my" "Malaysia")
+ ("mz" "Mozambique")
+ ("na" "Namibia")
+ ("nc" "New Caledonia (Fr.)")
+ ("ne" "Niger") ; In .fr domain
+ ("nf" "Norfolk Island")
+ ("ng" "Nigeria")
+ ("ni" "Nicaragua" "The Republic of %s")
+ ("nl" "Netherlands" "The Kingdom of the %s")
+ ("no" "Norway" "The Kingdom of %s")
+ ("np" "Nepal") ; Via .in domain
+ ("nr" "Nauru")
+ ("nu" "Niue")
+ ("nz" "New Zealand")
+ ("om" "Oman")
+ ("pa" "Panama")
+ ("pe" "Peru")
+ ("pf" "French Polynesia")
+ ("pg" "Papua New Guinea")
+ ("ph" "Philippines" "The Republic of the %s")
+ ("pk" "Pakistan")
+ ("pl" "Poland")
+ ("pm" "Saint Pierre and Miquelon")
+ ("pn" "Pitcairn")
+ ("pr" "Puerto Rico (U.S.)")
+ ("ps" "Palestinian Territory, Occupied")
+ ("pt" "Portugal" "The Portuguese Republic")
+ ("pw" "Palau")
+ ("py" "Paraguay")
+ ("qa" "Qatar")
+ ("re" "Reunion (Fr.)") ; In .fr domain
+ ("ro" "Romania")
+ ("rs" "Serbia")
+ ("ru" "Russia" "Russian Federation")
+ ("rw" "Rwanda")
+ ("sa" "Saudi Arabia")
+ ("sb" "Solomon Islands")
+ ("sc" "Seychelles")
+ ("sd" "Sudan")
+ ("se" "Sweden" "The Kingdom of %s")
+ ("sg" "Singapore" "The Republic of %s")
+ ("sh" "Saint Helena")
+ ("si" "Slovenia")
+ ("sj" "Svalbard and Jan Mayen") ; In .no domain
+ ("sk" "Slovakia" "The Slovak Republic")
+ ("sl" "Sierra Leone")
+ ("sm" "San Marino")
+ ("sn" "Senegal")
+ ("so" "Somalia")
+ ("sr" "Suriname")
+ ("st" "Sao Tome and Principe")
+ ("su" "U.S.S.R." "The Union of Soviet Socialist Republics")
+ ("sv" "El Salvador")
+ ("sy" "Syrian Arab Republic")
+ ("sz" "Swaziland")
+ ("tc" "Turks and Caicos Islands")
+ ("td" "Chad")
+ ("tf" "French Southern Territories")
+ ("tg" "Togo")
+ ("th" "Thailand" "The Kingdom of %s")
+ ("tj" "Tajikistan")
+ ("tk" "Tokelau")
+ ("tl" "East Timor")
+ ("tm" "Turkmenistan")
+ ("tn" "Tunisia")
+ ("to" "Tonga")
+ ("tp" "East Timor")
+ ("tr" "Turkey" "The Republic of %s")
+ ("tt" "Trinidad and Tobago")
+ ("tv" "Tuvalu")
+ ("tw" "Taiwan" "%s, Province of China")
+ ("tz" "Tanzania" "United Republic of %s")
+ ("ua" "Ukraine")
+ ("ug" "Uganda")
+ ("uk" "United Kingdom" "The %s of Great Britain and Northern Ireland")
+ ("um" "United States Minor Outlying Islands")
+ ("us" "United States" "The %s of America")
+ ("uy" "Uruguay" "The Eastern Republic of %s")
+ ("uz" "Uzbekistan")
+ ("va" "Holy See (Vatican City State)")
+ ("vc" "Saint Vincent and the Grenadines")
+ ("ve" "Venezuela" "The Republic of %s")
+ ("vg" "Virgin Islands, British")
+ ("vi" "Virgin Islands, U.S.")
+ ("vn" "Vietnam")
+ ("vu" "Vanuatu")
+ ("wf" "Wallis and Futuna")
+ ("ws" "Samoa")
+ ("ye" "Yemen")
+ ("yt" "Mayotte")
+ ("yu" "Yugoslavia" "Yugoslavia, AKA Serbia-Montenegro")
+ ("za" "South Africa" "The Republic of %s")
+ ("zm" "Zambia")
+ ("zw" "Zimbabwe" "Republic of %s")
+ ;; Generic Domains:
+ ("aero" "Air Transport Industry")
+ ("asia" "Pan-Asia and Asia Pacific community")
+ ("biz" "Businesses")
+ ("cat" "Catalan language and culture")
+ ("com" "Commercial")
+ ("coop" "Cooperative Associations")
+ ("info" "Info")
+ ("jobs" "Employment")
+ ("mobi" "Mobile products")
+ ("museum" "Museums")
+ ("name" "Individuals")
+ ("net" "Network")
+ ("org" "Non-profit Organization")
+ ("pro" "Credentialed professionals")
+ ("tel" "Contact data")
+ ("travel" "Travel industry")
+ ;;("bitnet" "Because It's Time NET")
+ ("gov" "United States Government")
+ ("edu" "Educational")
+ ("mil" "United States Military")
+ ("int" "International Treaties")
+ ;;("nato" "North Atlantic Treaty Organization")
+ ("uucp" "Unix to Unix CoPy")
+ ;; Infrastructure Domains:
+ ("arpa" "Advanced Research Projects Agency (U.S. DoD)")))
+
;;;###autoload
(defun what-domain (domain)
"Convert mail domain DOMAIN to the country it corresponds to."
(interactive
- (let ((completion-ignore-case t))
- (list (completing-read "Domain: "
- mail-extr-all-top-level-domains nil t))))
- (or (setq domain (intern-soft (downcase domain)
- mail-extr-all-top-level-domains))
- (error "No such domain"))
- (message "%s: %s" (upcase (symbol-name domain)) (get domain 'domain-name)))
+ (let ((completion-ignore-case t)
+ (table (if (fboundp 'exact-minibuffer-completion-p)
+ ;; XEmacs 21.4. Kludge; cons up a table at completion
+ ;; time. This is fine, #'what-domain isn't called
+ ;; interactively that often.
+ (let (alist)
+ (maphash #'(lambda (key value) (push (cons key t) alist))
+ mail-extr-all-top-level-domains)
+ alist)
+ mail-extr-all-top-level-domains)))
+ (list (completing-read "Domain: " table nil t))))
+ (let ((value (gethash (downcase domain) mail-extr-all-top-level-domains)))
+ (or value (error "No such domain"))
+ (message "%s: %s" (upcase domain) value)))
;(let ((all nil))
https://bitbucket.org/xemacs/mail-lib/commits/1c64383aba3f/
Changeset: 1c64383aba3f
User: kehoea
Date: 2017-03-22 23:38:30+00:00
Summary: Update mail-extr-all-top-level-domains with recently-added TLDs from IANA
ChangeLog addition:
2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
* mail-extr.el:
* mail-extr.el (mail-extr-all-top-level-domains):
Update this with the many more top level domains added since
2007. Include the non-ASCII domains, but leave them commented out
since the XEmacs package build still supports non-Mule.
Affected #: 2 files
diff -r d85eeaca795d9c459be7f6b369b8a544a7de56d5 -r 1c64383aba3f531f18a964b1958d8d4a40c9075b ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * mail-extr.el:
+ * mail-extr.el (mail-extr-all-top-level-domains):
+ Update this with the many more top level domains added since
+ 2007. Include the non-ASCII domains, but leave them commented out
+ since the XEmacs package build still supports non-Mule.
+
2017-03-22 Aidan Kehoe <kehoea(a)parhasard.net>
* mail-extr.el:
diff -r d85eeaca795d9c459be7f6b369b8a544a7de56d5 -r 1c64383aba3f531f18a964b1958d8d4a40c9075b mail-extr.el
--- a/mail-extr.el
+++ b/mail-extr.el
@@ -1,4 +1,5 @@
;;; mail-extr.el --- extract full name and address from RFC 822 mail header
+;;; -*- coding: utf-8 -*-
;; Copyright (C) 1991-1994, 1997, 2001-2017 Free Software Foundation,
;; Inc.
@@ -1876,21 +1877,32 @@
;;
;; Updated by the RIPE Network Coordination Centre.
;;
-;; Source: ISO 3166 Maintenance Agency
-;; http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/...
-;; http://www.iana.org/domain-names.htm
-;; http://www.iana.org/cctld/cctld-whois.htm
-;; Latest change: 2007/11/15
+;; Data last taken from IANA 2017-03-22, the following URL:
+;; https://www.iana.org/domains/root/db
+;;
+;; In general the Wikipedia data seems to be better these days; e.g. the IANA
+;; data often gives the name of a company that doesn't give any indication as
+;; to the intended or actual use of the domain.
(defconst mail-extr-all-top-level-domains
((macro
. (lambda (&rest details)
- (let ((ob (make-hash-table :test 'equal)))
+ (let ((ob (make-hash-table :test 'equal))
+ (transform
+ (if (and (featurep 'mule) (not (featurep 'xemacs)))
+ #'(lambda (string)
+ ;; Sigh, good old GNU and its unibyte strings, which
+ ;; conflict with the ASCII escapes we're using to
+ ;; avoid problems with non-Mule XEmacs:
+ (decode-coding-string string 'iso-8859-1))
+ #'identity)))
(mapc
(lambda (x)
- (puthash (downcase (car x)) (if (find ?% (nth 2 x))
- (format (nth 2 x) (nth 1 x))
- (nth 1 x))
+ (puthash (downcase (car x))
+ (funcall transform
+ (if (find ?% (nth 2 x))
+ (format (nth 2 x) (nth 1 x))
+ (nth 1 x)))
ob))
details)
ob)))
@@ -1948,6 +1960,7 @@
("cr" "Costa Rica" "The Republic of %s")
("cu" "Cuba")
("cv" "Cape Verde")
+ ("cw" "Cura\347\343o")
("cx" "Christmas Island")
("cy" "Cyprus")
("cz" "Czech Republic")
@@ -2106,6 +2119,7 @@
("st" "Sao Tome and Principe")
("su" "U.S.S.R." "The Union of Soviet Socialist Republics")
("sv" "El Salvador")
+ ("sx" "Sint Maarten")
("sy" "Syrian Arab Republic")
("sz" "Swaziland")
("tc" "Turks and Caicos Islands")
@@ -2172,7 +2186,1280 @@
;;("nato" "North Atlantic Treaty Organization")
("uucp" "Unix to Unix CoPy")
;; Infrastructure Domains:
- ("arpa" "Advanced Research Projects Agency (U.S. DoD)")))
+ ("arpa" "Advanced Research Projects Agency (U.S. DoD)")
+
+ ;; Generic codes
+ ("aaa" "American Automobile Association, Inc.")
+ ("aarp" "AARP")
+ ("abarth" "Fiat Chrysler Automobiles N.V.")
+ ("abb" "ABB Ltd")
+ ("abbott" "Abbott Laboratories, Inc.")
+ ("abbvie" "AbbVie Inc.")
+ ("abc" "Disney Enterprises, Inc.")
+ ("able" "Able Inc.")
+ ("abogado" "Top Level Domain Holdings Limited")
+ ("abudhabi" "Abu Dhabi Systems and Information Centre")
+ ("academy" "Half Oaks, LLC")
+ ("accenture" "Accenture plc")
+ ("accountant" "dot Accountant Limited")
+ ("accountants" "Knob Town, LLC")
+ ("aco" "ACO Severin Ahlmann GmbH & Co. KG")
+ ("active" "Active Network, LLC")
+ ("actor" "United TLD Holdco Ltd.")
+ ("adac" "Allgemeiner Deutscher Automobil-Club e.V. (ADAC)")
+ ("ads" "Charleston Road Registry Inc.")
+ ("adult" "ICM Registry AD LLC")
+ ("aeg" "Aktiebolaget Electrolux")
+ ("aetna" "Aetna Life Insurance Company")
+ ("afamilycompany" "Johnson Shareholdings, Inc.")
+ ("afl" "Australian Football League")
+ ("africa" "ZA Central Registry NPC trading as Registry.Africa")
+ ("agakhan" "Fondation Aga Khan (Aga Khan Foundation)")
+ ("agency" "Steel Falls, LLC")
+ ("aig" "American International Group, Inc.")
+ ("aigo" "aigo Digital Technology Co,Ltd.")
+ ("airbus" "Airbus S.A.S.")
+ ("airforce" "United TLD Holdco Ltd.")
+ ("airtel" "Bharti Airtel Limited")
+ ("akdn" "Fondation Aga Khan (Aga Khan Foundation)")
+ ("alfaromeo" "Fiat Chrysler Automobiles N.V.")
+ ("alibaba" "Alibaba Group Holding Limited")
+ ("alipay" "Alibaba Group Holding Limited")
+ ("allfinanz" "Allfinanz Deutsche Verm\xf6gensberatung Aktiengesellschaft")
+ ("allstate" "Allstate Fire and Casualty Insurance Company")
+ ("ally" "Ally Financial Inc.")
+ ("alsace" "REGION GRAND EST")
+ ("alstom" "ALSTOM")
+ ("americanexpress" "American Express Travel Related Services Company, Inc.")
+ ("americanfamily" "AmFam, Inc.")
+ ("amex" "American Express Travel Related Services Company, Inc.")
+ ("amfam" "AmFam, Inc.")
+ ("amica" "Amica Mutual Insurance Company")
+ ("amsterdam" "Gemeente Amsterdam")
+ ("analytics" "Campus IP LLC")
+ ("android" "Charleston Road Registry Inc.")
+ ("anquan" "QIHOO 360 TECHNOLOGY CO. LTD.")
+ ("anz" "Australia and New Zealand Banking Group Limited")
+ ("aol" "AOL Inc.")
+ ("apartments" "June Maple, LLC")
+ ("app" "Charleston Road Registry Inc.")
+ ("apple" "Apple Inc.")
+ ("aquarelle" "Aquarelle.com")
+ ("aramco" "Aramco Services Company")
+ ("archi" "STARTING DOT LIMITED")
+ ("army" "United TLD Holdco Ltd.")
+ ("art" "UK Creative Ideas Limited")
+ ("arte" "Association Relative \340 la T\351l\351vision Europ\351enne G.E.I.E.")
+ ("asda" "Wal-Mart Stores, Inc.")
+ ("associates" "Baxter Hill, LLC")
+ ("athleta" "The Gap, Inc.")
+ ("attorney" "United TLD Holdco, Ltd")
+ ("auction" "United TLD HoldCo, Ltd.")
+ ("audi" "AUDI Aktiengesellschaft")
+ ("audible" "Amazon Registry Services, Inc.")
+ ("audio" "Uniregistry, Corp.")
+ ("auspost" "Australian Postal Corporation")
+ ("author" "Amazon Registry Services, Inc.")
+ ("auto" "Cars Registry Limited")
+ ("autos" "DERAutos, LLC")
+ ("avianca" "Aerovias del Continente Americano S.A. Avianca")
+ ("aws" "Amazon Registry Services, Inc.")
+ ("axa" "AXA SA")
+ ("azure" "Microsoft Corporation")
+ ("baby" "Johnson & Johnson Services, Inc.")
+ ("baidu" "Baidu, Inc.")
+ ("banamex" "Citigroup Inc.")
+ ("bananarepublic" "The Gap, Inc.")
+ ("band" "United TLD Holdco, Ltd")
+ ("bank" "fTLD Registry Services, LLC")
+ ("bar" "Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable")
+ ("barcelona" "Municipi de Barcelona")
+ ("barclaycard" "Barclays Bank PLC")
+ ("barclays" "Barclays Bank PLC")
+ ("barefoot" "Gallo Vineyards, Inc.")
+ ("bargains" "Half Hallow, LLC")
+ ("baseball" "MLB Advanced Media DH, LLC")
+ ("basketball" "F\351d\351ration Internationale de Basketball (FIBA)")
+ ("bauhaus" "Werkhaus GmbH")
+ ("bayern" "Bayern Connect GmbH")
+ ("bbc" "British Broadcasting Corporation")
+ ("bbt" "BB&T Corporation")
+ ("bbva" "BANCO BILBAO VIZCAYA ARGENTARIA, S.A.")
+ ("bcg" "The Boston Consulting Group, Inc.")
+ ("bcn" "Municipi de Barcelona")
+ ("beats" "Beats Electronics, LLC")
+ ("beauty" "L'Or\351al")
+ ("beer" "Top Level Domain Holdings Limited")
+ ("bentley" "Bentley Motors Limited")
+ ("berlin" "dotBERLIN GmbH & Co. KG")
+ ("best" "BestTLD Pty Ltd")
+ ("bestbuy" "BBY Solutions, Inc.")
+ ("bet" "Afilias plc")
+ ("bharti" "Bharti Enterprises (Holding) Private Limited")
+ ("bible" "American Bible Society")
+ ("bid" "dot Bid Limited")
+ ("bike" "Grand Hollow, LLC")
+ ("bing" "Microsoft Corporation")
+ ("bingo" "Sand Cedar, LLC")
+ ("bio" "STARTING DOT LIMITED")
+ ("black" "Afilias plc")
+ ("blackfriday" "Uniregistry, Corp.")
+ ("blanco" "BLANCO GmbH + Co KG")
+ ("blockbuster" "Dish DBS Corporation")
+ ("blog" "Knock Knock WHOIS There, LLC")
+ ("bloomberg" "Bloomberg IP Holdings LLC")
+ ("blue" "Afilias plc")
+ ("bms" "Bristol-Myers Squibb Company")
+ ("bmw" "Bayerische Motoren Werke Aktiengesellschaft")
+ ("bnl" "Banca Nazionale del Lavoro")
+ ("bnpparibas" "BNP Paribas")
+ ("boats" "DERBoats, LLC")
+ ("boehringer" "Boehringer Ingelheim International GmbH")
+ ("bofa" "NMS Services, Inc.")
+ ("bom" "N\372cleo de Informa\347\343o e Coordena\347\343o do Ponto BR - NIC.br")
+ ("bond" "Bond University Limited")
+ ("boo" "Charleston Road Registry Inc.")
+ ("book" "Amazon Registry Services, Inc.")
+ ("booking" "Booking.com B.V.")
+ ("boots" "THE BOOTS COMPANY PLC")
+ ("bosch" "Robert Bosch GMBH")
+ ("bostik" "Bostik SA")
+ ("boston" "Boston TLD Management, LLC")
+ ("bot" "Amazon Registry Services, Inc.")
+ ("boutique" "Over Galley, LLC")
+ ("box" "NS1 Limited")
+ ("bradesco" "Banco Bradesco S.A.")
+ ("bridgestone" "Bridgestone Corporation")
+ ("broadway" "Celebrate Broadway, Inc.")
+ ("broker" "DOTBROKER REGISTRY LTD")
+ ("brother" "Brother Industries, Ltd.")
+ ("brussels" "DNS.be vzw")
+ ("budapest" "Top Level Domain Holdings Limited")
+ ("bugatti" "Bugatti International SA")
+ ("build" "Plan Bee LLC")
+ ("builders" "Atomic Madison, LLC")
+ ("business" "Spring Cross, LLC")
+ ("buy" "Amazon Registry Services, INC")
+ ("buzz" "DOTSTRATEGY CO.")
+ ("bzh" "Association www.bzh")
+ ("cab" "Half Sunset, LLC")
+ ("cafe" "Pioneer Canyon, LLC")
+ ("cal" "Charleston Road Registry Inc.")
+ ("call" "Amazon Registry Services, Inc.")
+ ("calvinklein" "PVH gTLD Holdings LLC")
+ ("cam" "AC Webconnecting Holding B.V.")
+ ("camera" "Atomic Maple, LLC")
+ ("camp" "Delta Dynamite, LLC")
+ ("cancerresearch" "Australian Cancer Research Foundation")
+ ("canon" "Canon Inc.")
+ ("capetown" "ZA Central Registry NPC trading as ZA Central Registry")
+ ("capital" "Delta Mill, LLC")
+ ("capitalone" "Capital One Financial Corporation")
+ ("car" "Cars Registry Limited")
+ ("caravan" "Caravan International, Inc.")
+ ("cards" "Foggy Hollow, LLC")
+ ("care" "Goose Cross, LLC")
+ ("career" "dotCareer LLC")
+ ("careers" "Wild Corner, LLC")
+ ("cars" "Cars Registry Limited")
+ ("cartier" "Richemont DNS Inc.")
+ ("casa" "Top Level Domain Holdings Limited")
+ ("case" "CNH Industrial N.V.")
+ ("caseih" "CNH Industrial N.V.")
+ ("cash" "Delta Lake, LLC")
+ ("casino" "Binky Sky, LLC")
+ ("catering" "New Falls. LLC")
+ ("catholic" "Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)")
+ ("cba" "COMMONWEALTH BANK OF AUSTRALIA")
+ ("cbn" "The Christian Broadcasting Network, Inc.")
+ ("cbre" "CBRE, Inc.")
+ ("cbs" "CBS Domains Inc.")
+ ("ceb" "The Corporate Executive Board Company")
+ ("center" "Tin Mill, LLC")
+ ("ceo" "CEOTLD Pty Ltd")
+ ("cern" "European Organization for Nuclear Research (\"CERN\")")
+ ("cfa" "CFA Institute")
+ ("cfd" "DOTCFD REGISTRY LTD")
+ ("chanel" "Chanel International B.V.")
+ ("channel" "Charleston Road Registry Inc.")
+ ("chase" "JPMorgan Chase Bank, National Association")
+ ("chat" "Sand Fields, LLC")
+ ("cheap" "Sand Cover, LLC")
+ ("chintai" "CHINTAI Corporation")
+ ("chloe" "Richemont DNS Inc.")
+ ("christmas" "Uniregistry, Corp.")
+ ("chrome" "Charleston Road Registry Inc.")
+ ("chrysler" "FCA US LLC.")
+ ("church" "Holly Fileds, LLC")
+ ("cipriani" "Hotel Cipriani Srl")
+ ("circle" "Amazon Registry Services, Inc.")
+ ("cisco" "Cisco Technology, Inc.")
+ ("citadel" "Citadel Domain LLC")
+ ("citi" "Citigroup Inc.")
+ ("citic" "CITIC Group Corporation")
+ ("city" "Snow Sky, LLC")
+ ("cityeats" "Lifestyle Domain Holdings, Inc.")
+ ("claims" "Black Corner, LLC")
+ ("cleaning" "Fox Shadow, LLC")
+ ("click" "Uniregistry, Corp.")
+ ("clinic" "Goose Park, LLC")
+ ("clinique" "The Est\351e Lauder Companies Inc.")
+ ("clothing" "Steel Lake, LLC")
+ ("cloud" "ARUBA PEC S.p.A.")
+ ("club" ".CLUB DOMAINS, LLC")
+ ("clubmed" "Club M\351diterran\351e S.A.")
+ ("coach" "Koko Island, LLC")
+ ("codes" "Puff Willow, LLC")
+ ("coffee" "Trixy Cover, LLC")
+ ("college" "XYZ.COM LLC")
+ ("cologne" "NetCologne Gesellschaft f\374r Telekommunikation mbH")
+ ("comcast" "Comcast IP Holdings I, LLC")
+ ("commbank" "COMMONWEALTH BANK OF AUSTRALIA")
+ ("community" "Fox Orchard, LLC")
+ ("company" "Silver Avenue, LLC")
+ ("compare" "iSelect Ltd")
+ ("computer" "Pine Mill, LLC")
+ ("comsec" "VeriSign, Inc.")
+ ("condos" "Pine House, LLC")
+ ("construction" "Fox Dynamite, LLC")
+ ("consulting" "United TLD Holdco, LTD.")
+ ("contact" "Top Level Spectrum, Inc.")
+ ("contractors" "Magic Woods, LLC")
+ ("cooking" "Top Level Domain Holdings Limited")
+ ("cookingchannel" "Lifestyle Domain Holdings, Inc.")
+ ("cool" "Koko Lake, LLC")
+ ("corsica" "Collectivit\351 Territoriale de Corse")
+ ("country" "Top Level Domain Holdings Limited")
+ ("coupon" "Amazon Registry Services, Inc.")
+ ("coupons" "Black Island, LLC")
+ ("courses" "OPEN UNIVERSITIES AUSTRALIA PTY LTD")
+ ("credit" "Snow Shadow, LLC")
+ ("creditcard" "Binky Frostbite, LLC")
+ ("creditunion" "CUNA Performance Resources, LLC")
+ ("cricket" "dot Cricket Limited")
+ ("crown" "Crown Equipment Corporation")
+ ("crs" "Federated Co-operatives Limited")
+ ("cruise" "Viking River Cruises (Bermuda) Ltd.")
+ ("cruises" "Spring Way, LLC")
+ ("csc" "Alliance-One Services, Inc.")
+ ("cuisinella" "SALM S.A.S.")
+ ("cymru" "Nominet UK")
+ ("cyou" "Beijing Gamease Age Digital Technology Co., Ltd.")
+ ("dabur" "Dabur India Limited")
+ ("dad" "Charleston Road Registry Inc.")
+ ("dance" "United TLD Holdco Ltd.")
+ ("data" "Dish DBS Corporation")
+ ("date" "dot Date Limited")
+ ("dating" "Pine Fest, LLC")
+ ("datsun" "NISSAN MOTOR CO., LTD.")
+ ("day" "Charleston Road Registry Inc.")
+ ("dclk" "Charleston Road Registry Inc.")
+ ("dds" "Minds + Machines Group Limited")
+ ("deal" "Amazon Registry Services, Inc.")
+ ("dealer" "Dealer Dot Com, Inc.")
+ ("deals" "Sand Sunset, LLC")
+ ("degree" "United TLD Holdco, Ltd")
+ ("delivery" "Steel Station, LLC")
+ ("dell" "Dell Inc.")
+ ("deloitte" "Deloitte Touche Tohmatsu")
+ ("delta" "Delta Air Lines, Inc.")
+ ("democrat" "United TLD Holdco Ltd.")
+ ("dental" "Tin Birch, LLC")
+ ("dentist" "United TLD Holdco, Ltd")
+ ("desi" "Desi Networks LLC")
+ ("design" "Top Level Design, LLC")
+ ("dev" "Charleston Road Registry Inc.")
+ ("dhl" "Deutsche Post AG")
+ ("diamonds" "John Edge, LLC")
+ ("diet" "Uniregistry, Corp.")
+ ("digital" "Dash Park, LLC")
+ ("direct" "Half Trail, LLC")
+ ("directory" "Extra Madison, LLC")
+ ("discount" "Holly Hill, LLC")
+ ("discover" "Discover Financial Services")
+ ("dish" "Dish DBS Corporation")
+ ("diy" "Lifestyle Domain Holdings, Inc.")
+ ("dnp" "Dai Nippon Printing Co., Ltd.")
+ ("docs" "Charleston Road Registry Inc.")
+ ("doctor" "Brice Trail, LLC")
+ ("dodge" "FCA US LLC.")
+ ("dog" "Koko Mill, LLC")
+ ("doha" "Communications Regulatory Authority (CRA)")
+ ("domains" "Sugar Cross, LLC")
+ ("doosan" "Retired")
+ ("dot" "Dish DBS Corporation")
+ ("download" "dot Support Limited")
+ ("drive" "Charleston Road Registry Inc.")
+ ("dtv" "Dish DBS Corporation")
+ ("dubai" "Dubai Smart Government Department")
+ ("duck" "Johnson Shareholdings, Inc.")
+ ("dunlop" "The Goodyear Tire & Rubber Company")
+ ("duns" "The Dun & Bradstreet Corporation")
+ ("dupont" "E. I. du Pont de Nemours and Company")
+ ("durban" "ZA Central Registry NPC trading as ZA Central Registry")
+ ("dvag" "Deutsche Verm\366gensberatung Aktiengesellschaft DVAG")
+ ("dvr" "Hughes Satellite Systems Corporation")
+ ("earth" "Interlink Co., Ltd.")
+ ("eat" "Charleston Road Registry Inc.")
+ ("eco" "Big Room Inc.")
+ ("edeka" "EDEKA Verband kaufm\344nnischer Genossenschaften e.V.")
+ ("education" "Brice Way, LLC")
+ ("email" "Spring Madison, LLC")
+ ("emerck" "Merck KGaA")
+ ("energy" "Binky Birch, LLC")
+ ("engineer" "United TLD Holdco Ltd.")
+ ("engineering" "Romeo Canyon")
+ ("enterprises" "Snow Oaks, LLC")
+ ("epost" "Deutsche Post AG")
+ ("epson" "Seiko Epson Corporation")
+ ("equipment" "Corn Station, LLC")
+ ("ericsson" "Telefonaktiebolaget L M Ericsson")
+ ("erni" "ERNI Group Holding AG")
+ ("esq" "Charleston Road Registry Inc.")
+ ("estate" "Trixy Park, LLC")
+ ("esurance" "Esurance Insurance Company")
+ ("eurovision" "European Broadcasting Union (EBU)")
+ ("eus" "Puntueus Fundazioa")
+ ("events" "Pioneer Maple, LLC")
+ ("everbank" "EverBank")
+ ("exchange" "Spring Falls, LLC")
+ ("expert" "Magic Pass, LLC")
+ ("exposed" "Victor Beach, LLC")
+ ("express" "Sea Sunset, LLC")
+ ("extraspace" "Extra Space Storage LLC")
+ ("fage" "Fage International S.A.")
+ ("fail" "Atomic Pipe, LLC")
+ ("fairwinds" "FairWinds Partners, LLC")
+ ("faith" "dot Faith Limited")
+ ("family" "United TLD Holdco Ltd.")
+ ("fan" "Asiamix Digital Ltd")
+ ("fans" "Asiamix Digital Limited")
+ ("farm" "Just Maple, LLC")
+ ("farmers" "Farmers Insurance Exchange")
+ ("fashion" "Top Level Domain Holdings Limited")
+ ("fast" "Amazon Registry Services, Inc.")
+ ("fedex" "Federal Express Corporation")
+ ("feedback" "Top Level Spectrum, Inc.")
+ ("ferrari" "Fiat Chrysler Automobiles N.V.")
+ ("ferrero" "Ferrero Trading Lux S.A.")
+ ("fiat" "Fiat Chrysler Automobiles N.V.")
+ ("fidelity" "Fidelity Brokerage Services LLC")
+ ("fido" "Rogers Communications Canada Inc.")
+ ("film" "Motion Picture Domain Registry Pty Ltd")
+ ("final" "N\372cleo de Informa\347\343o e Coordena\347\343o do Ponto BR - NIC.br")
+ ("finance" "Cotton Cypress, LLC")
+ ("financial" "Just Cover, LLC")
+ ("fire" "Amazon Registry Services, Inc.")
+ ("firestone" "Bridgestone Licensing Services, Inc.")
+ ("firmdale" "Firmdale Holdings Limited")
+ ("fish" "Fox Woods, LLC")
+ ("fishing" "Top Level Domain Holdings Limited")
+ ("fit" "Minds + Machines Group Limited")
+ ("fitness" "Brice Orchard, LLC")
+ ("flickr" "Yahoo! Domain Services Inc.")
+ ("flights" "Fox Station, LLC")
+ ("flir" "FLIR Systems, Inc.")
+ ("florist" "Half Cypress, LLC")
+ ("flowers" "Uniregistry, Corp.")
+ ("flsmidth" "Retired")
+ ("fly" "Charleston Road Registry Inc.")
+ ("foo" "Charleston Road Registry Inc.")
+ ("food" "Lifestyle Domain Holdings, Inc.")
+ ("foodnetwork" "Lifestyle Domain Holdings, Inc.")
+ ("football" "Foggy Farms, LLC")
+ ("ford" "Ford Motor Company")
+ ("forex" "DOTFOREX REGISTRY LTD")
+ ("forsale" "United TLD Holdco, LLC")
+ ("forum" "Fegistry, LLC")
+ ("foundation" "John Dale, LLC")
+ ("fox" "FOX Registry, LLC")
+ ("free" "Amazon Registry Services, Inc.")
+ ("fresenius" "Fresenius Immobilien-Verwaltungs-GmbH")
+ ("frl" "FRLregistry B.V.")
+ ("frogans" "OP3FT")
+ ("frontdoor" "Lifestyle Domain Holdings, Inc.")
+ ("frontier" "Frontier Communications Corporation")
+ ("ftr" "Frontier Communications Corporation")
+ ("fujitsu" "Fujitsu Limited")
+ ("fujixerox" "Xerox DNHC LLC")
+ ("fun" "DotSpace, Inc.")
+ ("fund" "John Castle, LLC")
+ ("furniture" "Lone Fields, LLC")
+ ("futbol" "United TLD Holdco, Ltd.")
+ ("fyi" "Silver Tigers, LLC")
+ ("gal" "Asociaci\363n puntoGAL")
+ ("gallery" "Sugar House, LLC")
+ ("gallo" "Gallo Vineyards, Inc.")
+ ("gallup" "Gallup, Inc.")
+ ("game" "Uniregistry, Corp.")
+ ("games" "United TLD Holdco Ltd.")
+ ("gap" "The Gap, Inc.")
+ ("garden" "Top Level Domain Holdings Limited")
+ ("gbiz" "Charleston Road Registry Inc.")
+ ("gdn" "Joint Stock Company \"Navigation-information systems\"")
+ ("gea" "GEA Group Aktiengesellschaft")
+ ("gent" "Combell nv")
+ ("genting" "Resorts World Inc. Pte. Ltd.")
+ ("george" "Wal-Mart Stores, Inc.")
+ ("ggee" "GMO Internet, Inc.")
+ ("gift" "Uniregistry, Corp.")
+ ("gifts" "Goose Sky, LLC")
+ ("gives" "United TLD Holdco Ltd.")
+ ("giving" "Giving Limited")
+ ("glade" "Johnson Shareholdings, Inc.")
+ ("glass" "Black Cover, LLC")
+ ("gle" "Charleston Road Registry Inc.")
+ ("global" "Dot Global Domain Registry Limited")
+ ("globo" "Globo Comunica\347\343o e Participa\347\365es S.A")
+ ("gmail" "Charleston Road Registry Inc.")
+ ("gmbh" "Extra Dynamite, LLC")
+ ("gmo" "GMO Internet, Inc.")
+ ("gmx" "1&1 Mail & Media GmbH")
+ ("godaddy" "Go Daddy East, LLC")
+ ("gold" "June Edge, LLC")
+ ("goldpoint" "YODOBASHI CAMERA CO.,LTD.")
+ ("golf" "Lone Falls, LLC")
+ ("goo" "NTT Resonant Inc.")
+ ("goodhands" "Allstate Fire and Casualty Insurance Company")
+ ("goodyear" "The Goodyear Tire & Rubber Company")
+ ("goog" "Charleston Road Registry Inc.")
+ ("google" "Charleston Road Registry Inc.")
+ ("gop" "Republican State Leadership Committee, Inc.")
+ ("got" "Amazon Registry Services, Inc.")
+ ("grainger" "Grainger Registry Services, LLC")
+ ("graphics" "Over Madison, LLC")
+ ("gratis" "Pioneer Tigers, LLC")
+ ("green" "DotGreen Registry Limited")
+ ("gripe" "Corn Sunset, LLC")
+ ("group" "Romeo Town, LLC")
+ ("guardian" "The Guardian Life Insurance Company of America")
+ ("gucci" "Guccio Gucci S.p.a.")
+ ("guge" "Charleston Road Registry Inc.")
+ ("guide" "Snow Moon, LLC")
+ ("guitars" "Uniregistry, Corp.")
+ ("guru" "Pioneer Cypress, LLC")
+ ("hair" "L'Oreal")
+ ("hamburg" "Hamburg Top-Level-Domain GmbH")
+ ("hangout" "Charleston Road Registry Inc.")
+ ("haus" "United TLD Holdco, LTD.")
+ ("hbo" "HBO Registry Services, Inc.")
+ ("hdfc" "HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED")
+ ("hdfcbank" "HDFC Bank Limited")
+ ("health" "DotHealth, LLC")
+ ("healthcare" "Silver Glen, LLC")
+ ("help" "Uniregistry, Corp.")
+ ("helsinki" "City of Helsinki")
+ ("here" "Charleston Road Registry Inc.")
+ ("hermes" "Hermes International")
+ ("hgtv" "Lifestyle Domain Holdings, Inc.")
+ ("hiphop" "Uniregistry, Corp.")
+ ("hisamitsu" "Hisamitsu Pharmaceutical Co.,Inc.")
+ ("hitachi" "Hitachi, Ltd.")
+ ("hiv" "Uniregistry, Corp.")
+ ("hkt" "PCCW-HKT DataCom Services Limited")
+ ("hockey" "Half Willow, LLC")
+ ("holdings" "John Madison, LLC")
+ ("holiday" "Goose Woods, LLC")
+ ("homedepot" "Home Depot Product Authority, LLC")
+ ("homegoods" "The TJX Companies, Inc.")
+ ("homes" "DERHomes, LLC")
+ ("homesense" "The TJX Companies, Inc.")
+ ("honda" "Honda Motor Co., Ltd.")
+ ("honeywell" "Honeywell GTLD LLC")
+ ("horse" "Top Level Domain Holdings Limited")
+ ("hospital" "Ruby Pike, LLC")
+ ("host" "DotHost Inc.")
+ ("hosting" "Uniregistry, Corp.")
+ ("hot" "Amazon Registry Services, Inc.")
+ ("hoteles" "Travel Reservations SRL")
+ ("hotmail" "Microsoft Corporation")
+ ("house" "Sugar Park, LLC")
+ ("how" "Charleston Road Registry Inc.")
+ ("hsbc" "HSBC Global Services (UK) Limited")
+ ("htc" "HTC corporation")
+ ("hughes" "Hughes Satellite Systems Corporation")
+ ("hyatt" "Hyatt GTLD, L.L.C.")
+ ("hyundai" "Hyundai Motor Company")
+ ("ibm" "International Business Machines Corporation")
+ ("icbc" "Industrial and Commercial Bank of China Limited")
+ ("ice" "IntercontinentalExchange, Inc.")
+ ("icu" "One.com A/S")
+ ("ieee" "IEEE Global LLC")
+ ("ifm" "ifm electronic gmbh")
+ ("iinet" "Retired")
+ ("ikano" "Ikano S.A.")
+ ("imamat" "Fondation Aga Khan (Aga Khan Foundation)")
+ ("imdb" "Amazon Registry Services, Inc.")
+ ("immo" "Auburn Bloom, LLC")
+ ("immobilien" "United TLD Holdco Ltd.")
+ ("industries" "Outer House, LLC")
+ ("infiniti" "NISSAN MOTOR CO., LTD.")
+ ("ing" "Charleston Road Registry Inc.")
+ ("ink" "Top Level Design, LLC")
+ ("institute" "Outer Maple, LLC")
+ ("insurance" "fTLD Registry Services LLC")
+ ("insure" "Pioneer Willow, LLC")
+ ("intel" "Intel Corporation")
+ ("international" "Wild Way, LLC")
+ ("intuit" "Intuit Administrative Services, Inc.")
+ ("investments" "Holly Glen, LLC")
+ ("ipiranga" "Ipiranga Produtos de Petroleo S.A.")
+ ("irish" "Tin Mill LLC")
+ ("iselect" "iSelect Ltd")
+ ("ismaili" "Fondation Aga Khan (Aga Khan Foundation)")
+ ("ist" "Istanbul Metropolitan Municipality")
+ ("istanbul" "Istanbul Metropolitan Municipality")
+ ("itau" "Itau Unibanco Holding S.A.")
+ ("itv" "ITV Services Limited")
+ ("iveco" "CNH Industrial N.V.")
+ ("iwc" "Richemont DNS Inc.")
+ ("jaguar" "Jaguar Land Rover Ltd")
+ ("java" "Oracle Corporation")
+ ("jcb" "JCB Co., Ltd.")
+ ("jcp" "JCP Media, Inc.")
+ ("jeep" "FCA US LLC.")
+ ("jetzt" "Wild Frostbite, LLC")
+ ("jewelry" "Wild Bloom, LLC")
+ ("jio" "Affinity Names, Inc.")
+ ("jlc" "Richemont DNS Inc.")
+ ("jll" "Jones Lang LaSalle Incorporated")
+ ("jmp" "Matrix IP LLC")
+ ("jnj" "Johnson & Johnson Services, Inc.")
+ ("joburg" "ZA Central Registry NPC trading as ZA Central Registry")
+ ("jot" "Amazon Registry Services, Inc.")
+ ("joy" "Amazon Registry Services, Inc.")
+ ("jpmorgan" "JPMorgan Chase Bank, National Association")
+ ("jprs" "Japan Registry Services Co., Ltd.")
+ ("juegos" "Uniregistry, Corp.")
+ ("juniper" "JUNIPER NETWORKS, INC.")
+ ("kaufen" "United TLD Holdco Ltd.")
+ ("kddi" "KDDI CORPORATION")
+ ("kerryhotels" "Kerry Trading Co. Limited")
+ ("kerrylogistics" "Kerry Trading Co. Limited")
+ ("kerryproperties" "Kerry Trading Co. Limited")
+ ("kfh" "Kuwait Finance House")
+ ("kia" "KIA MOTORS CORPORATION")
+ ("kim" "Afilias plc")
+ ("kinder" "Ferrero Trading Lux S.A.")
+ ("kindle" "Amazon Registry Services, Inc.")
+ ("kitchen" "Just Goodbye, LLC")
+ ("kiwi" "DOT KIWI LIMITED")
+ ("koeln" "NetCologne Gesellschaft f\374r Telekommunikation mbH")
+ ("komatsu" "Komatsu Ltd.")
+ ("kosher" "Kosher Marketing Assets LLC")
+ ("kpmg" "KPMG International Cooperative (KPMG International Genossenschaft)")
+ ("kpn" "Koninklijke KPN N.V.")
+ ("krd" "KRG Department of Information Technology")
+ ("kred" "KredTLD Pty Ltd")
+ ("kuokgroup" "Kerry Trading Co. Limited")
+ ("kyoto" "Academic Institution: Kyoto Jyoho Gakuen")
+ ("lacaixa" "CAIXA D'ESTALVIS I PENSIONS DE BARCELONA")
+ ("ladbrokes" "LADBROKES INTERNATIONAL PLC")
+ ("lamborghini" "Automobili Lamborghini S.p.A.")
+ ("lamer" "The Est\351e Lauder Companies Inc.")
+ ("lancaster" "LANCASTER")
+ ("lancia" "Fiat Chrysler Automobiles N.V.")
+ ("lancome" "L'Or\351al")
+ ("land" "Pine Moon, LLC")
+ ("landrover" "Jaguar Land Rover Ltd")
+ ("lanxess" "LANXESS Corporation")
+ ("lasalle" "Jones Lang LaSalle Incorporated")
+ ("lat" "ECOM-LAC Federaci\363n de Latinoam\351rica y el Caribe para Internet y el Comercio Electr\363nico")
+ ("latino" "Dish DBS Corporation")
+ ("latrobe" "La Trobe University")
+ ("law" "Minds + Machines Group Limited")
+ ("lawyer" "United TLD Holdco, Ltd")
+ ("lds" "IRI Domain Management, LLC")
+ ("lease" "Victor Trail, LLC")
+ ("leclerc" "A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc")
+ ("lefrak" "LeFrak Organization, Inc.")
+ ("legal" "Blue Falls, LLC")
+ ("lego" "LEGO Juris A/S")
+ ("lexus" "TOYOTA MOTOR CORPORATION")
+ ("lgbt" "Afilias plc")
+ ("liaison" "Liaison Technologies, Incorporated")
+ ("lidl" "Schwarz Domains und Services GmbH & Co. KG")
+ ("life" "Trixy Oaks, LLC")
+ ("lifeinsurance" "American Council of Life Insurers")
+ ("lifestyle" "Lifestyle Domain Holdings, Inc.")
+ ("lighting" "John McCook, LLC")
+ ("like" "Amazon Registry Services, Inc.")
+ ("lilly" "Eli Lilly and Company")
+ ("limited" "Big Fest, LLC")
+ ("limo" "Hidden Frostbite, LLC")
+ ("lincoln" "Ford Motor Company")
+ ("linde" "Linde Aktiengesellschaft")
+ ("link" "Uniregistry, Corp.")
+ ("lipsy" "Lipsy Ltd")
+ ("live" "United TLD Holdco Ltd.")
+ ("living" "Lifestyle Domain Holdings, Inc.")
+ ("lixil" "LIXIL Group Corporation")
+ ("loan" "dot Loan Limited")
+ ("loans" "June Woods, LLC")
+ ("locker" "Dish DBS Corporation")
+ ("locus" "Locus Analytics LLC")
+ ("loft" "Annco, Inc.")
+ ("lol" "Uniregistry, Corp.")
+ ("london" "Dot London Domains Limited")
+ ("lotte" "Lotte Holdings Co., Ltd.")
+ ("lotto" "Afilias plc")
+ ("love" "Merchant Law Group LLP")
+ ("lpl" "LPL Holdings, Inc.")
+ ("lplfinancial" "LPL Holdings, Inc.")
+ ("ltd" "Over Corner, LLC")
+ ("ltda" "InterNetX Corp.")
+ ("lundbeck" "H. Lundbeck A/S")
+ ("lupin" "LUPIN LIMITED")
+ ("luxe" "Top Level Domain Holdings Limited")
+ ("luxury" "Luxury Partners LLC")
+ ("macys" "Macys, Inc.")
+ ("madrid" "Comunidad de Madrid")
+ ("maif" "Mutuelle Assurance Instituteur France (MAIF)")
+ ("maison" "Victor Frostbite, LLC")
+ ("makeup" "L'Or\351al")
+ ("man" "MAN SE")
+ ("management" "John Goodbye, LLC")
+ ("mango" "PUNTO FA S.L.")
+ ("market" "United TLD Holdco, Ltd")
+ ("marketing" "Fern Pass, LLC")
+ ("markets" "DOTMARKETS REGISTRY LTD")
+ ("marriott" "Marriott Worldwide Corporation")
+ ("marshalls" "The TJX Companies, Inc.")
+ ("maserati" "Fiat Chrysler Automobiles N.V.")
+ ("mattel" "Mattel Sites, Inc.")
+ ("mba" "Lone Hollow, LLC")
+ ("mcd" "McDonald's Corporation")
+ ("mcdonalds" "McDonald's Corporation")
+ ("mckinsey" "McKinsey Holdings, Inc.")
+ ("med" "Medistry LLC")
+ ("media" "Grand Glen, LLC")
+ ("meet" "Charleston Road Registry Inc.")
+ ("melbourne" "The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation")
+ ("meme" "Charleston Road Registry Inc.")
+ ("memorial" "Dog Beach, LLC")
+ ("men" "Exclusive Registry Limited")
+ ("menu" "Wedding TLD2, LLC")
+ ("meo" "MEO Servi\347os de Comunica\347\365es e Multim\351dia, S.A.")
+ ("metlife" "MetLife Services and Solutions, LLC")
+ ("miami" "Top Level Domain Holdings Limited")
+ ("microsoft" "Microsoft Corporation")
+ ("mini" "Bayerische Motoren Werke Aktiengesellschaft")
+ ("mint" "Intuit Administrative Services, Inc.")
+ ("mit" "Massachusetts Institute of Technology")
+ ("mitsubishi" "Mitsubishi Corporation")
+ ("mlb" "MLB Advanced Media DH, LLC")
+ ("mls" "The Canadian Real Estate Association")
+ ("mma" "MMA IARD")
+ ("mobile" "Dish DBS Corporation")
+ ("mobily" "GreenTech Consultancy Company W.L.L.")
+ ("moda" "United TLD Holdco Ltd.")
+ ("moe" "Interlink Co., Ltd.")
+ ("moi" "Amazon Registry Services, Inc.")
+ ("mom" "Uniregistry, Corp.")
+ ("monash" "Monash University")
+ ("money" "Outer McCook, LLC")
+ ("monster" "Monster Worldwide, Inc.")
+ ("montblanc" "Richemont DNS Inc.")
+ ("mopar" "FCA US LLC.")
+ ("mormon" "IRI Domain Management, LLC (\"Applicant\")")
+ ("mortgage" "United TLD Holdco, Ltd")
+ ("moscow" "Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)")
+ ("moto" "Motorola Trademark Holdings, LLC")
+ ("motorcycles" "DERMotorcycles, LLC")
+ ("mov" "Charleston Road Registry Inc.")
+ ("movie" "New Frostbite, LLC")
+ ("movistar" "Telef\363nica S.A.")
+ ("msd" "MSD Registry Holdings, Inc.")
+ ("mtn" "MTN Dubai Limited")
+ ("mtpc" "Mitsubishi Tanabe Pharma Corporation")
+ ("mtr" "MTR Corporation Limited")
+ ("mutual" "Northwestern Mutual MU TLD Registry, LLC")
+ ("mutuelle" "Retired")
+ ("nab" "National Australia Bank Limited")
+ ("nadex" "Nadex Domains, Inc")
+ ("nagoya" "GMO Registry, Inc.")
+ ("nationwide" "Nationwide Mutual Insurance Company")
+ ("natura" "NATURA COSM\311TICOS S.A.")
+ ("navy" "United TLD Holdco Ltd.")
+ ("nba" "NBA REGISTRY, LLC")
+ ("nec" "NEC Corporation")
+ ("netbank" "COMMONWEALTH BANK OF AUSTRALIA")
+ ("netflix" "Netflix, Inc.")
+ ("network" "Trixy Manor, LLC")
+ ("neustar" "NeuStar, Inc.")
+ ("new" "Charleston Road Registry Inc.")
+ ("newholland" "CNH Industrial N.V.")
+ ("news" "United TLD Holdco Ltd.")
+ ("next" "Next plc")
+ ("nextdirect" "Next plc")
+ ("nexus" "Charleston Road Registry Inc.")
+ ("nfl" "NFL Reg Ops LLC")
+ ("ngo" "Public Interest Registry")
+ ("nhk" "Japan Broadcasting Corporation (NHK)")
+ ("nico" "DWANGO Co., Ltd.")
+ ("nike" "NIKE, Inc.")
+ ("nikon" "NIKON CORPORATION")
+ ("ninja" "United TLD Holdco Ltd.")
+ ("nissan" "NISSAN MOTOR CO., LTD.")
+ ("nissay" "Nippon Life Insurance Company")
+ ("nokia" "Nokia Corporation")
+ ("northwesternmutual" "Northwestern Mutual Registry, LLC")
+ ("norton" "Symantec Corporation")
+ ("now" "Amazon Registry Services, Inc.")
+ ("nowruz" "Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.")
+ ("nowtv" "Starbucks (HK) Limited")
+ ("nra" "NRA Holdings Company, INC.")
+ ("nrw" "Minds + Machines GmbH")
+ ("ntt" "NIPPON TELEGRAPH AND TELEPHONE CORPORATION")
+ ("nyc" "The City of New York by and through the New York City Department of Information Technology & Telecommunications")
+ ("obi" "OBI Group Holding SE & Co. KGaA")
+ ("observer" "Top Level Spectrum, Inc.")
+ ("off" "Johnson Shareholdings, Inc.")
+ ("office" "Microsoft Corporation")
+ ("okinawa" "BRregistry, Inc.")
+ ("olayan" "Crescent Holding GmbH")
+ ("olayangroup" "Crescent Holding GmbH")
+ ("oldnavy" "The Gap, Inc.")
+ ("ollo" "Dish DBS Corporation")
+ ("omega" "The Swatch Group Ltd")
+ ("one" "One.com A/S")
+ ("ong" "Public Interest Registry")
+ ("onl" "I-REGISTRY Ltd., Niederlassung Deutschland")
+ ("online" "DotOnline Inc.")
+ ("onyourside" "Nationwide Mutual Insurance Company")
+ ("ooo" "INFIBEAM INCORPORATION LIMITED")
+ ("open" "American Express Travel Related Services Company, Inc.")
+ ("oracle" "Oracle Corporation")
+ ("orange" "Orange Brand Services Limited")
+ ("organic" "Afilias plc")
+ ("orientexpress" "Orient Express")
+ ("origins" "The Est\351e Lauder Companies Inc.")
+ ("osaka" "Interlink Co., Ltd.")
+ ("otsuka" "Otsuka Holdings Co., Ltd.")
+ ("ott" "Dish DBS Corporation")
+ ("ovh" "OVH SAS")
+ ("page" "Charleston Road Registry Inc.")
+ ("pamperedchef" "The Pampered Chef, Ltd.")
+ ("panasonic" "Panasonic Corporation")
+ ("panerai" "Richemont DNS Inc.")
+ ("paris" "City of Paris")
+ ("pars" "Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.")
+ ("partners" "Magic Glen, LLC")
+ ("parts" "Sea Goodbye, LLC")
+ ("party" "Blue Sky Registry Limited")
+ ("passagens" "Travel Reservations SRL")
+ ("pay" "Amazon Registry Services, Inc.")
+ ("pccw" "PCCW Enterprises Limited")
+ ("pet" "Afilias plc")
+ ("pfizer" "Pfizer Inc.")
+ ("pharmacy" "National Association of Boards of Pharmacy")
+ ("philips" "Koninklijke Philips N.V.")
+ ("phone" "Dish DBS Corporation")
+ ("photo" "Uniregistry, Corp.")
+ ("photography" "Sugar Glen, LLC")
+ ("photos" "Sea Corner, LLC")
+ ("physio" "PhysBiz Pty Ltd")
+ ("piaget" "Richemont DNS Inc.")
+ ("pics" "Uniregistry, Corp.")
+ ("pictet" "Pictet Europe S.A.")
+ ("pictures" "Foggy Sky, LLC")
+ ("pid" "Top Level Spectrum, Inc.")
+ ("pin" "Amazon Registry Services, Inc.")
+ ("ping" "Ping Registry Provider, Inc.")
+ ("pink" "Afilias plc")
+ ("pioneer" "Pioneer Corporation")
+ ("pizza" "Foggy Moon, LLC")
+ ("place" "Snow Galley, LLC")
+ ("play" "Charleston Road Registry Inc.")
+ ("playstation" "Sony Computer Entertainment Inc.")
+ ("plumbing" "Spring Tigers, LLC")
+ ("plus" "Sugar Mill, LLC")
+ ("pnc" "PNC Domain Co., LLC")
+ ("pohl" "Deutsche Verm\366gensberatung Aktiengesellschaft DVAG")
+ ("poker" "Afilias plc")
+ ("politie" "Politie Nederland")
+ ("porn" "ICM Registry PN LLC")
+ ("pramerica" "Prudential Financial, Inc.")
+ ("praxi" "Praxi S.p.A.")
+ ("press" "DotPress Inc.")
+ ("prime" "Amazon Registry Services, Inc.")
+ ("prod" "Charleston Road Registry Inc.")
+ ("productions" "Magic Birch, LLC")
+ ("prof" "Charleston Road Registry Inc.")
+ ("progressive" "Progressive Casualty Insurance Company")
+ ("promo" "Afilias plc")
+ ("properties" "Big Pass, LLC")
+ ("property" "Uniregistry, Corp.")
+ ("protection" "XYZ.COM LLC")
+ ("pru" "Prudential Financial, Inc.")
+ ("prudential" "Prudential Financial, Inc.")
+ ("pub" "United TLD Holdco Ltd.")
+ ("pwc" "PricewaterhouseCoopers LLP")
+ ("qpon" "dotCOOL, Inc.")
+ ("quebec" "PointQu\351bec Inc")
+ ("quest" "Quest ION Limited")
+ ("qvc" "QVC, Inc.")
+ ("racing" "Premier Registry Limited")
+ ("radio" "European Broadcasting Union (EBU)")
+ ("raid" "Johnson Shareholdings, Inc.")
+ ("read" "Amazon Registry Services, Inc.")
+ ("realestate" "dotRealEstate LLC")
+ ("realtor" "Real Estate Domains LLC")
+ ("realty" "Fegistry, LLC")
+ ("recipes" "Grand Island, LLC")
+ ("red" "Afilias plc")
+ ("redstone" "Redstone Haute Couture Co., Ltd.")
+ ("redumbrella" "Travelers TLD, LLC")
+ ("rehab" "United TLD Holdco Ltd.")
+ ("reise" "Foggy Way, LLC")
+ ("reisen" "New Cypress, LLC")
+ ("reit" "National Association of Real Estate Investment Trusts, Inc.")
+ ("reliance" "Reliance Industries Limited")
+ ("ren" "Beijing Qianxiang Wangjing Technology Development Co., Ltd.")
+ ("rent" "XYZ.COM LLC")
+ ("rentals" "Big Hollow,LLC")
+ ("repair" "Lone Sunset, LLC")
+ ("report" "Binky Glen, LLC")
+ ("republican" "United TLD Holdco Ltd.")
+ ("rest" "Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable")
+ ("restaurant" "Snow Avenue, LLC")
+ ("review" "dot Review Limited")
+ ("reviews" "United TLD Holdco, Ltd.")
+ ("rexroth" "Robert Bosch GMBH")
+ ("rich" "I-REGISTRY Ltd., Niederlassung Deutschland")
+ ("richardli" "Pacific Century Asset Management (HK) Limited")
+ ("ricoh" "Ricoh Company, Ltd.")
+ ("rightathome" "Johnson Shareholdings, Inc.")
+ ("ril" "Reliance Industries Limited")
+ ("rio" "Empresa Municipal de Inform\341tica SA - IPLANRIO")
+ ("rip" "United TLD Holdco Ltd.")
+ ("rmit" "Royal Melbourne Institute of Technology")
+ ("rocher" "Ferrero Trading Lux S.A.")
+ ("rocks" "United TLD Holdco, LTD.")
+ ("rodeo" "Top Level Domain Holdings Limited")
+ ("rogers" "Rogers Communications Canada Inc.")
+ ("room" "Amazon Registry Services, Inc.")
+ ("rsvp" "Charleston Road Registry Inc.")
+ ("ruhr" "regiodot GmbH & Co. KG")
+ ("run" "Snow Park, LLC")
+ ("rwe" "RWE AG")
+ ("ryukyu" "BRregistry, Inc.")
+ ("saarland" "dotSaarland GmbH")
+ ("safe" "Amazon Registry Services, Inc.")
+ ("safety" "Safety Registry Services, LLC.")
+ ("sakura" "SAKURA Internet Inc.")
+ ("sale" "United TLD Holdco, Ltd")
+ ("salon" "Outer Orchard, LLC")
+ ("samsclub" "Wal-Mart Stores, Inc.")
+ ("samsung" "SAMSUNG SDS CO., LTD")
+ ("sandvik" "Sandvik AB")
+ ("sandvikcoromant" "Sandvik AB")
+ ("sanofi" "Sanofi")
+ ("sap" "SAP AG")
+ ("sapo" "MEO Servi\347os de Comunica\347\365es e Multim\351dia, S.A.")
+ ("sarl" "Delta Orchard, LLC")
+ ("sas" "Research IP LLC")
+ ("save" "Amazon Registry Services, Inc.")
+ ("saxo" "Saxo Bank A/S")
+ ("sbi" "STATE BANK OF INDIA")
+ ("sbs" "SPECIAL BROADCASTING SERVICE CORPORATION")
+ ("sca" "SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)")
+ ("scb" "The Siam Commercial Bank Public Company Limited (\"SCB\")")
+ ("schaeffler" "Schaeffler Technologies AG & Co. KG")
+ ("schmidt" "SALM S.A.S.")
+ ("scholarships" "Scholarships.com, LLC")
+ ("school" "Little Galley, LLC")
+ ("schule" "Outer Moon, LLC")
+ ("schwarz" "Schwarz Domains und Services GmbH & Co. KG")
+ ("science" "dot Science Limited")
+ ("scjohnson" "Johnson Shareholdings, Inc.")
+ ("scor" "SCOR SE")
+ ("scot" "Dot Scot Registry Limited")
+ ("seat" "SEAT, S.A. (Sociedad Unipersonal)")
+ ("secure" "Amazon Registry Services, Inc.")
+ ("security" "XYZ.COM LLC")
+ ("seek" "Seek Limited")
+ ("select" "iSelect Ltd")
+ ("sener" "Sener Ingenier\355a y Sistemas, S.A.")
+ ("services" "Fox Castle, LLC")
+ ("ses" "SES")
+ ("seven" "Seven West Media Ltd")
+ ("sew" "SEW-EURODRIVE GmbH & Co KG")
+ ("sex" "ICM Registry SX LLC")
+ ("sexy" "Uniregistry, Corp.")
+ ("sfr" "Societe Francaise du Radiotelephone - SFR")
+ ("shangrila" "Shangri-La International Hotel Management Limited")
+ ("sharp" "Sharp Corporation")
+ ("shaw" "Shaw Cablesystems G.P.")
+ ("shell" "Shell Information Technology International Inc")
+ ("shia" "Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.")
+ ("shiksha" "Afilias plc")
+ ("shoes" "Binky Galley, LLC")
+ ("shop" "GMO Registry, Inc.")
+ ("shopping" "Over Keep, LLC")
+ ("shouji" "QIHOO 360 TECHNOLOGY CO. LTD.")
+ ("show" "Snow Beach, LLC")
+ ("showtime" "CBS Domains Inc.")
+ ("shriram" "Shriram Capital Ltd.")
+ ("silk" "Amazon Registry Services, Inc.")
+ ("sina" "Sina Corporation")
+ ("singles" "Fern Madison, LLC")
+ ("site" "DotSite Inc.")
+ ("ski" "STARTING DOT LIMITED")
+ ("skin" "L'Or\351al")
+ ("sky" "Sky International AG")
+ ("skype" "Microsoft Corporation")
+ ("sling" "Hughes Satellite Systems Corporation")
+ ("smart" "Smart Communications, Inc. (SMART)")
+ ("smile" "Amazon Registry Services, Inc.")
+ ("sncf" "SNCF (Soci\351t\351 Nationale des Chemins de fer Francais)")
+ ("soccer" "Foggy Shadow, LLC")
+ ("social" "United TLD Holdco Ltd.")
+ ("softbank" "SoftBank Group Corp.")
+ ("software" "United TLD Holdco, Ltd")
+ ("sohu" "Sohu.com Limited")
+ ("solar" "Ruby Town, LLC")
+ ("solutions" "Silver Cover, LLC")
+ ("song" "Amazon Registry Services, Inc.")
+ ("sony" "Sony Corporation")
+ ("soy" "Charleston Road Registry Inc.")
+ ("space" "DotSpace Inc.")
+ ("spiegel" "SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG")
+ ("spot" "Amazon Registry Services, Inc.")
+ ("spreadbetting" "DOTSPREADBETTING REGISTRY LTD")
+ ("srl" "InterNetX Corp.")
+ ("srt" "FCA US LLC.")
+ ("stada" "STADA Arzneimittel AG")
+ ("staples" "Staples, Inc.")
+ ("star" "Star India Private Limited")
+ ("starhub" "StarHub Limited")
+ ("statebank" "STATE BANK OF INDIA")
+ ("statefarm" "State Farm Mutual Automobile Insurance Company")
+ ("statoil" "Statoil ASA")
+ ("stc" "Saudi Telecom Company")
+ ("stcgroup" "Saudi Telecom Company")
+ ("stockholm" "Stockholms kommun")
+ ("storage" "Self Storage Company LLC")
+ ("store" "DotStore Inc.")
+ ("stream" "dot Stream Limited")
+ ("studio" "United TLD Holdco Ltd.")
+ ("study" "OPEN UNIVERSITIES AUSTRALIA PTY LTD")
+ ("style" "Binky Moon, LLC")
+ ("sucks" "Vox Populi Registry Ltd.")
+ ("supplies" "Atomic Fields, LLC")
+ ("supply" "Half Falls, LLC")
+ ("support" "Grand Orchard, LLC")
+ ("surf" "Top Level Domain Holdings Limited")
+ ("surgery" "Tin Avenue, LLC")
+ ("suzuki" "SUZUKI MOTOR CORPORATION")
+ ("swatch" "The Swatch Group Ltd")
+ ("swiftcover" "Swiftcover Insurance Services Limited")
+ ("swiss" "Swiss Confederation")
+ ("sydney" "State of New South Wales, Department of Premier and Cabinet")
+ ("symantec" "Symantec Corporation")
+ ("systems" "Dash Cypress, LLC")
+ ("tab" "Tabcorp Holdings Limited")
+ ("taipei" "Taipei City Government")
+ ("talk" "Amazon Registry Services, Inc.")
+ ("taobao" "Alibaba Group Holding Limited")
+ ("target" "Target Domain Holdings, LLC")
+ ("tatamotors" "Tata Motors Ltd")
+ ("tatar" "Limited Liability Company \"Coordination Center of Regional Domain of Tatarstan Republic\"")
+ ("tattoo" "Uniregistry, Corp.")
+ ("tax" "Storm Orchard, LLC")
+ ("taxi" "Pine Falls, LLC")
+ ("tci" "Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.")
+ ("tdk" "TDK Corporation")
+ ("team" "Atomic Lake, LLC")
+ ("tech" "Dot Tech LLC")
+ ("technology" "Auburn Falls, LLC")
+ ("telecity" "TelecityGroup International Limited")
+ ("telefonica" "Telef\363nica S.A.")
+ ("temasek" "Temasek Holdings (Private) Limited")
+ ("tennis" "Cotton Bloom, LLC")
+ ("teva" "Teva Pharmaceutical Industries Limited")
+ ("thd" "Home Depot Product Authority, LLC")
+ ("theater" "Blue Tigers, LLC")
+ ("theatre" "XYZ.COM LLC")
+ ("tiaa" "Teachers Insurance and Annuity Association of America")
+ ("tickets" "Accent Media Limited")
+ ("tienda" "Victor Manor, LLC")
+ ("tiffany" "Tiffany and Company")
+ ("tips" "Corn Willow, LLC")
+ ("tires" "Dog Edge, LLC")
+ ("tirol" "punkt Tirol GmbH")
+ ("tjmaxx" "The TJX Companies, Inc.")
+ ("tjx" "The TJX Companies, Inc.")
+ ("tkmaxx" "The TJX Companies, Inc.")
+ ("tmall" "Alibaba Group Holding Limited")
+ ("today" "Pearl Woods, LLC")
+ ("tokyo" "GMO Registry, Inc.")
+ ("tools" "Pioneer North, LLC")
+ ("top" "Jiangsu Bangning Science & Technology Co.,Ltd.")
+ ("toray" "Toray Industries, Inc.")
+ ("toshiba" "TOSHIBA Corporation")
+ ("total" "Total SA")
+ ("tours" "Sugar Station, LLC")
+ ("town" "Koko Moon, LLC")
+ ("toyota" "TOYOTA MOTOR CORPORATION")
+ ("toys" "Pioneer Orchard, LLC")
+ ("trade" "Elite Registry Limited")
+ ("trading" "DOTTRADING REGISTRY LTD")
+ ("training" "Wild Willow, LLC")
+ ("travelchannel" "Lifestyle Domain Holdings, Inc.")
+ ("travelers" "Travelers TLD, LLC")
+ ("travelersinsurance" "Travelers TLD, LLC")
+ ("trust" "Artemis Internet Inc")
+ ("trv" "Travelers TLD, LLC")
+ ("tube" "Latin American Telecom LLC")
+ ("tui" "TUI AG")
+ ("tunes" "Amazon Registry Services, Inc.")
+ ("tushu" "Amazon Registry Services, Inc.")
+ ("tvs" "T V SUNDRAM IYENGAR & SONS PRIVATE LIMITED")
+ ("ubank" "National Australia Bank Limited")
+ ("ubs" "UBS AG")
+ ("uconnect" "FCA US LLC.")
+ ("unicom" "China United Network Communications Corporation Limited")
+ ("university" "Little Station, LLC")
+ ("uno" "Dot Latin LLC")
+ ("uol" "UBN INTERNET LTDA.")
+ ("ups" "UPS Market Driver, Inc.")
+ ("vacations" "Atomic Tigers, LLC")
+ ("vana" "Lifestyle Domain Holdings, Inc.")
+ ("vanguard" "The Vanguard Group, Inc.")
+ ("vegas" "Dot Vegas, Inc.")
+ ("ventures" "Binky Lake, LLC")
+ ("verisign" "VeriSign, Inc.")
+ ("versicherung" "TLD-BOX Registrydienstleistungen GmbH")
+ ("vet" "United TLD Holdco, Ltd")
+ ("viajes" "Black Madison, LLC")
+ ("video" "United TLD Holdco, Ltd")
+ ("vig" "VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe")
+ ("viking" "Viking River Cruises (Bermuda) Ltd.")
+ ("villas" "New Sky, LLC")
+ ("vin" "Holly Shadow, LLC")
+ ("vip" "Minds + Machines Group Limited")
+ ("virgin" "Virgin Enterprises Limited")
+ ("visa" "Visa Worldwide Pte. Limited")
+ ("vision" "Koko Station, LLC")
+ ("vista" "Vistaprint Limited")
+ ("vistaprint" "Vistaprint Limited")
+ ("viva" "Saudi Telecom Company")
+ ("vivo" "Telefonica Brasil S.A.")
+ ("vlaanderen" "DNS.be vzw")
+ ("vodka" "Top Level Domain Holdings Limited")
+ ("volkswagen" "Volkswagen Group of America Inc.")
+ ("volvo" "Volvo Holding Sverige Aktiebolag")
+ ("vote" "Monolith Registry LLC")
+ ("voting" "Valuetainment Corp.")
+ ("voto" "Monolith Registry LLC")
+ ("voyage" "Ruby House, LLC")
+ ("vuelos" "Travel Reservations SRL")
+ ("wales" "Nominet UK")
+ ("walmart" "Wal-Mart Stores, Inc.")
+ ("walter" "Sandvik AB")
+ ("wang" "Zodiac Wang Limited")
+ ("wanggou" "Amazon Registry Services, Inc.")
+ ("warman" "Weir Group IP Limited")
+ ("watch" "Sand Shadow, LLC")
+ ("watches" "Richemont DNS Inc.")
+ ("weather" "International Business Machines Corporation")
+ ("weatherchannel" "International Business Machines Corporation")
+ ("webcam" "dot Webcam Limited")
+ ("weber" "Saint-Gobain Weber SA")
+ ("website" "DotWebsite Inc.")
+ ("wed" "Atgron, Inc.")
+ ("wedding" "Top Level Domain Holdings Limited")
+ ("weibo" "Sina Corporation")
+ ("weir" "Weir Group IP Limited")
+ ("whoswho" "Who's Who Registry")
+ ("wien" "punkt.wien GmbH")
+ ("wiki" "Top Level Design, LLC")
+ ("williamhill" "William Hill Organization Limited")
+ ("win" "First Registry Limited")
+ ("windows" "Microsoft Corporation")
+ ("wine" "June Station, LLC")
+ ("winners" "The TJX Companies, Inc.")
+ ("wme" "William Morris Endeavor Entertainment, LLC")
+ ("wolterskluwer" "Wolters Kluwer N.V.")
+ ("woodside" "Woodside Petroleum Limited")
+ ("work" "Top Level Domain Holdings Limited")
+ ("works" "Little Dynamite, LLC")
+ ("world" "Bitter Fields, LLC")
+ ("wow" "Amazon Registry Services, Inc.")
+ ("wtc" "World Trade Centers Association, Inc.")
+ ("wtf" "Hidden Way, LLC")
+ ("xbox" "Microsoft Corporation")
+ ("xerox" "Xerox DNHC LLC")
+ ("xfinity" "Comcast IP Holdings I, LLC")
+ ("xihuan" "QIHOO 360 TECHNOLOGY CO. LTD.")
+ ("xin" "Elegant Leader Limited")
+ ("xyz" "XYZ.COM LLC")
+ ("yachts" "DERYachts, LLC")
+ ("yahoo" "Yahoo! Domain Services Inc.")
+ ("yamaxun" "Amazon Registry Services, Inc.")
+ ("yandex" "YANDEX, LLC")
+ ("yodobashi" "YODOBASHI CAMERA CO.,LTD.")
+ ("yoga" "Top Level Domain Holdings Limited")
+ ("yokohama" "GMO Registry, Inc.")
+ ("you" "Amazon Registry Services, Inc.")
+ ("youtube" "Charleston Road Registry Inc.")
+ ("yun" "QIHOO 360 TECHNOLOGY CO. LTD.")
+ ("zappos" "Amazon Registry Services, Inc.")
+ ("zara" "Industria de Dise\361o Textil, S.A. (INDITEX, S.A.)")
+ ("zero" "Amazon Registry Services, Inc.")
+ ("zip" "Charleston Road Registry Inc.")
+ ("zippo" "Zadco Company")
+ ("zone" "Outer Falls, LLC")
+ ("zuerich" "Kanton Z\374rich (Canton of Zurich)")
+
+ ("post" "Universal Postal Union")
+ ("xxx" "ICM Registry LLC")))
+
+ ;; ##### XEmacs; Non-ASCII domains not yet included because of the
+ ;; ##### persisting frustrating necessity for non-Mule support. Note also
+ ;; ##### that this file cannot have non-ASCII outside comments for
+ ;; ##### related reasons to do with the byte compiler.
+
+ ;;; Non-ASCII country domains:
+
+; ("한국" "KISA (Korea Internet & Security Agency)")
+; ("ভাৰত" "Not assigned")
+; ("ভারত" "National Internet Exchange of India")
+; ("বাংলা" "Posts and Telecommunications Division")
+; ("қаз" "Association of IT Companies of Kazakhstan")
+; ("срб" "Serbian National Internet Domain Registry (RNIDS)")
+; ("бг" "Imena.BG AD")
+; ("бел" "Reliable Software, Ltd.")
+; ("சிங்கப்பூர்" "Singapore Network Information Centre (SGNIC) Pte Ltd")
+; ("мкд" "Macedonian Academic Research Network Skopje")
+; ("ею" "EURid vzw/asbl")
+; ("中国" "China Internet Network Information Center (CNNIC)")
+; ("中國" "China Internet Network Information Center (CNNIC)")
+; ("భారత్" "National Internet Exchange of India")
+; ("ලංකා" "LK Domain Registry")
+; ("ભારત" "National Internet Exchange of India")
+; ("भारतम्" "Not assigned")
+; ("भारत" "National Internet Exchange of India")
+; ("भारोत" "Not assigned")
+; ("укр" "Ukrainian Network Information Centre (UANIC), Inc.")
+; ("香港" "Hong Kong Internet Registration Corporation Ltd.")
+; ("台湾" "Taiwan Network Information Center (TWNIC)")
+; ("台灣" "Taiwan Network Information Center (TWNIC)")
+; ("мон" "Datacom Co.,Ltd")
+; (".الجزائر" "CERIST")
+; (".عمان" "Telecommunications Regulatory Authority (TRA)")
+; (".ایران" "Institute for Research in Fundamental Sciences (IPM)")
+; (".امارات" "Telecommunications Regulatory Authority (TRA)")
+; (".پاکستان" "National Telecommunication Corporation")
+; (".الاردن" "National Information Technology Center (NITC)")
+; (".بارت" "Not assigned")
+; (".بھارت" "National Internet Exchange of India")
+; (".المغرب" "Agence Nationale de Réglementation des Télécommunications (ANRT)")
+; (".السعودية" "Communications and Information Technology Commission")
+; (".ڀارت" "Not assigned")
+; (".سودان" "Sudan Internet Society")
+; (".عراق" "Communications and Media Commission (CMC)")
+; (".مليسيا" "MYNIC Berhad")
+; ("澳門" "Bureau of Telecommunications Regulation (DSRT)")
+; ("გე" "Information Technologies Development Center (ITDC)")
+; ("ไทย" "Thai Network Information Center Foundation")
+; (".سورية" "National Agency for Network Services (NANS)")
+; ("рф" "Coordination Center for TLD RU")
+; (".تونس" "Agence Tunisienne d'Internet")
+; ("ελ" "ICS-FORTH GR")
+; ("ഭാരതം" "Not assigned")
+; ("ਭਾਰਤ" "National Internet Exchange of India")
+; (".مصر" "National Telecommunication Regulatory Authority - NTRA")
+; (".قطر" "Communications Regulatory Authority")
+; ("இலங்கை" "LK Domain Registry")
+; ("இந்தியா" "National Internet Exchange of India")
+; ("հայ" "\"Internet Society\" Non-governmental Organization")
+; ("新加坡" "Singapore Network Information Centre (SGNIC) Pte Ltd")
+; (".فلسطين" "Ministry of Telecom & Information Technology (MTIT)")
+
+ ;; Non-country non-ASCII domain names.
+; ("कॉम" "VeriSign Sarl")
+; ("セール" "Amazon Registry Services, Inc.")
+; ("佛山" "Guangzhou YU Wei Information Technology Co., Ltd.")
+; ("慈善" "Excellent First Limited")
+; ("集团" "Eagle Horizon Limited")
+; ("在线" "TLD REGISTRY LIMITED")
+; ("大众汽车" "Volkswagen (China) Investment Co., Ltd.")
+; ("点看" "VeriSign Sarl")
+; ("คอม" "VeriSign Sarl")
+; ("八卦" "Zodiac Gemini Ltd")
+; ("公益" "China Organizational Name Administration Center")
+; ("公司" "Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)")
+; ("香格里拉" "Shangri‐La International Hotel Management Limited")
+; ("网站" "Global Website TLD Asia Limited")
+; ("移动" "Afilias plc")
+; ("我爱你" "Tycoon Treasure Limited")
+; ("москва" "Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)")
+; ("католик" "Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)")
+; ("онлайн" "CORE Association")
+; ("сайт" "CORE Association")
+; ("联通" "China United Network Communications Corporation Limited")
+; ("时尚" "RISE VICTORY LIMITED")
+; ("微博" "Sina Corporation")
+; ("淡马锡" "Temasek Holdings (Private) Limited")
+; ("ファッション" "Amazon Registry Services, Inc.")
+; ("орг" "Public Interest Registry")
+; ("नेट" "VeriSign Sarl")
+; ("ストア" "Amazon Registry Services, Inc.")
+; ("삼성" "SAMSUNG SDS CO., LTD")
+; ("商标" "HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG LIMITED")
+; ("商店" "Wild Island, LLC")
+; ("商城" "Zodiac Aquarius Limited")
+; ("дети" "The Foundation for Network Initiatives “The Smart Internet”")
+; ("ポイント" "Amazon Registry Services, Inc.")
+; ("新闻" "Xinhua News Agency Guangdong Branch 新华通讯社广东分社")
+; ("工行" "Industrial and Commercial Bank of China Limited")
+; ("家電" "Amazon Registry Services, Inc.")
+; ("中文网" "TLD REGISTRY LIMITED")
+; ("中信" "CITIC Group Corporation")
+; ("娱乐" "Will Bloom, LLC")
+; ("谷歌" "Charleston Road Registry Inc.")
+; ("電訊盈科" "PCCW Enterprises Limited")
+; ("购物" "Minds + Machines Group Limited")
+; ("クラウド" "Amazon Registry Services, Inc.")
+; ("通販" "Amazon Registry Services, Inc.")
+; ("网店" "Zodiac Taurus Ltd.")
+; ("संगठन" "Public Interest Registry")
+; ("餐厅" "HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED")
+; ("网络" "Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)")
+; ("ком" "VeriSign Sarl")
+; ("诺基亚" "Nokia Corporation")
+; ("食品" "Amazon Registry Services, Inc.")
+; ("飞利浦" "Koninklijke Philips N.V.")
+; ("手表" "Richemont DNS Inc.")
+; ("手机" "Beijing RITT-Net Technology Development Co., Ltd")
+; ("닷컴" "VeriSign Sarl")
+; ("政府" "Net-Chinese Co., Ltd.")
+; ("机构" "Public Interest Registry")
+; ("组织机构" "Public Interest Registry")
+; ("健康" "Stable Tone Limited")
+; ("рус" "Rusnames Limited")
+; ("珠宝" "Richemont DNS Inc.")
+; ("大拿" "VeriSign Sarl")
+; ("みんな" "Charleston Road Registry Inc.")
+; ("グーグル" "Charleston Road Registry Inc.")
+; ("世界" "Stable Tone Limited")
+; ("書籍" "Amazon Registry Services, Inc.")
+; ("网址" "KNET Co., Ltd")
+; ("닷넷" "VeriSign Sarl")
+; ("コム" "VeriSign Sarl")
+; ("天主教" "Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)")
+; ("游戏" "Spring Fields, LLC")
+; ("vermögensberater" "Deutsche Vermögensberatung Aktiengesellschaft DVAG")
+; ("vermögensberatung" "Deutsche Vermögensberatung Aktiengesellschaft DVAG")
+; ("企业" "Dash McCook, LLC")
+; ("信息" "Beijing Tele-info Network Technology Co., Ltd.")
+; ("嘉里大酒店" "Kerry Trading Co. Limited")
+; ("嘉里" "Kerry Trading Co. Limited")
+; ("广东" "Guangzhou YU Wei Information Technology Co., Ltd.")
+; ("政务" "China Organizational Name Administration Center")
+; ("xperia" "Sony Mobile Communications AB")
;;;###autoload
(defun what-domain (domain)
Repository URL: https://bitbucket.org/xemacs/mail-lib/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
commit/XEmacs: kehoea: Increase GC_CONS_THRESHOLD to better reflect
current RAM sizes.
7 years, 9 months
Bitbucket
1 new commit in XEmacs:
https://bitbucket.org/xemacs/xemacs/commits/74b4d4c11264/
Changeset: 74b4d4c11264
User: kehoea
Date: 2017-03-19 23:27:07+00:00
Summary: Increase GC_CONS_THRESHOLD to better reflect current RAM sizes.
src/ChangeLog addition:
2017-03-19 Aidan Kehoe <kehoea(a)parhasard.net>
* gc.c (GC_CONS_THRESHOLD):
Increase this (from about 2 megabytes to about 32) and the related
incremental-GC defaults, giving better performance with modern RAM
sizes.
Affected #: 2 files
diff -r 0ae4d70fef9389d2d99dc048cc86bb5745854680 -r 74b4d4c11264e149d03d748b9c34f253a69801bf src/ChangeLog
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2017-03-19 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * gc.c (GC_CONS_THRESHOLD):
+ Increase this (from about 2 megabytes to about 32) and the related
+ incremental-GC defaults, giving better performance with modern RAM
+ sizes.
+
2017-03-15 Aidan Kehoe <kehoea(a)parhasard.net>
* lread.c (read1):
diff -r 0ae4d70fef9389d2d99dc048cc86bb5745854680 -r 74b4d4c11264e149d03d748b9c34f253a69801bf src/gc.c
--- a/src/gc.c
+++ b/src/gc.c
@@ -361,14 +361,14 @@
/* Number of bytes of consing since gc before a full gc should happen. */
-#define GC_CONS_THRESHOLD 2000000
-
+#define GC_CONS_THRESHOLD 32000000
+
/* Number of bytes of consing since gc before another cycle of the gc
should happen in incremental mode. */
-#define GC_CONS_INCREMENTAL_THRESHOLD 200000
+#define GC_CONS_INCREMENTAL_THRESHOLD 800000
/* Number of elements marked in one cycle of incremental GC. */
-#define GC_INCREMENTAL_TRAVERSAL_THRESHOLD 100000
+#define GC_INCREMENTAL_TRAVERSAL_THRESHOLD 400000
/* Number of bytes of consing done since the last GC. */
EMACS_INT consing_since_gc;
Repository URL: https://bitbucket.org/xemacs/xemacs/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
commit/cc-mode: acm: Fix chaotic indentation of C++ lambda. Enhance
documentation thereof
7 years, 9 months
Bitbucket
1 new commit in cc-mode:
https://bitbucket.org/xemacs/cc-mode/commits/7d5f3dc2941d/
Changeset: 7d5f3dc2941d
User: acm
Date: 2017-03-19 16:32:42+00:00
Summary: Fix chaotic indentation of C++ lambda. Enhance documentation thereof
cc-engine.el (c-looking-at-inexpr-block): qualify an invocation of
c-on-identifier with a check we're not at the _end_ of an identifier.
cc-mode.texi: (Tex title page): Remove @subtitlefont because the perl versions
of texi2dvi haven't implemented it.
(Syntactic Symbols): Note that `inlambda' is also used in C++ Mode, not just
in Pike Mode.
(Statement Block Symbols): Add a section illustrating a C++ lambda function.
(FAQ): Add a question about "excessive" indentation of the contents of a C++
lambda function, and how to get rid of it.
Affected #: 2 files
diff -r 3454a992dbd86b4a1fab1cf4867a02c5041e7966 -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 cc-engine.el
--- a/cc-engine.el
+++ b/cc-engine.el
@@ -10661,7 +10661,8 @@
(progn
(c-backward-token-2 1 nil lim)
(and
- (not (c-on-identifier))
+ (not (and (c-on-identifier)
+ (looking-at c-symbol-chars)))
(not (looking-at c-opt-op-identifier-prefix)))))))
(cons 'inlambda bracket-pos))
((and c-recognize-paren-inexpr-blocks
diff -r 3454a992dbd86b4a1fab1cf4867a02c5041e7966 -r 7d5f3dc2941d2151e91f530be5e2efddec0cad33 cc-mode.texi
--- a/cc-mode.texi
+++ b/cc-mode.texi
@@ -194,7 +194,7 @@
@iftex
@center @titlefont{CC Mode 5.33}
@sp 2
-@center @subtitlefont{A GNU Emacs mode for editing C and C-like languages}
+@center A GNU Emacs mode for editing C and C-like languages
@sp 2
@center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie
@end iftex
@@ -4258,8 +4258,8 @@
C++ template argument list continuations. @ref{Class Symbols}.
@item inlambda
Analogous to @code{inclass} syntactic symbol, but used inside lambda
-(i.e. anonymous) functions. Only used in Pike mode. @ref{Statement
-Block Symbols}.
+(i.e. anonymous) functions. Used in C++ and Pike modes.
+@ref{Statement Block Symbols}.
@item lambda-intro-cont
Lines continuing the header of a lambda function, i.e. between the
@code{lambda} keyword and the function body. Only used in Pike mode.
@@ -4996,6 +4996,21 @@
indentation. An @code{inexpr-statement} syntactic element doesn't
contain an anchor position.
+C++11's lambda expressions involve a block inside a statement. For
+example:
+
+@example
+ 1: std::for_each(someList.begin(), someList.end(), [&total](int x) @{
+ 2: total += x;
+ 3: @});
+@end example
+
+Here a lambda expressions begins at the open bracket on line 1 and
+ends at the closing brace on line 3. Line 2, in addition to the
+familiar @code{defun-block-intro} syntactic element, is also prefixed
+by an @code{inlambda} element, which is typically used to indent the
+entire lambda expression to under the opening bracket.
+
In Pike code, there are a few other situations where blocks occur inside
statements, as illustrated here:
@@ -7169,6 +7184,22 @@
this to be the default behavior, don't lobby us, lobby RMS! @t{:-)}
@item
+@emph{How do I stop my C++ lambda expressions being indented way over
+to the right?}
+
+Change the offset associated with @code{inlambda} from its default,
+the function @code{c-lineup-inexpr-block}, to 0. For example, if you
+are setting offsets in a hook function you might include the following
+line:
+
+@example
+(c-set-offset 'inlambda 0)
+@end example
+
+For details of the different ways you can make this setting,
+@ref{Config Basics}.
+
+@item
@emph{How do I stop my code jumping all over the place when I type?}
Deactivate ``electric minor mode'' with @kbd{C-c C-l}. @xref{Getting
Repository URL: https://bitbucket.org/xemacs/cc-mode/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.