Merge "Rollback: Make update of recentchanges table later"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 31 Jan 2014 19:03:47 +0000 (19:03 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 31 Jan 2014 19:03:47 +0000 (19:03 +0000)
67 files changed:
CREDITS
RELEASE-NOTES-1.23
includes/Block.php
includes/Collation.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/HttpFunctions.php
includes/OutputPage.php
includes/Title.php
includes/User.php
includes/Wiki.php
includes/ZhConversion.php
includes/api/ApiFormatXml.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySiteinfo.php
includes/db/LoadBalancer.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/filerepo/ForeignAPIRepo.php
includes/htmlform/HTMLForm.php
includes/installer/Installer.php
includes/installer/WebInstallerPage.php
includes/job/JobSpecification.php
includes/libs/CSSMin.php
includes/parser/CoreParserFunctions.php
includes/search/SearchEngine.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialContributions.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialSearch.php
includes/specials/SpecialWatchlist.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/utils/ArrayUtils.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/checkSyntax.php
maintenance/doMaintenance.php
maintenance/eval.php
maintenance/language/messages.inc
maintenance/language/zhtable/Makefile.py
resources/mediawiki.action/mediawiki.action.edit.editWarning.js
resources/mediawiki.language/languages/he.js
resources/mediawiki.less/mediawiki.mixins.less
resources/mediawiki.special/mediawiki.special.css
resources/mediawiki.special/mediawiki.special.preferences.js
resources/mediawiki/mediawiki.inspect.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.searchSuggest.js
skins/vector/components/watchstar.less
skins/vector/images/unwatch-icon-hl.png [new file with mode: 0644]
skins/vector/images/unwatch-icon-hl.svg [new file with mode: 0644]
skins/vector/images/unwatch-icon.png [new file with mode: 0644]
skins/vector/images/unwatch-icon.svg [new file with mode: 0644]
skins/vector/images/watch-icon-hl.png [new file with mode: 0644]
skins/vector/images/watch-icon-hl.svg [new file with mode: 0644]
skins/vector/images/watch-icon-loading.gif [deleted file]
skins/vector/images/watch-icon-loading.png [new file with mode: 0644]
skins/vector/images/watch-icon-loading.svg [new file with mode: 0644]
skins/vector/images/watch-icon.png [new file with mode: 0644]
skins/vector/images/watch-icon.svg [new file with mode: 0644]
skins/vector/images/watch-icons.png [deleted file]
tests/phpunit/includes/UserTest.php

diff --git a/CREDITS b/CREDITS
index 21db850..eee4794 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -216,6 +216,7 @@ following names for their contribution to the product.
 * Salvatore Ingala
 * Santhosh Thottingal
 * Scott Colcord
+* se4598
 * Sébastien Santoro
 * Simon Walker
 * Solitarius
index 57080b7..cd602a1 100644 (file)
@@ -32,6 +32,8 @@ production.
   the system message 'emailsender' should be modified (default: "{{SITENAME}}").
 * $wgDBAhandler was removed as the only class using it was also removed
 * The 'max threads' setting was removed from $wgDBservers.
+* Support for AdminSettings.php has been completely removed. All configuration
+  belongs in LocalSettings.php.
 
 === New features in 1.23 ===
 * ResourceLoader can utilize the Web Storage API to cache modules client-side.
@@ -114,6 +116,7 @@ production.
   compiled without support for MySQL yet with support for another DBMS.
 * (bug 56199) Raw option of parser functions must now match complete word,
   to take effect.
+* (bug 60543) Special:PrefixIndex forgot stripprefix=1 for "Next page" link
 
 === Web API changes in 1.23 ===
 * (bug 54884) action=parse&prop=categories now indicates hidden and missing
index 3c22f9b..3575b9d 100644 (file)
@@ -435,13 +435,14 @@ class Block {
         * Update a block in the DB with new parameters.
         * The ID field needs to be loaded first.
         *
-        * @return Int number of affected rows, which should probably be 1 or something has
-        *     gone slightly awry
+        * @return bool|array False on failure, array on success: ('id' => block ID, 'autoIds' => array of autoblock IDs)
         */
        public function update() {
                wfDebug( "Block::update; timestamp {$this->mTimestamp}\n" );
                $dbw = wfGetDB( DB_MASTER );
 
+               $dbw->startAtomic( __METHOD__ );
+
                $dbw->update(
                        'ipblocks',
                        $this->getDatabaseArray( $dbw ),
@@ -449,7 +450,23 @@ class Block {
                        __METHOD__
                );
 
-               return $dbw->affectedRows();
+               $affected = $dbw->affectedRows();
+
+               $dbw->update(
+                       'ipblocks',
+                       $this->getAutoblockUpdateArray(),
+                       array( 'ipb_parent_block_id' => $this->getId() ),
+                       __METHOD__
+               );
+
+               $dbw->endAtomic( __METHOD__ );
+
+               if ( $affected ) {
+                       $auto_ipd_ids = $this->doRetroactiveAutoblock();
+                       return array( 'id' => $this->mId, 'autoIds' => $auto_ipd_ids );
+               }
+
+               return false;
        }
 
        /**
@@ -492,6 +509,20 @@ class Block {
                return $a;
        }
 
+       /**
+        * @return Array
+        */
+       protected function getAutoblockUpdateArray() {
+               return array(
+                       'ipb_by'               => $this->getBy(),
+                       'ipb_by_text'          => $this->getByName(),
+                       'ipb_reason'           => $this->mReason,
+                       'ipb_create_account'   => $this->prevents( 'createaccount' ),
+                       'ipb_deleted'          => (int)$this->mHideName, // typecast required for SQLite
+                       'ipb_allow_usertalk'   => !$this->prevents( 'editownusertalk' ),
+               );
+       }
+
        /**
         * Retroactively autoblocks the last IP used by the user (if it is a user)
         * blocked by this Block.
index b51256b..d2a5797 100644 (file)
@@ -514,7 +514,7 @@ class IcuCollation extends Collation {
         * Do a binary search, and return the index of the largest item that sorts
         * less than or equal to the target value.
         *
-        * @deprecated in 1.22; use ArrayUtils::findLowerBound() instead
+        * @deprecated in 1.23; use ArrayUtils::findLowerBound() instead
         *
         * @param array $valueCallback A function to call to get the value with
         *     a given array index.
@@ -528,7 +528,7 @@ class IcuCollation extends Collation {
         *     sorts before all items.
         */
        function findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target ) {
-               wfDeprecated( __METHOD__, '1.22' );
+               wfDeprecated( __METHOD__, '1.23' );
                return ArrayUtils::findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target );
        }
 
index 015ea9c..19801ec 100644 (file)
@@ -165,11 +165,6 @@ define( 'ALF_NO_BLOCK_LOCK', 8 );
  * Date format selectors; used in user preference storage and by
  * Language::date() and co.
  */
-/*define( 'MW_DATE_DEFAULT', '0' );
-define( 'MW_DATE_MDY', '1' );
-define( 'MW_DATE_DMY', '2' );
-define( 'MW_DATE_YMD', '3' );
-define( 'MW_DATE_ISO', 'ISO 8601' );*/
 define( 'MW_DATE_DEFAULT', 'default' );
 define( 'MW_DATE_MDY', 'mdy' );
 define( 'MW_DATE_DMY', 'dmy' );
index 06bdadd..fbfe3ed 100644 (file)
@@ -930,10 +930,6 @@ class EditPage {
                                $undo = $wgRequest->getInt( 'undo' );
 
                                if ( $undo > 0 && $undoafter > 0 ) {
-                                       if ( $undo < $undoafter ) {
-                                               # If they got undoafter and undo round the wrong way, switch them
-                                               list( $undo, $undoafter ) = array( $undoafter, $undo );
-                                       }
 
                                        $undorev = Revision::newFromId( $undo );
                                        $oldrev = Revision::newFromId( $undoafter );
@@ -942,8 +938,6 @@ class EditPage {
                                        # the revisions exist and they were not deleted.
                                        # Otherwise, $content will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
-                                               $undorev->getPage() == $oldrev->getPage() &&
-                                               $undorev->getPage() == $this->mTitle->getArticleID() &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
                                                !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
 
index 5377add..d8c7b6a 100644 (file)
@@ -317,7 +317,7 @@ class ErrorPageError extends MWException {
         * @param string|Message $msg Message key (string) for error text, or a Message object
         * @param array $params with parameters to wfMessage()
         */
-       function __construct( $title, $msg, $params = null ) {
+       function __construct( $title, $msg, $params = array() ) {
                $this->title = $title;
                $this->msg = $msg;
                $this->params = $params;
@@ -356,7 +356,7 @@ class BadTitleError extends ErrorPageError {
         * @param string|Message $msg A message key (default: 'badtitletext')
         * @param array $params parameter to wfMessage()
         */
-       function __construct( $msg = 'badtitletext', $params = null ) {
+       function __construct( $msg = 'badtitletext', $params = array() ) {
                parent::__construct( 'badtitle', $msg, $params );
        }
 
@@ -426,7 +426,7 @@ class ReadOnlyError extends ErrorPageError {
                parent::__construct(
                        'readonly',
                        'readonlytext',
-                       wfReadOnlyReason()
+                       wfReadOnlyReason() ?: array()
                );
        }
 }
@@ -501,12 +501,12 @@ class UserNotLoggedIn extends ErrorPageError {
         * @param string $titleMsg A message key to set the page title.
         *        Optional, default: 'exception-nologin'
         * @param array $params Parameters to wfMessage().
-        *        Optional, default: null
+        *        Optional, default: array()
         */
        public function __construct(
                $reasonMsg = 'exception-nologin-text',
                $titleMsg = 'exception-nologin',
-               $params = null
+               $params = array()
        ) {
                parent::__construct( $titleMsg, $reasonMsg, $params );
        }
index 2536de1..274d4a7 100644 (file)
@@ -845,6 +845,7 @@ class PhpHttpRequest extends MWHttpRequest {
                }
 
                $this->reqHeaders['Accept'] = "*/*";
+               $this->reqHeaders['Connection'] = 'Close';
                if ( $this->method == 'POST' ) {
                        // Required for HTTP 1.0 POSTs
                        $this->reqHeaders['Content-Length'] = strlen( $this->postData );
@@ -853,52 +854,47 @@ class PhpHttpRequest extends MWHttpRequest {
                        }
                }
 
-               $options = array();
-               if ( $this->proxy ) {
-                       $options['proxy'] = $this->urlToTCP( $this->proxy );
-                       $options['request_fulluri'] = true;
-               }
+               // Set up PHP stream context
+               $options = array(
+                       'http' => array(
+                               'method' => $this->method,
+                               'header' => implode( "\r\n", $this->getHeaderList() ),
+                               'protocol_version' => '1.1',
+                               'max_redirects' => $this->followRedirects ? $this->maxRedirects : 0,
+                               'ignore_errors' => true,
+                               'timeout' => $this->timeout,
+                               // Curl options in case curlwrappers are installed
+                               'curl_verify_ssl_host' => $this->sslVerifyHost ? 2 : 0,
+                               'curl_verify_ssl_peer' => $this->sslVerifyCert,
+                       ),
+                       'ssl' => array(
+                               'verify_peer' => $this->sslVerifyCert,
+                               'SNI_enabled' => true,
+                       ),
+               );
 
-               if ( !$this->followRedirects ) {
-                       $options['max_redirects'] = 0;
-               } else {
-                       $options['max_redirects'] = $this->maxRedirects;
+               if ( $this->proxy ) {
+                       $options['http']['proxy'] = $this->urlToTCP( $this->proxy );
+                       $options['http']['request_fulluri'] = true;
                }
 
-               $options['method'] = $this->method;
-               $options['header'] = implode( "\r\n", $this->getHeaderList() );
-               // Note that at some future point we may want to support
-               // HTTP/1.1, but we'd have to write support for chunking
-               // in version of PHP < 5.3.1
-               $options['protocol_version'] = "1.0";
-
-               // This is how we tell PHP we want to deal with 404s (for example) ourselves.
-               // Only works on 5.2.10+
-               $options['ignore_errors'] = true;
-
                if ( $this->postData ) {
-                       $options['content'] = $this->postData;
+                       $options['http']['content'] = $this->postData;
                }
 
-               $options['timeout'] = $this->timeout;
-
                if ( $this->sslVerifyHost ) {
-                       $options['CN_match'] = $this->parsedUrl['host'];
-               }
-               if ( $this->sslVerifyCert ) {
-                       $options['verify_peer'] = true;
+                       $options['ssl']['CN_match'] = $this->parsedUrl['host'];
                }
 
                if ( is_dir( $this->caInfo ) ) {
-                       $options['capath'] = $this->caInfo;
+                       $options['ssl']['capath'] = $this->caInfo;
                } elseif ( is_file( $this->caInfo ) ) {
-                       $options['cafile'] = $this->caInfo;
+                       $options['ssl']['cafile'] = $this->caInfo;
                } elseif ( $this->caInfo ) {
                        throw new MWException( "Invalid CA info passed: {$this->caInfo}" );
                }
 
-               $scheme = $this->parsedUrl['scheme'];
-               $context = stream_context_create( array( "$scheme" => $options ) );
+               $context = stream_context_create( $options );
 
                $this->headerList = array();
                $reqCount = 0;
index 6d06693..1972d2d 100644 (file)
@@ -159,8 +159,9 @@ class OutputPage extends ContextSource {
        );
 
        /**
-        * @EasterEgg I just love the name for this self documenting variable.
-        * @todo document
+        * Whether output is disabled.  If this is true, the 'output' method will do nothing.
+        *
+        * @var bool $mDoNothing
         */
        var $mDoNothing = false;
 
index bdba578..5423f09 100644 (file)
@@ -4431,9 +4431,11 @@ class Title {
        }
 
        /**
-        * Get the number of authors between the given revisions or revision IDs.
+        * Get the authors between the given revisions or revision IDs.
         * Used for diffs and other things that really need it.
         *
+        * @since 1.23
+        *
         * @param int|Revision $old Old revision or rev ID (first before range by default)
         * @param int|Revision $new New revision or rev ID (first after range by default)
         * @param int $limit Maximum number of authors
@@ -4442,9 +4444,9 @@ class Title {
         *     'include_new' Include $new in the range; $old is excluded.
         *     'include_both' Include both $old and $new in the range.
         *     Unknown option values are ignored.
-        * @return int Number of revision authors in the range; zero if not both revisions exist
+        * @return array|null Names of revision authors in the range; null if not both revisions exist
         */
-       public function countAuthorsBetween( $old, $new, $limit, $options = array() ) {
+       public function getAuthorsBetween( $old, $new, $limit, $options = array() ) {
                if ( !( $old instanceof Revision ) ) {
                        $old = Revision::newFromTitle( $this, (int)$old );
                }
@@ -4455,8 +4457,9 @@ class Title {
                // Add $old->getPage() != $new->getPage() || $old->getPage() != $this->getArticleID()
                // in the sanity check below?
                if ( !$old || !$new ) {
-                       return 0; // nothing to compare
+                       return null; // nothing to compare
                }
+               $authors = array();
                $old_cmp = '>';
                $new_cmp = '<';
                $options = (array)$options;
@@ -4472,12 +4475,19 @@ class Title {
                }
                // No DB query needed if $old and $new are the same or successive revisions:
                if ( $old->getId() === $new->getId() ) {
-                       return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
+                       return ( $old_cmp === '>' && $new_cmp === '<' ) ? array() : array( $old->getRawUserText() );
                } elseif ( $old->getId() === $new->getParentId() ) {
-                       if ( $old_cmp === '>' || $new_cmp === '<' ) {
-                               return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
+                       if ( $old_cmp === '>=' && $new_cmp === '<=' ) {
+                               $authors[] = $old->getRawUserText();
+                               if ( $old->getRawUserText() != $new->getRawUserText() ) {
+                                       $authors[] = $new->getRawUserText();
+                               }
+                       } elseif ( $old_cmp === '>=' ) {
+                               $authors[] = $old->getRawUserText();
+                       } elseif ( $new_cmp === '<=' ) {
+                               $authors[] = $new->getRawUserText();
                        }
-                       return ( $old->getRawUserText() === $new->getRawUserText() ) ? 1 : 2;
+                       return $authors;
                }
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'revision', 'DISTINCT rev_user_text',
@@ -4488,7 +4498,29 @@ class Title {
                        ), __METHOD__,
                        array( 'LIMIT' => $limit + 1 ) // add one so caller knows it was truncated
                );
-               return (int)$dbr->numRows( $res );
+               foreach ( $res as $row ) {
+                       $authors[] = $row->rev_user_text;
+               }
+               return $authors;
+       }
+
+       /**
+        * Get the number of authors between the given revisions or revision IDs.
+        * Used for diffs and other things that really need it.
+        *
+        * @param int|Revision $old Old revision or rev ID (first before range by default)
+        * @param int|Revision $new New revision or rev ID (first after range by default)
+        * @param int $limit Maximum number of authors
+        * @param string|array $options (Optional): Single option, or an array of options:
+        *     'include_old' Include $old in the range; $new is excluded.
+        *     'include_new' Include $new in the range; $old is excluded.
+        *     'include_both' Include both $old and $new in the range.
+        *     Unknown option values are ignored.
+        * @return int Number of revision authors in the range; zero if not both revisions exist
+        */
+       public function countAuthorsBetween( $old, $new, $limit, $options = array() ) {
+               $authors = $this->getAuthorsBetween( $old, $new, $limit, $options );
+               return $authors ? count( $authors ) : 0;
        }
 
        /**
index 7f7a22d..ca3f79b 100644 (file)
@@ -4629,20 +4629,20 @@ class User {
                        return;
                }
 
-               $defaultOptions = self::getDefaultOptions();
-
                $userId = $this->getId();
                $insert_rows = array();
-               $changedOptions = array_diff_assoc( $saveOptions, $defaultOptions );
-               foreach ( $changedOptions as $key => $value ) {
-                       if ( $value === false || is_null( $value ) ) {
-                               continue;
+               foreach ( $saveOptions as $key => $value ) {
+                       // Don't bother storing default values
+                       $defaultOption = self::getDefaultOption( $key );
+                       if ( ( is_null( $defaultOption ) &&
+                                       !( $value === false || is_null( $value ) ) ) ||
+                                       $value != $defaultOption ) {
+                               $insert_rows[] = array(
+                                               'up_user' => $userId,
+                                               'up_property' => $key,
+                                               'up_value' => $value,
+                                       );
                        }
-                       $insert_rows[] = array(
-                               'up_user' => $userId,
-                               'up_property' => $key,
-                               'up_value' => $value,
-                       );
                }
 
                $dbw = wfGetDB( DB_MASTER );
index 9a6e6b9..56d23b1 100644 (file)
@@ -637,12 +637,19 @@ class MediaWiki {
                }
 
                if ( !wfShellExecDisabled() && is_executable( $wgPhpCli ) ) {
-                       // Start a background process to run some of the jobs.
-                       // This will be asynchronous on *nix though not on Windows.
+                       // Start a background process to run some of the jobs
                        wfProfileIn( __METHOD__ . '-exec' );
                        $retVal = 1;
                        $cmd = wfShellWikiCmd( "$IP/maintenance/runJobs.php", array( '--maxjobs', $n ) );
-                       wfShellExec( "$cmd &", $retVal );
+                       $cmd .= " >" . wfGetNull() . " 2>&1"; // don't hang PHP on pipes
+                       if ( wfIsWindows() ) {
+                               // Using START makes this async and also works around a bug where using
+                               // wfShellExec() with a quoted script name causes a filename syntax error.
+                               $cmd = "START /B \"bg\" $cmd";
+                       } else {
+                               $cmd = "$cmd &";
+                       }
+                       wfShellExec( $cmd, $retVal );
                        wfProfileOut( __METHOD__ . '-exec' );
                } else {
                        try {
index a62df6c..3067b1a 100644 (file)
@@ -3198,8 +3198,8 @@ $zh2Hant = array(
 '不干她' => '不干她',
 '不干它' => '不干它',
 '不干我' => '不干我',
-'不干擾' => '不干擾',
 '不干扰' => '不干擾',
+'不干擾' => '不干擾',
 '不干涉' => '不干涉',
 '不干牠' => '不干牠',
 '不干犯' => '不干犯',
@@ -3220,13 +3220,12 @@ $zh2Hant = array(
 '不负所托' => '不負所托',
 '不通吊庆' => '不通弔慶',
 '不丑' => '不醜',
-'不采声' => '不采聲',
 '不采聲' => '不采聲',
+'不采声' => '不采聲',
 '不锈钢' => '不鏽鋼',
 '不食干腊' => '不食乾腊',
 '不斗' => '不鬥',
 '丑三' => '丑三',
-'丑婆子' => '丑婆子',
 '丑年' => '丑年',
 '丑日' => '丑日',
 '丑旦' => '丑旦',
@@ -3264,23 +3263,21 @@ $zh2Hant = array(
 '中签' => '中籤',
 '中美发表' => '中美發表',
 '中药' => '中藥',
-'中西合并' => '中西合併',
 '中风后' => '中風後',
-'丰儀' => '丰儀',
 '丰仪' => '丰儀',
+'丰儀' => '丰儀',
 '丰南' => '丰南',
 '丰台' => '丰台',
 '丰姿' => '丰姿',
 '丰容' => '丰容',
-'丰度' => '丰度',
 '丰情' => '丰情',
 '丰标' => '丰標',
-'丰標不凡' => '丰標不凡',
 '丰标不凡' => '丰標不凡',
+'丰標不凡' => '丰標不凡',
 '丰神' => '丰神',
 '丰茸' => '丰茸',
 '丰采' => '丰采',
-'丰é\9fµ' => '丰é\9f»',
+'丰é\9fµ' => '丰é\9fµ',
 '丰韻' => '丰韻',
 '丸药' => '丸藥',
 '丹药' => '丹藥',
@@ -3312,15 +3309,17 @@ $zh2Hant = array(
 '九扎' => '九紮',
 '九只' => '九隻',
 '九余' => '九餘',
-'九龙表行' => '九龍表行',
 '九龍表行' => '九龍表行',
+'九龙表行' => '九龍表行',
 '也克制' => '也剋制',
 '也斗了胆' => '也斗了膽',
+'干上' => '乾上',
 '干干' => '乾乾',
 '干干儿的' => '乾乾兒的',
 '干干净净' => '乾乾淨淨',
+'干了' => '乾了',
 '干井' => '乾井',
-'干个够' => '乾個夠',
+'干个' => '乾個',
 '干儿' => '乾兒',
 '干冰' => '乾冰',
 '干冷' => '乾冷',
@@ -3357,10 +3356,12 @@ $zh2Hant = array(
 '干巴' => '乾巴',
 '干式' => '乾式',
 '干弟' => '乾弟',
+'干得' => '乾得',
 '干急' => '乾急',
 '干性' => '乾性',
 '干打雷' => '乾打雷',
 '干折' => '乾折',
+'干掉' => '乾掉',
 '干撂台' => '乾撂台',
 '干撇下' => '乾撇下',
 '干擦' => '乾擦',
@@ -3446,8 +3447,8 @@ $zh2Hant = array(
 '干衣' => '乾衣',
 '干裂' => '乾裂',
 '干亲' => '乾親',
-'乾象历' => '乾象曆',
 '乾象曆' => '乾象曆',
+'乾象历' => '乾象曆',
 '干贝' => '乾貝',
 '干货' => '乾貨',
 '干躁' => '乾躁',
@@ -3496,8 +3497,8 @@ $zh2Hant = array(
 '二缶钟惑' => '二缶鐘惑',
 '二老板' => '二老板',
 '二虎相斗' => '二虎相鬥',
-'二里头' => '二里頭',
 '二里頭' => '二里頭',
+'二里头' => '二里頭',
 '二只' => '二隻',
 '二余' => '二餘',
 '于丹' => '于丹',
@@ -3509,10 +3510,10 @@ $zh2Hant = array(
 '于伟国' => '于偉國',
 '于偉國' => '于偉國',
 '于光新' => '于光新',
-'于光遠' => '于光遠',
 '于光远' => '于光遠',
-'äº\8eå\85\8b\98­å¤\9a縣' => 'äº\8eå\85\8b\98­å¤\9a縣',
+'äº\8eå\85\89é\81 ' => 'äº\8eå\85\89é\81 ',
 '于克-兰多县' => '于克-蘭多縣',
+'于克-蘭多縣' => '于克-蘭多縣',
 '于克勒' => '于克勒',
 '于再清' => '于再清',
 '于冕' => '于冕',
@@ -3529,8 +3530,8 @@ $zh2Hant = array(
 '于吉' => '于吉',
 '于和伟' => '于和偉',
 '于品海' => '于品海',
-'于国桢' => '于國楨',
 '于國楨' => '于國楨',
+'于国桢' => '于國楨',
 '于国治' => '于國治',
 '于國治' => '于國治',
 '于坚' => '于堅',
@@ -3539,15 +3540,15 @@ $zh2Hant = array(
 '于大宝' => '于大寶',
 '于天仁' => '于天仁',
 '于天龙' => '于天龍',
-'于奇库杜克' => '于奇庫杜克',
 '于奇庫杜克' => '于奇庫杜克',
+'于奇库杜克' => '于奇庫杜克',
 '于姓' => '于姓',
 '于娜' => '于娜',
 '于娟' => '于娟',
 '于子千' => '于子千',
 '于孔兼' => '于孔兼',
-'于學忠' => '于學忠',
 '于学忠' => '于學忠',
+'于學忠' => '于學忠',
 '于家堡' => '于家堡',
 '于寘' => '于寘',
 '于小伟' => '于小偉',
@@ -3558,16 +3559,16 @@ $zh2Hant = array(
 '于山' => '于山',
 '于山国' => '于山國',
 '于山國' => '于山國',
-'于帥' => '于帥',
 '于帅' => '于帥',
+'于帥' => '于帥',
 '于幼軍' => '于幼軍',
 '于幼军' => '于幼軍',
 '于康震' => '于康震',
-'于廣洲' => '于廣洲',
 '于广洲' => '于廣洲',
+'于廣洲' => '于廣洲',
 '于式枚' => '于式枚',
-'于從濂' => '于從濂',
 '于从濂' => '于從濂',
+'于從濂' => '于從濂',
 '于德海' => '于德海',
 '于志宁' => '于志寧',
 '于志寧' => '于志寧',
@@ -3575,8 +3576,8 @@ $zh2Hant = array(
 '于思' => '于思',
 '于慎行' => '于慎行',
 '于慧' => '于慧',
-'于成龙' => '于成龍',
 '于成龍' => '于成龍',
+'于成龙' => '于成龍',
 '于振' => '于振',
 '于振武' => '于振武',
 '于敏' => '于敏',
@@ -3587,13 +3588,13 @@ $zh2Hant = array(
 '于斯納爾斯貝里' => '于斯納爾斯貝里',
 '于斯达尔' => '于斯達爾',
 '于斯達爾' => '于斯達爾',
-'于明涛' => '于明濤',
 '于明濤' => '于明濤',
+'于明涛' => '于明濤',
 '于是之' => '于是之',
 '于晨楠' => '于晨楠',
 '于晴' => '于晴',
-'于會泳' => '于會泳',
 '于会泳' => '于會泳',
+'于會泳' => '于會泳',
 '于根伟' => '于根偉',
 '于根偉' => '于根偉',
 '于格' => '于格',
@@ -3601,8 +3602,8 @@ $zh2Hant = array(
 '于枫' => '于楓',
 '于荣光' => '于榮光',
 '于樂' => '于樂',
-'于树洁' => '于樹潔',
 '于樹潔' => '于樹潔',
+'于树洁' => '于樹潔',
 '于欣' => '于欣',
 '于欣源' => '于欣源',
 '于正升' => '于正昇',
@@ -3619,10 +3620,10 @@ $zh2Hant = array(
 '于浩威' => '于浩威',
 '于海' => '于海',
 '于海洋' => '于海洋',
-'于湘兰' => '于湘蘭',
 '于湘蘭' => '于湘蘭',
-'äº\8eæ¼¢è¶\85' => 'äº\8eæ¼¢è¶\85',
+'äº\8eæ¹\98å\85°' => 'äº\8eæ¹\98è\98­',
 '于汉超' => '于漢超',
+'于漢超' => '于漢超',
 '于澄' => '于澄',
 '于泽尔' => '于澤爾',
 '于澤爾' => '于澤爾',
@@ -3631,8 +3632,8 @@ $zh2Hant = array(
 '于熙珍' => '于熙珍',
 '于爾岑' => '于爾岑',
 '于尔岑' => '于爾岑',
-'于爾根' => '于爾根',
 '于尔根' => '于爾根',
+'于爾根' => '于爾根',
 '于尔里克' => '于爾里克',
 '于爾里克' => '于爾里克',
 '于特森' => '于特森',
@@ -3645,8 +3646,8 @@ $zh2Hant = array(
 '于美人' => '于美人',
 '于耘婕' => '于耘婕',
 '于若木' => '于若木',
-'于蔭霖' => '于蔭霖',
 '于荫霖' => '于蔭霖',
+'于蔭霖' => '于蔭霖',
 '于衡' => '于衡',
 '于西翰' => '于西翰',
 '于謙' => '于謙',
@@ -3654,20 +3655,20 @@ $zh2Hant = array(
 '于谨' => '于謹',
 '于貝爾' => '于貝爾',
 '于贝尔' => '于貝爾',
-'于赠' => '于贈',
 '于贈' => '于贈',
+'于赠' => '于贈',
 '于越' => '于越',
 '于军' => '于軍',
 '于軍' => '于軍',
 '于道泉' => '于道泉',
-'于远伟' => '于遠偉',
 '于遠偉' => '于遠偉',
-'于都縣' => '于都縣',
+'于远伟' => '于遠偉',
 '于都县' => '于都縣',
+'于都縣' => '于都縣',
 '于里察' => '于里察',
 '于阗' => '于闐',
-'于雙戈' => '于雙戈',
 '于双戈' => '于雙戈',
+'于雙戈' => '于雙戈',
 '于云鹤' => '于雲鶴',
 '于震' => '于震',
 '于震寰' => '于震寰',
@@ -3680,17 +3681,17 @@ $zh2Hant = array(
 '于风政' => '于風政',
 '于風政' => '于風政',
 '于飞' => '于飛',
-'于飞岛' => '于飛島',
 '于飛島' => '于飛島',
+'于飞岛' => '于飛島',
 '于余曲折' => '于餘曲折',
 '于鬯' => '于鬯',
 '于魁智' => '于魁智',
-'于凤桐' => '于鳳桐',
 '于鳳桐' => '于鳳桐',
+'于凤桐' => '于鳳桐',
 '于凤至' => '于鳳至',
 '于鳳至' => '于鳳至',
-'于默奥' => '于默奧',
 '于默奧' => '于默奧',
+'于默奥' => '于默奧',
 '云乎' => '云乎',
 '云云' => '云云',
 '云何' => '云何',
@@ -3770,8 +3771,8 @@ $zh2Hant = array(
 '件钟' => '件鐘',
 '任何表演' => '任何表演',
 '任何表示' => '任何表示',
-'任何表達' => '任何表達',
 '任何表达' => '任何表達',
+'任何表達' => '任何表達',
 '任何表' => '任何錶',
 '任何钟' => '任何鐘',
 '任何钟表' => '任何鐘錶',
@@ -3983,8 +3984,8 @@ $zh2Hant = array(
 '占过' => '佔過',
 '占道' => '佔道',
 '占零' => '佔零',
-'占領' => '佔領',
 '占领' => '佔領',
+'占領' => '佔領',
 '占头' => '佔頭',
 '占头筹' => '佔頭籌',
 '占饭' => '佔飯',
@@ -4054,8 +4055,8 @@ $zh2Hant = array(
 '占y' => '佔y',
 '占z' => '佔z',
 '何杰' => '何杰',
-'余三胜' => '余三勝',
 '余三勝' => '余三勝',
+'余三胜' => '余三勝',
 '余光中' => '余光中',
 '余光生' => '余光生',
 '余力為' => '余力為',
@@ -4083,7 +4084,7 @@ $zh2Hant = array(
 '并到' => '併到',
 '并合' => '併合',
 '并名' => '併名',
-'并吞下' => '併吞下',
+'并吞' => '併吞',
 '并拢' => '併攏',
 '并案' => '併案',
 '并流' => '併流',
@@ -4245,8 +4246,8 @@ $zh2Hant = array(
 '凶横' => '兇橫',
 '凶殘' => '兇殘',
 '凶残' => '兇殘',
-'凶殺' => '兇殺',
 '凶杀' => '兇殺',
+'凶殺' => '兇殺',
 '凶犯' => '兇犯',
 '凶狠' => '兇狠',
 '凶猛' => '兇猛',
@@ -4263,8 +4264,8 @@ $zh2Hant = array(
 '党太尉' => '党太尉',
 '党怀英' => '党懷英',
 '党进' => '党進',
-'党項' => '党項',
 '党项' => '党項',
+'党項' => '党項',
 '内制' => '內製',
 '内面包' => '內面包',
 '内面包的' => '內面包的',
@@ -4352,8 +4353,8 @@ $zh2Hant = array(
 '准不准我' => '准不准我',
 '准不准许' => '准不准許',
 '准不准谁' => '准不准誰',
-'准保護' => '准保護',
 '准保护' => '准保護',
+'准保護' => '准保護',
 '准保释' => '准保釋',
 '准保釋' => '准保釋',
 '凌蒙初' => '凌濛初',
@@ -4409,8 +4410,8 @@ $zh2Hant = array(
 '划子' => '划子',
 '划得来' => '划得來',
 '划拳' => '划拳',
-'划桨' => '划槳',
 '划槳' => '划槳',
+'划桨' => '划槳',
 '划水' => '划水',
 '划算' => '划算',
 '划船' => '划船',
@@ -4437,7 +4438,6 @@ $zh2Hant = array(
 '利于' => '利於',
 '利欲熏心' => '利欲熏心',
 '刮来刮去' => '刮來刮去',
-'刮着' => '刮著',
 '刮起来' => '刮起來',
 '刮风下雪倒便宜' => '刮風下雪倒便宜',
 '刮胡' => '刮鬍',
@@ -4485,8 +4485,8 @@ $zh2Hant = array(
 '划入' => '劃入',
 '划为' => '劃為',
 '剧药' => '劇藥',
-'刘佳怜' => '劉佳怜',
 '劉佳怜' => '劉佳怜',
+'刘佳怜' => '劉佳怜',
 '刘克庄' => '劉克莊',
 '刘芸后' => '劉芸后',
 '力克制' => '力剋制',
@@ -4542,12 +4542,12 @@ $zh2Hant = array(
 '十出' => '十齣',
 '千个' => '千個',
 '千只可' => '千只可',
-'千只夠' => '千只夠',
 '千只够' => '千只夠',
+'千只夠' => '千只夠',
 '千只怕' => '千只怕',
 '千只能' => '千只能',
-'千只足够' => '千只足夠',
 '千只足夠' => '千只足夠',
+'千只足够' => '千只足夠',
 '千周后' => '千周後',
 '千多只' => '千多隻',
 '千天后' => '千天後',
@@ -4625,8 +4625,8 @@ $zh2Hant = array(
 '口里' => '口裡',
 '口试' => '口試',
 '口钟' => '口鐘',
-'古书云' => '古書云',
 '古書云' => '古書云',
+'古书云' => '古書云',
 '古柯咸' => '古柯鹹',
 '古柯碱' => '古柯鹼',
 '古朴' => '古樸',
@@ -4647,10 +4647,10 @@ $zh2Hant = array(
 '只要功夫深,铁杵磨成锈花针' => '只要功夫深,鐵杵磨成鏽花針',
 '只身上已' => '只身上已',
 '只身上有' => '只身上有',
-'只身上沒' => '只身上沒',
 '只身上没' => '只身上沒',
-'只身上無' => '只身上無',
+'只身上沒' => '只身上沒',
 '只身上无' => '只身上無',
+'只身上無' => '只身上無',
 '只身上的' => '只身上的',
 '只身世' => '只身世',
 '只身份' => '只身份',
@@ -4665,8 +4665,8 @@ $zh2Hant = array(
 '只身旁' => '只身旁',
 '只身材' => '只身材',
 '只身段' => '只身段',
-'只身为' => '只身為',
 '只身為' => '只身為',
+'只身为' => '只身為',
 '只身边' => '只身邊',
 '只身邊' => '只身邊',
 '只身首' => '只身首',
@@ -4712,8 +4712,8 @@ $zh2Hant = array(
 '各辟' => '各闢',
 '各类钟' => '各類鐘',
 '合伙人' => '合伙人',
+'合并' => '合併',
 '合伙' => '合夥',
-'合并' => '合并',
 '合府上' => '合府上',
 '合采' => '合採',
 '合历' => '合曆',
@@ -4751,10 +4751,10 @@ $zh2Hant = array(
 '后丰' => '后豐',
 '后豐' => '后豐',
 '后里' => '后里',
-'后发FK型星' => '后髮FK型星',
 '后髮FK型星' => '后髮FK型星',
-'后髮座' => '后髮座',
+'后发FK型星' => '后髮FK型星',
 '后发座' => '后髮座',
+'后髮座' => '后髮座',
 '后发星系团' => '后髮星系團',
 '后髮星系團' => '后髮星系團',
 '吐哺捉发' => '吐哺捉髮',
@@ -4771,8 +4771,8 @@ $zh2Hant = array(
 '吹发' => '吹髮',
 '吹胡' => '吹鬍',
 '吾为之范我驰驱' => '吾爲之範我馳驅',
-'吕后' => '呂后',
 '呂后' => '呂后',
+'吕后' => '呂后',
 '呆呆傻傻' => '呆呆傻傻',
 '呆呆挣挣' => '呆呆掙掙',
 '呆呆獸' => '呆呆獸',
@@ -4788,8 +4788,8 @@ $zh2Hant = array(
 '周后' => '周后',
 '周四' => '周四',
 '周历' => '周曆',
-'周杰伦' => '周杰倫',
 '周杰倫' => '周杰倫',
+'周杰伦' => '周杰倫',
 '周历史' => '周歷史',
 '周庄王' => '周莊王',
 '周游' => '周遊',
@@ -4883,7 +4883,6 @@ $zh2Hant = array(
 '回历史' => '回歷史',
 '回丝' => '回絲',
 '回着' => '回著',
-'回荡' => '回蕩',
 '回游' => '回遊',
 '回阳荡气' => '回陽蕩氣',
 '因于' => '因於',
@@ -4945,9 +4944,9 @@ $zh2Hant = array(
 '埋头寻钟' => '埋頭尋鐘',
 '埋头寻钟表' => '埋頭尋鐘錶',
 '城里' => '城裡',
-'埔裡社撫墾局' => '埔裏社撫墾局',
-'埔裏社撫墾局' => '埔裏社撫墾局',
 '埔里社抚垦局' => '埔裏社撫墾局',
+'埔裏社撫墾局' => '埔裏社撫墾局',
+'埔裡社撫墾局' => '埔裏社撫墾局',
 '基干' => '基幹',
 '基于' => '基於',
 '基准' => '基準',
@@ -4974,8 +4973,8 @@ $zh2Hant = array(
 '壶里' => '壺裡',
 '壸范' => '壼範',
 '寿面' => '壽麵',
-'夏于乔' => '夏于喬',
 '夏于喬' => '夏于喬',
+'夏于乔' => '夏于喬',
 '夏天里' => '夏天裡',
 '夏日里' => '夏日裡',
 '夏历' => '夏曆',
@@ -5015,7 +5014,6 @@ $zh2Hant = array(
 '伙同' => '夥同',
 '伙众' => '夥眾',
 '伙计' => '夥計',
-'大丑' => '大丑',
 '大伙儿' => '大伙兒',
 '大只可' => '大只可',
 '大只在' => '大只在',
@@ -5050,6 +5048,7 @@ $zh2Hant = array(
 '大言非夸' => '大言非夸',
 '大赞' => '大讚',
 '大周折' => '大週摺',
+'大丑' => '大醜',
 '大金发苔' => '大金髮苔',
 '大钟' => '大鐘',
 '大只' => '大隻',
@@ -5209,8 +5208,8 @@ $zh2Hant = array(
 '宽松' => '寬鬆',
 '寮采' => '寮寀',
 '宝山庄' => '寶山庄',
-'寶曆' => '寶曆',
 '宝历' => '寶曆',
+'寶曆' => '寶曆',
 '宝历史' => '寶歷史',
 '宝庄' => '寶莊',
 '宝里宝气' => '寶裡寶氣',
@@ -5365,23 +5364,20 @@ $zh2Hant = array(
 '年谷' => '年穀',
 '年里' => '年裡',
 '并力' => '并力',
-'并吞' => '并吞',
 '并州' => '并州',
 '并日而食' => '并日而食',
 '并迭' => '并迭',
 '幸免于难' => '幸免於難',
 '幸于' => '幸於',
 '幸运胡' => '幸運鬍',
-'干上' => '幹上',
 '干下去' => '幹下去',
 '干不了' => '幹不了',
 '干不成' => '幹不成',
-'干了' => '幹了',
 '干事' => '幹事',
 '干些' => '幹些',
 '干人' => '幹人',
 '干什么' => '幹什麼',
-'干个' => '幹個',
+'干个够' => '幹個夠',
 '干劲' => '幹勁',
 '干劲冲天' => '幹勁沖天',
 '干吏' => '幹吏',
@@ -5393,10 +5389,9 @@ $zh2Hant = array(
 '干完' => '幹完',
 '干家' => '幹家',
 '干将' => '幹將',
-'干得' => '幹得',
+'干得了' => '幹得了',
 '干性油' => '幹性油',
 '干才' => '幹才',
-'干掉' => '幹掉',
 '干探' => '幹探',
 '干校' => '幹校',
 '干活' => '幹活',
@@ -5409,8 +5404,8 @@ $zh2Hant = array(
 '干略' => '幹略',
 '干当' => '幹當',
 '干的停当' => '幹的停當',
-'干细胞' => '幹細胞',
 '干細胞' => '幹細胞',
+'干细胞' => '幹細胞',
 '干线' => '幹線',
 '干练' => '幹練',
 '干缺' => '幹缺',
@@ -5442,8 +5437,8 @@ $zh2Hant = array(
 '府干政' => '府干政',
 '府干涉' => '府干涉',
 '府干犯' => '府干犯',
-'府干預' => '府干預',
 '府干预' => '府干預',
+'府干預' => '府干預',
 '府干' => '府幹',
 '座钟' => '座鐘',
 '康庄大道' => '康庄大道',
@@ -5751,8 +5746,8 @@ $zh2Hant = array(
 '忠人之托' => '忠人之托',
 '忠仆' => '忠僕',
 '忠于' => '忠於',
-'快干' => '快乾',
 '快克制' => '快剋制',
+'快干' => '快幹',
 '快快当当' => '快快當當',
 '快冲' => '快衝',
 '怎么' => '怎麼',
@@ -5860,8 +5855,8 @@ $zh2Hant = array(
 '所占算' => '所占算',
 '所托' => '所託',
 '扁拟谷盗虫' => '扁擬穀盜蟲',
-'手塚治虫' => '手塚治虫',
 '手冢治虫' => '手塚治虫',
+'手塚治虫' => '手塚治虫',
 '手折' => '手摺',
 '手表态' => '手表態',
 '手表明' => '手表明',
@@ -5872,8 +5867,8 @@ $zh2Hant = array(
 '手表达' => '手表達',
 '手表露' => '手表露',
 '手表面' => '手表面',
+'手里' => '手裏',
 '手里剑' => '手裏劍',
-'手里' => '手裡',
 '手表' => '手錶',
 '手松' => '手鬆',
 '才克制' => '才剋制',
@@ -6318,9 +6313,9 @@ $zh2Hant = array(
 '于国' => '於國',
 '于坏' => '於坏',
 '于垂' => '於垂',
+'於夫羅' => '於夫羅',
 '于夫罗' => '於夫羅',
 '於夫罗' => '於夫羅',
-'於夫羅' => '於夫羅',
 '于她' => '於她',
 '于好' => '於好',
 '于始' => '於始',
@@ -6498,8 +6493,8 @@ $zh2Hant = array(
 '会上签订' => '會上簽訂',
 '会占' => '會佔',
 '会占卜' => '會占卜',
-'会干扰' => '會干擾',
 '會干擾' => '會干擾',
+'会干扰' => '會干擾',
 '会干' => '會幹',
 '会吊' => '會弔',
 '会里' => '會裡',
@@ -6636,8 +6631,8 @@ $zh2Hant = array(
 '棺材里' => '棺材裡',
 '植发' => '植髮',
 '椰枣干' => '椰棗乾',
-'楊雅筑' => '楊雅筑',
 '杨雅筑' => '楊雅筑',
+'楊雅筑' => '楊雅筑',
 '楚庄问鼎' => '楚莊問鼎',
 '楚庄王' => '楚莊王',
 '楚庄绝缨' => '楚莊絕纓',
@@ -6662,8 +6657,8 @@ $zh2Hant = array(
 '模范14棒' => '模范14棒',
 '模范21棒' => '模范21棒',
 '模范七棒' => '模范七棒',
-'模范三军' => '模范三軍',
 '模范三軍' => '模范三軍',
+'模范三军' => '模范三軍',
 '模范棒棒堂' => '模范棒棒堂',
 '模制' => '模製',
 '样范' => '樣範',
@@ -6823,8 +6818,8 @@ $zh2Hant = array(
 '洒濯' => '洒濯',
 '洒然' => '洒然',
 '洒脱' => '洒脫',
-'洗炼' => '洗鍊',
 '洗练' => '洗鍊',
+'洗炼' => '洗鍊',
 '洗发' => '洗髮',
 '洛钟东应' => '洛鐘東應',
 '泄欲' => '洩慾',
@@ -6861,18 +6856,18 @@ $zh2Hant = array(
 '涂序瑄' => '涂序瑄',
 '涂敏恒' => '涂敏恆',
 '涂敏恆' => '涂敏恆',
-'涂澤民' => '涂澤民',
 '涂泽民' => '涂澤民',
+'涂澤民' => '涂澤民',
 '涂绍煃' => '涂紹煃',
 '涂羽卿' => '涂羽卿',
-'涂謹申' => '涂謹申',
 '涂谨申' => '涂謹申',
+'涂謹申' => '涂謹申',
 '涂逢年' => '涂逢年',
 '涂醒哲' => '涂醒哲',
 '涂長望' => '涂長望',
 '涂长望' => '涂長望',
-'涂鸿钦' => '涂鴻欽',
 '涂鴻欽' => '涂鴻欽',
+'涂鸿钦' => '涂鴻欽',
 '消炎药' => '消炎藥',
 '消肿药' => '消腫藥',
 '液晶表' => '液晶錶',
@@ -6903,6 +6898,7 @@ $zh2Hant = array(
 '渠冲' => '渠衝',
 '测试' => '測試',
 '港制' => '港製',
+'游荡' => '游蕩',
 '游离' => '游離',
 '浑朴' => '渾樸',
 '浑个' => '渾箇',
@@ -7003,7 +6999,6 @@ $zh2Hant = array(
 '蒙汜' => '濛汜',
 '蒙蒙细雨' => '濛濛細雨',
 '蒙雾' => '濛霧',
-'蒙松雨' => '濛鬆雨',
 '蒙鸿' => '濛鴻',
 '滨田里佳子' => '濱田里佳子',
 '泻药' => '瀉藥',
@@ -7244,8 +7239,8 @@ $zh2Hant = array(
 '发签' => '發籤',
 '发庄' => '發莊',
 '发着' => '發著',
-'发表' => '發表',
 '發表' => '發表',
+'发表' => '發表',
 '发松' => '發鬆',
 '发面' => '發麵',
 '白干' => '白乾',
@@ -7263,8 +7258,8 @@ $zh2Hant = array(
 '白霉' => '白黴',
 '百个' => '百個',
 '百只可' => '百只可',
-'百只夠' => '百只夠',
 '百只够' => '百只夠',
+'百只夠' => '百只夠',
 '百只怕' => '百只怕',
 '百只足够' => '百只足夠',
 '百只足夠' => '百只足夠',
@@ -7361,6 +7356,7 @@ $zh2Hant = array(
 '瞳蒙' => '瞳矇',
 '蒙事' => '矇事',
 '蒙昧无知' => '矇昧無知',
+'蒙松雨' => '矇松雨',
 '蒙混' => '矇混',
 '蒙瞍' => '矇瞍',
 '蒙眬' => '矇矓',
@@ -7546,15 +7542,15 @@ $zh2Hant = array(
 '筑前' => '筑前',
 '筑北' => '筑北',
 '筑州' => '筑州',
-'筑後' => '筑後',
 '筑后' => '筑後',
+'筑後' => '筑後',
 '筑波' => '筑波',
 '筑紫' => '筑紫',
 '筑肥' => '筑肥',
 '筑西' => '筑西',
 '筑邦' => '筑邦',
-'筑陽' => '筑陽',
 '筑阳' => '筑陽',
+'筑陽' => '筑陽',
 '答复' => '答覆',
 '答覆' => '答覆',
 '筵几' => '筵几',
@@ -7696,8 +7692,8 @@ $zh2Hant = array(
 '丝发' => '絲髮',
 '绑扎' => '綁紮',
 '綑扎' => '綑紮',
-'经有云' => '經有云',
 '經有云' => '經有云',
+'经有云' => '經有云',
 '绿发' => '綠髮',
 '绸缎庄' => '綢緞莊',
 '维系' => '維繫',
@@ -7955,8 +7951,8 @@ $zh2Hant = array(
 '舰只' => '艦隻',
 '良药' => '良藥',
 '色欲' => '色慾',
-'艷后' => '艷后',
 '艳后' => '艷后',
+'艷后' => '艷后',
 '艸木丰丰' => '艸木丰丰',
 '芍药' => '芍藥',
 '芒果干' => '芒果乾',
@@ -7981,16 +7977,16 @@ $zh2Hant = array(
 '茂都淀' => '茂都澱',
 '范文同' => '范文同',
 '范文正公' => '范文正公',
-'范文瀾' => '范文瀾',
 '范文澜' => '范文瀾',
+'范文瀾' => '范文瀾',
 '范文照' => '范文照',
 '范文程' => '范文程',
 '范文芳' => '范文芳',
 '范文藤' => '范文藤',
 '范文虎' => '范文虎',
 '范登堡' => '范登堡',
-'范贤惠' => '范賢惠',
 '范賢惠' => '范賢惠',
+'范贤惠' => '范賢惠',
 '茶几' => '茶几',
 '茶庄' => '茶莊',
 '茶余' => '茶餘',
@@ -8035,8 +8031,8 @@ $zh2Hant = array(
 '华严钟' => '華嚴鐘',
 '华发' => '華髮',
 '菸碱' => '菸鹼',
-'萬一只' => '萬一只',
 '万一只' => '萬一只',
+'萬一只' => '萬一只',
 '万个' => '萬個',
 '万周后' => '萬周後',
 '万多只' => '萬多隻',
@@ -8538,8 +8534,8 @@ $zh2Hant = array(
 '诱奸' => '誘姦',
 '语云' => '語云',
 '语汇' => '語彙',
-'语有云' => '語有云',
 '語有云' => '語有云',
+'语有云' => '語有云',
 '诚征' => '誠徵',
 '诚朴' => '誠樸',
 '诬蔑' => '誣衊',
@@ -8600,6 +8596,7 @@ $zh2Hant = array(
 '豆腐干' => '豆腐乾',
 '竖着' => '豎著',
 '竖起脊梁' => '豎起脊梁',
+'丰度' => '豐度',
 '丰滨' => '豐濱',
 '丰滨乡' => '豐濱鄉',
 '象征' => '象徵',
@@ -8609,17 +8606,17 @@ $zh2Hant = array(
 '贵价' => '貴价',
 '贵干' => '貴幹',
 '贵征' => '貴徵',
-'買凶' => '買兇',
 '买凶' => '買兇',
+'買凶' => '買兇',
 '买断发' => '買斷發',
 '费占' => '費佔',
 '贻范' => '貽範',
 '资金占用' => '資金占用',
-'贾后' => '賈后',
 '賈后' => '賈后',
+'贾后' => '賈后',
 '赏赞' => '賞讚',
-'贤后' => '賢后',
 '賢后' => '賢后',
+'贤后' => '賢后',
 '卖断发' => '賣斷發',
 '卖呆' => '賣獃',
 '质朴' => '質樸',
@@ -8667,10 +8664,10 @@ $zh2Hant = array(
 '较于' => '較於',
 '挽曲' => '輓曲',
 '挽歌' => '輓歌',
-'挽聯' => '輓聯',
 '挽联' => '輓聯',
-'æ\8c½è©\9e' => 'è¼\93è©\9e',
+'æ\8c½è\81¯' => 'è¼\93è\81¯',
 '挽词' => '輓詞',
+'挽詞' => '輓詞',
 '挽诗' => '輓詩',
 '挽詩' => '輓詩',
 '轻于' => '輕於',
@@ -8713,6 +8710,7 @@ $zh2Hant = array(
 '回绕' => '迴繞',
 '回翔' => '迴翔',
 '回肠' => '迴腸',
+'回荡' => '迴蕩',
 '回诵' => '迴誦',
 '回路' => '迴路',
 '回转' => '迴轉',
@@ -8803,7 +8801,6 @@ $zh2Hant = array(
 '游河' => '遊河',
 '游猎' => '遊獵',
 '游玩' => '遊玩',
-'游荡' => '遊盪',
 '游目骋怀' => '遊目騁懷',
 '游程' => '遊程',
 '游丝' => '遊絲',
@@ -8875,10 +8872,10 @@ $zh2Hant = array(
 '部落发' => '部落發',
 '郭后' => '郭后',
 '都于' => '都於',
-'鄉愿' => '鄉愿',
 '乡愿' => '鄉愿',
-'é\84­å\87±äº\91' => 'é\84­å\87±äº\91',
+'é\84\89æ\84¿' => 'é\84\89æ\84¿',
 '郑凯云' => '鄭凱云',
+'鄭凱云' => '鄭凱云',
 '郑庄公' => '鄭莊公',
 '配制饲料' => '配制飼料',
 '配合着' => '配合著',
@@ -8912,6 +8909,7 @@ $zh2Hant = array(
 '丑女' => '醜女',
 '丑女效颦' => '醜女效顰',
 '丑奴儿' => '醜奴兒',
+'丑婆子' => '醜婆子',
 '丑妇' => '醜婦',
 '丑媳' => '醜媳',
 '丑媳妇' => '醜媳婦',
@@ -8953,8 +8951,8 @@ $zh2Hant = array(
 '酿制' => '釀製',
 '衅钟' => '釁鐘',
 '采石之役' => '采石之役',
-'采石之战' => '采石之戰',
 '采石之戰' => '采石之戰',
+'采石之战' => '采石之戰',
 '采石磯' => '采石磯',
 '采石矶' => '采石磯',
 '釉药' => '釉藥',
@@ -9324,10 +9322,10 @@ $zh2Hant = array(
 '音声如钟' => '音聲如鐘',
 '韶山冲' => '韶山沖',
 '响钟' => '響鐘',
-'頁面' => '頁面',
 '页面' => '頁面',
-'é \82å¤\9a' => 'é \82å¤\9a',
+'é \81é\9d¢' => 'é \81é\9d¢',
 '顶多' => '頂多',
+'頂多' => '頂多',
 '项庄' => '項莊',
 '顺于' => '順於',
 '顺钟向' => '順鐘向',
@@ -9349,8 +9347,8 @@ $zh2Hant = array(
 '颜范' => '顏範',
 '颠干倒坤' => '顛乾倒坤',
 '颠覆' => '顛覆',
-'颠颠仆仆' => '顛顛仆仆',
 '顛顛仆仆' => '顛顛仆仆',
+'颠颠仆仆' => '顛顛仆仆',
 '颤栗' => '顫慄',
 '显示表' => '顯示錶',
 '显示钟' => '顯示鐘',
@@ -9365,14 +9363,15 @@ $zh2Hant = array(
 '风范' => '風範',
 '风里' => '風裡',
 '风起云涌' => '風起雲湧',
-'风采' => '風采',
 '風采' => '風采',
+'风采' => '風采',
 '台风' => '颱風',
 '台风后' => '颱風後',
 '刮了' => '颳了',
 '刮倒' => '颳倒',
 '刮去' => '颳去',
 '刮得' => '颳得',
+'刮着' => '颳著',
 '刮走' => '颳走',
 '刮起' => '颳起',
 '刮雪' => '颳雪',
@@ -9539,16 +9538,16 @@ $zh2Hant = array(
 '香干' => '香乾',
 '香山庄' => '香山庄',
 '马干' => '馬乾',
-'马占山' => '馬占山',
 '馬占山' => '馬占山',
+'马占山' => '馬占山',
 '马杆' => '馬杆',
-'馬格里布' => '馬格里布',
 '马格里布' => '馬格里布',
+'馬格里布' => '馬格里布',
 '马表' => '馬錶',
 '驻扎' => '駐紮',
 '骀荡' => '駘蕩',
-'腾格里' => '騰格里',
 '騰格里' => '騰格里',
+'腾格里' => '騰格里',
 '腾冲' => '騰衝',
 '惊赞' => '驚讚',
 '惊钟' => '驚鐘',
@@ -9734,6 +9733,7 @@ $zh2Hant = array(
 '斗而铸锥' => '鬥而鑄錐',
 '斗脚' => '鬥腳',
 '斗舰' => '鬥艦',
+'斗艳' => '鬥艷',
 '斗茶' => '鬥茶',
 '斗草' => '鬥草',
 '斗叶儿' => '鬥葉兒',
@@ -9741,7 +9741,6 @@ $zh2Hant = array(
 '斗着' => '鬥著',
 '斗蟋蟀' => '鬥蟋蟀',
 '斗话' => '鬥話',
-'斗艳' => '鬥豔',
 '斗起' => '鬥起',
 '斗趣' => '鬥趣',
 '斗闲气' => '鬥閑氣',
@@ -9914,11 +9913,11 @@ $zh2Hant = array(
 '黄历' => '黃曆',
 '黄曲霉' => '黃曲霉',
 '黄历史' => '黃歷史',
-'黃詩杰' => '黃詩杰',
 '黄诗杰' => '黃詩杰',
+'黃詩杰' => '黃詩杰',
 '黄金表' => '黃金表',
-'黃鈺筑' => '黃鈺筑',
 '黄钰筑' => '黃鈺筑',
+'黃鈺筑' => '黃鈺筑',
 '黄钟' => '黃鐘',
 '黄发' => '黃髮',
 '黄曲毒素' => '黃麴毒素',
@@ -13244,8 +13243,8 @@ $zh2Hans = array(
 '乘著述' => '乘著述',
 '乾一坛' => '乾一坛',
 '乾一壇' => '乾一坛',
-'乾一组' => '乾一组',
 '乾一組' => '乾一组',
+'乾一组' => '乾一组',
 '乾上乾下' => '乾上乾下',
 '乾為天' => '乾为天',
 '乾為陽' => '乾为阳',
@@ -13265,10 +13264,10 @@ $zh2Hans = array(
 '乾岡' => '乾冈',
 '乾劉' => '乾刘',
 '乾刘' => '乾刘',
-'乾剛' => '乾刚',
 '乾刚' => '乾刚',
-'ä¹¾å\8b\99' => 'ä¹¾å\8a¡',
+'ä¹¾å\89\9b' => 'ä¹¾å\88\9a',
 '乾务' => '乾务',
+'乾務' => '乾务',
 '乾化' => '乾化',
 '乾卦' => '乾卦',
 '乾县' => '乾县',
@@ -13320,12 +13319,12 @@ $zh2Hans = array(
 '乾景' => '乾景',
 '乾晷' => '乾晷',
 '乾曜' => '乾曜',
-'乾构' => '乾构',
 '乾構' => '乾构',
-'ä¹¾æ¨\9e' => 'ä¹¾æ\9e¢',
+'ä¹¾æ\9e\84' => 'ä¹¾æ\9e\84',
 '乾枢' => '乾枢',
-'ä¹¾æ \8b' => 'ä¹¾æ \8b',
+'ä¹¾æ¨\9e' => 'ä¹¾æ\9e¢',
 '乾棟' => '乾栋',
+'乾栋' => '乾栋',
 '乾步' => '乾步',
 '乾氏' => '乾氏',
 '乾沓和' => '乾沓和',
@@ -13335,8 +13334,8 @@ $zh2Hans = array(
 '乾清宮' => '乾清宫',
 '乾清宫' => '乾清宫',
 '乾渥' => '乾渥',
-'乾靈' => '乾灵',
 '乾灵' => '乾灵',
+'乾靈' => '乾灵',
 '乾男' => '乾男',
 '乾皋' => '乾皋',
 '乾盛世' => '乾盛世',
@@ -13355,19 +13354,19 @@ $zh2Hans = array(
 '乾红' => '乾红',
 '乾綱' => '乾纲',
 '乾纲' => '乾纲',
-'乾纽' => '乾纽',
 '乾紐' => '乾纽',
+'乾纽' => '乾纽',
 '乾絡' => '乾络',
 '乾络' => '乾络',
 '乾統' => '乾统',
 '乾统' => '乾统',
 '乾維' => '乾维',
 '乾维' => '乾维',
-'乾羅' => '乾罗',
 '乾罗' => '乾罗',
+'乾羅' => '乾罗',
 '乾花' => '乾花',
-'乾蔭' => '乾荫',
 '乾荫' => '乾荫',
+'乾蔭' => '乾荫',
 '乾行' => '乾行',
 '乾衡' => '乾衡',
 '乾覆' => '乾覆',
@@ -13376,19 +13375,19 @@ $zh2Hans = array(
 '乾象历' => '乾象历',
 '乾贞' => '乾贞',
 '乾貞' => '乾贞',
-'乾貺' => '乾贶',
 '乾贶' => '乾贶',
+'乾貺' => '乾贶',
 '乾车' => '乾车',
 '乾車' => '乾车',
-'乾軸' => '乾轴',
 '乾轴' => '乾轴',
+'乾軸' => '乾轴',
 '乾通' => '乾通',
 '乾造' => '乾造',
 '乾道' => '乾道',
 '乾鑒' => '乾鉴',
 '乾鉴' => '乾鉴',
-'乾钧' => '乾钧',
 '乾鈞' => '乾钧',
+'乾钧' => '乾钧',
 '乾闼' => '乾闼',
 '乾闥' => '乾闼',
 '乾陀' => '乾陀',
@@ -13397,8 +13396,8 @@ $zh2Hans = array(
 '乾音' => '乾音',
 '乾顾' => '乾顾',
 '乾顧' => '乾顾',
-'乾风' => '乾风',
 '乾風' => '乾风',
+'乾风' => '乾风',
 '乾首' => '乾首',
 '乾馬' => '乾马',
 '乾马' => '乾马',
@@ -13406,8 +13405,8 @@ $zh2Hans = array(
 '乾鹄' => '乾鹄',
 '乾鵲' => '乾鹊',
 '乾鹊' => '乾鹊',
-'乾龍' => '乾龙',
 '乾龙' => '乾龙',
+'乾龍' => '乾龙',
 '乾,健也' => '乾,健也',
 '乾,天也' => '乾,天也',
 '爭著' => '争着',
@@ -13420,14 +13419,14 @@ $zh2Hans = array(
 '爭著述' => '争著述',
 '五箇山' => '五箇山',
 '亮著' => '亮着',
-'亮著书' => '亮著书',
 '亮著書' => '亮著书',
+'亮著书' => '亮著书',
 '亮著作' => '亮著作',
 '亮著名' => '亮著名',
 '亮著錄' => '亮著录',
 '亮著录' => '亮著录',
-'亮著称' => '亮著称',
 '亮著稱' => '亮著称',
+'亮著称' => '亮著称',
 '亮著者' => '亮著者',
 '亮著述' => '亮著述',
 '仗著' => '仗着',
@@ -13442,12 +13441,12 @@ $zh2Hans = array(
 '仗著者' => '仗著者',
 '仗著述' => '仗著述',
 '代表著' => '代表着',
-'代表著書' => '代表著书',
 '代表著书' => '代表著书',
+'代表著書' => '代表著书',
 '代表著作' => '代表著作',
 '代表著名' => '代表著名',
-'代表著錄' => '代表著录',
 '代表著录' => '代表著录',
+'代表著錄' => '代表著录',
 '代表著称' => '代表著称',
 '代表著稱' => '代表著称',
 '代表著者' => '代表著者',
@@ -13471,13 +13470,13 @@ $zh2Hans = array(
 '伴著名' => '伴著名',
 '伴著录' => '伴著录',
 '伴著錄' => '伴著录',
-'伴著稱' => '伴著称',
 '伴著称' => '伴著称',
+'伴著稱' => '伴著称',
 '伴著者' => '伴著者',
 '伴著述' => '伴著述',
 '低著' => '低着',
-'低著書' => '低著书',
 '低著书' => '低著书',
+'低著書' => '低著书',
 '低著作' => '低著作',
 '低著名' => '低著名',
 '低著录' => '低著录',
@@ -13493,8 +13492,8 @@ $zh2Hans = array(
 '住著名' => '住著名',
 '住著錄' => '住著录',
 '住著录' => '住著录',
-'住著称' => '住著称',
 '住著稱' => '住著称',
+'住著称' => '住著称',
 '住著者' => '住著者',
 '住著述' => '住著述',
 '佛頭著糞' => '佛头著粪',
@@ -13515,8 +13514,8 @@ $zh2Hans = array(
 '保障著名' => '保障著名',
 '保障著錄' => '保障著录',
 '保障著录' => '保障著录',
-'保障著稱' => '保障著称',
 '保障著称' => '保障著称',
+'保障著稱' => '保障著称',
 '保障著者' => '保障著者',
 '保障著述' => '保障著述',
 '信著' => '信着',
@@ -13526,8 +13525,8 @@ $zh2Hans = array(
 '信著名' => '信著名',
 '信著录' => '信著录',
 '信著錄' => '信著录',
-'信著称' => '信著称',
 '信著稱' => '信著称',
+'信著称' => '信著称',
 '信著者' => '信著者',
 '信著述' => '信著述',
 '修鍊' => '修炼',
@@ -13537,10 +13536,10 @@ $zh2Hans = array(
 '候著书' => '候著书',
 '候著作' => '候著作',
 '候著名' => '候著名',
-'候著录' => '候著录',
 '候著錄' => '候著录',
-'候著稱' => '候著称',
+'候著录' => '候著录',
 '候著称' => '候著称',
+'候著稱' => '候著称',
 '候著者' => '候著者',
 '候著述' => '候著述',
 '藉助' => '借助',
@@ -13550,28 +13549,28 @@ $zh2Hans = array(
 '藉機' => '借机',
 '藉此' => '借此',
 '藉由' => '借由',
+'藉著' => '借着',
 '借著' => '借着',
 '藉着' => '借着',
-'藉著' => '借着',
 '藉端' => '借端',
-'借著書' => '借著书',
 '借著书' => '借著书',
+'借著書' => '借著书',
 '借著作' => '借著作',
 '借著名' => '借著名',
 '借著录' => '借著录',
 '借著錄' => '借著录',
-'借著称' => '借著称',
 '借著稱' => '借著称',
+'借著称' => '借著称',
 '借著者' => '借著者',
 '借著述' => '借著述',
 '藉詞' => '借词',
 '做著' => '做着',
-'做著書' => '做著书',
 '做著书' => '做著书',
+'做著書' => '做著书',
 '做著作' => '做著作',
 '做著名' => '做著名',
-'做著錄' => '做著录',
 '做著录' => '做著录',
+'做著錄' => '做著录',
 '做著稱' => '做著称',
 '做著称' => '做著称',
 '做著者' => '做著者',
@@ -13583,8 +13582,8 @@ $zh2Hans = array(
 '偷著名' => '偷著名',
 '偷著錄' => '偷著录',
 '偷著录' => '偷著录',
-'偷著稱' => '偷著称',
 '偷著称' => '偷著称',
+'偷著稱' => '偷著称',
 '偷著者' => '偷著者',
 '偷著述' => '偷著述',
 '傢俬' => '傢俬',
@@ -13609,25 +13608,25 @@ $zh2Hans = array(
 '關著者' => '关著者',
 '關著述' => '关著述',
 '冀著' => '冀着',
-'冀著書' => '冀著书',
 '冀著书' => '冀著书',
+'冀著書' => '冀著书',
 '冀著作' => '冀著作',
 '冀著名' => '冀著名',
-'冀著錄' => '冀著录',
 '冀著录' => '冀著录',
+'冀著錄' => '冀著录',
 '冀著稱' => '冀著称',
 '冀著称' => '冀著称',
 '冀著者' => '冀著者',
 '冀著述' => '冀著述',
 '冒著' => '冒着',
-'冒著书' => '冒著书',
 '冒著書' => '冒著书',
+'冒著书' => '冒著书',
 '冒著作' => '冒著作',
 '冒著名' => '冒著名',
 '冒著录' => '冒著录',
 '冒著錄' => '冒著录',
-'冒著稱' => '冒著称',
 '冒著称' => '冒著称',
+'冒著稱' => '冒著称',
 '冒著者' => '冒著者',
 '冒著述' => '冒著述',
 '寫著' => '写着',
@@ -13652,10 +13651,10 @@ $zh2Hans = array(
 '制著書' => '制著书',
 '制著作' => '制著作',
 '制著名' => '制著名',
-'制著錄' => '制著录',
 '制著录' => '制著录',
-'制著称' => '制著称',
+'制著錄' => '制著录',
 '制著稱' => '制著称',
+'制著称' => '制著称',
 '制著者' => '制著者',
 '制著述' => '制著述',
 '刻著' => '刻着',
@@ -13686,14 +13685,14 @@ $zh2Hans = array(
 '動著者' => '动著者',
 '動著述' => '动著述',
 '努力著' => '努力着',
-'努力著書' => '努力著书',
 '努力著书' => '努力著书',
+'努力著書' => '努力著书',
 '努力著作' => '努力著作',
 '努力著名' => '努力著名',
-'努力著錄' => '努力著录',
 '努力著录' => '努力著录',
-'努力著称' => '努力著称',
+'努力著錄' => '努力著录',
 '努力著稱' => '努力著称',
+'努力著称' => '努力著称',
 '努力著者' => '努力著者',
 '努力著述' => '努力著述',
 '努著' => '努着',
@@ -13709,14 +13708,14 @@ $zh2Hans = array(
 '努著述' => '努著述',
 '卓著' => '卓著',
 '印著' => '印着',
-'印著书' => '印著书',
 '印著書' => '印著书',
+'印著书' => '印著书',
 '印著作' => '印著作',
 '印著名' => '印著名',
-'印著录' => '印著录',
 '印著錄' => '印著录',
-'印著称' => '印著称',
+'印著录' => '印著录',
 '印著稱' => '印著称',
+'印著称' => '印著称',
 '印著者' => '印著者',
 '印著述' => '印著述',
 '卷舌' => '卷舌',
@@ -13730,12 +13729,12 @@ $zh2Hans = array(
 '壓著述' => '压著述',
 '原著' => '原著',
 '去著' => '去着',
-'去著书' => '去著书',
 '去著書' => '去著书',
+'去著书' => '去著书',
 '去著作' => '去著作',
 '去著名' => '去著名',
-'去著录' => '去著录',
 '去著錄' => '去著录',
+'去著录' => '去著录',
 '去著稱' => '去著称',
 '去著称' => '去著称',
 '去著者' => '去著者',
@@ -13743,12 +13742,12 @@ $zh2Hans = array(
 '反反覆覆' => '反反复复',
 '反覆' => '反复',
 '受著' => '受着',
-'受著書' => '受著书',
 '受著书' => '受著书',
+'受著書' => '受著书',
 '受著作' => '受著作',
 '受著名' => '受著名',
-'受著錄' => '受著录',
 '受著录' => '受著录',
+'受著錄' => '受著录',
 '受著稱' => '受著称',
 '受著称' => '受著称',
 '受著者' => '受著者',
@@ -13762,12 +13761,12 @@ $zh2Hans = array(
 '變著者' => '变著者',
 '變著述' => '变著述',
 '叫著' => '叫着',
-'叫著书' => '叫著书',
 '叫著書' => '叫著书',
+'叫著书' => '叫著书',
 '叫著作' => '叫著作',
 '叫著名' => '叫著名',
-'叫著录' => '叫著录',
 '叫著錄' => '叫著录',
+'叫著录' => '叫著录',
 '叫著称' => '叫著称',
 '叫著稱' => '叫著称',
 '叫著者' => '叫著者',
@@ -13792,8 +13791,8 @@ $zh2Hans = array(
 '向著者' => '向著者',
 '向著述' => '向著述',
 '含著' => '含着',
-'含著書' => '含著书',
 '含著书' => '含著书',
+'含著書' => '含著书',
 '含著作' => '含著作',
 '含著名' => '含著名',
 '含著錄' => '含著录',
@@ -13812,8 +13811,8 @@ $zh2Hans = array(
 '聽著稱' => '听著称',
 '聽著者' => '听著者',
 '聽著述' => '听著述',
-'吴其濬' => '吴其濬',
 '吳其濬' => '吴其濬',
+'吴其濬' => '吴其濬',
 '吹著' => '吹着',
 '吹著書' => '吹著书',
 '吹著书' => '吹著书',
@@ -13827,12 +13826,12 @@ $zh2Hans = array(
 '吹著述' => '吹著述',
 '周易乾' => '周易乾',
 '味著' => '味着',
-'味著书' => '味著书',
 '味著書' => '味著书',
+'味著书' => '味著书',
 '味著作' => '味著作',
 '味著名' => '味著名',
-'味著录' => '味著录',
 '味著錄' => '味著录',
+'味著录' => '味著录',
 '味著称' => '味著称',
 '味著稱' => '味著称',
 '味著者' => '味著者',
@@ -13848,12 +13847,12 @@ $zh2Hans = array(
 '響著述' => '响著述',
 '哪吒' => '哪吒',
 '哭著' => '哭着',
-'哭著書' => '哭著书',
 '哭著书' => '哭著书',
+'哭著書' => '哭著书',
 '哭著作' => '哭著作',
 '哭著名' => '哭著名',
-'哭著錄' => '哭著录',
 '哭著录' => '哭著录',
+'哭著錄' => '哭著录',
 '哭著稱' => '哭著称',
 '哭著称' => '哭著称',
 '哭著者' => '哭著者',
@@ -13865,17 +13864,17 @@ $zh2Hans = array(
 '唱著名' => '唱著名',
 '唱著录' => '唱著录',
 '唱著錄' => '唱著录',
-'唱著称' => '唱著称',
 '唱著稱' => '唱著称',
+'唱著称' => '唱著称',
 '唱著者' => '唱著者',
 '唱著述' => '唱著述',
 '喝著' => '喝着',
-'喝著书' => '喝著书',
 '喝著書' => '喝著书',
+'喝著书' => '喝著书',
 '喝著作' => '喝著作',
 '喝著名' => '喝著名',
-'喝著录' => '喝著录',
 '喝著錄' => '喝著录',
+'喝著录' => '喝著录',
 '喝著稱' => '喝著称',
 '喝著称' => '喝著称',
 '喝著者' => '喝著者',
@@ -13884,12 +13883,12 @@ $zh2Hans = array(
 '嗅得著' => '嗅得着',
 '嗅著' => '嗅着',
 '嚷著' => '嚷着',
-'嚷著書' => '嚷著书',
 '嚷著书' => '嚷著书',
+'嚷著書' => '嚷著书',
 '嚷著作' => '嚷著作',
 '嚷著名' => '嚷著名',
-'嚷著錄' => '嚷著录',
 '嚷著录' => '嚷著录',
+'嚷著錄' => '嚷著录',
 '嚷著称' => '嚷著称',
 '嚷著稱' => '嚷著称',
 '嚷著者' => '嚷著者',
@@ -13898,19 +13897,19 @@ $zh2Hans = array(
 '因著' => '因着',
 '因著〈' => '因著〈',
 '因著《' => '因著《',
-'因著書' => '因著书',
 '因著书' => '因著书',
+'因著書' => '因著书',
 '因著作' => '因著作',
 '因著名' => '因著名',
-'因著錄' => '因著录',
 '因著录' => '因著录',
-'因著稱' => '因著称',
+'因著錄' => '因著录',
 '因著称' => '因著称',
+'因著稱' => '因著称',
 '因著者' => '因著者',
 '因著述' => '因著述',
 '困著' => '困着',
-'困著書' => '困著书',
 '困著书' => '困著书',
+'困著書' => '困著书',
 '困著作' => '困著作',
 '困著名' => '困著名',
 '困著錄' => '困著录',
@@ -13929,8 +13928,8 @@ $zh2Hans = array(
 '圍著述' => '围著述',
 '土著' => '土著',
 '在著' => '在着',
-'在著書' => '在著书',
 '在著书' => '在著书',
+'在著書' => '在著书',
 '在著作' => '在著作',
 '在著名' => '在著名',
 '在著錄' => '在著录',
@@ -13940,12 +13939,12 @@ $zh2Hans = array(
 '在著者' => '在著者',
 '在著述' => '在著述',
 '坐著' => '坐着',
-'坐著书' => '坐著书',
 '坐著書' => '坐著书',
+'坐著书' => '坐著书',
 '坐著作' => '坐著作',
 '坐著名' => '坐著名',
-'坐著录' => '坐著录',
 '坐著錄' => '坐著录',
+'坐著录' => '坐著录',
 '坐著称' => '坐著称',
 '坐著稱' => '坐著称',
 '坐著者' => '坐著者',
@@ -13961,8 +13960,8 @@ $zh2Hans = array(
 '備著述' => '备著述',
 '覆查' => '复查',
 '覆核' => '复核',
-'天道为乾' => '天道为乾',
 '天道為乾' => '天道为乾',
+'天道为乾' => '天道为乾',
 '太閤' => '太阁',
 '夾著' => '夹着',
 '夾著書' => '夹著书',
@@ -13977,8 +13976,8 @@ $zh2Hans = array(
 '字乾生' => '字乾生',
 '存摺' => '存摺',
 '孤著' => '孤着',
-'孤著书' => '孤著书',
 '孤著書' => '孤著书',
+'孤著书' => '孤著书',
 '孤著作' => '孤著作',
 '孤著名' => '孤著名',
 '孤著錄' => '孤著录',
@@ -13996,8 +13995,8 @@ $zh2Hans = array(
 '學著者' => '学著者',
 '學著述' => '学著述',
 '守著' => '守着',
-'守著書' => '守著书',
 '守著书' => '守著书',
+'守著書' => '守著书',
 '守著作' => '守著作',
 '守著名' => '守著名',
 '守著录' => '守著录',
@@ -14037,12 +14036,12 @@ $zh2Hans = array(
 '將軍抽車' => '将军抽車',
 '尼乾陀' => '尼乾陀',
 '展著' => '展着',
-'展著書' => '展著书',
 '展著书' => '展著书',
+'展著書' => '展著书',
 '展著作' => '展著作',
 '展著名' => '展著名',
-'展著錄' => '展著录',
 '展著录' => '展著录',
+'展著錄' => '展著录',
 '展著稱' => '展著称',
 '展著称' => '展著称',
 '展著者' => '展著者',
@@ -14069,50 +14068,50 @@ $zh2Hans = array(
 '乾乾脆脆' => '干干脆脆',
 '乾泉水' => '干泉水',
 '幹著' => '干着',
-'么二三' => '幺二三',
 '幺二三' => '幺二三',
-'么元' => '幺元',
+'么二三' => '幺二三',
 '幺元' => '幺元',
+'么元' => '幺元',
 '幺鳳' => '幺凤',
 '么鳳' => '幺凤',
-'么半群' => '幺半群',
 '幺半群' => '幺半群',
-'幺廝' => '幺厮',
+'么半群' => '幺半群',
 '幺厮' => '幺厮',
+'幺廝' => '幺厮',
 '幺叔' => '幺叔',
 '么叔' => '幺叔',
-'么媽' => '幺妈',
 '幺媽' => '幺妈',
+'么媽' => '幺妈',
 '么妹' => '幺妹',
 '幺妹' => '幺妹',
 '么姓' => '幺姓',
 '幺姓' => '幺姓',
-'么姨' => '幺姨',
 '幺姨' => '幺姨',
-'么娘' => '幺娘',
-'么孃' => '幺娘',
+'么姨' => '幺姨',
 '幺娘' => '幺娘',
 '幺孃' => '幺娘',
+'么孃' => '幺娘',
+'么娘' => '幺娘',
 '幺小' => '幺小',
 '么小' => '幺小',
-'幺氏' => '幺氏',
 '么氏' => '幺氏',
-'么爸' => '幺爸',
+'幺氏' => '幺氏',
 '幺爸' => '幺爸',
-'幺爹' => '幺爹',
+'么爸' => '幺爸',
 '么爹' => '幺爹',
-'么篇' => '幺篇',
+'幺爹' => '幺爹',
 '幺篇' => '幺篇',
+'么篇' => '幺篇',
 '么舅' => '幺舅',
 '幺舅' => '幺舅',
 '么蛾子' => '幺蛾子',
 '幺蛾子' => '幺蛾子',
-'么謙' => '幺谦',
 '幺謙' => '幺谦',
+'么謙' => '幺谦',
 '幺麽' => '幺麽',
 '么麼' => '幺麽',
-'幺麽小丑' => '幺麽小丑',
 '么麼小丑' => '幺麽小丑',
+'幺麽小丑' => '幺麽小丑',
 '庇護著' => '庇护着',
 '應著' => '应着',
 '應著書' => '应著书',
@@ -14124,12 +14123,12 @@ $zh2Hans = array(
 '應著述' => '应著述',
 '康乾' => '康乾',
 '康著' => '康着',
-'康著书' => '康著书',
 '康著書' => '康著书',
+'康著书' => '康著书',
 '康著作' => '康著作',
 '康著名' => '康著名',
-'康著录' => '康著录',
 '康著錄' => '康著录',
+'康著录' => '康著录',
 '康著称' => '康著称',
 '康著稱' => '康著称',
 '康著者' => '康著者',
@@ -14142,8 +14141,8 @@ $zh2Hans = array(
 '開著稱' => '开著称',
 '開著者' => '开著者',
 '開著述' => '开著述',
-'張法乾' => '张法乾',
 '张法乾' => '张法乾',
+'張法乾' => '张法乾',
 '當著' => '当着',
 '當著書' => '当著书',
 '當著作' => '当著作',
@@ -14167,8 +14166,8 @@ $zh2Hans = array(
 '待著述' => '待著述',
 '後姓' => '後姓',
 '得著' => '得着',
-'得著書' => '得著书',
 '得著书' => '得著书',
+'得著書' => '得著书',
 '得著作' => '得著作',
 '得著名' => '得著名',
 '得著錄' => '得著录',
@@ -14178,12 +14177,12 @@ $zh2Hans = array(
 '得著者' => '得著者',
 '得著述' => '得著述',
 '循著' => '循着',
-'循著书' => '循著书',
 '循著書' => '循著书',
+'循著书' => '循著书',
 '循著作' => '循著作',
 '循著名' => '循著名',
-'循著录' => '循著录',
 '循著錄' => '循著录',
+'循著录' => '循著录',
 '循著称' => '循著称',
 '循著稱' => '循著称',
 '循著者' => '循著者',
@@ -14195,13 +14194,13 @@ $zh2Hans = array(
 '心著名' => '心著名',
 '心著录' => '心著录',
 '心著錄' => '心著录',
-'心著稱' => '心著称',
 '心著称' => '心著称',
+'心著稱' => '心著称',
 '心著者' => '心著者',
 '心著述' => '心著述',
 '忍著' => '忍着',
-'忍著书' => '忍著书',
 '忍著書' => '忍著书',
+'忍著书' => '忍著书',
 '忍著作' => '忍著作',
 '忍著名' => '忍著名',
 '忍著录' => '忍著录',
@@ -14211,23 +14210,23 @@ $zh2Hans = array(
 '忍著者' => '忍著者',
 '忍著述' => '忍著述',
 '志著' => '志着',
-'志著書' => '志著书',
 '志著书' => '志著书',
+'志著書' => '志著书',
 '志著作' => '志著作',
 '志著名' => '志著名',
-'志著錄' => '志著录',
 '志著录' => '志著录',
-'志著称' => '志著称',
+'志著錄' => '志著录',
 '志著稱' => '志著称',
+'志著称' => '志著称',
 '志著者' => '志著者',
 '志著述' => '志著述',
 '忙著' => '忙着',
-'忙著书' => '忙著书',
 '忙著書' => '忙著书',
+'忙著书' => '忙著书',
 '忙著作' => '忙著作',
 '忙著名' => '忙著名',
-'忙著录' => '忙著录',
 '忙著錄' => '忙著录',
+'忙著录' => '忙著录',
 '忙著称' => '忙著称',
 '忙著稱' => '忙著称',
 '忙著者' => '忙著者',
@@ -14241,25 +14240,25 @@ $zh2Hans = array(
 '懷著者' => '怀著者',
 '懷著述' => '怀著述',
 '急著' => '急着',
-'急著书' => '急著书',
 '急著書' => '急著书',
+'急著书' => '急著书',
 '急著作' => '急著作',
 '急著名' => '急著名',
-'急著录' => '急著录',
 '急著錄' => '急著录',
+'急著录' => '急著录',
 '急著称' => '急著称',
 '急著稱' => '急著称',
 '急著者' => '急著者',
 '急著述' => '急著述',
 '性著' => '性着',
-'性著书' => '性著书',
 '性著書' => '性著书',
+'性著书' => '性著书',
 '性著作' => '性著作',
 '性著名' => '性著名',
-'性著录' => '性著录',
 '性著錄' => '性著录',
-'性著称' => '性著称',
+'性著录' => '性著录',
 '性著稱' => '性著称',
+'性著称' => '性著称',
 '性著者' => '性著者',
 '性著述' => '性著述',
 '戀著' => '恋着',
@@ -14278,8 +14277,8 @@ $zh2Hans = array(
 '悠著名' => '悠著名',
 '悠著錄' => '悠著录',
 '悠著录' => '悠著录',
-'悠著称' => '悠著称',
 '悠著稱' => '悠著称',
+'悠著称' => '悠著称',
 '悠著者' => '悠著者',
 '悠著述' => '悠著述',
 '慣著' => '惯着',
@@ -14291,14 +14290,14 @@ $zh2Hans = array(
 '慣著者' => '惯著者',
 '慣著述' => '惯著述',
 '想著' => '想着',
-'想著書' => '想著书',
 '想著书' => '想著书',
+'想著書' => '想著书',
 '想著作' => '想著作',
 '想著名' => '想著名',
-'想著錄' => '想著录',
 '想著录' => '想著录',
-'想著称' => '想著称',
+'想著錄' => '想著录',
 '想著稱' => '想著称',
+'想著称' => '想著称',
 '想著者' => '想著者',
 '想著述' => '想著述',
 '戰著' => '战着',
@@ -14310,12 +14309,12 @@ $zh2Hans = array(
 '戰著者' => '战著者',
 '戰著述' => '战著述',
 '戴著' => '戴着',
-'戴著書' => '戴著书',
 '戴著书' => '戴著书',
+'戴著書' => '戴著书',
 '戴著作' => '戴著作',
 '戴著名' => '戴著名',
-'戴著錄' => '戴著录',
 '戴著录' => '戴著录',
+'戴著錄' => '戴著录',
 '戴著稱' => '戴著称',
 '戴著称' => '戴著称',
 '戴著者' => '戴著者',
@@ -14327,17 +14326,17 @@ $zh2Hans = array(
 '扎著名' => '扎著名',
 '扎著錄' => '扎著录',
 '扎著录' => '扎著录',
-'扎著称' => '扎著称',
 '扎著稱' => '扎著称',
+'扎著称' => '扎著称',
 '扎著者' => '扎著者',
 '扎著述' => '扎著述',
 '打著' => '打着',
-'打著書' => '打著书',
 '打著书' => '打著书',
+'打著書' => '打著书',
 '打著作' => '打著作',
 '打著名' => '打著名',
-'打著錄' => '打著录',
 '打著录' => '打著录',
+'打著錄' => '打著录',
 '打著称' => '打著称',
 '打著稱' => '打著称',
 '打著者' => '打著者',
@@ -14362,8 +14361,8 @@ $zh2Hans = array(
 '抓著名' => '抓著名',
 '抓著录' => '抓著录',
 '抓著錄' => '抓著录',
-'抓著称' => '抓著称',
 '抓著稱' => '抓著称',
+'抓著称' => '抓著称',
 '抓著者' => '抓著者',
 '抓著述' => '抓著述',
 '護著' => '护着',
@@ -14379,17 +14378,17 @@ $zh2Hans = array(
 '披著書' => '披著书',
 '披著作' => '披著作',
 '披著名' => '披著名',
-'披著录' => '披著录',
 '披著錄' => '披著录',
-'披著稱' => '披著称',
+'披著录' => '披著录',
 '披著称' => '披著称',
+'披著稱' => '披著称',
 '披著者' => '披著者',
 '披著述' => '披著述',
 '抬著' => '抬着',
 '抬著作' => '抬著作',
 '抬著名' => '抬著名',
-'抬著录' => '抬著录',
 '抬著錄' => '抬著录',
+'抬著录' => '抬著录',
 '抬著稱' => '抬著称',
 '抬著称' => '抬著称',
 '抬著者' => '抬著者',
@@ -14399,8 +14398,8 @@ $zh2Hans = array(
 '抱著名' => '抱著名',
 '抱著录' => '抱著录',
 '抱著錄' => '抱著录',
-'抱著稱' => '抱著称',
 '抱著称' => '抱著称',
+'抱著稱' => '抱著称',
 '抱著者' => '抱著者',
 '抱著述' => '抱著述',
 '拉著' => '拉着',
@@ -14410,8 +14409,8 @@ $zh2Hans = array(
 '拉著名' => '拉著名',
 '拉著录' => '拉著录',
 '拉著錄' => '拉著录',
-'拉著称' => '拉著称',
 '拉著稱' => '拉著称',
+'拉著称' => '拉著称',
 '拉著者' => '拉著者',
 '拉著述' => '拉著述',
 '拉鍊' => '拉链',
@@ -14440,8 +14439,8 @@ $zh2Hans = array(
 '拼著' => '拼着',
 '拼著作' => '拼著作',
 '拼著名' => '拼著名',
-'拼著录' => '拼著录',
 '拼著錄' => '拼著录',
+'拼著录' => '拼著录',
 '拼著稱' => '拼著称',
 '拼著称' => '拼著称',
 '拼著者' => '拼著者',
@@ -14449,10 +14448,10 @@ $zh2Hans = array(
 '拿著' => '拿着',
 '拿著作' => '拿著作',
 '拿著名' => '拿著名',
-'拿著录' => '拿著录',
 '拿著錄' => '拿著录',
-'拿著称' => '拿著称',
+'拿著录' => '拿著录',
 '拿著稱' => '拿著称',
+'拿著称' => '拿著称',
 '拿著者' => '拿著者',
 '拿著述' => '拿著述',
 '持著' => '持着',
@@ -14469,8 +14468,8 @@ $zh2Hans = array(
 '挑著名' => '挑著名',
 '挑著錄' => '挑著录',
 '挑著录' => '挑著录',
-'挑著称' => '挑著称',
 '挑著稱' => '挑著称',
+'挑著称' => '挑著称',
 '挑著者' => '挑著者',
 '挑著述' => '挑著述',
 '擋著' => '挡着',
@@ -14507,10 +14506,10 @@ $zh2Hans = array(
 '捆著' => '捆着',
 '捆著作' => '捆著作',
 '捆著名' => '捆著名',
-'捆著錄' => '捆著录',
 '捆著录' => '捆著录',
-'捆著称' => '捆著称',
+'捆著錄' => '捆著录',
 '捆著稱' => '捆著称',
+'捆著称' => '捆著称',
 '捆著者' => '捆著者',
 '捆著述' => '捆著述',
 '據著' => '据着',
@@ -14524,10 +14523,10 @@ $zh2Hans = array(
 '掖著' => '掖着',
 '掖著作' => '掖著作',
 '掖著名' => '掖著名',
-'掖著錄' => '掖著录',
 '掖著录' => '掖著录',
-'掖著稱' => '掖著称',
+'掖著錄' => '掖著录',
 '掖著称' => '掖著称',
+'掖著稱' => '掖著称',
 '掖著者' => '掖著者',
 '掖著述' => '掖著述',
 '接著' => '接着',
@@ -14540,14 +14539,14 @@ $zh2Hans = array(
 '接著者' => '接著者',
 '接著述' => '接著述',
 '揉著' => '揉着',
-'揉著书' => '揉著书',
 '揉著書' => '揉著书',
+'揉著书' => '揉著书',
 '揉著作' => '揉著作',
 '揉著名' => '揉著名',
-'揉著录' => '揉著录',
 '揉著錄' => '揉著录',
-'揉著称' => '揉著称',
+'揉著录' => '揉著录',
 '揉著稱' => '揉著称',
+'揉著称' => '揉著称',
 '揉著者' => '揉著者',
 '揉著述' => '揉著述',
 '提著' => '提着',
@@ -14575,14 +14574,14 @@ $zh2Hans = array(
 '擺著述' => '摆著述',
 '撰著' => '撰著',
 '撼著' => '撼着',
-'撼著書' => '撼著书',
 '撼著书' => '撼著书',
+'撼著書' => '撼著书',
 '撼著作' => '撼著作',
 '撼著名' => '撼著名',
-'撼著錄' => '撼著录',
 '撼著录' => '撼著录',
-'撼著称' => '撼著称',
+'撼著錄' => '撼著录',
 '撼著稱' => '撼著称',
+'撼著称' => '撼著称',
 '撼著者' => '撼著者',
 '撼著述' => '撼著述',
 '敞著' => '敞着',
@@ -14590,8 +14589,8 @@ $zh2Hans = array(
 '敞著名' => '敞著名',
 '敞著錄' => '敞著录',
 '敞著录' => '敞著录',
-'敞著稱' => '敞著称',
 '敞著称' => '敞著称',
+'敞著稱' => '敞著称',
 '敞著者' => '敞著者',
 '敞著述' => '敞著述',
 '數著' => '数着',
@@ -14617,10 +14616,10 @@ $zh2Hans = array(
 '斥著书' => '斥著书',
 '斥著作' => '斥著作',
 '斥著名' => '斥著名',
-'斥著錄' => '斥著录',
 '斥著录' => '斥著录',
-'斥著稱' => '斥著称',
+'斥著錄' => '斥著录',
 '斥著称' => '斥著称',
+'斥著稱' => '斥著称',
 '斥著者' => '斥著者',
 '斥著述' => '斥著述',
 '新著' => '新著',
@@ -14639,8 +14638,8 @@ $zh2Hans = array(
 '於志賀' => '於志贺',
 '於志贺' => '於志贺',
 '於戲' => '於戏',
-'於梨華' => '於梨华',
 '於梨华' => '於梨华',
+'於梨華' => '於梨华',
 '於氏' => '於氏',
 '於潛縣' => '於潜县',
 '於潜县' => '於潜县',
@@ -14648,34 +14647,34 @@ $zh2Hans = array(
 '於菟' => '於菟',
 '於賢德' => '於贤德',
 '於除鞬' => '於除鞬',
-'旋乾转坤' => '旋乾转坤',
 '旋乾轉坤' => '旋乾转坤',
+'旋乾转坤' => '旋乾转坤',
 '曠若發矇' => '旷若发矇',
 '昂著' => '昂着',
 '昂著书' => '昂著书',
 '昂著書' => '昂著书',
 '昂著作' => '昂著作',
 '昂著名' => '昂著名',
-'昂著錄' => '昂著录',
 '昂著录' => '昂著录',
+'昂著錄' => '昂著录',
 '昂著稱' => '昂著称',
 '昂著称' => '昂著称',
 '昂著者' => '昂著者',
 '昂著述' => '昂著述',
 '易·乾' => '易·乾',
-'易經·乾' => '易经·乾',
 '易经·乾' => '易经·乾',
+'易經·乾' => '易经·乾',
 '易經乾' => '易经乾',
 '易经乾' => '易经乾',
 '映著' => '映着',
-'映著書' => '映著书',
 '映著书' => '映著书',
+'映著書' => '映著书',
 '映著作' => '映著作',
 '映著名' => '映著名',
-'映著錄' => '映著录',
 '映著录' => '映著录',
-'映著稱' => '映著称',
+'映著錄' => '映著录',
 '映著称' => '映著称',
+'映著稱' => '映著称',
 '映著者' => '映著者',
 '映著述' => '映著述',
 '昭著' => '昭著',
@@ -14684,15 +14683,15 @@ $zh2Hans = array(
 '晃著' => '晃着',
 '晃著作' => '晃著作',
 '晃著名' => '晃著名',
-'晃著錄' => '晃著录',
 '晃著录' => '晃著录',
-'晃著称' => '晃著称',
+'晃著錄' => '晃著录',
 '晃著稱' => '晃著称',
+'晃著称' => '晃著称',
 '晃著者' => '晃著者',
 '晃著述' => '晃著述',
 '暗著' => '暗着',
-'暗著书' => '暗著书',
 '暗著書' => '暗著书',
+'暗著书' => '暗著书',
 '暗著作' => '暗著作',
 '暗著名' => '暗著名',
 '暗著錄' => '暗著录',
@@ -14706,17 +14705,17 @@ $zh2Hans = array(
 '有著书' => '有著书',
 '有著作' => '有著作',
 '有著名' => '有著名',
-'有著錄' => '有著录',
 '有著录' => '有著录',
-'有著称' => '有著称',
+'有著錄' => '有著录',
 '有著稱' => '有著称',
+'有著称' => '有著称',
 '有著者' => '有著者',
 '有著述' => '有著述',
 '望著' => '望着',
 '望著作' => '望著作',
 '望著名' => '望著名',
-'望著录' => '望著录',
 '望著錄' => '望著录',
+'望著录' => '望著录',
 '望著稱' => '望著称',
 '望著称' => '望著称',
 '望著者' => '望著者',
@@ -14725,21 +14724,21 @@ $zh2Hans = array(
 '朝著' => '朝着',
 '朝著作' => '朝著作',
 '朝著名' => '朝著名',
-'朝著录' => '朝著录',
 '朝著錄' => '朝著录',
-'朝著稱' => '朝著称',
+'朝著录' => '朝著录',
 '朝著称' => '朝著称',
+'朝著稱' => '朝著称',
 '朝著者' => '朝著者',
 '朝著述' => '朝著述',
 '本著' => '本着',
-'本著书' => '本著书',
 '本著書' => '本著书',
+'本著书' => '本著书',
 '本著作' => '本著作',
 '本著名' => '本著名',
-'本著录' => '本著录',
 '本著錄' => '本著录',
-'本著稱' => '本著称',
+'本著录' => '本著录',
 '本著称' => '本著称',
+'本著稱' => '本著称',
 '本著者' => '本著者',
 '本著述' => '本著述',
 '朴於宇同' => '朴於宇同',
@@ -14760,8 +14759,8 @@ $zh2Hans = array(
 '雜著者' => '杂著者',
 '雜著述' => '杂著述',
 '李乾德' => '李乾德',
-'李乾順' => '李乾顺',
 '李乾顺' => '李乾顺',
+'李乾順' => '李乾顺',
 '李澤鉅' => '李泽钜',
 '來著' => '来着',
 '來著書' => '来著书',
@@ -14777,8 +14776,8 @@ $zh2Hans = array(
 '枕著名' => '枕著名',
 '枕著錄' => '枕著录',
 '枕著录' => '枕著录',
-'枕著稱' => '枕著称',
 '枕著称' => '枕著称',
+'枕著稱' => '枕著称',
 '枕著者' => '枕著者',
 '枕著述' => '枕著述',
 '柳詒徵' => '柳诒徵',
@@ -14850,17 +14849,17 @@ $zh2Hans = array(
 '活著名' => '活著名',
 '活著录' => '活著录',
 '活著錄' => '活著录',
-'活著稱' => '活著称',
 '活著称' => '活著称',
+'活著稱' => '活著称',
 '活著者' => '活著者',
 '活著述' => '活著述',
 '流著' => '流着',
-'流著书' => '流著书',
 '流著書' => '流著书',
+'流著书' => '流著书',
 '流著作' => '流著作',
 '流著名' => '流著名',
-'流著录' => '流著录',
 '流著錄' => '流著录',
+'流著录' => '流著录',
 '流著稱' => '流著称',
 '流著称' => '流著称',
 '流著者' => '流著者',
@@ -14873,8 +14872,8 @@ $zh2Hans = array(
 '浮著名' => '浮著名',
 '浮著录' => '浮著录',
 '浮著錄' => '浮著录',
-'浮著稱' => '浮著称',
 '浮著称' => '浮著称',
+'浮著稱' => '浮著称',
 '浮著者' => '浮著者',
 '浮著述' => '浮著述',
 '潤著' => '润着',
@@ -14890,10 +14889,10 @@ $zh2Hans = array(
 '涵著書' => '涵著书',
 '涵著作' => '涵著作',
 '涵著名' => '涵著名',
-'涵著录' => '涵著录',
 '涵著錄' => '涵著录',
-'涵著稱' => '涵著称',
+'涵著录' => '涵著录',
 '涵著称' => '涵著称',
+'涵著稱' => '涵著称',
 '涵著者' => '涵著者',
 '涵著述' => '涵著述',
 '渴著' => '渴着',
@@ -14903,8 +14902,8 @@ $zh2Hans = array(
 '渴著名' => '渴著名',
 '渴著录' => '渴著录',
 '渴著錄' => '渴著录',
-'渴著称' => '渴著称',
 '渴著稱' => '渴著称',
+'渴著称' => '渴著称',
 '渴著者' => '渴著者',
 '渴著述' => '渴著述',
 '溢著' => '溢着',
@@ -14925,8 +14924,8 @@ $zh2Hans = array(
 '演著名' => '演著名',
 '演著录' => '演著录',
 '演著錄' => '演著录',
-'演著稱' => '演著称',
 '演著称' => '演著称',
+'演著稱' => '演著称',
 '演著者' => '演著者',
 '演著述' => '演著述',
 '漫著' => '漫着',
@@ -14934,8 +14933,8 @@ $zh2Hans = array(
 '漫著书' => '漫著书',
 '漫著作' => '漫著作',
 '漫著名' => '漫著名',
-'漫著录' => '漫著录',
 '漫著錄' => '漫著录',
+'漫著录' => '漫著录',
 '漫著称' => '漫著称',
 '漫著稱' => '漫著称',
 '漫著者' => '漫著者',
@@ -14955,14 +14954,14 @@ $zh2Hans = array(
 '燒著者' => '烧著者',
 '燒著述' => '烧著述',
 '照著' => '照着',
-'照著书' => '照著书',
 '照著書' => '照著书',
+'照著书' => '照著书',
 '照著作' => '照著作',
 '照著名' => '照著名',
-'照著录' => '照著录',
 '照著錄' => '照著录',
-'照著称' => '照著称',
+'照著录' => '照著录',
 '照著稱' => '照著称',
+'照著称' => '照著称',
 '照著者' => '照著者',
 '照著述' => '照著述',
 '愛護著' => '爱护着',
@@ -14996,8 +14995,8 @@ $zh2Hans = array(
 '猜著書' => '猜着书',
 '猜著作' => '猜著作',
 '猜著名' => '猜著名',
-'猜著錄' => '猜著录',
 '猜著录' => '猜著录',
+'猜著錄' => '猜著录',
 '猜著称' => '猜著称',
 '猜著稱' => '猜著称',
 '猜著者' => '猜著者',
@@ -15009,8 +15008,8 @@ $zh2Hans = array(
 '甜著书' => '甜著书',
 '甜著作' => '甜著作',
 '甜著名' => '甜著名',
-'甜著录' => '甜著录',
 '甜著錄' => '甜著录',
+'甜著录' => '甜著录',
 '甜著稱' => '甜著称',
 '甜著称' => '甜著称',
 '甜著者' => '甜著者',
@@ -15028,12 +15027,12 @@ $zh2Hans = array(
 '用著稱' => '用著称',
 '用著者' => '用著者',
 '用著述' => '用著述',
-'男为乾' => '男为乾',
-'男爲乾' => '男为乾',
 '男為乾' => '男为乾',
+'男爲乾' => '男为乾',
+'男为乾' => '男为乾',
 '男性為乾' => '男性为乾',
-'男性爲乾' => '男性为乾',
 '男性为乾' => '男性为乾',
+'男性爲乾' => '男性为乾',
 '留著' => '留着',
 '留著書' => '留着书',
 '留著作' => '留著作',
@@ -15065,12 +15064,12 @@ $zh2Hans = array(
 '皺著者' => '皱著者',
 '皺著述' => '皱著述',
 '盛著' => '盛着',
-'盛著书' => '盛著书',
 '盛著書' => '盛著书',
+'盛著书' => '盛著书',
 '盛著作' => '盛著作',
 '盛著名' => '盛著名',
-'盛著錄' => '盛著录',
 '盛著录' => '盛著录',
+'盛著錄' => '盛著录',
 '盛著稱' => '盛著称',
 '盛著称' => '盛著称',
 '盛著者' => '盛著者',
@@ -15086,14 +15085,14 @@ $zh2Hans = array(
 '盯著者' => '盯著者',
 '盯著述' => '盯著述',
 '盾著' => '盾着',
-'盾著書' => '盾著书',
 '盾著书' => '盾著书',
+'盾著書' => '盾著书',
 '盾著作' => '盾著作',
 '盾著名' => '盾著名',
-'盾著錄' => '盾著录',
 '盾著录' => '盾著录',
-'盾著稱' => '盾著称',
+'盾著錄' => '盾著录',
 '盾著称' => '盾著称',
+'盾著稱' => '盾著称',
 '盾著者' => '盾著者',
 '盾著述' => '盾著述',
 '看不著' => '看不着',
@@ -15104,8 +15103,8 @@ $zh2Hans = array(
 '看著名' => '看著名',
 '看著录' => '看著录',
 '看著錄' => '看著录',
-'看著稱' => '看著称',
 '看著称' => '看著称',
+'看著稱' => '看著称',
 '看著者' => '看著者',
 '看著述' => '看著述',
 '著業' => '着业',
@@ -15213,14 +15212,14 @@ $zh2Hans = array(
 '睡不著' => '睡不着',
 '睡得著' => '睡得着',
 '睡著' => '睡着',
-'睡著書' => '睡著书',
 '睡著书' => '睡著书',
+'睡著書' => '睡著书',
 '睡著作' => '睡著作',
 '睡著名' => '睡著名',
-'睡著錄' => '睡著录',
 '睡著录' => '睡著录',
-'睡著称' => '睡著称',
+'睡著錄' => '睡著录',
 '睡著稱' => '睡著称',
+'睡著称' => '睡著称',
 '睡著者' => '睡著者',
 '睡著述' => '睡著述',
 '睹微知著' => '睹微知著',
@@ -15248,8 +15247,8 @@ $zh2Hans = array(
 '瞪著书' => '瞪著书',
 '瞪著作' => '瞪著作',
 '瞪著名' => '瞪著名',
-'瞪著錄' => '瞪著录',
 '瞪著录' => '瞪著录',
+'瞪著錄' => '瞪著录',
 '瞪著称' => '瞪著称',
 '瞪著稱' => '瞪著称',
 '瞪著者' => '瞪著者',
@@ -15262,10 +15261,10 @@ $zh2Hans = array(
 '福著書' => '福著书',
 '福著作' => '福著作',
 '福著名' => '福著名',
-'福著錄' => '福著录',
 '福著录' => '福著录',
-'福著稱' => '福著称',
+'福著錄' => '福著录',
 '福著称' => '福著称',
+'福著稱' => '福著称',
 '福著者' => '福著者',
 '福著述' => '福著述',
 '穀梁' => '穀梁',
@@ -15276,17 +15275,17 @@ $zh2Hans = array(
 '空著名' => '空著名',
 '空著录' => '空著录',
 '空著錄' => '空著录',
-'空著称' => '空著称',
 '空著稱' => '空著称',
+'空著称' => '空著称',
 '空著者' => '空著者',
 '空著述' => '空著述',
 '穿著' => '穿着',
-'穿著书' => '穿著书',
 '穿著書' => '穿著书',
+'穿著书' => '穿著书',
 '穿著作' => '穿著作',
 '穿著名' => '穿著名',
-'穿著录' => '穿著录',
 '穿著錄' => '穿著录',
+'穿著录' => '穿著录',
 '穿著称' => '穿著称',
 '穿著稱' => '穿著称',
 '穿著者' => '穿著者',
@@ -15300,14 +15299,14 @@ $zh2Hans = array(
 '豎著者' => '竖著者',
 '豎著述' => '竖著述',
 '站著' => '站着',
-'站著书' => '站著书',
 '站著書' => '站著书',
+'站著书' => '站著书',
 '站著作' => '站著作',
 '站著名' => '站著名',
-'站著錄' => '站著录',
 '站著录' => '站著录',
-'站著称' => '站著称',
+'站著錄' => '站著录',
 '站著稱' => '站著称',
+'站著称' => '站著称',
 '站著者' => '站著者',
 '站著述' => '站著述',
 '笑著' => '笑着',
@@ -15317,8 +15316,8 @@ $zh2Hans = array(
 '笑著名' => '笑著名',
 '笑著录' => '笑著录',
 '笑著錄' => '笑著录',
-'笑著称' => '笑著称',
 '笑著稱' => '笑著称',
+'笑著称' => '笑著称',
 '笑著者' => '笑著者',
 '笑著述' => '笑著述',
 '答覆' => '答复',
@@ -15329,8 +15328,8 @@ $zh2Hans = array(
 '管著名' => '管著名',
 '管著录' => '管著录',
 '管著錄' => '管著录',
-'管著稱' => '管著称',
 '管著称' => '管著称',
+'管著稱' => '管著称',
 '管著者' => '管著者',
 '管著述' => '管著述',
 '米澤瑠美' => '米泽瑠美',
@@ -15363,34 +15362,34 @@ $zh2Hans = array(
 '纏著者' => '缠著者',
 '纏著述' => '缠著述',
 '罩著' => '罩着',
-'罩著书' => '罩著书',
 '罩著書' => '罩著书',
+'罩著书' => '罩著书',
 '罩著作' => '罩著作',
 '罩著名' => '罩著名',
-'罩著錄' => '罩著录',
 '罩著录' => '罩著录',
-'罩著称' => '罩著称',
+'罩著錄' => '罩著录',
 '罩著稱' => '罩著称',
+'罩著称' => '罩著称',
 '罩著者' => '罩著者',
 '罩著述' => '罩著述',
 '美著' => '美着',
-'美著书' => '美著书',
 '美著書' => '美著书',
+'美著书' => '美著书',
 '美著作' => '美著作',
 '美著名' => '美著名',
-'美著录' => '美著录',
 '美著錄' => '美著录',
+'美著录' => '美著录',
 '美著稱' => '美著称',
 '美著称' => '美著称',
 '美著者' => '美著者',
 '美著述' => '美著述',
 '耀著' => '耀着',
-'耀著書' => '耀著书',
 '耀著书' => '耀著书',
+'耀著書' => '耀著书',
 '耀著作' => '耀著作',
 '耀著名' => '耀著名',
-'耀著錄' => '耀著录',
 '耀著录' => '耀著录',
+'耀著錄' => '耀著录',
 '耀著称' => '耀著称',
 '耀著稱' => '耀著称',
 '耀著者' => '耀著者',
@@ -15416,8 +15415,8 @@ $zh2Hans = array(
 '背著名' => '背著名',
 '背著录' => '背著录',
 '背著錄' => '背著录',
-'背著称' => '背著称',
 '背著稱' => '背著称',
+'背著称' => '背著称',
 '背著者' => '背著者',
 '背著述' => '背著述',
 '膠著' => '胶着',
@@ -15437,18 +15436,18 @@ $zh2Hans = array(
 '藝著者' => '艺著者',
 '藝著述' => '艺著述',
 '苦著' => '苦着',
-'苦著书' => '苦著书',
 '苦著書' => '苦著书',
+'苦著书' => '苦著书',
 '苦著作' => '苦著作',
 '苦著名' => '苦著名',
-'苦著录' => '苦著录',
 '苦著錄' => '苦著录',
-'苦著稱' => '苦著称',
+'苦著录' => '苦著录',
 '苦著称' => '苦著称',
+'苦著稱' => '苦著称',
 '苦著者' => '苦著者',
 '苦著述' => '苦著述',
-'苧烯' => '苧烯',
 '薴烯' => '苧烯',
+'苧烯' => '苧烯',
 '獲著' => '获着',
 '獲著書' => '获著书',
 '獲著作' => '获著作',
@@ -15466,8 +15465,8 @@ $zh2Hans = array(
 '落著名' => '落著名',
 '落著录' => '落著录',
 '落著錄' => '落著录',
-'落著稱' => '落著称',
 '落著称' => '落著称',
+'落著稱' => '落著称',
 '落著者' => '落著者',
 '落著述' => '落著述',
 '著書' => '著书',
@@ -15484,14 +15483,14 @@ $zh2Hans = array(
 '蒙汗葯' => '蒙汗药',
 '蒙著' => '蒙着',
 '蒙葯' => '蒙药',
-'蒙著書' => '蒙著书',
 '蒙著书' => '蒙著书',
+'蒙著書' => '蒙著书',
 '蒙著作' => '蒙著作',
 '蒙著名' => '蒙著名',
 '蒙著录' => '蒙著录',
 '蒙著錄' => '蒙著录',
-'蒙著稱' => '蒙著称',
 '蒙著称' => '蒙著称',
+'蒙著稱' => '蒙著称',
 '蒙著者' => '蒙著者',
 '蒙著述' => '蒙著述',
 '藏著' => '藏着',
@@ -15501,19 +15500,19 @@ $zh2Hans = array(
 '藏著名' => '藏著名',
 '藏著錄' => '藏著录',
 '藏著录' => '藏著录',
-'藏著称' => '藏著称',
 '藏著稱' => '藏著称',
+'藏著称' => '藏著称',
 '藏著者' => '藏著者',
 '藏著述' => '藏著述',
 '蘸著' => '蘸着',
-'蘸著書' => '蘸著书',
 '蘸著书' => '蘸著书',
+'蘸著書' => '蘸著书',
 '蘸著作' => '蘸著作',
 '蘸著名' => '蘸著名',
 '蘸著录' => '蘸著录',
 '蘸著錄' => '蘸著录',
-'蘸著稱' => '蘸著称',
 '蘸著称' => '蘸著称',
+'蘸著稱' => '蘸著称',
 '蘸著者' => '蘸著者',
 '蘸著述' => '蘸著述',
 '行著' => '行着',
@@ -15521,19 +15520,19 @@ $zh2Hans = array(
 '行著書' => '行著书',
 '行著作' => '行著作',
 '行著名' => '行著名',
-'行著录' => '行著录',
 '行著錄' => '行著录',
-'行著稱' => '行著称',
+'行著录' => '行著录',
 '行著称' => '行著称',
+'行著稱' => '行著称',
 '行著者' => '行著者',
 '行著述' => '行著述',
 '衣著' => '衣着',
-'衣著书' => '衣著书',
 '衣著書' => '衣著书',
+'衣著书' => '衣著书',
 '衣著作' => '衣著作',
 '衣著名' => '衣著名',
-'衣著录' => '衣著录',
 '衣著錄' => '衣著录',
+'衣著录' => '衣著录',
 '衣著稱' => '衣著称',
 '衣著称' => '衣著称',
 '衣著者' => '衣著者',
@@ -15547,14 +15546,14 @@ $zh2Hans = array(
 '裝著者' => '装著者',
 '裝著述' => '装著述',
 '裹著' => '裹着',
-'裹著書' => '裹著书',
 '裹著书' => '裹著书',
+'裹著書' => '裹著书',
 '裹著作' => '裹著作',
 '裹著名' => '裹著名',
 '裹著录' => '裹著录',
 '裹著錄' => '裹著录',
-'裹著称' => '裹著称',
 '裹著稱' => '裹著称',
+'裹著称' => '裹著称',
 '裹著者' => '裹著者',
 '裹著述' => '裹著述',
 '覆蓋' => '覆蓋',
@@ -15603,8 +15602,8 @@ $zh2Hans = array(
 '豫著名' => '豫著名',
 '豫著录' => '豫著录',
 '豫著錄' => '豫著录',
-'豫著称' => '豫著称',
 '豫著稱' => '豫著称',
+'豫著称' => '豫著称',
 '豫著者' => '豫著者',
 '豫著述' => '豫著述',
 '貞著' => '贞着',
@@ -15616,14 +15615,14 @@ $zh2Hans = array(
 '貞著者' => '贞著者',
 '貞著述' => '贞著述',
 '走著' => '走着',
-'走著書' => '走著书',
 '走著书' => '走著书',
+'走著書' => '走著书',
 '走著作' => '走著作',
 '走著名' => '走著名',
-'走著錄' => '走著录',
 '走著录' => '走著录',
-'走著稱' => '走著称',
+'走著錄' => '走著录',
 '走著称' => '走著称',
+'走著稱' => '走著称',
 '走著者' => '走著者',
 '走著述' => '走著述',
 '趕著' => '赶着',
@@ -15639,8 +15638,8 @@ $zh2Hans = array(
 '趴著书' => '趴著书',
 '趴著作' => '趴著作',
 '趴著名' => '趴著名',
-'趴著录' => '趴著录',
 '趴著錄' => '趴著录',
+'趴著录' => '趴著录',
 '趴著称' => '趴著称',
 '趴著稱' => '趴著称',
 '趴著者' => '趴著者',
@@ -15658,8 +15657,8 @@ $zh2Hans = array(
 '跑著书' => '跑著书',
 '跑著作' => '跑著作',
 '跑著名' => '跑著名',
-'跑著录' => '跑著录',
 '跑著錄' => '跑著录',
+'跑著录' => '跑著录',
 '跑著稱' => '跑著称',
 '跑著称' => '跑著称',
 '跑著者' => '跑著者',
@@ -15671,28 +15670,28 @@ $zh2Hans = array(
 '跟著名' => '跟著名',
 '跟著录' => '跟著录',
 '跟著錄' => '跟著录',
-'跟著称' => '跟著称',
 '跟著稱' => '跟著称',
+'跟著称' => '跟著称',
 '跟著者' => '跟著者',
 '跟著述' => '跟著述',
 '跪著' => '跪着',
-'跪著書' => '跪著书',
 '跪著书' => '跪著书',
+'跪著書' => '跪著书',
 '跪著作' => '跪著作',
 '跪著名' => '跪著名',
-'跪著錄' => '跪著录',
 '跪著录' => '跪著录',
+'跪著錄' => '跪著录',
 '跪著稱' => '跪著称',
 '跪著称' => '跪著称',
 '跪著者' => '跪著者',
 '跪著述' => '跪著述',
 '跳著' => '跳着',
-'跳著书' => '跳著书',
 '跳著書' => '跳著书',
+'跳著书' => '跳著书',
 '跳著作' => '跳著作',
 '跳著名' => '跳著名',
-'跳著录' => '跳著录',
 '跳著錄' => '跳著录',
+'跳著录' => '跳著录',
 '跳著称' => '跳著称',
 '跳著稱' => '跳著称',
 '跳著者' => '跳著者',
@@ -15705,13 +15704,13 @@ $zh2Hans = array(
 '踏著名' => '踏著名',
 '踏著錄' => '踏著录',
 '踏著录' => '踏著录',
-'踏著称' => '踏著称',
 '踏著稱' => '踏著称',
+'踏著称' => '踏著称',
 '踏著者' => '踏著者',
 '踏著述' => '踏著述',
 '踩著' => '踩着',
-'踩著书' => '踩著书',
 '踩著書' => '踩著书',
+'踩著书' => '踩著书',
 '踩著作' => '踩著作',
 '踩著名' => '踩著名',
 '踩著录' => '踩著录',
@@ -15721,12 +15720,12 @@ $zh2Hans = array(
 '踩著者' => '踩著者',
 '踩著述' => '踩著述',
 '身著' => '身着',
-'身著书' => '身著书',
 '身著書' => '身著书',
+'身著书' => '身著书',
 '身著作' => '身著作',
 '身著名' => '身著名',
-'身著录' => '身著录',
 '身著錄' => '身著录',
+'身著录' => '身著录',
 '身著稱' => '身著称',
 '身著称' => '身著称',
 '身著者' => '身著者',
@@ -15738,8 +15737,8 @@ $zh2Hans = array(
 '躺著名' => '躺著名',
 '躺著錄' => '躺著录',
 '躺著录' => '躺著录',
-'躺著称' => '躺著称',
 '躺著稱' => '躺著称',
+'躺著称' => '躺著称',
 '躺著者' => '躺著者',
 '躺著述' => '躺著述',
 '轉著' => '转着',
@@ -15788,34 +15787,34 @@ $zh2Hans = array(
 '連著述' => '连著述',
 '迫著' => '迫着',
 '追著' => '追着',
-'追著書' => '追著书',
 '追著书' => '追著书',
+'追著書' => '追著书',
 '追著作' => '追著作',
 '追著名' => '追著名',
-'追著錄' => '追著录',
 '追著录' => '追著录',
+'追著錄' => '追著录',
 '追著称' => '追著称',
 '追著稱' => '追著称',
 '追著者' => '追著者',
 '追著述' => '追著述',
 '逆著' => '逆着',
-'逆著書' => '逆著书',
 '逆著书' => '逆著书',
+'逆著書' => '逆著书',
 '逆著作' => '逆著作',
 '逆著名' => '逆著名',
-'逆著錄' => '逆著录',
 '逆著录' => '逆著录',
-'逆著称' => '逆著称',
+'逆著錄' => '逆著录',
 '逆著稱' => '逆著称',
+'逆著称' => '逆著称',
 '逆著者' => '逆著者',
 '逆著述' => '逆著述',
 '逼著' => '逼着',
-'逼著書' => '逼著书',
 '逼著书' => '逼著书',
+'逼著書' => '逼著书',
 '逼著作' => '逼著作',
 '逼著名' => '逼著名',
-'逼著錄' => '逼著录',
 '逼著录' => '逼著录',
+'逼著錄' => '逼著录',
 '逼著称' => '逼著称',
 '逼著稱' => '逼著称',
 '逼著者' => '逼著者',
@@ -15841,8 +15840,8 @@ $zh2Hans = array(
 '配著名' => '配著名',
 '配著錄' => '配著录',
 '配著录' => '配著录',
-'配著稱' => '配著称',
 '配著称' => '配著称',
+'配著稱' => '配著称',
 '配著者' => '配著者',
 '配著述' => '配著述',
 '釀著' => '酿着',
@@ -15853,14 +15852,14 @@ $zh2Hans = array(
 '釀著稱' => '酿著称',
 '釀著者' => '酿著者',
 '釀著述' => '酿著述',
-'醯壺' => '醯壶',
 '醯壶' => '醯壶',
+'醯壺' => '醯壶',
 '醯醬' => '醯酱',
 '醯酱' => '醯酱',
 '醯醋' => '醯醋',
 '醯醢' => '醯醢',
-'醯鸡' => '醯鸡',
 '醯雞' => '醯鸡',
+'醯鸡' => '醯鸡',
 '重覆' => '重复',
 '金鍊' => '金链',
 '鐵鍊' => '铁链',
@@ -15902,8 +15901,8 @@ $zh2Hans = array(
 '聞得著' => '闻得着',
 '聞著' => '闻着',
 '阳为乾' => '阳为乾',
-'陽爲乾' => '阳为乾',
 '陽為乾' => '阳为乾',
+'陽爲乾' => '阳为乾',
 '阿部正瞭' => '阿部正瞭',
 '附著' => '附着',
 '附睪' => '附睾',
@@ -15911,36 +15910,36 @@ $zh2Hans = array(
 '附著書' => '附著书',
 '附著作' => '附著作',
 '附著名' => '附著名',
-'附著錄' => '附著录',
 '附著录' => '附著录',
+'附著錄' => '附著录',
 '附著称' => '附著称',
 '附著稱' => '附著称',
 '附著者' => '附著者',
 '附著述' => '附著述',
-'陈乾生' => '陈乾生',
 '陳乾生' => '陈乾生',
-'陈公乾生' => '陈公乾生',
+'陈乾生' => '陈乾生',
 '陳公乾生' => '陈公乾生',
+'陈公乾生' => '陈公乾生',
 '陋著' => '陋着',
-'陋著書' => '陋著书',
 '陋著书' => '陋著书',
+'陋著書' => '陋著书',
 '陋著作' => '陋著作',
 '陋著名' => '陋著名',
-'陋著錄' => '陋著录',
 '陋著录' => '陋著录',
-'陋著称' => '陋著称',
+'陋著錄' => '陋著录',
 '陋著稱' => '陋著称',
+'陋著称' => '陋著称',
 '陋著者' => '陋著者',
 '陋著述' => '陋著述',
 '陪著' => '陪着',
-'陪著书' => '陪著书',
 '陪著書' => '陪著书',
+'陪著书' => '陪著书',
 '陪著作' => '陪著作',
 '陪著名' => '陪著名',
-'陪著录' => '陪著录',
 '陪著錄' => '陪著录',
-'陪著称' => '陪著称',
+'陪著录' => '陪著录',
 '陪著稱' => '陪著称',
+'陪著称' => '陪著称',
 '陪著者' => '陪著者',
 '陪著述' => '陪著述',
 '陳堵' => '陳堵',
@@ -15954,26 +15953,26 @@ $zh2Hans = array(
 '隨著者' => '随著者',
 '隨著述' => '随著述',
 '隔著' => '隔着',
-'隔著书' => '隔著书',
 '隔著書' => '隔著书',
+'隔著书' => '隔著书',
 '隔著作' => '隔著作',
 '隔著名' => '隔著名',
-'隔著录' => '隔著录',
 '隔著錄' => '隔著录',
+'隔著录' => '隔著录',
 '隔著称' => '隔著称',
 '隔著稱' => '隔著称',
 '隔著者' => '隔著者',
 '隔著述' => '隔著述',
 '隱睪' => '隱睾',
 '雅著' => '雅着',
-'雅著书' => '雅著书',
 '雅著書' => '雅著书',
+'雅著书' => '雅著书',
 '雅著作' => '雅著作',
 '雅著名' => '雅著名',
-'雅著录' => '雅著录',
 '雅著錄' => '雅著录',
-'雅著称' => '雅著称',
+'雅著录' => '雅著录',
 '雅著稱' => '雅著称',
+'雅著称' => '雅著称',
 '雅著者' => '雅著者',
 '雅著述' => '雅著述',
 '雍乾' => '雍乾',
@@ -15982,8 +15981,8 @@ $zh2Hans = array(
 '靠著名' => '靠著名',
 '靠著錄' => '靠著录',
 '靠著录' => '靠著录',
-'靠著稱' => '靠著称',
 '靠著称' => '靠著称',
+'靠著稱' => '靠著称',
 '靠著者' => '靠著者',
 '靠著述' => '靠著述',
 '頂著' => '顶着',
@@ -16064,8 +16063,8 @@ $zh2Hans = array(
 '高著者' => '高著者',
 '高著述' => '高著述',
 '髭著' => '髭着',
-'髭著书' => '髭著书',
 '髭著書' => '髭著书',
+'髭著书' => '髭著书',
 '髭著作' => '髭著作',
 '髭著名' => '髭著名',
 '髭著錄' => '髭著录',
@@ -16079,17 +16078,17 @@ $zh2Hans = array(
 '魏徵' => '魏徵',
 '魚乾乾' => '鱼干干',
 '麯崇裕' => '麯崇裕',
-'麴義' => '麴义',
 '麴义' => '麴义',
+'麴義' => '麴义',
 '麴英' => '麴英',
 '麽氏' => '麽氏',
-'麽麽' => '麽麽',
 '麼麼' => '麽麽',
+'麽麽' => '麽麽',
 '黄润乾' => '黄润乾',
 '黃潤乾' => '黄润乾',
 '黏著' => '黏着',
-'黏著书' => '黏著书',
 '黏著書' => '黏著书',
+'黏著书' => '黏著书',
 '黏著作' => '黏著作',
 '黏著名' => '黏著名',
 '黏著录' => '黏著录',
@@ -16105,23 +16104,23 @@ $zh2TW = array(
 '”' => '」',
 '‘' => '『',
 '’' => '』',
-'三極管' => '三極體',
 '三极管' => '三極體',
+'三極管' => '三極體',
 '世界裏' => '世界裡',
 '中文裏' => '中文裡',
 '串行' => '串列',
 '串列加速器' => '串列加速器',
 '以太网' => '乙太網',
 '奶酪' => '乳酪',
-'二極管' => '二極體',
 '二极管' => '二極體',
+'二極管' => '二極體',
 '交互式' => '互動式',
 '阿塞拜疆' => '亞塞拜然',
 '人工智能' => '人工智慧',
 '接口' => '介面',
 '服务器' => '伺服器',
-'字節' => '位元組',
 '字节' => '位元組',
+'字節' => '位元組',
 '作品裏' => '作品裡',
 '信道' => '信道',
 '优先级' => '優先順序',
@@ -16136,20 +16135,20 @@ $zh2TW = array(
 '冬日裏' => '冬日裡',
 '凉菜' => '冷盤',
 '冷菜' => '冷盤',
-'凶器' => '凶器',
 '兇器' => '凶器',
-'å\87¶å¾\92' => 'å\87¶å¾\92',
+'å\87¶å\99¨' => 'å\87¶å\99¨',
 '兇徒' => '凶徒',
+'凶徒' => '凶徒',
 '兇手' => '凶手',
 '凶手' => '凶手',
-'兇案' => '凶案',
 '凶案' => '凶案',
-'å\87¶æ®\98' => 'å\87¶æ®\98',
+'å\85\87æ¡\88' => 'å\87¶æ¡\88',
 '兇殘' => '凶殘',
+'凶殘' => '凶殘',
 '凶残' => '凶殘',
 '兇殺' => '凶殺',
-'凶杀' => '凶殺',
 '凶殺' => '凶殺',
+'凶杀' => '凶殺',
 '打印' => '列印',
 '列支敦士登' => '列支敦斯登',
 '剪彩' => '剪綵',
@@ -16159,10 +16158,10 @@ $zh2TW = array(
 '特立尼達和多巴哥' => '千里達托貝哥',
 '特立尼达和托巴哥' => '千里達托貝哥',
 '半角' => '半形',
-'卡塔爾' => '卡達',
 '卡塔尔' => '卡達',
-'打印機' => '印表機',
+'卡塔爾' => '卡達',
 '打印机' => '印表機',
+'打印機' => '印表機',
 '厄立特里亚' => '厄利垂亞',
 '厄立特里亞' => '厄利垂亞',
 '厄瓜多尔' => '厄瓜多',
@@ -16177,17 +16176,17 @@ $zh2TW = array(
 '哈萨克斯坦' => '哈薩克',
 '哥斯達黎加' => '哥斯大黎加',
 '哥斯达黎加' => '哥斯大黎加',
-'格魯吉亞' => '喬治亞',
 '格鲁吉亚' => '喬治亞',
-'佐治亚' => '喬治亞',
+'格魯吉亞' => '喬治亞',
 '佐治亞' => '喬治亞',
+'佐治亚' => '喬治亞',
 '嘴裏' => '嘴裡',
 '土库曼斯坦' => '土庫曼',
 '薯仔' => '土豆',
 '土豆網' => '土豆網',
 '土豆网' => '土豆網',
-'坦桑尼亚' => '坦尚尼亞',
 '坦桑尼亞' => '坦尚尼亞',
+'坦桑尼亚' => '坦尚尼亞',
 '端口' => '埠',
 '塔吉克斯坦' => '塔吉克',
 '塞舌尔' => '塞席爾',
@@ -16202,63 +16201,63 @@ $zh2TW = array(
 '多明尼加國' => '多米尼克',
 '穿梭機' => '太空梭',
 '航天飞机' => '太空梭',
-'尼日利亚' => '奈及利亞',
 '尼日利亞' => '奈及利亞',
+'尼日利亚' => '奈及利亞',
 '字符' => '字元',
 '字号' => '字型大小',
 '字库' => '字型檔',
 '字符集' => '字符集',
 '存盘' => '存檔',
 '學裏' => '學裡',
-'安提瓜和巴布達' => '安地卡及巴布達',
 '安提瓜和巴布达' => '安地卡及巴布達',
+'安提瓜和巴布達' => '安地卡及巴布達',
 '宋元' => '宋元',
 '洪都拉斯' => '宏都拉斯',
 '寻址' => '定址',
 '寒假裏' => '寒假裡',
 '宽带' => '寬頻',
-'老撾' => '寮國',
 '老挝' => '寮國',
+'老撾' => '寮國',
 '打门' => '射門',
 '專輯裏' => '專輯裡',
-'贊比亞' => '尚比亞',
 '赞比亚' => '尚比亞',
-'尼日爾' => '尼日',
+'贊比亞' => '尚比亞',
 '尼日尔' => '尼日',
+'尼日爾' => '尼日',
 '山洞裏' => '山洞裡',
 '巴布亞新畿內亞' => '巴布亞紐幾內亞',
 '巴布亚新几内亚' => '巴布亞紐幾內亞',
 '巴巴多斯' => '巴貝多',
 '布基纳法索' => '布吉納法索',
 '布基納法索' => '布吉納法索',
-'布什' => '布希',
 '布殊' => '布希',
+'布什' => '布希',
 '帕劳' => '帛琉',
 '例程' => '常式',
-'平治之乱' => '平治之亂',
 '平治之亂' => '平治之亂',
+'平治之乱' => '平治之亂',
 '年代裏' => '年代裡',
-'几内亚比绍' => '幾內亞比索',
 '幾內亞比紹' => '幾內亞比索',
+'几内亚比绍' => '幾內亞比索',
 '彩带' => '彩帶',
 '彩排' => '彩排',
 '彩楼' => '彩樓',
 '彩牌楼' => '彩牌樓',
-'復蘇' => '復甦',
 '复苏' => '復甦',
+'復蘇' => '復甦',
 '心裏' => '心裡',
-'快闪存储器' => '快閃記憶體',
 '闪存' => '快閃記憶體',
+'快闪存储器' => '快閃記憶體',
 '想象' => '想像',
 '传感' => '感測',
 '习用' => '慣用',
 '戏彩娱亲' => '戲綵娛親',
 '戲裏' => '戲裡',
-'手电筒' => '手電筒',
 '手电' => '手電筒',
+'手电筒' => '手電筒',
 '括号' => '括弧',
-'拿破侖' => '拿破崙',
 '拿破仑' => '拿破崙',
+'拿破侖' => '拿破崙',
 '積架' => '捷豹',
 '扫瞄仪' => '掃瞄器',
 '挂钩' => '掛鉤',
@@ -16268,12 +16267,12 @@ $zh2TW = array(
 '桌球' => '撞球',
 '便携式' => '攜帶型',
 '故事裏' => '故事裡',
-'调制解调器' => '數據機',
 '調制解調器' => '數據機',
-'斯洛文尼亞' => '斯洛維尼亞',
+'调制解调器' => '數據機',
 '斯洛文尼亚' => '斯洛維尼亞',
-'æ\96°çºªå\85\83' => 'æ\96°ç´\80å\85\83',
+'æ\96¯æ´\9bæ\96\87å°¼äº\9e' => 'æ\96¯æ´\9b維尼äº\9e',
 '新紀元' => '新紀元',
+'新纪元' => '新紀元',
 '日子裏' => '日子裡',
 '春假裏' => '春假裡',
 '春天裏' => '春天裡',
@@ -16285,13 +16284,13 @@ $zh2TW = array(
 '乍得' => '查德',
 '克林頓' => '柯林頓',
 '克林顿' => '柯林頓',
-'格林納達' => '格瑞那達',
 '格林纳达' => '格瑞那達',
+'格林納達' => '格瑞那達',
 '凡高' => '梵谷',
 '森林裏' => '森林裡',
 '棺材裏' => '棺材裡',
-'榴蓮' => '榴槤',
 '榴莲' => '榴槤',
+'榴蓮' => '榴槤',
 '仿真' => '模擬',
 '毛里裘斯' => '模里西斯',
 '毛里求斯' => '模里西斯',
@@ -16302,15 +16301,15 @@ $zh2TW = array(
 '元音' => '母音',
 '永历' => '永曆',
 '文莱' => '汶萊',
-'沙特阿拉伯' => '沙烏地阿拉伯',
 '沙地阿拉伯' => '沙烏地阿拉伯',
-'æ³¢æ\96¯å°¼äº\9eé»\91å¡\9eå\93¥ç¶­é\82£' => '波士尼äº\9e赫å¡\9eå\93¥ç¶­ç´\8d',
+'æ²\99ç\89¹é\98¿æ\8b\89伯' => 'æ²\99ç\83\8få\9c°é\98¿æ\8b\89伯',
 '波斯尼亚和黑塞哥维那' => '波士尼亞赫塞哥維納',
-'博茨瓦纳' => '波札那',
+'波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
 '博茨瓦納' => '波札那',
+'博茨瓦纳' => '波札那',
 '流程控制' => '流程控制',
-'侯赛因' => '海珊',
 '侯賽因' => '海珊',
+'侯赛因' => '海珊',
 '深淵裏' => '深淵裡',
 '光标' => '游標',
 '鼠标' => '滑鼠',
@@ -16319,18 +16318,18 @@ $zh2TW = array(
 '词组' => '片語',
 '獄裏' => '獄裡',
 '塞拉利昂' => '獅子山',
-'危地马拉' => '瓜地馬拉',
 '危地馬拉' => '瓜地馬拉',
+'危地马拉' => '瓜地馬拉',
 '冈比亚' => '甘比亞',
 '岡比亞' => '甘比亞',
 '疑兇' => '疑凶',
 '疑凶' => '疑凶',
 '百科裏' => '百科裡',
 '皮裏陽秋' => '皮裡陽秋',
-'盧旺達' => '盧安達',
 '卢旺达' => '盧安達',
-'ç\9c\9få\87¶' => 'ç\9c\9få\87',
+'ç\9b§æ\97ºé\81\94' => 'ç\9b§å®\89é\81\94',
 '真兇' => '真凶',
+'真凶' => '真凶',
 '眼睛裏' => '眼睛裡',
 '硅片' => '矽片',
 '硅谷' => '矽谷',
@@ -16348,43 +16347,43 @@ $zh2TW = array(
 '蹦极跳' => '笨豬跳',
 '绑紧跳' => '笨豬跳',
 '等于' => '等於',
-'短訊' => '簡訊',
 '短信' => '簡訊',
+'短訊' => '簡訊',
 '系列裏' => '系列裡',
 '新西蘭' => '紐西蘭',
 '新西兰' => '紐西蘭',
-'所罗门群岛' => '索羅門群島',
 '所羅門群島' => '索羅門群島',
-'索馬里' => '索馬利亞',
+'所罗门群岛' => '索羅門群島',
 '索马里' => '索馬利亞',
+'索馬里' => '索馬利亞',
 '结彩' => '結綵',
 '佛得角' => '維德角',
 '網絡' => '網路',
 '网络' => '網路',
-'互聯網' => '網際網路',
 '因特网' => '網際網路',
+'互聯網' => '網際網路',
 '彩球' => '綵球',
 '彩绸' => '綵綢',
 '彩线' => '綵線',
 '彩船' => '綵船',
 '彩衣' => '綵衣',
 '綫' => '線',
-'缉凶' => '緝凶',
 '緝兇' => '緝凶',
+'缉凶' => '緝凶',
 '緝凶' => '緝凶',
 '意大利' => '義大利',
 '老字号' => '老字號',
 '圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
 '聖吉斯納域斯' => '聖克里斯多福及尼維斯',
-'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
 '圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
+'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
 '圣卢西亚' => '聖露西亞',
 '聖盧西亞' => '聖露西亞',
 '圣马力诺' => '聖馬利諾',
 '聖馬力諾' => '聖馬利諾',
 '肚裏' => '肚裡',
-'肯尼亚' => '肯亞',
 '肯雅' => '肯亞',
+'肯尼亚' => '肯亞',
 '航天大学' => '航天大學',
 '苦裏' => '苦裡',
 '毛里塔尼亚' => '茅利塔尼亞',
@@ -16393,8 +16392,8 @@ $zh2TW = array(
 '万历' => '萬曆',
 '瓦努阿图' => '萬那杜',
 '瓦努阿圖' => '萬那杜',
-'也门' => '葉門',
 '也門' => '葉門',
+'也门' => '葉門',
 '着' => '著',
 '科摩羅' => '葛摩',
 '科摩罗' => '葛摩',
@@ -16403,19 +16402,19 @@ $zh2TW = array(
 '圭亚那' => '蓋亞那',
 '火锅盖帽' => '蓋火鍋',
 '苏里南' => '蘇利南',
-'行凶' => '行凶',
 '行兇' => '行凶',
-'行凶后' => '行凶後',
+'行凶' => '行凶',
 '行兇後' => '行凶後',
 '行凶後' => '行凶後',
-'流動電話' => '行動電話',
+'行凶后' => '行凶後',
 '移动电话' => '行動電話',
+'流動電話' => '行動電話',
 '行程控制' => '行程控制',
 '衞' => '衛',
 '卫生' => '衛生',
 '衞生' => '衛生',
-'埃塞俄比亚' => '衣索比亞',
 '埃塞俄比亞' => '衣索比亞',
+'埃塞俄比亚' => '衣索比亞',
 '裏勾外連' => '裡勾外連',
 '裏面' => '裡面',
 '分辨率' => '解析度',
@@ -16426,39 +16425,39 @@ $zh2TW = array(
 '瑙魯' => '諾魯',
 '变量' => '變數',
 '科特迪瓦' => '象牙海岸',
-'貝寧' => '貝南',
 '贝宁' => '貝南',
+'貝寧' => '貝南',
 '伯利茲' => '貝里斯',
 '伯利兹' => '貝里斯',
 '買兇' => '買凶',
-'买凶' => '買凶',
 '買凶' => '買凶',
+'买凶' => '買凶',
 '数据库' => '資料庫',
 '信息论' => '資訊理論',
 '奔驰' => '賓士',
 '平治' => '賓士',
 '利比里亚' => '賴比瑞亞',
 '利比里亞' => '賴比瑞亞',
-'萊索托' => '賴索托',
 '莱索托' => '賴索托',
+'萊索托' => '賴索托',
 '软驱' => '軟碟機',
-'軟件' => '軟體',
 '软件' => '軟體',
+'軟件' => '軟體',
 '加载' => '載入',
-'津巴布韦' => '辛巴威',
 '津巴布韋' => '辛巴威',
+'津巴布韦' => '辛巴威',
 '词汇' => '辭彙',
-'加纳' => '迦納',
 '加納' => '迦納',
-'追凶' => '追凶',
+'加纳' => '迦納',
 '追兇' => '追凶',
+'追凶' => '追凶',
 '這裏' => '這裡',
-'逞凶鬥狠' => '逞凶鬥狠',
 '逞兇鬥狠' => '逞凶鬥狠',
 '逞凶斗狠' => '逞凶鬥狠',
+'逞凶鬥狠' => '逞凶鬥狠',
 '即食麵' => '速食麵',
-'方便面' => '速食麵',
 '快速面' => '速食麵',
+'方便面' => '速食麵',
 '连字号' => '連字號',
 '进制' => '進位',
 '入球' => '進球',
@@ -16474,8 +16473,8 @@ $zh2TW = array(
 '鈎心鬥角' => '鉤心鬥角',
 '锎' => '鉲',
 '写保护' => '防寫',
-'阿拉伯联合酋长国' => '阿拉伯聯合大公國',
 '阿拉伯聯合酋長國' => '阿拉伯聯合大公國',
+'阿拉伯联合酋长国' => '阿拉伯聯合大公國',
 '噪声' => '雜訊',
 '脱机' => '離線',
 '雪裏紅' => '雪裡紅',
@@ -16485,8 +16484,8 @@ $zh2TW = array(
 '异步' => '非同步',
 '声卡' => '音效卡',
 '缺省' => '預設',
-'颁布' => '頒布',
 '頒佈' => '頒布',
+'颁布' => '頒布',
 '領域裏' => '領域裡',
 '头球' => '頭槌',
 '粒入球' => '顆進球',
@@ -16504,30 +16503,30 @@ $zh2TW = array(
 );
 
 $zh2HK = array(
-'505線' => '505綫',
 '505线' => '505綫',
-'507線' => '507綫',
+'505線' => '505綫',
 '507线' => '507綫',
-'610線' => '610綫',
+'507線' => '507綫',
 '610线' => '610綫',
+'610線' => '610綫',
 '614P線' => '614P綫',
 '614P线' => '614P綫',
-'614线' => '614綫',
 '614線' => '614綫',
+'614线' => '614綫',
 '615P線' => '615P綫',
 '615P线' => '615P綫',
 '615线' => '615綫',
 '615線' => '615綫',
-'705线' => '705綫',
 '705線' => '705綫',
-'706线' => '706綫',
+'705线' => '705綫',
 '706線' => '706綫',
+'706线' => '706綫',
 '751P線' => '751P綫',
 '751P线' => '751P綫',
-'751線' => '751綫',
 '751线' => '751綫',
-'761P线' => '761P綫',
+'751線' => '751綫',
 '761P線' => '761P綫',
+'761P线' => '761P綫',
 '“' => '「',
 '”' => '」',
 '‘' => '『',
@@ -16552,8 +16551,8 @@ $zh2HK = array(
 '乘著錄' => '乘著錄',
 '葉門' => '也門',
 '二極體' => '二極管',
-'網際網路' => '互聯網',
 '因特网' => '互聯網',
+'網際網路' => '互聯網',
 '亮著' => '亮着',
 '亮著作' => '亮著作',
 '亮著名' => '亮著名',
@@ -16607,8 +16606,8 @@ $zh2HK = array(
 '住著述' => '住著述',
 '住著錄' => '住著錄',
 '維德角' => '佛得角',
-'作品裡' => '作品裏',
 '作品里' => '作品裏',
+'作品裡' => '作品裏',
 '來著' => '來着',
 '來著作' => '來著作',
 '來著名' => '來著名',
@@ -16764,8 +16763,8 @@ $zh2HK = array(
 '動著者' => '動著者',
 '動著述' => '動著述',
 '動著錄' => '動著錄',
-'北环线' => '北環綫',
 '北環線' => '北環綫',
+'北环线' => '北環綫',
 '医院里' => '医院裏',
 '波札那' => '博茨瓦納',
 '珍妮弗·卡普里亚蒂' => '卡佩雅蒂',
@@ -16778,13 +16777,13 @@ $zh2HK = array(
 '印著述' => '印著述',
 '印著錄' => '印著錄',
 '瓜地馬拉' => '危地馬拉',
-'泡麵' => '即食麵',
 '方便面' => '即食麵',
-'快速面' => '即食麵',
 '速食麵' => '即食麵',
+'快速面' => '即食麵',
+'泡麵' => '即食麵',
 '厄瓜多' => '厄瓜多爾',
-'厄瓜多爾' => '厄瓜多爾',
 '厄瓜多尔' => '厄瓜多爾',
+'厄瓜多爾' => '厄瓜多爾',
 '厄利垂亞' => '厄立特里亞',
 '去著' => '去着',
 '去著作' => '去著作',
@@ -16933,8 +16932,8 @@ $zh2HK = array(
 '坐著述' => '坐著述',
 '坐著錄' => '坐著錄',
 '坦尚尼亞' => '坦桑尼亞',
-'衣索匹亞' => '埃塞俄比亞',
 '衣索比亞' => '埃塞俄比亞',
+'衣索匹亞' => '埃塞俄比亞',
 '吉里巴斯' => '基里巴斯',
 '塞普勒斯' => '塞浦路斯',
 '塞席爾' => '塞舌爾',
@@ -16946,10 +16945,10 @@ $zh2HK = array(
 '壓著者' => '壓著者',
 '壓著述' => '壓著述',
 '壓著錄' => '壓著錄',
-'夏天里' => '夏天裏',
 '夏天裡' => '夏天裏',
-'夏日里' => '夏日裏',
+'夏天里' => '夏天裏',
 '夏日裡' => '夏日裏',
+'夏日里' => '夏日裏',
 '夢著' => '夢着',
 '夢著作' => '夢著作',
 '夢著名' => '夢著名',
@@ -17003,8 +17002,8 @@ $zh2HK = array(
 '定著述' => '定著述',
 '定著錄' => '定著錄',
 '沃尓沃' => '富豪',
-'寒假裡' => '寒假裏',
 '寒假里' => '寒假裏',
+'寒假裡' => '寒假裏',
 '寫著' => '寫着',
 '寫著作' => '寫著作',
 '寫著名' => '寫著名',
@@ -17013,10 +17012,10 @@ $zh2HK = array(
 '寫著者' => '寫著者',
 '寫著述' => '寫著述',
 '寫著錄' => '寫著錄',
-'将军澳线' => '將軍澳綫',
 '將軍澳線' => '將軍澳綫',
-'专辑里' => '專輯裏',
+'将军澳线' => '將軍澳綫',
 '專輯裡' => '專輯裏',
+'专辑里' => '專輯裏',
 '尋著' => '尋着',
 '尋著作' => '尋著作',
 '尋著名' => '尋著名',
@@ -17033,12 +17032,12 @@ $zh2HK = array(
 '對著者' => '對著者',
 '對著述' => '對著述',
 '對著錄' => '對著錄',
-'奈及利亞' => '尼日利亞',
-'尼日利亚' => '尼日利亞',
 '尼日利亞' => '尼日利亞',
-'å°¼æ\97¥å°\94' => 'å°¼æ\97¥ç\88¾',
-'å°¼æ\97¥ç\88¾' => 'å°¼æ\97¥ç\88¾',
+'å°¼æ\97¥å\88©äº\9a' => 'å°¼æ\97¥å\88©äº\9e',
+'å¥\88å\8f\8aå\88©äº\9e' => 'å°¼æ\97¥å\88©äº\9e',
 '尼日' => '尼日爾',
+'尼日爾' => '尼日爾',
+'尼日尔' => '尼日爾',
 '展著' => '展着',
 '展著作' => '展著作',
 '展著名' => '展著名',
@@ -17081,8 +17080,8 @@ $zh2HK = array(
 '賓士' => '平治',
 '年代里' => '年代裏',
 '年代裡' => '年代裏',
-'幹著' => '幹着',
 '干着' => '幹着',
+'幹著' => '幹着',
 '幾內亞比索' => '幾內亞比紹',
 '康著' => '康着',
 '康著作' => '康著作',
@@ -17125,8 +17124,8 @@ $zh2HK = array(
 '心著者' => '心著者',
 '心著述' => '心著述',
 '心著錄' => '心著錄',
-'心裡' => '心裏',
 '心里' => '心裏',
+'心裡' => '心裏',
 '忍著' => '忍着',
 '忍著作' => '忍著作',
 '忍著名' => '忍著名',
@@ -17233,10 +17232,10 @@ $zh2HK = array(
 '戰著者' => '戰著者',
 '戰著述' => '戰著述',
 '戰著錄' => '戰著錄',
-'戲裡' => '戲裏',
 '戏里' => '戲裏',
-'黛安娜' => '戴安娜',
+'戲裡' => '戲裏',
 '狄安娜' => '戴安娜',
+'黛安娜' => '戴安娜',
 '戴著' => '戴着',
 '戴著作' => '戴著作',
 '戴著名' => '戴著名',
@@ -17469,8 +17468,8 @@ $zh2HK = array(
 '斯洛維尼亞' => '斯洛文尼亞',
 '新著龍虎門' => '新著龍虎門',
 '紐西蘭' => '新西蘭',
-'日子里' => '日子裏',
 '日子裡' => '日子裏',
+'日子里' => '日子裏',
 '昂著' => '昂着',
 '昂著作' => '昂著作',
 '昂著名' => '昂著名',
@@ -17487,12 +17486,12 @@ $zh2HK = array(
 '映著者' => '映著者',
 '映著述' => '映著述',
 '映著錄' => '映著錄',
-'春假里' => '春假裏',
 '春假裡' => '春假裏',
-'æ\98¥å¤©è£¡' => 'æ\98¥å¤©裏',
+'æ\98¥å\81\87é\87\8c' => 'æ\98¥å\81\87裏',
 '春天里' => '春天裏',
-'春日裡' => '春日裏',
+'春天裡' => '春天裏',
 '春日里' => '春日裏',
+'春日裡' => '春日裏',
 '时间里' => '時間裏',
 '時間裡' => '時間裏',
 '晃著' => '晃着',
@@ -17502,8 +17501,8 @@ $zh2HK = array(
 '晃著者' => '晃著者',
 '晃著述' => '晃著述',
 '晃著錄' => '晃著錄',
-'暑假里' => '暑假裏',
 '暑假裡' => '暑假裏',
+'暑假里' => '暑假裏',
 '暗著' => '暗着',
 '暗著作' => '暗著作',
 '暗著名' => '暗著名',
@@ -17547,8 +17546,8 @@ $zh2HK = array(
 '村子裡' => '村子裏',
 '东涌线' => '東涌綫',
 '東涌線' => '東涌綫',
-'東鐵線' => '東鐵綫',
 '东铁线' => '東鐵綫',
+'東鐵線' => '東鐵綫',
 '枕著' => '枕着',
 '枕著作' => '枕著作',
 '枕著名' => '枕著名',
@@ -17566,8 +17565,8 @@ $zh2HK = array(
 '梳著者' => '梳著者',
 '梳著述' => '梳著述',
 '梳著錄' => '梳著錄',
-'森林裡' => '森林裏',
 '森林里' => '森林裏',
+'森林裡' => '森林裏',
 '棺材裡' => '棺材裏',
 '棺材里' => '棺材裏',
 '榴蓮' => '榴槤',
@@ -17582,8 +17581,8 @@ $zh2HK = array(
 '樂著錄' => '樂著錄',
 '寶獅' => '標致',
 '標誌著' => '標誌着',
-'機場快線' => '機場快綫',
 '机场快线' => '機場快綫',
+'機場快線' => '機場快綫',
 '機器人' => '機械人',
 '机器人' => '機械人',
 '历史里' => '歷史裏',
@@ -17616,12 +17615,12 @@ $zh2HK = array(
 '沉著者' => '沉著者',
 '沉著述' => '沉著述',
 '沉著錄' => '沉著錄',
-'沙中线' => '沙中綫',
 '沙中線' => '沙中綫',
+'沙中线' => '沙中綫',
 '沙地阿拉伯' => '沙特阿拉伯',
 '沙烏地阿拉伯' => '沙特阿拉伯',
-'沙田至中環線' => '沙田至中環綫',
 '沙田至中环线' => '沙田至中環綫',
+'沙田至中環線' => '沙田至中環綫',
 '马拉特·萨芬' => '沙芬',
 '沿著' => '沿着',
 '沿著作' => '沿著作',
@@ -17642,8 +17641,8 @@ $zh2HK = array(
 '活著者' => '活著者',
 '活著述' => '活著述',
 '活著錄' => '活著錄',
-'行動電話' => '流動電話',
 '移动电话' => '流動電話',
+'行動電話' => '流動電話',
 '流著' => '流着',
 '流著作' => '流著作',
 '流著名' => '流著名',
@@ -17725,10 +17724,10 @@ $zh2HK = array(
 '无线剧集' => '無綫劇集',
 '無線收費' => '無綫收費',
 '无线收费' => '無綫收費',
-'无线节目' => '無綫節目',
 '無線節目' => '無綫節目',
-'无线电视' => '無綫電視',
+'无线节目' => '無綫節目',
 '無線電視' => '無綫電視',
+'无线电视' => '無綫電視',
 '菸' => '煙',
 '照著' => '照着',
 '照著作' => '照著作',
@@ -17781,8 +17780,8 @@ $zh2HK = array(
 '猜著者' => '猜著者',
 '猜著述' => '猜著述',
 '猜著錄' => '猜著錄',
-'狱里' => '獄裏',
 '獄裡' => '獄裏',
+'狱里' => '獄裏',
 '獨著' => '獨着',
 '獨著作' => '獨著作',
 '獨著名' => '獨著名',
@@ -17845,12 +17844,12 @@ $zh2HK = array(
 '疑著錄' => '疑著錄',
 '发布' => '發佈',
 '發布' => '發佈',
-'百科裡' => '百科裏',
 '百科里' => '百科裏',
+'百科裡' => '百科裏',
 '計程車' => '的士',
 '出租车' => '的士',
-'皮里阳秋' => '皮裏陽秋',
 '皮裡陽秋' => '皮裏陽秋',
+'皮里阳秋' => '皮裏陽秋',
 '皺著' => '皺着',
 '皺著作' => '皺著作',
 '皺著名' => '皺著名',
@@ -17960,8 +17959,8 @@ $zh2HK = array(
 '瞪著錄' => '瞪著錄',
 '簡訊' => '短訊',
 '短信' => '短訊',
-'硬件' => '硬件',
 '硬體' => '硬件',
+'硬件' => '硬件',
 '福斯' => '福士',
 '福著' => '福着',
 '福著作' => '福著作',
@@ -17971,12 +17970,12 @@ $zh2HK = array(
 '福著者' => '福著者',
 '福著述' => '福著述',
 '福著錄' => '福著錄',
-'秋假裡' => '秋假裏',
 '秋假里' => '秋假裏',
-'ç§\8b天裡' => 'ç§\8b天裏',
+'ç§\8bå\81\87裡' => 'ç§\8bå\81\87裏',
 '秋天里' => '秋天裏',
-'秋日里' => '秋日裏',
+'秋天裡' => '秋天裏',
 '秋日裡' => '秋日裏',
+'秋日里' => '秋日裏',
 '葛摩' => '科摩羅',
 '捷豹' => '積架',
 '空著' => '空着',
@@ -17987,8 +17986,8 @@ $zh2HK = array(
 '空著者' => '空著者',
 '空著述' => '空著述',
 '空著錄' => '空著錄',
-'太空梭' => '穿梭機',
 '航天飞机' => '穿梭機',
+'太空梭' => '穿梭機',
 '穿著' => '穿着',
 '穿著作' => '穿著作',
 '穿著名' => '穿著名',
@@ -18100,8 +18099,8 @@ $zh2HK = array(
 '考著者' => '考著者',
 '考著述' => '考著述',
 '考著錄' => '考著錄',
-'圣基茨和尼维斯' => '聖吉斯納域斯',
 '聖克里斯多福及尼維斯' => '聖吉斯納域斯',
+'圣基茨和尼维斯' => '聖吉斯納域斯',
 '聖文森及格瑞那丁' => '聖文森特和格林納丁斯',
 '聖露西亞' => '聖盧西亞',
 '聖馬利諾' => '聖馬力諾',
@@ -18117,8 +18116,8 @@ $zh2HK = array(
 '聽著錄' => '聽著錄',
 '肚里' => '肚裏',
 '肚裡' => '肚裏',
-'肯尼亚' => '肯雅',
 '肯亞' => '肯雅',
+'肯尼亚' => '肯雅',
 '背著' => '背着',
 '背著作' => '背著作',
 '背著名' => '背著名',
@@ -18162,8 +18161,8 @@ $zh2HK = array(
 '苦著錄' => '苦著錄',
 '苦里' => '苦裏',
 '苦裡' => '苦裏',
-'荃湾线' => '荃灣綫',
 '荃灣線' => '荃灣綫',
+'荃湾线' => '荃灣綫',
 '莫三比克' => '莫桑比克',
 '賴索托' => '萊索托',
 '馬自達' => '萬事得',
@@ -18229,8 +18228,8 @@ $zh2HK = array(
 '衣著錄' => '衣著錄',
 '裡勾外連' => '裏勾外連',
 '里勾外连' => '裏勾外連',
-'里面' => '裏面',
 '裡面' => '裏面',
+'里面' => '裏面',
 '裝著' => '裝着',
 '裝著作' => '裝著作',
 '裝著名' => '裝著名',
@@ -18247,8 +18246,8 @@ $zh2HK = array(
 '裹著者' => '裹著者',
 '裹著述' => '裹著述',
 '裹著錄' => '裹著錄',
-'西铁线' => '西鐵綫',
 '西鐵線' => '西鐵綫',
+'西铁线' => '西鐵綫',
 '見著' => '見着',
 '見著作' => '見著作',
 '見著名' => '見著名',
@@ -18442,8 +18441,8 @@ $zh2HK = array(
 '辦著錄' => '辦著錄',
 '近角聪信' => '近角聰信',
 '近角聰信' => '近角聰信',
-'迪士尼线' => '迪士尼綫',
 '迪士尼線' => '迪士尼綫',
+'迪士尼线' => '迪士尼綫',
 '迫著' => '迫着',
 '追著' => '追着',
 '追著作' => '追著作',
@@ -18527,8 +18526,8 @@ $zh2HK = array(
 '醯醢' => '醯醢',
 '醯醬' => '醯醬',
 '醯酱' => '醯醬',
-'醯鸡' => '醯雞',
 '醯雞' => '醯雞',
+'醯鸡' => '醯雞',
 '釀著' => '釀着',
 '釀著作' => '釀著作',
 '釀著名' => '釀著名',
@@ -18641,15 +18640,15 @@ $zh2HK = array(
 '雜著述' => '雜著述',
 '雜著錄' => '雜著錄',
 '冰淇淋' => '雪糕',
-'雪里红' => '雪裏紅',
 '雪裡紅' => '雪裏紅',
+'雪里红' => '雪裏紅',
 '雪裡蕻' => '雪裏蕻',
 '雪里蕻' => '雪裏蕻',
 '靠著' => '靠着',
 '靠著作' => '靠著作',
 '靠著名' => '靠著名',
-'靠著稱' => '靠著稱',
 '靠著称' => '靠著稱',
+'靠著稱' => '靠著稱',
 '靠著者' => '靠著者',
 '靠著述' => '靠著述',
 '靠著錄' => '靠著錄',
@@ -18678,10 +18677,10 @@ $zh2HK = array(
 '順著者' => '順著者',
 '順著述' => '順著述',
 '順著錄' => '順著錄',
-'頒布' => '頒佈',
 '颁布' => '頒佈',
-'é \98å\9f\9f裡' => 'é \98å\9f\9fè£\8f',
+'é \92å¸\83' => 'é \92ä½\88',
 '领域里' => '領域裏',
+'領域裡' => '領域裏',
 '領著' => '領着',
 '領著作' => '領著作',
 '領著名' => '領著名',
@@ -18698,8 +18697,8 @@ $zh2HK = array(
 '飄著者' => '飄著者',
 '飄著述' => '飄著述',
 '飄著錄' => '飄著錄',
-'館裡' => '館裏',
 '馆里' => '館裏',
+'館裡' => '館裏',
 '馬爾地夫' => '馬爾代夫',
 '馬利共和國' => '馬里共和國',
 '土豆' => '馬鈴薯',
@@ -18777,8 +18776,8 @@ $zh2HK = array(
 '點著者' => '點著者',
 '點著述' => '點著述',
 '點著錄' => '點著錄',
-'點裡' => '點裏',
 '点里' => '點裏',
+'點裡' => '點裏',
 );
 
 $zh2CN = array(
@@ -18804,8 +18803,8 @@ $zh2CN = array(
 '互聯網' => '互联网',
 '互動式' => '交互式',
 '人工智慧' => '人工智能',
-'甚麽' => '什么',
 '甚麼' => '什么',
+'甚麽' => '什么',
 '乙太網' => '以太网',
 '優先順序' => '优先级',
 '感測' => '传感',
@@ -18850,16 +18849,16 @@ $zh2CN = array(
 '华乐街' => '华乐街',
 '波札那' => '博茨瓦纳',
 '盧安達' => '卢旺达',
-'衞生' => '卫生',
 '衛生' => '卫生',
+'衞生' => '卫生',
 '瓜地馬拉' => '危地马拉',
 '厄瓜多' => '厄瓜多尔',
-'厄瓜多爾' => '厄瓜多尔',
 '厄瓜多尔' => '厄瓜多尔',
+'厄瓜多爾' => '厄瓜多尔',
 '厄利垂亞' => '厄立特里亚',
 '變數' => '变量',
-'撞球' => '台球',
 '桌球' => '台球',
+'撞球' => '台球',
 '吉布地' => '吉布提',
 '哈薩克' => '哈萨克斯坦',
 '哥斯大黎加' => '哥斯达黎加',
@@ -18868,8 +18867,8 @@ $zh2CN = array(
 '吐瓦魯' => '图瓦卢',
 '土庫曼' => '土库曼斯坦',
 '聖露西亞' => '圣卢西亚',
-'聖吉斯納域斯' => '圣基茨和尼维斯',
 '聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
+'聖吉斯納域斯' => '圣基茨和尼维斯',
 '聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
 '聖馬利諾' => '圣马力诺',
 '蓋亞那' => '圭亚那',
@@ -18889,11 +18888,11 @@ $zh2CN = array(
 '福斯' => '大众',
 '大衛碧咸' => '大卫·贝克汉姆',
 '頭槌' => '头球',
-'賓士' => '奔驰',
 '平治' => '奔驰',
+'賓士' => '奔驰',
 '忌廉' => '奶油',
-'字元会' => '字元会',
 '字元會' => '字元会',
+'字元会' => '字元会',
 '字元濟' => '字元济',
 '字元济' => '字元济',
 '字型大小' => '字号',
@@ -18901,18 +18900,18 @@ $zh2CN = array(
 '欄位' => '字段',
 '字母' => '字母',
 '字元' => '字符',
-'字節' => '字节',
 '位元組' => '字节',
+'字節' => '字节',
 '存檔' => '存盘',
 '安地卡及巴布達' => '安提瓜和巴布达',
 '巨集' => '宏',
 '寬頻' => '宽带',
 '定址' => '寻址',
-'奈及利亞' => '尼日利亚',
 '尼日利亞' => '尼日利亚',
 '尼日利亚' => '尼日利亚',
-'å°¼æ\97¥ç\88¾' => 'å°¼æ\97¥å°\94',
+'å¥\88å\8f\8aå\88©äº\9e' => 'å°¼æ\97¥å\88©äº\9a',
 '尼日尔' => '尼日尔',
+'尼日爾' => '尼日尔',
 '章節附註' => '尾注',
 '區域網' => '局域网',
 '巴貝多' => '巴巴多斯',
@@ -18926,8 +18925,8 @@ $zh2CN = array(
 '蒲隆地' => '布隆迪',
 '希特拉' => '希特勒',
 '帛琉' => '帕劳',
-'平治之乱' => '平治之乱',
 '平治之亂' => '平治之乱',
+'平治之乱' => '平治之乱',
 '非同步' => '异步',
 '迴圈' => '循环',
 '快閃記憶體' => '快闪存储器',
@@ -18938,8 +18937,8 @@ $zh2CN = array(
 '索羅門群島' => '所罗门群岛',
 '打印' => '打印',
 '列印' => '打印',
-'印表機' => '打印机',
 '打印機' => '打印机',
+'印表機' => '打印机',
 '射門' => '打门',
 '掃瞄器' => '扫瞄仪',
 '括弧' => '括号',
@@ -18953,12 +18952,12 @@ $zh2CN = array(
 '斯洛維尼亞' => '斯洛文尼亚',
 '紐西蘭' => '新西兰',
 '即食麵' => '方便面',
+'速食麵' => '方便面',
 '快速面' => '方便面',
 '泡麵' => '方便面',
-'速食麵' => '方便面',
 '伺服器' => '服务器',
-'機械人' => '机器人',
 '機器人' => '机器人',
+'機械人' => '机器人',
 '許可權' => '权限',
 '寶獅' => '标志',
 '格瑞那達' => '格林纳达',
@@ -18987,16 +18986,16 @@ $zh2CN = array(
 '狗隻' => '犬只',
 '卡佩雅蒂' => '珍妮弗·卡普里亚蒂',
 '諾魯' => '瑙鲁',
-'萬那杜' => '瓦努阿图',
 '溫納圖' => '瓦努阿图',
+'萬那杜' => '瓦努阿图',
 '碟片' => '盘片',
-'短訊' => '短信',
 '簡訊' => '短信',
-'ç\9f½å°\98' => 'ç\9f½å°\98',
+'ç\9f­è¨\8a' => 'ç\9f­ä¿¡',
 '矽塵' => '矽尘',
+'矽尘' => '矽尘',
 '矽肺' => '矽肺',
-'矽钢' => '矽钢',
 '矽鋼' => '矽钢',
+'矽钢' => '矽钢',
 '矽' => '硅',
 '矽片' => '硅片',
 '矽谷' => '硅谷',
@@ -19006,8 +19005,8 @@ $zh2CN = array(
 '磁軌' => '磁道',
 '葛摩' => '科摩罗',
 '象牙海岸' => '科特迪瓦',
-'行動電話' => '移动电话',
 '流動電話' => '移动电话',
+'行動電話' => '移动电话',
 '程式控制' => '程控',
 '突尼西亞' => '突尼斯',
 '谐星' => '笑星',
@@ -19019,11 +19018,11 @@ $zh2CN = array(
 '網路' => '网络',
 '網絡' => '网络',
 '寮國' => '老挝',
-'肯雅' => '肯尼亚',
 '肯亞' => '肯尼亚',
+'肯雅' => '肯尼亚',
 '單車' => '自行车',
-'太空梭' => '航天飞机',
 '穿梭機' => '航天飞机',
+'太空梭' => '航天飞机',
 '節慶' => '节日',
 '晶元' => '芯片',
 '晶片' => '芯片',
@@ -19039,8 +19038,8 @@ $zh2CN = array(
 '尚比亞' => '赞比亚',
 '绑紧跳' => '蹦极跳',
 '笨豬跳' => '蹦极跳',
-'軟體' => '软件',
 '軟件' => '软件',
+'軟體' => '软件',
 '軟碟機' => '软驱',
 '米高奧雲' => '迈克尔·欧文',
 '舒麥加' => '迈克尔·舒马赫',
@@ -19070,15 +19069,15 @@ $zh2SG = array(
 '民乐' => '华乐',
 '夜校' => '夜学',
 '房价' => '屋价',
-'即食麵' => '快速面',
-'速食麵' => '快速面',
 '泡麵' => '快速面',
+'速食麵' => '快速面',
 '方便面' => '快速面',
-'零钱' => '散钱',
+'即食麵' => '快速面',
 '散紙' => '散钱',
+'零钱' => '散钱',
 '榴莲' => '榴梿',
 '榴蓮' => '榴梿',
-'笨豬跳' => '绑紧跳',
 '蹦极跳' => '绑紧跳',
+'笨豬跳' => '绑紧跳',
 '笑星' => '谐星',
 );
index e707eb4..764e609 100644 (file)
@@ -156,6 +156,13 @@ class ApiFormatXml extends ApiFormatBase {
                                } elseif ( is_array( $subElemValue ) ) {
                                        $subElements[$subElemId] = $subElemValue;
                                        unset( $elemValue[$subElemId] );
+                               } elseif ( is_bool( $subElemValue ) ) {
+                                       // treat true as empty string, skip false in xml format
+                                       if ( $subElemValue === true ) {
+                                               $subElemValue = '';
+                                       } else {
+                                               unset( $elemValue[$subElemId] );
+                                       }
                                }
                        }
 
index bd5c512..65cb16d 100644 (file)
@@ -147,7 +147,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                if ( !$difftoRev ) {
                                        $this->dieUsageMsg( array( 'nosuchrevid', $params['diffto'] ) );
                                }
-                               if ( !$diffToRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
+                               if ( !$difftoRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
                                        $this->setWarning( "Couldn't diff to r{$difftoRev->getID()}: content is hidden" );
                                        $params['diffto'] = null;
                                }
index a81a520..07561ca 100644 (file)
@@ -124,7 +124,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['mainpage'] = $mainPage->getPrefixedText();
                $data['base'] = wfExpandUrl( $mainPage->getFullURL(), PROTO_CURRENT );
                $data['sitename'] = $GLOBALS['wgSitename'];
-               $data['logo'] = $GLOBALS['wgLogo'];
+
+               // wgLogo can either be a relative or an absolute path
+               // make sure we always return an absolute path
+               $data['logo'] = wfExpandUrl( $GLOBALS['wgLogo'], PROTO_RELATIVE );
+
                $data['generator'] = "MediaWiki {$GLOBALS['wgVersion']}";
                $data['phpversion'] = phpversion();
                $data['phpsapi'] = PHP_SAPI;
@@ -250,7 +254,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                if ( !empty( $GLOBALS['wgFavicon'] ) ) {
-                       $data['favicon'] = $GLOBALS['wgFavicon'];
+                       // wgFavicon can either be a relative or an absolute path
+                       // make sure we always return an absolute path
+                       $data['favicon'] = wfExpandUrl( $GLOBALS['wgFavicon'], PROTO_RELATIVE );
                }
 
                wfRunHooks( 'APIQuerySiteInfoGeneralInfo', array( $this, &$data ) );
index 7d0fe34..c622afe 100644 (file)
@@ -203,7 +203,7 @@ class LoadBalancer {
                        return $this->mReadIndex;
                }
 
-               wfProfileIn( __METHOD__ );
+               $section = new ProfileSection( __METHOD__ );
 
                # Find the relevant load array
                if ( $group !== false ) {
@@ -212,7 +212,6 @@ class LoadBalancer {
                        } else {
                                # No loads for this group, return false and the caller can use some other group
                                wfDebug( __METHOD__ . ": no loads for group $group\n" );
-                               wfProfileOut( __METHOD__ );
 
                                return false;
                        }
@@ -221,7 +220,6 @@ class LoadBalancer {
                }
 
                if ( !count( $nonErrorLoads ) ) {
-                       wfProfileOut( __METHOD__ );
                        throw new MWException( "Empty server array given to LoadBalancer" );
                }
 
@@ -255,7 +253,6 @@ class LoadBalancer {
                                # This is permanent and means the configuration or the load monitor
                                # wants us to return false.
                                wfDebugLog( 'connect', __METHOD__ . ": pickRandom() returned false\n" );
-                               wfProfileOut( __METHOD__ );
 
                                return false;
                        }
@@ -294,11 +291,10 @@ class LoadBalancer {
                                        $this->mServers[$i]['slave pos'] = $conn->getSlavePos();
                                }
                        }
-                       if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $i !== false ) {
+                       if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group !== false ) {
                                $this->mReadIndex = $i;
                        }
                }
-               wfProfileOut( __METHOD__ );
 
                return $i;
        }
index 8c3b671..01555ff 100644 (file)
@@ -869,8 +869,10 @@ class LinksUpdate extends SqlDataUpdate {
         */
        protected function updateLinksTimestamp() {
                if ( $this->mId ) {
+                       // The link updates made here only reflect the freshness of the parser output
+                       $timestamp = $this->mParserOutput->getCacheTime();
                        $this->mDb->update( 'page',
-                               array( 'page_links_updated' => $this->mDb->timestamp() ),
+                               array( 'page_links_updated' => $this->mDb->timestamp( $timestamp ) ),
                                array( 'page_id' => $this->mId ),
                                __METHOD__
                        );
index 8cfae33..47135a3 100644 (file)
@@ -963,7 +963,11 @@ class DifferenceEngine extends ContextSource {
                $nEdits = $this->mNewPage->countRevisionsBetween( $oldRev, $newRev );
                if ( $nEdits > 0 ) {
                        $limit = 100; // use diff-multi-manyusers if too many users
-                       $numUsers = $this->mNewPage->countAuthorsBetween( $oldRev, $newRev, $limit );
+                       $users = $this->mNewPage->getAuthorsBetween( $oldRev, $newRev, $limit );
+                       $numUsers = count( $users );
+                       if( $numUsers == 1 && $users[0] == $newRev->getRawUserText() ) {
+                               $numUsers = 0; // special case to say "by the same user" instead of "by one other user"
+                       }
 
                        return self::intermediateEditsMsg( $nEdits, $numUsers, $limit );
                }
@@ -979,11 +983,13 @@ class DifferenceEngine extends ContextSource {
         * @return string
         */
        public static function intermediateEditsMsg( $numEdits, $numUsers, $limit ) {
-               if ( $numUsers > $limit ) {
+               if ( $numUsers === 0 ) {
+                       $msg = 'diff-multi-sameuser';
+               } elseif ( $numUsers > $limit ) {
                        $msg = 'diff-multi-manyusers';
                        $numUsers = $limit;
                } else {
-                       $msg = 'diff-multi';
+                       $msg = 'diff-multi-otherusers';
                }
 
                return wfMessage( $msg )->numParams( $numEdits, $numUsers )->parse();
index 8906834..8ae53de 100644 (file)
@@ -485,6 +485,10 @@ class ForeignAPIRepo extends FileRepo {
 
                        $info['articlepath'] = $general['articlepath'];
                        $info['server'] = $general['server'];
+
+                       if ( isset( $general['favicon'] ) ) {
+                               $info['favicon'] = $general['favicon'];
+                       }
                }
 
                return $info;
index 0aea070..1e8da45 100644 (file)
@@ -812,7 +812,8 @@ class HTMLForm extends ContextSource {
                        if ( $this->isVForm() ) {
                                // mw-ui-block is necessary because the buttons aren't necessarily in an
                                // immediate child div of the vform.
-                               array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-big', 'mw-ui-primary', 'mw-ui-block' );
+                               // TODO Let client specify if the primary submit button is progressive or destructive
+                               array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-big', 'mw-ui-constructive', 'mw-ui-block' );
                        }
 
                        $html .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
index 8b15f0c..79a42ba 100644 (file)
@@ -505,8 +505,7 @@ abstract class Installer {
        }
 
        /**
-        * Determine if LocalSettings.php exists. If it does, return its variables,
-        * merged with those from AdminSettings.php, as an array.
+        * Determine if LocalSettings.php exists. If it does, return its variables.
         *
         * @return Array
         */
@@ -524,9 +523,6 @@ abstract class Installer {
 
                require "$IP/includes/DefaultSettings.php";
                require "$IP/LocalSettings.php";
-               if ( file_exists( "$IP/AdminSettings.php" ) ) {
-                       require "$IP/AdminSettings.php";
-               }
 
                return get_defined_vars();
        }
index d4b3d65..67236e5 100644 (file)
@@ -380,7 +380,7 @@ class WebInstaller_ExistingWiki extends WebInstallerPage {
 
        /**
         * Initiate an upgrade of the existing database
-        * @param array $vars Variables from LocalSettings.php and AdminSettings.php
+        * @param array $vars Variables from LocalSettings.php
         * @return Status
         */
        protected function handleExistingUpgrade( $vars ) {
index 5bfee0b..e074e5c 100644 (file)
@@ -92,7 +92,7 @@ class JobSpecification implements IJobSpecification {
        protected $title;
 
        /** @var bool Expensive jobs may set this to true */
-       protected $removeDuplicates;
+       protected $ignoreDuplicates;
 
        /**
         * @param string $type
@@ -108,7 +108,7 @@ class JobSpecification implements IJobSpecification {
                $this->type = $type;
                $this->params = $params;
                $this->title = $title ?: Title::newMainPage();
-               $this->removeDuplicates = !empty( $opts['removeDuplicates'] );
+               $this->ignoreDuplicates = !empty( $opts['removeDuplicates'] );
        }
 
        /**
@@ -158,7 +158,7 @@ class JobSpecification implements IJobSpecification {
         * @return bool Whether only one of each identical set of jobs should be run
         */
        public function ignoreDuplicates() {
-               return $this->removeDuplicates;
+               return $this->ignoreDuplicates;
        }
 
        /**
index 318448a..3b79684 100644 (file)
@@ -223,8 +223,6 @@ class CSSMin {
                                return $ruleWithRemapped;
                        }
                }, $source );
-
-               return $source;
        }
 
        /**
index 3966b9e..67b1c66 100644 (file)
@@ -209,7 +209,12 @@ class CoreParserFunctions {
        }
 
        static function localurle( $parser, $s = '', $arg = null ) {
-               return htmlspecialchars( self::urlFunction( 'getLocalURL', $s, $arg ) );
+               $temp = self::urlFunction( 'getLocalURL', $s, $arg );
+               if( !is_string( $temp ) ) {
+                       return $temp;
+               } else {
+                       return htmlspecialchars( $temp );
+               }
        }
 
        static function fullurl( $parser, $s = '', $arg = null ) {
@@ -217,7 +222,12 @@ class CoreParserFunctions {
        }
 
        static function fullurle( $parser, $s = '', $arg = null ) {
-               return htmlspecialchars( self::urlFunction( 'getFullURL', $s, $arg ) );
+               $temp = self::urlFunction( 'getFullURL', $s, $arg );
+               if( !is_string( $temp ) ) {
+                       return $temp;
+               } else {
+                       return htmlspecialchars( $temp );
+               }
        }
 
        static function canonicalurl( $parser, $s = '', $arg = null ) {
index 2b149cd..4155635 100644 (file)
@@ -65,16 +65,6 @@ class SearchEngine {
                return null;
        }
 
-       /**
-        * If this search backend can list/unlist redirects
-        * @deprecated since 1.18 Call supports( 'list-redirects' );
-        * @return bool
-        */
-       function acceptListRedirects() {
-               wfDeprecated( __METHOD__, '1.18' );
-               return $this->supports( 'list-redirects' );
-       }
-
        /**
         * @since 1.18
         * @param $feature String
index c088adb..4e2556c 100644 (file)
@@ -192,7 +192,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
 
        /**
         * Return an array of conditions depending of options set in $opts
-        * @todo Whyyyy is this mutating $opts…
         *
         * @param FormOptions $opts
         * @return array
@@ -202,15 +201,15 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $user = $this->getUser();
                $conds = array();
 
-               // It makes no sense to hide both anons and logged-in users
-               // Where this occurs, force anons to be shown
-               $botsOnly = false;
+               // It makes no sense to hide both anons and logged-in users. When this occurs, try a guess on
+               // what the user meant and either show only bots or force anons to be shown.
+               $botsonly = false;
+               $hideanons = $opts['hideanons'];
                if ( $opts['hideanons'] && $opts['hideliu'] ) {
-                       // Check if the user wants to show bots only
                        if ( $opts['hidebots'] ) {
-                               $opts['hideanons'] = false;
+                               $hideanons = false;
                        } else {
-                               $botsOnly = true;
+                               $botsonly = true;
                        }
                }
 
@@ -224,13 +223,13 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                if ( $user->useRCPatrol() && $opts['hidepatrolled'] ) {
                        $conds['rc_patrolled'] = 0;
                }
-               if ( $botsOnly ) {
+               if ( $botsonly ) {
                        $conds['rc_bot'] = 1;
                } else {
                        if ( $opts['hideliu'] ) {
                                $conds[] = 'rc_user = 0';
                        }
-                       if ( $opts['hideanons'] ) {
+                       if ( $hideanons ) {
                                $conds[] = 'rc_user != 0';
                        }
                }
@@ -269,13 +268,44 @@ abstract class ChangesListSpecialPage extends SpecialPage {
 
        /**
         * Process the query
-        * @todo This should build some basic processing here…
         *
         * @param array $conds
         * @param FormOptions $opts
-        * @return bool|ResultWrapper Result or false (for Recentchangeslinked only)
+        * @return bool|ResultWrapper Result or false
         */
-       abstract public function doMainQuery( $conds, $opts );
+       public function doMainQuery( $conds, $opts ) {
+               $tables = array( 'recentchanges' );
+               $fields = RecentChange::selectFields();
+               $query_options = array();
+               $join_conds = array();
+
+               ChangeTags::modifyDisplayQuery(
+                       $tables,
+                       $fields,
+                       $conds,
+                       $join_conds,
+                       $query_options,
+                       ''
+               );
+
+               // @todo Fire a Special{$this->getName()}Query hook here
+               // @todo Uncomment and document
+               // if ( !wfRunHooks( 'ChangesListSpecialPageQuery',
+               //      array( &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts ) )
+               // ) {
+               //      return false;
+               // }
+
+               $dbr = $this->getDB();
+               return $dbr->select(
+                       $tables,
+                       $fields,
+                       $conds,
+                       __METHOD__,
+                       $query_options,
+                       $join_conds
+               );
+       }
 
        /**
         * Return a DatabaseBase object for reading
@@ -288,16 +318,36 @@ abstract class ChangesListSpecialPage extends SpecialPage {
 
        /**
         * Send output to the OutputPage object, only called if not used feeds
-        * @todo This should do most, if not all, of the outputting now done by subclasses
         *
         * @param ResultWrapper $rows Database rows
         * @param FormOptions $opts
         */
-       abstract public function webOutput( $rows, $opts );
+       public function webOutput( $rows, $opts ) {
+               if ( !$this->including() ) {
+                       $this->outputFeedLinks();
+                       $this->doHeader( $opts );
+               }
+
+               $this->outputChangesList( $rows, $opts );
+       }
+
+       /**
+        * Output feed links.
+        */
+       public function outputFeedLinks() {
+               // nothing by default
+       }
+
+       /**
+        * Build and output the actual changes list.
+        *
+        * @param array $rows Database rows
+        * @param FormOptions $opts
+        */
+       abstract public function outputChangesList( $rows, $opts );
 
        /**
         * Return the text to be displayed above the changes
-        * @todo Not called by anything, should be called by webOutput()
         *
         * @param FormOptions $opts
         * @return string XHTML
index d2ee0df..57f23d3 100644 (file)
@@ -729,8 +729,17 @@ class SpecialBlock extends FormSpecialPage {
                                        return array( 'cant-see-hidden-user' );
                                }
 
-                               $currentBlock->delete();
-                               $status = $block->insert();
+                               $currentBlock->isHardblock( $block->isHardblock() );
+                               $currentBlock->prevents( 'createaccount', $block->prevents( 'createaccount' ) );
+                               $currentBlock->mExpiry = $block->mExpiry;
+                               $currentBlock->isAutoblocking( $block->isAutoblocking() );
+                               $currentBlock->mHideName = $block->mHideName;
+                               $currentBlock->prevents( 'sendemail', $block->prevents( 'sendemail' ) );
+                               $currentBlock->prevents( 'editownusertalk', $block->prevents( 'editownusertalk' ) );
+                               $currentBlock->mReason = $block->mReason;
+
+                               $status = $currentBlock->update();
+
                                $logaction = 'reblock';
 
                                # Unset _deleted fields if requested
index 08768b6..c594807 100644 (file)
@@ -132,34 +132,37 @@ class SpecialContributions extends IncludableSpecialPage {
                }
 
                $feedType = $request->getVal( 'feed' );
+
+               $feedParams = array(
+                       'action' => 'feedcontributions',
+                       'user' => $target,
+               );
+               if ( $this->opts['topOnly'] ) {
+                       $feedParams['toponly'] = true;
+               }
+               if ( $this->opts['deletedOnly'] ) {
+                       $feedParams['deletedonly'] = true;
+               }
+               if ( $this->opts['tagfilter'] !== '' ) {
+                       $feedParams['tagfilter'] = $this->opts['tagfilter'];
+               }
+               if ( $this->opts['namespace'] !== '' ) {
+                       $feedParams['namespace'] = $this->opts['namespace'];
+               }
+               // Don't use year and month for the feed URL, but pass them on if
+               // we redirect to API (if $feedType is specified)
+               if ( $feedType && $this->opts['year'] !== null ) {
+                       $feedParams['year'] = $this->opts['year'];
+               }
+               if ( $feedType && $this->opts['month'] !== null ) {
+                       $feedParams['month'] = $this->opts['month'];
+               }
+
                if ( $feedType ) {
                        // Maintain some level of backwards compatability
                        // If people request feeds using the old parameters, redirect to API
-                       $apiParams = array(
-                               'action' => 'feedcontributions',
-                               'feedformat' => $feedType,
-                               'user' => $target,
-                       );
-                       if ( $this->opts['topOnly'] ) {
-                               $apiParams['toponly'] = true;
-                       }
-                       if ( $this->opts['deletedOnly'] ) {
-                               $apiParams['deletedonly'] = true;
-                       }
-                       if ( $this->opts['tagfilter'] !== '' ) {
-                               $apiParams['tagfilter'] = $this->opts['tagfilter'];
-                       }
-                       if ( $this->opts['namespace'] !== '' ) {
-                               $apiParams['namespace'] = $this->opts['namespace'];
-                       }
-                       if ( $this->opts['year'] !== null ) {
-                               $apiParams['year'] = $this->opts['year'];
-                       }
-                       if ( $this->opts['month'] !== null ) {
-                               $apiParams['month'] = $this->opts['month'];
-                       }
-
-                       $url = wfAppendQuery( wfScript( 'api' ), $apiParams );
+                       $feedParams['feedformat'] = $feedType;
+                       $url = wfAppendQuery( wfScript( 'api' ), $feedParams );
 
                        $out->redirect( $url, '301' );
 
@@ -167,7 +170,7 @@ class SpecialContributions extends IncludableSpecialPage {
                }
 
                // Add RSS/atom links
-               $this->addFeedLinks( array( 'action' => 'feedcontributions', 'user' => $target ) );
+               $this->addFeedLinks( $feedParams );
 
                if ( wfRunHooks( 'SpecialContributionsBeforeMainOutput', array( $id, $userObj, $this ) ) ) {
                        if ( !$this->including() ) {
@@ -605,6 +608,9 @@ class ContribsPager extends ReverseChronologicalPager {
        public $mDb;
        public $preventClickjacking = false;
 
+       /** @var DatabaseBase */
+       public $mDbSecondary;
+
        /**
         * @var array
         */
@@ -641,6 +647,10 @@ class ContribsPager extends ReverseChronologicalPager {
                $month = isset( $options['month'] ) ? $options['month'] : false;
                $this->getDateCond( $year, $month );
 
+               // Most of this code will use the 'contributions' group DB, which can map to slaves
+               // with extra user based indexes or partioning by user. The additional metadata
+               // queries should use a regular slave since the lookup pattern is not all by user.
+               $this->mDbSecondary = wfGetDB( DB_SLAVE ); // any random slave
                $this->mDb = wfGetDB( DB_SLAVE, 'contributions' );
        }
 
@@ -860,7 +870,7 @@ class ContribsPager extends ReverseChronologicalPager {
                                $batch->add( $row->page_namespace, $row->page_title );
                        }
                }
-               $this->mParentLens = Revision::getParentLengths( $this->getDatabase(), $revIds );
+               $this->mParentLens = Revision::getParentLengths( $this->mDbSecondary, $revIds );
                $batch->execute();
                $this->mResult->seek( 0 );
        }
index c6307f0..4548b63 100644 (file)
@@ -264,6 +264,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                                        'from' => $s->page_title,
                                        'prefix' => $prefix,
                                        'hideredirects' => $this->hideRedirects,
+                                       'stripprefix' => $this->stripPrefix,
                                );
 
                                if ( $namespace || $prefix == '' ) {
index fdf8dcb..7352de7 100644 (file)
@@ -144,11 +144,11 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        public function validateOptions( FormOptions $opts ) {
                global $wgFeedLimit;
                $opts->validateIntBounds( 'limit', 0, $this->feedFormat ? $wgFeedLimit : 5000 );
+               parent::validateOptions( $opts );
        }
 
        /**
         * Return an array of conditions depending of options set in $opts
-        * @todo Whyyyy is this mutating $opts…
         *
         * @param FormOptions $opts
         * @return array
@@ -182,35 +182,34 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
         * @return bool|ResultWrapper Result or false (for Recentchangeslinked only)
         */
        public function doMainQuery( $conds, $opts ) {
-               $tables = array( 'recentchanges' );
-               $join_conds = array();
-               $query_options = array();
+               global $wgAllowCategorizedRecentChanges;
 
-               $uid = $this->getUser()->getId();
                $dbr = $this->getDB();
-               $limit = $opts['limit'];
-               $namespace = $opts['namespace'];
-               $invert = $opts['invert'];
-               $associated = $opts['associated'];
+               $user = $this->getUser();
 
+               $tables = array( 'recentchanges' );
                $fields = RecentChange::selectFields();
+               $query_options = array();
+               $join_conds = array();
+
                // JOIN on watchlist for users
-               if ( $uid && $this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
+               if ( $user->getId() && $user->isAllowed( 'viewmywatchlist' ) ) {
                        $tables[] = 'watchlist';
                        $fields[] = 'wl_user';
                        $fields[] = 'wl_notificationtimestamp';
                        $join_conds['watchlist'] = array( 'LEFT JOIN', array(
-                               'wl_user' => $uid,
+                               'wl_user' => $user->getId(),
                                'wl_title=rc_title',
                                'wl_namespace=rc_namespace'
                        ) );
                }
-               if ( $this->getUser()->isAllowed( 'rollback' ) ) {
+
+               if ( $user->isAllowed( 'rollback' ) ) {
                        $tables[] = 'page';
                        $fields[] = 'page_latest';
                        $join_conds['page'] = array( 'LEFT JOIN', 'rc_cur_id=page_id' );
                }
-               // Tag stuff.
+
                ChangeTags::modifyDisplayQuery(
                        $tables,
                        $fields,
@@ -228,30 +227,43 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                // rc_new is not an ENUM, but adding a redundant rc_new IN (0,1) gives mysql enough
                // knowledge to use an index merge if it wants (it may use some other index though).
-               return $dbr->select(
+               $rows = $dbr->select(
                        $tables,
                        $fields,
                        $conds + array( 'rc_new' => array( 0, 1 ) ),
                        __METHOD__,
-                       array( 'ORDER BY' => 'rc_timestamp DESC', 'LIMIT' => $limit ) + $query_options,
+                       array( 'ORDER BY' => 'rc_timestamp DESC', 'LIMIT' => $opts['limit'] ) + $query_options,
                        $join_conds
                );
+
+               // Build the final data
+               if ( $wgAllowCategorizedRecentChanges ) {
+                       $this->filterByCategories( $rows, $opts );
+               }
+
+               return $rows;
+       }
+
+       /**
+        * Output feed links.
+        */
+       public function outputFeedLinks() {
+               $feedQuery = $this->getFeedQuery();
+               if ( $feedQuery !== '' ) {
+                       $this->getOutput()->setFeedAppendQuery( $feedQuery );
+               } else {
+                       $this->getOutput()->setFeedAppendQuery( false );
+               }
        }
 
        /**
-        * Send output to the OutputPage object, only called if not used feeds
+        * Build and output the actual changes list.
         *
         * @param array $rows Database rows
         * @param FormOptions $opts
         */
-       public function webOutput( $rows, $opts ) {
-               global $wgRCShowWatchingUsers, $wgShowUpdatedMarker, $wgAllowCategorizedRecentChanges;
-
-               // Build the final data
-
-               if ( $wgAllowCategorizedRecentChanges ) {
-                       $this->filterByCategories( $rows, $opts );
-               }
+       public function outputChangesList( $rows, $opts ) {
+               global $wgRCShowWatchingUsers, $wgShowUpdatedMarker;
 
                $limit = $opts['limit'];
 
@@ -302,21 +314,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                }
                $rclistOutput .= $list->endRecentChangesList();
 
-               // Print things out
-
-               if ( !$this->including() ) {
-                       // Output options box
-                       $this->doHeader( $opts );
-               }
-
-               // And now for the content
-               $feedQuery = $this->getFeedQuery();
-               if ( $feedQuery !== '' ) {
-                       $this->getOutput()->setFeedAppendQuery( $feedQuery );
-               } else {
-                       $this->getOutput()->setFeedAppendQuery( false );
-               }
-
                if ( $rows->numRows() === 0 ) {
                        $this->getOutput()->addHtml(
                                '<div class="mw-changeslist-empty">' . $this->msg( 'recentchanges-noresult' )->parse() . '</div>'
index 18e777a..9e5143f 100644 (file)
@@ -1109,7 +1109,7 @@ class SpecialSearch extends SpecialPage {
                $out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
                $out .= Xml::submitButton(
                        $this->msg( 'searchbutton' )->text(),
-                       array( 'class' => array( 'mw-ui-button', 'mw-ui-primary' ) )
+                       array( 'class' => array( 'mw-ui-button', 'mw-ui-progressive' ) )
                ) . "\n";
                return $out . $this->didYouMeanHtml;
        }
index a98447b..fbdaec4 100644 (file)
@@ -178,6 +178,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                $dbr = $this->getDB();
                $user = $this->getUser();
+
                # Toggle watchlist content (all recent edits or just the latest)
                if ( $opts['extended'] ) {
                        $limitWatchlist = $user->getIntOption( 'wllimit' );
@@ -201,6 +202,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                $tables = array( 'recentchanges', 'watchlist' );
                $fields = RecentChange::selectFields();
+               $query_options = array( 'ORDER BY' => 'rc_timestamp DESC' );
                $join_conds = array(
                        'watchlist' => array(
                                'INNER JOIN',
@@ -211,12 +213,12 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                ),
                        ),
                );
-               $options = array( 'ORDER BY' => 'rc_timestamp DESC' );
+
                if ( $wgShowUpdatedMarker ) {
                        $fields[] = 'wl_notificationtimestamp';
                }
                if ( $limitWatchlist ) {
-                       $options['LIMIT'] = $limitWatchlist;
+                       $query_options['LIMIT'] = $limitWatchlist;
                }
 
                $rollbacker = $user->isAllowed( 'rollback' );
@@ -245,10 +247,26 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                }
 
 
-               ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' );
-               wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields, $opts ) );
+               ChangeTags::modifyDisplayQuery(
+                       $tables,
+                       $fields,
+                       $conds,
+                       $join_conds,
+                       $query_options,
+                       ''
+               );
+
+               wfRunHooks( 'SpecialWatchlistQuery',
+                       array( &$conds, &$tables, &$join_conds, &$fields, $opts ) );
 
-               return $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $join_conds );
+               return $dbr->select(
+                       $tables,
+                       $fields,
+                       $conds,
+                       __METHOD__,
+                       $query_options,
+                       $join_conds
+               );
        }
 
        /**
@@ -261,16 +279,39 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * Send output to the OutputPage object, only called if not used feeds
+        * Output feed links.
+        */
+       public function outputFeedLinks() {
+               $user = $this->getUser();
+               $wlToken = $user->getTokenFromOption( 'watchlisttoken' );
+               if ( $wlToken ) {
+                       $this->addFeedLinks( array(
+                               'action' => 'feedwatchlist',
+                               'allrev' => 1,
+                               'wlowner' => $user->getName(),
+                               'wltoken' => $wlToken,
+                       ) );
+               }
+       }
+
+       /**
+        * Build and output the actual changes list.
         *
         * @param ResultWrapper $rows Database rows
         * @param FormOptions $opts
         */
-       public function webOutput( $rows, $opts ) {
+       public function outputChangesList( $rows, $opts ) {
                global $wgShowUpdatedMarker, $wgRCShowWatchingUsers;
 
                $dbr = $this->getDB();
                $user = $this->getUser();
+               $output = $this->getOutput();
+
+               # Show a message about slave lag, if applicable
+               $lag = wfGetLB()->safeGetLag( $dbr );
+               if ( $lag > 0 ) {
+                       $output->showLagWarning( $lag );
+               }
 
                $dbr->dataSeek( $rows, 0 );
 
@@ -309,35 +350,6 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                }
                $s .= $list->endRecentChangesList();
 
-               // Print things out
-
-               $output = $this->getOutput();
-
-               $output->addSubtitle(
-                       $this->msg( 'watchlistfor2', $user->getName() )
-                               ->rawParams( SpecialEditWatchlist::buildTools( null ) )
-               );
-
-               // Output options box
-               $this->doHeader( $opts );
-
-               // Add feed links
-               $wlToken = $user->getTokenFromOption( 'watchlisttoken' );
-               if ( $wlToken ) {
-                       $this->addFeedLinks( array(
-                               'action' => 'feedwatchlist',
-                               'allrev' => 1,
-                               'wlowner' => $user->getName(),
-                               'wltoken' => $wlToken,
-                       ) );
-               }
-
-               # Show a message about slave lag, if applicable
-               $lag = wfGetLB()->safeGetLag( $dbr );
-               if ( $lag > 0 ) {
-                       $output->showLagWarning( $lag );
-               }
-
                if ( $rows->numRows() == 0 ) {
                        $output->wrapWikiMsg(
                                "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
@@ -356,6 +368,11 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        public function doHeader( $opts ) {
                $user = $this->getUser();
 
+               $this->getOutput()->addSubtitle(
+                       $this->msg( 'watchlistfor2', $user->getName() )
+                               ->rawParams( SpecialEditWatchlist::buildTools( null ) )
+               );
+
                $this->setTopText( $opts );
 
                $lang = $this->getLanguage();
index 12210d0..0cb83d5 100644 (file)
@@ -254,7 +254,7 @@ class UsercreateTemplate extends BaseTemplate {
                                        $this->getMsg( $this->data['loggedin'] ? 'createacct-another-submit' : 'createacct-submit' ),
                                        'submit',
                                        array(
-                                               'class' => "mw-ui-button mw-ui-big mw-ui-block mw-ui-primary",
+                                               'class' => "mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive",
                                                'id' => 'wpCreateaccount',
                                                'tabindex' => $tabIndex++
                                        )
index 38e071c..e5d8a1c 100644 (file)
@@ -149,7 +149,7 @@ class UserloginTemplate extends BaseTemplate {
                                echo Html::input( 'wpLoginAttempt', $this->getMsg( 'login' )->text(), 'submit', array(
                                        'id' => 'wpLoginAttempt',
                                        'tabindex' => '6',
-                                       'class' => 'mw-ui-button mw-ui-big mw-ui-block mw-ui-primary'
+                                       'class' => 'mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive'
                                ) );
                                ?>
                        </div>
@@ -164,7 +164,7 @@ class UserloginTemplate extends BaseTemplate {
                                        </div>
                                <?php } else { ?>
                                        <div id="mw-createaccount-cta">
-                                               <h3 id="mw-userloginlink"><?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-constructive"><?php $this->msg( 'userlogin-joinproject' ); ?></a></h3>
+                                               <h3 id="mw-userloginlink"><?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a></h3>
                                        </div>
                                <?php } ?>
                        <?php } ?>
index 802cdbc..037663c 100644 (file)
@@ -22,6 +22,8 @@
 
 /**
  * A collection of static methods to play with arrays.
+ *
+ * @since 1.21
  */
 class ArrayUtils {
        /**
@@ -94,13 +96,15 @@ class ArrayUtils {
         * Do a binary search, and return the index of the largest item that sorts
         * less than or equal to the target value.
         *
+        * @since 1.23
+        *
         * @param array $valueCallback A function to call to get the value with
         *     a given array index.
-        * @param $valueCount int The number of items accessible via $valueCallback,
+        * @param int $valueCount The number of items accessible via $valueCallback,
         *     indexed from 0 to $valueCount - 1
-        * @param $comparisonCallback array A callback to compare two values, returning
+        * @param array $comparisonCallback A callback to compare two values, returning
         *     -1, 0 or 1 in the style of strcmp().
-        * @param $target string The target value to find.
+        * @param string $target The target value to find.
         *
         * @return int|bool The item index of the lower bound, or false if the target value
         *     sorts before all items.
@@ -142,9 +146,11 @@ class ArrayUtils {
         *
         * Note: empty arrays are removed.
         *
-        * @param $array1 array The array to compare from
-        * @param $array2 array An array to compare against
-        * @param ... array More arrays to compare against
+        * @since 1.23
+        *
+        * @param array $array1 The array to compare from
+        * @param array $array2 An array to compare against
+        * @param array ... More arrays to compare against
         * @return array An array containing all the values from array1
         *               that are not present in any of the other arrays.
         */
index ae76b91..2771f64 100644 (file)
@@ -1803,7 +1803,8 @@ Note that using the navigation links will reset this column.',
 'showhideselectedversions'    => 'Change visibility of selected revisions',
 'editundo'                    => 'undo',
 'diff-empty'                  => '(No difference)',
-'diff-multi'                  => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
+'diff-multi-sameuser'         => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)',
+'diff-multi-otherusers'       => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one other user|$2 users}} not shown)',
 'diff-multi-manyusers'        => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)',
 'difference-missing-revision' => '{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} not found.
 
index 341bcfc..f149d5e 100644 (file)
@@ -2809,12 +2809,20 @@ See also:
 This message has sometimes a tooltip {{msg-mw|tooltip-undo}}
 {{Identical|Undo}}',
 'diff-empty' => 'This message appears instead of a "diff" when comparing two revisions that are identical.',
-'diff-multi' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive.
+'diff-multi-sameuser' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions were all created by the same user as the new revision.
 
 Parameters:
 * $1 - the number of revisions
-* $2 - the number of distinct users who made those revisions
 See also:
+* {{msg-mw|Diff-multi-otherusers}}
+* {{msg-mw|Diff-multi-manyusers}}",
+'diff-multi-otherusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and at least one of the intermediate revisions was created by a user other than the user who created the new revision.
+
+Parameters:
+* $1 - the number of revisions
+* $2 - the number of distinct other users who made those revisions
+See also:
+* {{msg-mw|Diff-multi-sameuser}}
 * {{msg-mw|Diff-multi-manyusers}}",
 'diff-multi-manyusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions have been edited by more than 100 users.
 
@@ -2822,7 +2830,8 @@ Parameters:
 * $1 - the number of revisions, will always be 101 or more
 * $2 - the number of users that were found, which was limited at 100
 See also:
-* {{msg-mw|Diff-multi}}",
+* {{msg-mw|Diff-multi-sameuser}}
+* {{msg-mw|Diff-multi-otherusers}}",
 'difference-missing-revision' => 'Text displayed when the requested revision does not exist using a diff link.
 
 Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]
index dc8626d..297c972 100644 (file)
@@ -153,9 +153,6 @@ class CheckSyntax extends Maintenance {
                if ( file_exists( "$IP/LocalSettings.php" ) ) {
                        $this->mFiles[] = "$IP/LocalSettings.php";
                }
-               if ( file_exists( "$IP/AdminSettings.php" ) ) {
-                       $this->mFiles[] = "$IP/AdminSettings.php";
-               }
 
                $this->output( 'done.', 'listfiles' );
        }
index 3dcf12c..978d44f 100644 (file)
@@ -90,12 +90,6 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
        require $maintenance->loadSettings();
 }
 
-if ( $maintenance->getDbType() === Maintenance::DB_ADMIN
-       && is_readable( "$IP/AdminSettings.php" )
-) {
-       require "$IP/AdminSettings.php";
-}
-
 if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
        if ( $wgLocalisationCacheConf['storeClass'] === false && ( $wgLocalisationCacheConf['store'] == 'db' || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) ) ) {
                $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
index f56e91f..51f2cac 100644 (file)
@@ -55,7 +55,7 @@ if ( isset( $options['d'] ) ) {
 }
 
 $useReadline = function_exists( 'readline_add_history' )
-                       && Maintenance::posix_isatty( 0 /*STDIN*/ );
+       && Maintenance::posix_isatty( 0 /*STDIN*/ );
 
 if ( $useReadline ) {
        $historyFile = isset( $_ENV['HOME'] ) ?
@@ -63,12 +63,27 @@ if ( $useReadline ) {
        readline_read_history( $historyFile );
 }
 
+$e = null; // PHP exception
 while ( ( $line = Maintenance::readconsole() ) !== false ) {
+       if ( $e && !preg_match( '/^(exit|die);?$/', $line ) ) {
+               // Internal state may be corrupted or fatals may occur later due
+               // to some object not being set. Don't drop out of eval in case
+               // lines were being pasted in (which would then get dumped to the shell).
+               // Instead, just absorb the remaning commands. Let "exit" through per DWIM.
+               echo "Exception was thrown before; please restart eval.php\n";
+               continue;
+       }
        if ( $useReadline ) {
                readline_add_history( $line );
                readline_write_history( $historyFile );
        }
-       $val = eval( $line . ";" );
+       try {
+               $val = eval( $line . ";" );
+       } catch ( Exception $e ) {
+               echo "Caught exception " . get_class( $e ) .
+                       ": {$e->getMessage()}\n" . $e->getTraceAsString() . "\n";
+               continue;
+       }
        if ( wfIsHHVM() || is_null( $val ) ) {
                echo "\n";
        } elseif ( is_string( $val ) || is_numeric( $val ) ) {
index 63e2091..fd23ea1 100644 (file)
@@ -942,7 +942,8 @@ $wgMessageStructure = array(
                'showhideselectedversions',
                'editundo',
                'diff-empty',
-               'diff-multi',
+               'diff-multi-sameuser',
+               'diff-multi-otherusers',
                'diff-multi-manyusers',
                'difference-missing-revision',
        ),
index ac09246..f902e58 100755 (executable)
@@ -30,9 +30,9 @@ def unichr3( *args ):
     return [unichr( int( i[2:7], 16 ) ) for i in args if i[2:7]]
 
 # DEFINE
-UNIHAN_VER = '6.2.0'
+UNIHAN_VER = '6.3.0'
 SF_MIRROR = 'dfn'
-SCIM_TABLES_VER = '0.5.11'
+SCIM_TABLES_VER = '0.5.13'
 SCIM_PINYIN_VER = '0.5.92'
 LIBTABE_VER = '0.2.3'
 # END OF DEFINE
@@ -59,7 +59,11 @@ def uncompress( fp, member, encoding = 'U8' ):
     shutil.move( member, name )
     if '/' in member:
         shutil.rmtree( member.split( '/', 1 )[0] )
-    return open( name, 'rb', encoding, 'ignore' )
+    if pyversion[:1] in ['2']:
+        fc = open( name, 'rb', encoding, 'ignore' )
+    else:
+        fc = open( name, 'r', encoding = encoding, errors = 'ignore' )
+    return fc
 
 unzip = lambda path, member, encoding = 'U8': \
         uncompress( zf.ZipFile( path ), member, encoding )
@@ -136,7 +140,10 @@ def unihanParser( path ):
 
 def applyExcludes( mlist, path ):
     """ Apply exclude rules from path to mlist. """
-    excludes = open( path, 'rb', 'U8' ).read().split()
+    if pyversion[:1] in ['2']:
+        excludes = open( path, 'rb', 'U8' ).read().split()
+    else:
+        excludes = open( path, 'r', encoding = 'U8' ).read().split()
     excludes = [word.split( '#' )[0].strip() for word in excludes]
     excludes = '|'.join( excludes )
     excptn = re.compile( '.*(?:%s).*' % excludes )
@@ -145,7 +152,7 @@ def applyExcludes( mlist, path ):
     return mlist
 
 def charManualTable( path ):
-    fp = open( path, 'rb', 'U8' )
+    fp = open( path, 'r', encoding = 'U8' )
     ret = {}
     for line in fp:
         elems = line.split( '#' )[0].split( '|' )
@@ -156,13 +163,18 @@ def charManualTable( path ):
         
 def toManyRules( src_table ):
     tomany = set()
-    for ( f, t ) in src_table.iteritems():
-        for i in range( 1, len( t ) ):
-            tomany.add( t[i] )
+    if pyversion[:1] in ['2']:
+        for ( f, t ) in src_table.iteritems():
+            for i in range( 1, len( t ) ):
+                tomany.add( t[i] )
+    else:
+        for ( f, t ) in src_table.items():
+            for i in range( 1, len( t ) ):
+                tomany.add( t[i] )
     return tomany
 
 def removeRules( path, table ):
-    fp = open( path, 'rb', 'U8' )
+    fp = open( path, 'r', encoding = 'U8' )
     texc = list()
     for line in fp:
         elems = line.split( '=>' )
@@ -179,13 +191,18 @@ def removeRules( path, table ):
         if t:
             texc.append( t )
     texcptn = re.compile( '^(?:%s)$' % '|'.join( texc ) )
-    for (tmp_f, tmp_t) in table.copy().iteritems():
-        if texcptn.match( tmp_t ):
-            table.pop( tmp_f )
+    if pyversion[:1] in ['2']:
+        for (tmp_f, tmp_t) in table.copy().iteritems():
+            if texcptn.match( tmp_t ):
+                table.pop( tmp_f )
+    else:
+        for (tmp_f, tmp_t) in table.copy().items():
+            if texcptn.match( tmp_t ):
+                table.pop( tmp_f )
     return table
 
 def customRules( path ):
-    fp = open( path, 'rb', 'U8' )
+    fp = open( path, 'r', encoding = 'U8' )
     ret = dict()
     for line in fp:
         elems = line.split( '#' )[0].split()
@@ -210,7 +227,7 @@ def translate( text, conv_table ):
     return text
 
 def manualWordsTable( path, conv_table, reconv_table ):
-    fp = open( path, 'rb', 'U8' )
+    fp = open( path, 'r', encoding = 'U8' )
     reconv_table = {}
     wordlist = [line.split( '#' )[0].strip() for line in fp]
     wordlist = list( set( wordlist ) )
@@ -285,8 +302,12 @@ def main():
     t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
     s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
     
-    t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
-    s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
+    if pyversion[:1] in ['2']:
+      t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
+      s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
+    else:
+      t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.items()] )
+      s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.items()] )
     
     s_tomany = toManyRules( t2s_1tomany )
     t_tomany = toManyRules( s2t_1tomany )
@@ -333,10 +354,16 @@ def main():
     
     # Final tables
     # sorted list toHans
-    t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
+    if pyversion[:1] in ['2']:
+        t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
+    else:
+        t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.items() if f != t] )
     toHans = dictToSortedList( t2s_1to1, 0 ) + dictToSortedList( t2s_word2word, 1 )
     # sorted list toHant
-    s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
+    if pyversion[:1] in ['2']:
+        s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
+    else:
+        s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.items() if f != t] )
     toHant = dictToSortedList( s2t_1to1, 0 ) + dictToSortedList( s2t_word2word, 1 )
     # sorted list toCN
     toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
@@ -372,7 +399,10 @@ $zh2Hant = array(\n'''
         +  PHPArray( toSG ) \
         +  '\n);\n'
     
-    f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
+    if pyversion[:1] in ['2']:
+        f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
+    else:
+        f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'w', buffering = 4096, encoding = 'utf8' )
     print ('Writing ZhConversion.php ... ')
     f.write( php )
     f.close()
index 89bb64d..2bab5b3 100644 (file)
@@ -10,7 +10,7 @@
                // Get the original values of some form elements
                $( '#wpTextbox1, #wpSummary' ).each( function () {
                        $( this ).data( 'origtext', $( this ).val() );
-               });
+               } );
                var savedWindowOnBeforeUnload;
                $( window )
                        .on( 'beforeunload.editwarning', function () {
index c7e9bd9..486e993 100644 (file)
@@ -2,7 +2,7 @@
  * Hebrew (עברית) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
+mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'he', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
                return grammarForms[form][word];
index 5d2c271..e21d21b 100644 (file)
        -webkit-transition: @string;
        transition: @string;
 }
+
+@-webkit-keyframes rotate {
+       from {
+               -webkit-transform:rotate(0deg);
+       }
+       to {
+               -webkit-transform:rotate(360deg);
+       }
+}
+
+@keyframes rotate {
+       from {
+               transform: rotate(0deg);
+       }
+       to {
+               transform: rotate(360deg);
+       }
+}
+
+.rotation(@time) {
+       -webkit-animation-name: rotate;
+       -webkit-animation-duration: @time;
+       -webkit-animation-iteration-count: infinite;
+       -webkit-animation-timing-function: linear;
+       animation-name: rotate;
+       animation-duration: @time;
+       animation-iteration-count: infinite;
+       animation-timing-function: linear;
+}
index 7b1d416..b02e8f2 100644 (file)
@@ -96,7 +96,7 @@ div.searchresult {
        margin-left: 0.4em;
 }
 .mw-search-results li {
-       padding-bottom: 1em;
+       padding-bottom: 1.2em;
        list-style: none;
        list-style-image: none;
 }
index 3842064..0078724 100644 (file)
@@ -111,7 +111,7 @@ jQuery( function ( $ ) {
                        keyRight = 39,
                        $el;
 
-               if( event.keyCode === keyLeft ) {
+               if ( event.keyCode === keyLeft ) {
                        $el = $( '#preftoc li.selected' ).prev().find( 'a' );
                } else if ( event.keyCode === keyRight ) {
                        $el = $( '#preftoc li.selected' ).next().find( 'a' );
index d93254b..e76141d 100644 (file)
                                // try to invoke it.
                                console.table.call( console, data );
                                return;
-                       } catch (e) {}
+                       } catch ( e ) {}
                        try {
                                console.log( $.toJSON( data, null, 2 ) );
                                return;
-                       } catch (e) {}
+                       } catch ( e ) {}
                        mw.log( data );
                },
 
 
                                        try {
                                                css = module.style.css.join();
-                                       } catch (e) { return; } // skip
+                                       } catch ( e ) { return; } // skip
 
                                        stats = inspect.auditSelectors( css );
                                        modules.push( {
                                        try {
                                                raw = localStorage.getItem( mw.loader.store.getStoreKey() );
                                                stats.totalSize = humanSize( $.byteLength( raw ) );
-                                       } catch (e) {}
+                                       } catch ( e ) {}
                                }
                                return [stats];
                        }
index 3322ad9..e286d32 100644 (file)
         * the current selector. Bindings to passed-in jquery elements are preserved. Functions become click handlers for [$1 linktext] links.
         * e.g.
         *        $.fn.msg = mediaWiki.parser.getJqueryPlugin( options );
-        *        var userlink = $( '<a>' ).click( function () { alert( "hello!!") } );
+        *        var userlink = $( '<a>' ).click( function () { alert( "hello!!" ) } );
         *        $( 'p#headline' ).msg( 'hello-user', userlink );
         *
         * @param {Array} parser options
index e3aae9e..d282a56 100644 (file)
@@ -1274,7 +1274,7 @@ var mw = ( function ( $, undefined ) {
                                mw.loader.work();
                        }
 
-                       function sortQuery(o) {
+                       function sortQuery( o ) {
                                var sorted = {}, key, a = [];
                                for ( key in o ) {
                                        if ( hasOwn.call( o, key ) ) {
@@ -1903,7 +1903,7 @@ var mw = ( function ( $, undefined ) {
                                                        mw.config.get( 'skin' ),
                                                        mw.config.get( 'wgResourceLoaderStorageVersion' ),
                                                        mw.config.get( 'wgUserLanguage' )
-                                               ].join(':');
+                                               ].join( ':' );
                                        },
 
                                        /**
@@ -1951,7 +1951,7 @@ var mw = ( function ( $, undefined ) {
                                                                mw.loader.store.items = data.items;
                                                                return;
                                                        }
-                                               } catch (e) {}
+                                               } catch ( e ) {}
 
                                                if ( raw === undefined ) {
                                                        // localStorage failed; disable store
@@ -2031,7 +2031,7 @@ var mw = ( function ( $, undefined ) {
                                                        return;
                                                }
 
-                                               mw.loader.store.items[key] = 'mw.loader.implement(' + args.join(',') + ');';
+                                               mw.loader.store.items[key] = 'mw.loader.implement(' + args.join( ',' ) + ');';
                                                mw.loader.store.update();
                                        },
 
index 0713541..50915b6 100644 (file)
@@ -38,7 +38,7 @@
                        $form = context.config.$region.closest( 'form' );
 
                        formAction = $form.attr( 'action' );
-                       baseHref = formAction + ( formAction.match(/\?/) ? '&' : '?' );
+                       baseHref = formAction + ( formAction.match( /\?/ ) ? '&' : '?' );
 
                        linkParams = {};
                        $.each( $form.serializeArray(), function ( idx, obj ) {
                        // Generic selector for skins with multiple searchboxes (used by CologneBlue)
                        '.mw-searchInput'
                ];
-               $( searchboxesSelectors.join(', ') )
+               $( searchboxesSelectors.join( ', ' ) )
                        .suggestions( {
                                fetch: function ( query ) {
                                        var $el;
index 6f93215..6e4a7b3 100644 (file)
        margin-top: -0.8em !ie;
        height: 0;
        overflow: hidden;
-       .background-image('images/watch-icons.png');
+       background-position: 5px 60%;
 }
 #ca-unwatch.icon a {
-       background-position: -43px 60%;
+       .background-image-svg('images/unwatch-icon.svg', 'images/unwatch-icon.png');
 }
 #ca-watch.icon a {
-       background-position: 5px 60%;
+       .background-image-svg('images/watch-icon.svg', 'images/watch-icon.png');
 }
 #ca-unwatch.icon a:hover,
 #ca-unwatch.icon a:focus {
-       background-position: -67px 60%;
+       .background-image-svg('images/unwatch-icon-hl.svg', 'images/unwatch-icon-hl.png');
 }
 #ca-watch.icon a:hover,
 #ca-watch.icon a:focus {
-       background-position: -19px 60%;
+       .background-image-svg('images/watch-icon-hl.svg', 'images/watch-icon-hl.png');
 }
 #ca-unwatch.icon a.loading,
 #ca-watch.icon a.loading {
-       .background-image('images/watch-icon-loading.gif');
-       background-position: 5px 60%;
+       .background-image-svg('images/watch-icon-loading.svg', 'images/watch-icon-loading.png');
+       .rotation(700ms);
+       background-position: 50% 60%;
+       -webkit-transform-origin: 50% 57%;
+       transform-origin: 50% 57%;
 }
 #ca-unwatch.icon a span,
 #ca-watch.icon a span {
diff --git a/skins/vector/images/unwatch-icon-hl.png b/skins/vector/images/unwatch-icon-hl.png
new file mode 100644 (file)
index 0000000..6b2b502
Binary files /dev/null and b/skins/vector/images/unwatch-icon-hl.png differ
diff --git a/skins/vector/images/unwatch-icon-hl.svg b/skins/vector/images/unwatch-icon-hl.svg
new file mode 100644 (file)
index 0000000..346e072
--- /dev/null
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="watch-icon-hl.svg"
+   inkscape:export-filename="/home/m4tx/Pulpit/LOCAL/watch-icon-hl.png"
+   inkscape:export-xdpi="87.436836"
+   inkscape:export-ydpi="87.436836">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3788">
+      <stop
+         style="stop-color:#c2edff;stop-opacity:1;"
+         offset="0"
+         id="stop3790" />
+      <stop
+         id="stop3796"
+         offset="0.5"
+         style="stop-color:#68bdff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3792" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3804"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3808"
+       gradientUnits="userSpaceOnUse"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="-3.451911"
+     inkscape:cy="5.714676"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1041"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Mateusz &quot;m4tx&quot; Maćkowski</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-693.14288,-698.64789)">
+    <path
+       inkscape:transform-center-y="-0.70705002"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
+       d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.9424778"
+       sodipodi:arg1="-1.5707963"
+       sodipodi:r2="4.2936125"
+       sodipodi:r1="8.587225"
+       sodipodi:cy="7.6662416"
+       sodipodi:cx="8.3337584"
+       sodipodi:sides="5"
+       id="path3768"
+       style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#c8b250;stroke-width:1.15975237000000009;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="star" />
+  </g>
+</svg>
diff --git a/skins/vector/images/unwatch-icon.png b/skins/vector/images/unwatch-icon.png
new file mode 100644 (file)
index 0000000..9fd9436
Binary files /dev/null and b/skins/vector/images/unwatch-icon.png differ
diff --git a/skins/vector/images/unwatch-icon.svg b/skins/vector/images/unwatch-icon.svg
new file mode 100644 (file)
index 0000000..9e13769
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="watch-icon-fav.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3788">
+      <stop
+         style="stop-color:#c2edff;stop-opacity:1;"
+         offset="0"
+         id="stop3790" />
+      <stop
+         id="stop3796"
+         offset="0.5"
+         style="stop-color:#68bdff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3792" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3804"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3808"
+       gradientUnits="userSpaceOnUse"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="-6.951911"
+     inkscape:cy="5.714676"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1014"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Mateusz &quot;m4tx&quot; Maćkowski</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-693.14288,-698.64789)">
+    <path
+       inkscape:transform-center-y="-0.70705002"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
+       d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.9424778"
+       sodipodi:arg1="-1.5707963"
+       sodipodi:r2="4.2936125"
+       sodipodi:r1="8.587225"
+       sodipodi:cy="7.6662416"
+       sodipodi:cx="8.3337584"
+       sodipodi:sides="5"
+       id="path3768"
+       style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#7cb5d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="star" />
+  </g>
+</svg>
diff --git a/skins/vector/images/watch-icon-hl.png b/skins/vector/images/watch-icon-hl.png
new file mode 100644 (file)
index 0000000..4cb87cd
Binary files /dev/null and b/skins/vector/images/watch-icon-hl.png differ
diff --git a/skins/vector/images/watch-icon-hl.svg b/skins/vector/images/watch-icon-hl.svg
new file mode 100644 (file)
index 0000000..b31e8b8
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="watch-icon-hl.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3788">
+      <stop
+         style="stop-color:#c2edff;stop-opacity:1;"
+         offset="0"
+         id="stop3790" />
+      <stop
+         id="stop3796"
+         offset="0.5"
+         style="stop-color:#68bdff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3792" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3804"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3808"
+       gradientUnits="userSpaceOnUse"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="-6.97632"
+     inkscape:cy="6.2476517"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1014"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Mateusz &quot;m4tx&quot; Maćkowski</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-693.14288,-698.64789)">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;stroke:#c8b250;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3770"
+       sodipodi:sides="5"
+       sodipodi:cx="8.3337584"
+       sodipodi:cy="7.6662416"
+       sodipodi:r1="8.587225"
+       sodipodi:r2="4.2936125"
+       sodipodi:arg1="-1.5707963"
+       sodipodi:arg2="-0.9424778"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
+       inkscape:transform-center-y="-0.70705002" />
+  </g>
+</svg>
diff --git a/skins/vector/images/watch-icon-loading.gif b/skins/vector/images/watch-icon-loading.gif
deleted file mode 100644 (file)
index 618c308..0000000
Binary files a/skins/vector/images/watch-icon-loading.gif and /dev/null differ
diff --git a/skins/vector/images/watch-icon-loading.png b/skins/vector/images/watch-icon-loading.png
new file mode 100644 (file)
index 0000000..5f0c490
Binary files /dev/null and b/skins/vector/images/watch-icon-loading.png differ
diff --git a/skins/vector/images/watch-icon-loading.svg b/skins/vector/images/watch-icon-loading.svg
new file mode 100644 (file)
index 0000000..3423979
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="watch-icon-loading.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3788">
+      <stop
+         style="stop-color:#c2edff;stop-opacity:1;"
+         offset="0"
+         id="stop3790" />
+      <stop
+         id="stop3796"
+         offset="0.5"
+         style="stop-color:#68bdff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3792" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3804"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3808"
+       gradientUnits="userSpaceOnUse"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="7.2850048"
+     inkscape:cy="6.4582896"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1014"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Mateusz &quot;m4tx&quot; Maćkowski</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-693.14288,-698.64789)">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;stroke:#d1d1d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2998"
+       sodipodi:sides="5"
+       sodipodi:cx="8.3337584"
+       sodipodi:cy="7.6662416"
+       sodipodi:r1="8.587225"
+       sodipodi:r2="4.2936125"
+       sodipodi:arg1="-1.5707963"
+       sodipodi:arg2="-0.9424778"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
+       inkscape:transform-center-y="-0.70705002" />
+  </g>
+</svg>
diff --git a/skins/vector/images/watch-icon.png b/skins/vector/images/watch-icon.png
new file mode 100644 (file)
index 0000000..39daff2
Binary files /dev/null and b/skins/vector/images/watch-icon.png differ
diff --git a/skins/vector/images/watch-icon.svg b/skins/vector/images/watch-icon.svg
new file mode 100644 (file)
index 0000000..c7a5081
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="watch-icon.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3788">
+      <stop
+         style="stop-color:#c2edff;stop-opacity:1;"
+         offset="0"
+         id="stop3790" />
+      <stop
+         id="stop3796"
+         offset="0.5"
+         style="stop-color:#68bdff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3792" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3804"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3788"
+       id="linearGradient3808"
+       gradientUnits="userSpaceOnUse"
+       x1="13.470111"
+       y1="14.363379"
+       x2="4.596477"
+       y2="3.3969929" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="17.836203"
+     inkscape:cy="7.206728"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1014"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Mateusz &quot;m4tx&quot; Maćkowski</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-693.14288,-698.64789)">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;stroke:#7cb5d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2998"
+       sodipodi:sides="5"
+       sodipodi:cx="8.3337584"
+       sodipodi:cy="7.6662416"
+       sodipodi:r1="8.587225"
+       sodipodi:r2="4.2936125"
+       sodipodi:arg1="-1.5707963"
+       sodipodi:arg2="-0.9424778"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
+       inkscape:transform-center-y="-0.70705002" />
+  </g>
+</svg>
diff --git a/skins/vector/images/watch-icons.png b/skins/vector/images/watch-icons.png
deleted file mode 100644 (file)
index 03aa7d5..0000000
Binary files a/skins/vector/images/watch-icons.png and /dev/null differ
index b7df3f6..ff33e82 100644 (file)
@@ -234,49 +234,4 @@ class UserTest extends MediaWikiTestCase {
                $this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
                $this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
        }
-
-       /**
-        * Helper, fetch user properties from the database.
-        * @param int $userId
-        */
-       function dbUserProperties( $userId ) {
-               $res = wfGetDB( DB_SLAVE )->select(
-                       'user_properties',
-                       array( 'up_property', 'up_value' ),
-                       array( 'up_user' => $userId ),
-                       __METHOD__
-               );
-               $ret = array();
-               foreach( $res as $row ) {
-                       $ret[$row->up_property] = $row->up_value;
-               }
-               return $ret;
-       }
-
-       public function testOnlySaveChangedOptions() {
-               $user = User::newFromName( 'UnitTestUser2' );
-               $user->addToDatabase();
-
-               // Fresh user only has default, so nothing should be in the DB
-               $dbProps = $this->dbUserProperties( $user->getId() );
-               $this->assertEmpty( $dbProps,
-                       "A new user should not have any user property saved in the DB" );
-
-               // Make sure we only save the altered option
-               $user->setOption( 'changed_opt', 'alix_20281' );
-               $user->setOption( 'switch', 1 );
-               $user->setOption( 'anotherswitch', 1 );
-               $user->saveSettings();
-
-               $expected = array (
-                       'changed_opt' => 'alix_20281',
-                       'switch' => '1',
-                       'anotherswitch' => '1',
-               );
-               $dbProps = $this->dbUserProperties( $user->getId() );
-
-               $this->assertEquals( $expected, $dbProps,
-                       "non default options should be saved, and default ones should not" );
-
-       }
 }