凌韵ar-26620的任务罢了

This commit is contained in:
Acidbarium 2025-04-15 17:55:23 +08:00
parent 1b51271978
commit 75ca09270c
108 changed files with 2046864 additions and 1 deletions

23
.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.DS_Store
**/.idea/
.vscode/
dist/
build/
sync/
*.userdb/
installation.yaml
user.yaml
*.custom.yaml
!others/**/*.custom.yaml
custom_phrase_double.txt
others/script/scel2txt/out/*
others/script/scel2txt/scel/*
cn_dicts/temp.txt
*private*
rime_console
rime_deployer
rime_patch

674
LICENSE Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

45956
cn_dicts/41448.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

8619
cn_dicts/8105.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

549357
cn_dicts/base.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

337425
cn_dicts/ext.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

767
cn_dicts/others.dict.yaml Normal file
View File

@ -0,0 +1,767 @@
# Rime dictionary
# encoding: utf-8
#
#
# https://github.com/iDvel/rime-ice
# ------- 一些杂项,按需选择 -------
#
#
---
name: others
version: "2025-03-06"
sort: by_weight
...
##### 容错词
# 一些口语读音
空落落 kong luo luo
空落落 kong lao lao
空落落的 kong luo luo de
空落落的 kong lao lao de
# 「阿房宫」的注音争议比较大
阿房宫 e pang gong
阿房宫 a pang gong
阿房宫 e fang gong
阿房宫 a fang gong
阿房宫赋 e pang gong fu
阿房宫赋 a pang gong fu
阿房宫赋 e fang gong fu
阿房宫赋 a fang gong fu
# 「伯伯」方言
伯伯 bo bo
伯伯 bai bai
# 「还」的旧读
欲就还推 yu jiu hai tui
欲就还推 yu jiu huan tui
欲拒还迎 yu ju hai ying
欲拒还迎 yu ju huan ying
欲说还休 yu shuo hai xiu
欲说还休 yu shuo huan xiu
欲说还休梦已阑 yu shuo hai xiu meng yi lan
欲说还休梦已阑 yu shuo huan xiu meng yi lan
欲言还止 yu yan hai zhi
欲言还止 yu yan huan zhi
欲迎还拒 yu ying hai ju
欲迎还拒 yu ying huan ju
欲语还休 yu yu hai xiu
欲语还休 yu yu huan xiu
欲语还羞 yu yu hai xiu
欲语还羞 yu yu huan xiu
欲走还留 yu zou hai liu
欲走还留 yu zou huan liu
# 「斜」的协音读法
远上寒山石径斜 yuan shang han shan shi jing xie
远上寒山石径斜 yuan shang han shan shi jing xia
# 「骑」目前统读 qi
坐骑 zuo qi
坐骑 zuo ji
铁骑 tie qi
铁骑 tie ji
铁骑突出刀枪鸣 tie qi tu chu dao qiang ming
铁骑突出刀枪鸣 tie ji tu chu dao qiang ming
一骑绝尘 yi qi jue chen
一骑绝尘 yi ji jue chen
一骑当千 yi qi dang qian
一骑当千 yi ji dang qian
一骑红尘妃子笑 yi qi hong chen fei zi xiao
一骑红尘妃子笑 yi ji hong chen fei zi xiao
走单骑 zou dan qi
走单骑 zou dan ji
千里走单骑 qian li zou dan qi
千里走单骑 qian li zou dan ji
# 「街」的粤语和东北话读音及常见的两种写法
仆街 pu jie
仆街 pu gai
扑街 pu jie
扑街 pu gai
扑街仔 pu jie zai
扑街仔 pu gai zai
仆街仔 pu jie zai
仆街仔 pu gai zai
街溜子 jie liu zi
街溜子 gai liu zi
# 「錤」这个字念 ji但是台湾媒体都会念成 qi他的英文名 Ming-Chi Kuo 也是接近 qi
郭明錤 guo ming ji
郭明錤 guo ming qi
# 「镐 gao hao」的发音多为韩国人名不知道 🤷‍♂️,词库里为 gao这里额外加上 hao 音
李昌镐 li chang hao
曹世镐 cao shi hao
张镐哲 zhang gao zhe
姜成镐 jiang cheng hao
姜镐童 jiang hao tong
张镐濂 zhang hao lian
李敏镐 li min hao
李陈镐 li chen hao
赵亮镐 zhao liang hao
郑俊镐 zheng jun hao
##### 错音错字提示。与 corrector.lua 配合,上面的是正确的,下面是错误的
### 错音
馄饨 hun tun
馄饨 hun dun
主角 zhu jue
主角 zhu jiao
角色 jue se
角色 jiao se
比萨饼 bi sa bing
比萨饼 pi sa bing
吃比萨 chi bi sa
吃比萨 chi pi sa
说服 shuo fu
说服 shui fu
道行 dao heng
道行 dao hang
模样 mu yang
模样 mo yang
有模有样 you mu you yang
有模有样 you mo you yang
一模一样 yi mu yi yang
一模一样 yi mo yi yang
装模作样 zhuang mu zuo yang
装模作样 zhuang mo zuo yang
人模狗样 ren mu gou yang
人模狗样 ren mo gou yang
模板 mu ban
模板 mo ban
阿弥陀佛 e mi tuo fo
阿弥陀佛 a mi tuo fo
南无阿弥陀佛 na mo e mi tuo fo
南无阿弥陀佛 na mo a mi tuo fo
南无阿弥陀佛 nan wu e mi tuo fo
南无阿弥陀佛 nan wu a mi tuo fo
给予 ji yu
给予 gei yu
槟榔 bing lang
槟榔 bin lang
张柏芝 zhang bo zhi
张柏芝 zhang bai zhi
藤蔓 teng wan
藤蔓 teng man
弄堂 long tang
弄堂 nong tang
心宽体胖 xin kuan ti pan
心宽体胖 xin kuan ti pang
埋怨 man yuan
埋怨 mai yuan
虚与委蛇 xu yu wei yi
虚与委蛇 xu yu wei she
木讷 mu ne
木讷 mu na
独乐乐 du yue le
独乐乐 du le le
众乐乐 zhong yue le
众乐乐 zhong le le
荨麻 qian ma
荨麻 xun ma
荨麻疹 xun ma zhen
荨麻疹 qian ma zhen
模具 mu ju
模具 mo ju
草薙 cao ti
草薙 cao zhi
草薙京 cao ti jing
草薙京 cao zhi jing
草薙剑 cao ti jian
草薙剑 cao zhi jian
贾平凹 jia ping wa
贾平凹 jia ping ao
雪佛兰 xue fu lan
雪佛兰 xue fo lan
强劲 qiang jing
强劲 qiang jin
胴体 dong ti
胴体 tong ti
力能扛鼎 li neng gang ding
力能扛鼎 li neng kang ding
鸭绿江 ya lu jiang
鸭绿江 ya lv jiang
大腹便便 da fu pian pian
大腹便便 da fu bian bian
卡脖子 qia bo zi
卡脖子 ka bo zi
吱声 zi sheng
吱声 zhi sheng
掺和 chan huo
掺和 chan he
掺和 can huo
掺和 can he
称职 chen zhi
称职 cheng zhi
螺蛳粉 luo si fen
螺蛳粉 luo shi fen
调换 diao huan
调换 tiao huan
太行山 tai hang shan
太行山 tai xing shan
歇斯底里 xie si di li
歇斯底里 jie si di li
发酵 fa jiao
发酵 fa xiao
酵母菌 jiao mu jun
酵母菌 xiao mu jun
殷红 yan hong
殷红 yin hong
暖和 nuan huo
暖和 nuan he
模棱两可 mo leng liang ke
模棱两可 mo ling liang ke
鄱阳湖 po yang hu
鄱阳湖 pan yang hu
脖颈 bo geng
脖颈 bo jing
脖颈儿 bo geng er
脖颈儿 bo jing er
牛皮癣 niu pi xuan
牛皮癣 niu pi xian
花斑癣 hua ban xuan
花斑癣 hua ban xian
体癣 ti xuan
体癣 ti xian
股癣 gu xuan
股癣 gu xian
脚癣 jiao xuan
脚癣 jiao xian
足癣 zu xuan
足癣 zu xian
结扎 jie za
结扎 jie zha
海参崴 hai shen wai
海参崴 hai shen wei
厚朴 hou po
厚朴 hou pu
大宛马 da yuan ma
大宛马 da wan ma
龇牙 zi ya
龇牙 ci ya
龇着牙 zi zhe ya
龇着牙 ci zhe ya
龇牙咧嘴 zi ya lie zui
龇牙咧嘴 ci ya lie zui
头皮屑 tou pi xie
头皮屑 tou pi xue
六安 lu an
六安 liu an
六安县 lu an xian
六安县 liu an xian
六安市 lu an shi
六安市 liu an shi
六合区 lu he qu
六合区 liu he qu
安徽六安 an hui lu an
安徽六安 an hui liu an
安徽六安市 an hui lu an shi
安徽六安市 an hui liu an shi
安徽省六安市 an hui sheng lu an shi
安徽省六安市 an hui sheng liu an shi
南京六合 nan jing lu he
南京六合 nan jing liu he
南京六合区 nan jing lu he qu
南京六合区 nan jing liu he qu
南京市六合区 nan jing shi lu he qu
南京市六合区 nan jing shi liu he qu
偌大 ruo da
偌大 nuo da
饮鸩止渴 yin zhen zhi ke
饮鸩止渴 yin jiu zhi ke
饮鸩解渴 yin zhen jie ke
饮鸩解渴 yin jiu jie ke
宫商角徵羽 gong shang jue zhi yu
宫商角徵羽 gong shang jiao zhi yu
氙气灯 xian qi deng
氙气灯 shan qi deng
氙气大灯 xian qi da deng
氙气大灯 shan qi da deng
氙气手电筒 xian qi shou dian tong
氙气手电筒 shan qi shou dian tong
应该 ying gai
应该 yin gai
粘贴 zhan tie
粘贴 nian tie
高句丽 gao gou li
高句丽 gao ju li
角斗士 jue dou shi
角斗士 jiao dou shi
缩砂密 su sha mi
缩砂密 suo sha mi
迫击炮 pai ji pao
迫击炮 po ji pao
榅桲 wen po
榅桲 wen bo
荸荠 bi qi
荸荠 bi ji
柔荑 rou ti
柔荑 rou yi
柔荑花序 rou ti hua xu
柔荑花序 rou yi hua xu
手如柔荑 shou ru rou ti
手如柔荑 shou ru rou yi
温庭筠 wen ting yun
温庭筠 wen ting jun
朱祐樘 zhu you cheng
朱祐樘 zhu you tang
关卡 guan qia
关卡 guan ka 1000
三昧真火 san mei zhen huo
三昧真火 san wei zhen huo
青𬞟之末 qing pin zhi mo
青𬞟之末 qing ping zhi mo
起于青𬞟之末 qi yu qing pin zhi mo
起于青𬞟之末 qi yu qing ping zhi mo
风起于青𬞟之末 feng qi yu qing pin zhi mo
风起于青𬞟之末 feng qi yu qing ping zhi mo
优惠券 you hui quan
优惠券 you hui juan
拱券 gong xuan
拱券 gong quan
哺乳 bu ru
哺乳 pu ru
脑卒中 nao cu zhong
脑卒中 nao zu zhong
潟湖 xi hu
潟湖 xie hu
果脯 guo fu
果脯 guo pu
肉脯 rou fu
肉脯 rou pu
脯氨酸 fu an suan
脯氨酸 pu an suan
酪氨酸 lao an suan
酪氨酸 luo an suan
没食子 mo shi zi
没食子 mei shi zi
裳凤蝶 chang feng die
裳凤蝶 shang feng die
白𬶨豚 bai ji tun
白𬶨豚 bai qi tun
桡骨 rao gu
桡骨 nao gu
百折不挠 bai zhe bu nao
百折不挠 bai zhe bu rao
椎心泣血 chui xin qi xie
椎心泣血 zhui xin qi xie
椎心泣血 chui xin qi xue
椎心泣血 zhui xin qi xue
挟持 xie chi
挟持 xia chi
亳州 bo zhou
亳州 hao zhou
牛丼 niu dan
牛丼 niu jing
牛丼饭 niu dan fan
牛丼饭 niu jing fan
安瓿 an bu
安瓿 an pou
安瓿瓶 an bu ping
安瓿瓶 an pou ping
解剖 jie pou
解剖 jie pao
剖分 pou fen
剖分 pao fen
剖腹产 pou fu chan
剖腹产 pao fu chan
剖宫产 pou gong chan
剖宫产 pao gong chan
金匮 jin gui
金匮 jin kui
清平乐 qing ping yue
清平乐 qing ping le
踏莎行 ta suo xing
踏莎行 ta sha xing
莎草 suo cao
莎草 sha cao
杉木 sha mu
杉木 shan mu
道在屎溺 dao zai shi niao
道在屎溺 dao zai shi ni
### 错字
曾经 ceng jing
曾今 ceng jin
按捺 an na
按耐 an nai
按捺不住 an na bu zhu
按耐不住 an nai bu zhu
别价 bie jie
别介 bie jie
甭价 beng jie
甭介 beng jie
血脉贲张 xue mai ben zhang
血脉偾张 xue mai fen zhang
血脉喷张 xue mai pen zhang
契诃夫 qi he fu
契科夫 qi ke fu
凑合 cou he
凑活 cou huo
巨惠 ju hui
钜惠 ju hui
摩羯座 mo jie zuo
魔蝎座 mo xie zuo
比萨 bi sa
披萨 pi sa
㹴犬 geng quan
梗犬 geng quan
##### 叠字
# 数据来源: https://zh.wikipedia.org/zh-cn/%E4%BA%8C%E5%8F%A0%E5%AD%97 https://zh.wikipedia.org/wiki/%E4%B8%89%E5%8F%A0%E5%AD%97 https://zh.wikipedia.org/wiki/%E5%9B%9B%E5%8F%A0%E5%AD%97
# 二叠字
两个火
两个土
两个一
两个二
两个山
两个口
两个田
两个九
两个人
两个飞
两个戈
两个厶 liang ge si
两个厶 liang ge mou
两个又
两个香
两个面
两个兀
两个女
两个𡥦 liang ge ni
两个臣
两个巾
两个左
两个母
两个来
两个凡
两个夕
两个彐 liang ge ji
两个𢎘 liang ge han
两个魚 liang ge yu
两个明
两个朿 liang ge ci
两个乂
两个曰
两个尸
两个户
两个大
两个八
两个而
两个羊
两个吉
两个马
两个卅
两个巛 liang ge chuan
两个止
两个比
两个言
两个申
两个牛
两个余
两个束
两个罒 liang ge mu
两个㐅 liang ge wu
两个金
两个木
两个水
两个火
两个風 liang ge feng
两个石
两个口
两个日
两个月
两个目
两个白
两个百
两个耳
两个山
两个屮 liang ge che
两个屮 liang ge cao
两个廿
两个卄 liang ge nian
两个虫
两个虎
两个龍 liang ge long
两个馬 liang ge ma
两个犬
两个人
两个入
两个习
两个卪 liang ge jie
两个㔾 liang ge jie
两个几
两个乙
两个大
两个夫
两个禾
两个干
两个井
两个斤
两个片
两个牙
两个炎
两个弓
两个永
两个亦
两个手
两个毛
两个王
两个男
两个女
两个又
两个支
两个隻 liang ge zhi
两个古
两个吉
两个舌
两个言
两个户
两个启
两个來 liang ge lai
两个桼 liang ge qi
两个旡 liang ge ji
两个夕
两个歹
两个匕
两个幺
两个玄
两个心
两个力
两个欠
两个子
两个予
两个享
两个立
两个音
两个竟
两个竞
两个兄
两个見 liang ge jian
两个貝 liang ge bei
两个辛
两个瓜
两个呆
两个果
两个鸟
两个巢
两个禺 liang ge yu
两个巿 liang ge fu
两个句
两个奇
两个真
两个尹
两个昔
两个易
两个臣
两个面
两个先
两个老
两个示
两个至
两个生
两个車 liang ge che
两个車 liang ge ju
两个足
两个區 liang ge qu
两个香
两个隹 liang ge zhui
两个牟
两个豕
两个𠂢 liang ge pai
两个畐 liang ge fu
两个㣇 liang ge yi
两个邑
两个堯 liang ge yao
两个秉
两个倉 liang ge cang
两个東 liang ge dong
两个善
两个僉 liang ge qian
两个齒 liang ge chi
两个喜
两个走
两个止
两个昌
两个串
两个米
两个束
两个隶
两个不
两个龙
两个乞
两个夋 liang ge qun
两个天
# 三叠字
三个生
三个秦
三个若
三个雲 san ge yun
三个人
三个刀
三个十
三个力
三个原
三个厶 san ge si
三个厶 san ge mou
三个又
三个口
三个七
三个吉
三个土
三个士
三个女
三个子
三个小
三个心
三个手
三个日
三个木
三个止
三个毛
三个水
三个泉
三个火
三个牛
三个犬
三个田
三个白
三个目
三个直
三个石
三个羊
三个耳
三个舌
三个屮 san ge che
三个屮 san ge cao
三个虫
三个言
三个贝
三个車 san ge che
三个金
三个隹 san ge zhui
三个雷
三个風 san ge feng
三个飛 san ge fei
三个香
三个马
三个魚 san ge yu
三个鹿
三个龍 san ge long
三个个
三个丶 san ge zhu
三个丶 san ge dian
三个了
三个介
三个企
三个舍
三个圥 san ge lu
三个光
三个兔
三个全
三个𠙽 san ge kuai
三个𠧪 san ge tiao
三个𠧪 san ge you
三个㔾 san ge jie
三个厡 san ge yuan
三个可
三个因
三个夏
三个大
三个天
三个太
三个𦉼 san ge ku
三个宝
三个宜
三个客
三个寒
三个少
三个山
三个市
三个文
三个斗
三个朿 san ge ci
三个束
三个林
三个果
三个欠
三个𣥚 san ge zou
三个爪
三个妥
三个用
三个甲
三个百
三个盖
三个県 san ge xian
三个空
三个亇 san ge ge
三个竹
三个罒 san ge mu
三个羗 san ge qiang
三个老
三个月
三个至
三个興 san ge xing
三个足
三个㖖 san ge nie
三个門 san ge men
三个面
三个頁 san ge ye
三个鳥 san ge niao
三个男
三个立
三个九
三个也
三个加
三个動 san ge dong
三个千
三个方
三个朔
三个玉
三个申
三个𡿨 san ge quan
三个去
三个弓
三个䖝 san ge chong
三个丿 san ge pie
三个户
三个瓜
三个鸟
三个米
# 四叠字
四个乂 si ge yi
四个人
四个厶 si ge si
四个厶 si ge mou
四个又
四个匕
四个工
四个口
四个天
四个小
四个屮 si ge che
四个屮 si ge cao
四个火
四个牛
四个魚 si ge yu
四个月
四个日
四个林
四个水
四个石
四个田
四个甲
四个且
四个囚
四个困
四个竹
四个老
四个朿 si ge ci
四个先
四个金
四个泉
四个言
四个門 si ge men
四个果
四个春
四个車 si ge che
四个風 si ge feng
四个雷
四个雲 si ge yun
四个興 si ge xing
四个龍 si ge long
四个土

980935
cn_dicts/tencent.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

64
custom_phrase.txt Normal file
View File

@ -0,0 +1,64 @@
# Rime table
# coding: utf-8
#@/db_name custom_phrase.txt
#@/db_type tabledb
#
# 自定义短语
# 可为方案增加一些要置顶的词汇及短语,例如邮箱、手机号、常用短语等等。编码可以随便起,不限于拼音。
#
# 适用于全拼。双拼默认为 custom_phrase_double.txt 需要手动创建,并更改上面的 db_name 为 custom_phrase_double.txt
#
# 以下固定的词汇及顺序纯属个人偏好,仅作示例,
# 可以增加自己的 .txt 文件,并在方案的 custom_phrase/user_dict 指定为自己的文件。
#
# 以 Tab 分割:词汇<Tab>编码<Tab>权重
#
# 这个文件内的字词会占据最高权重(即排在候选项的最前面,因为指定了高权重 custom_phrase/initial_quality: 99
# 但不与其他翻译器互相造词,如果使用了完整编码,那么这个字或词将无法参与造词,即自造词无法被记住。
# 所以只建议固定非完整拼音的编码,如果需求是置顶指定拼音的候选项,请参考方案中的 pin_cand_filter。
#
# 最下面的英文是因为一些常用单词的第一候选项被纠错覆盖了,如 Amazon 被纠错为「a ma zong 阿妈粽」,期望的 Amazon 跑到第二个候选项了,所以这里给它固定死喽。
#
# version: "2024-03-12"
#
# 此行之后不能写注释
噷 hm
呣 m
呒 m
有 u 3
又 u 2
由 u 1
一 i 4
以 i 3
已 i 2
亦 i 1
一个 ig
有个 ug
是一个 sig
有一个 uig
有一个 uyig
有一个 uyige
有没有 umu
有没有 umeiu
又有 uu
又又又 uuu
又双叒叕 uuuu
go go
Golang golang
Hugo hugo
goto goto
domain domain
TODO todo
Dota dota
main main
Amazon amazon
NASA nasa
gone gone
Go程 gocheng
code code
SOHO soho

367
default.yaml Normal file
View File

@ -0,0 +1,367 @@
# Rime default settings
# encoding: utf-8
# 要比共享目录的同名文件的 config_version 大才可以生效
config_version: '2025-02-24'
# 方案列表
schema_list:
# 可以直接删除或注释不需要的方案,对应的 *.schema.yaml 方案文件也可以直接删除
# 除了 t9它依赖于 rime_ice用九宫格别删 rime_ice.schema.yaml
- schema: rime_ice # 雾凇拼音(全拼)
- schema: t9 # 九宫格(仓输入法)
- schema: double_pinyin # 自然码双拼
- schema: double_pinyin_abc # 智能 ABC 双拼
- schema: double_pinyin_mspy # 微软双拼
- schema: double_pinyin_sogou # 搜狗双拼
- schema: double_pinyin_flypy # 小鹤双拼
- schema: double_pinyin_ziguang # 紫光双拼
# 菜单
menu:
page_size: 5 # 候选词个数
# alternative_select_labels: [ ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩ ] # 修改候选项标签
# alternative_select_keys: ASDFGHJKL # 如编码字符占用数字键,则需另设选字键(注意在雾凇中,大写字母也作为编码了)
# 方案选单相关
switcher:
caption: 「方案选单」
hotkeys:
- F4
- Control+grave
- Control+Shift+grave
# - Alt+grave
save_options: # 开关记忆(方案中的 switches从方案选单而非快捷键切换时会记住的选项需要记忆的开关不能设定 reset
- ascii_punct
- traditionalization
- emoji
- full_shape
- search_single_char
fold_options: true # 呼出时是否折叠,多方案时建议折叠 true ,一个方案建议展开 false
abbreviate_options: true # 折叠时是否缩写选项
option_list_separator: ' / ' # 折叠时的选项分隔符
# 中西文切换
#
# good_old_caps_lock:
# true 切换大写
# false 切换中英
# macOS 偏好设置的优先级更高如果勾选【使用大写锁定键切换“ABC”输入法】则始终会切换输入法。
#
# 切换中英:
# 不同的选项表示:打字打到一半时按下了 CapsLock、Shift、Control 后:
# commit_code 上屏原始的编码,然后切换到英文
# commit_text 上屏拼出的词句,然后切换到英文
# clear 清除未上屏内容,然后切换到英文
# inline_ascii 切换到临时英文模式,按回车上屏后回到中文状态
# noop 屏蔽快捷键,不切换中英,但不要屏蔽 CapsLock
ascii_composer:
good_old_caps_lock: true # true | false
switch_key:
Caps_Lock: clear # commit_code | commit_text | clear
Shift_L: commit_code # commit_code | commit_text | inline_ascii | clear | noop
Shift_R: noop # commit_code | commit_text | inline_ascii | clear | noop
Control_L: noop # commit_code | commit_text | inline_ascii | clear | noop
Control_R: noop # commit_code | commit_text | inline_ascii | clear | noop
###################################################################################
# 下面的 punctuator recognizer key_binder 写了一些所有方案通用的配置项。
# 写在 default.yaml 里,方便多个方案引用,就是不用每个方案都写一遍了。
# 标点符号
# 设置为一个映射,就自动上屏;设置为多个映射,如 '/' : [ '/', ÷ ] 则进行复选。
# full_shape: 全角没改,使用预设值
# half_shape: 标点符号全部直接上屏,和 macOS 自带输入法的区别是
# '|' 是半角的,
# '~' 是半角的,
# '`'(反引号)没有改成 '·'(间隔号)。
punctuator:
digit_separators: ",.:" # 在此处指定的字符,在数字后被输入,若再次输入数字,则连同数字直接上屏;若双击,则恢复映射。 # librime >= 28a234f
# digit_separator_action: commit # 关闭上述行为 librime >= 1.13.1
full_shape:
' ' : { commit: ' ' }
',' : { commit: }
'.' : { commit: 。 }
'<' : [ 《, 〈, «, ]
'>' : [ 》, 〉, », ]
'/' : [ , ÷ ]
'?' : { commit: }
';' : { commit: }
':' : { commit: }
'''' : { pair: [ '', '' ] }
'"' : { pair: [ '“', '”' ] }
'\' : [ 、, ]
'|' : [ ·, , '§', '¦' ]
'`' :
'~' :
'!' : { commit: }
'@' : [ , ☯ ]
'#' : [ , ⌘ ]
'%' : [ , '°', '℃' ]
'$' : [ ¥, '$', '€', '£', '¥', '¢', '¤' ]
'^' : { commit: …… }
'&' :
'*' : [ , ·, ・, ×, ※, ❂ ]
'(' :
')' :
'-' :
'_' : ——
'+' :
'=' :
'[' : [ 「, 【, , ]
']' : [ 」, 】, , ]
'{' : [ 『, 〖, ]
'}' : [ 』, 〗, ]
half_shape:
',' : ''
'.' : '。'
'<' : '《'
'>' : '》'
'/' : '/'
'?' : ''
';' : ''
':' : ''
'''' : { pair: [ '', '' ] }
'"' : { pair: [ '“', '”' ] }
'\' : '、'
'|' : '|'
'`' : '`'
'~' : '~'
'!' : ''
'@' : '@'
'#' : '#'
'%' : '%'
'$' : '¥'
'^' : '……'
'&' : '&'
'*' : '*'
'(' : ''
')' : ''
'-' : '-'
'_' : ——
'+' : '+'
'=' : '='
'[' : '【'
']' : '】'
'{' : '「'
'}' : '」'
# 处理符合特定规则的输入码,如网址、反查
# 此处配置较为通用的选项,各方案中另增加了和方案功能绑定的 patterns。
recognizer:
patterns:
email: "^[A-Za-z][-_.0-9A-Za-z]*@.*$" # email @ 之后不上屏
url: "^(www[.]|https?:|ftp[.:]|mailto:|file:).*$|^[a-z]+[.].+$" # URL
underscore: "^[A-Za-z]+_.*" # 下划线不上屏
# url_2: "^[A-Za-z]+[.].*" # 句号不上屏,支持 google.com abc.txt 等网址或文件名,使用句号翻页时需要注释掉
# colon: "^[A-Za-z]+:.*" # 冒号不上屏
# 快捷键
key_binder:
# Lua 配置: 以词定字(上屏当前词句的第一个或最后一个字),和中括号翻页有冲突
select_first_character: "bracketleft" # 左中括号 [
select_last_character: "bracketright" # 右中括号 ]
bindings:
# Tab / Shift+Tab 切换光标至下/上一个拼音
- { when: composing, accept: Shift+Tab, send: Shift+Left }
- { when: composing, accept: Tab, send: Shift+Right }
# Tab / Shift+Tab 翻页
# - { when: has_menu, accept: Shift+Tab, send: Page_Up }
# - { when: has_menu, accept: Tab, send: Page_Down }
# Option/Alt + ←/→ 切换光标至下/上一个拼音
- { when: composing, accept: Alt+Left, send: Shift+Left }
- { when: composing, accept: Alt+Right, send: Shift+Right }
# 翻页 - =
- { when: has_menu, accept: minus, send: Page_Up } # 上一页设置为 paging 时会导致直接上屏并输出减号
- { when: has_menu, accept: equal, send: Page_Down }
# 翻页 , .
# - { when: paging, accept: comma, send: Page_Up }
# - { when: has_menu, accept: period, send: Page_Down }
# 翻页 [ ] ⚠️ 开启时请修改上面以词定字的快捷键
# - { when: paging, accept: bracketleft, send: Page_Up }
# - { when: has_menu, accept: bracketright, send: Page_Down }
# 两种按键配置,鼠须管 Control+Shift+4 生效,小狼毫 Control+Shift+dollar 生效,都写上了。
# numbered_mode_switch:
# - { when: always, select: .next, accept: Control+Shift+1 } # 在最近的两个方案之间切换
# - { when: always, select: .next, accept: Control+Shift+exclam } # 在最近的两个方案之间切换
# - { when: always, toggle: ascii_mode, accept: Control+Shift+2 } # 切换中英
# - { when: always, toggle: ascii_mode, accept: Control+Shift+at } # 切换中英
- { when: always, toggle: ascii_punct, accept: Control+Shift+3 } # 切换中英标点
- { when: always, toggle: ascii_punct, accept: Control+Shift+numbersign } # 切换中英标点
- { when: always, toggle: traditionalization, accept: Control+Shift+4 } # 切换简繁
- { when: always, toggle: traditionalization, accept: Control+Shift+dollar } # 切换简繁
# - { when: always, toggle: full_shape, accept: Control+Shift+5 } # 切换全半角
# - { when: always, toggle: full_shape, accept: Control+Shift+percent } # 切换全半角
# emacs_editing:
# - { when: composing, accept: Control+p, send: Up }
# - { when: composing, accept: Control+n, send: Down }
# - { when: composing, accept: Control+b, send: Left }
# - { when: composing, accept: Control+f, send: Right }
# - { when: composing, accept: Control+a, send: Home }
# - { when: composing, accept: Control+e, send: End }
# - { when: composing, accept: Control+d, send: Delete }
# - { when: composing, accept: Control+k, send: Shift+Delete }
# - { when: composing, accept: Control+h, send: BackSpace }
# - { when: composing, accept: Control+g, send: Escape }
# - { when: composing, accept: Control+bracketleft, send: Escape }
# - { when: composing, accept: Control+y, send: Page_Up }
# - { when: composing, accept: Alt+v, send: Page_Up }
# - { when: composing, accept: Control+v, send: Page_Down }
# optimized_mode_switch:
# - { when: always, accept: Control+Shift+space, select: .next }
# - { when: always, accept: Shift+space, toggle: ascii_mode }
# - { when: always, accept: Control+comma, toggle: full_shape }
# - { when: always, accept: Control+period, toggle: ascii_punct }
# - { when: always, accept: Control+slash, toggle: traditionalization }
# 将小键盘 0~9 . 映射到主键盘,数字金额大写的 Lua 如 R1234.5678 可使用小键盘输入
- {accept: KP_0, send: 0, when: composing}
- {accept: KP_1, send: 1, when: composing}
- {accept: KP_2, send: 2, when: composing}
- {accept: KP_3, send: 3, when: composing}
- {accept: KP_4, send: 4, when: composing}
- {accept: KP_5, send: 5, when: composing}
- {accept: KP_6, send: 6, when: composing}
- {accept: KP_7, send: 7, when: composing}
- {accept: KP_8, send: 8, when: composing}
- {accept: KP_9, send: 9, when: composing}
- {accept: KP_Decimal, send: period, when: composing}
# 将小键盘 + - * / 映射到主键盘,使计算器 如 1+2-3*4 可使用小键盘输入
- {accept: KP_Multiply, send: asterisk, when: composing}
- {accept: KP_Add, send: plus, when: composing}
- {accept: KP_Subtract, send: minus, when: composing}
- {accept: KP_Divide, send: slash, when: composing}
# 按键速查
# https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md
# (没有 Command 键,不支持)
# accept 和 send 可用字段除 A-Za-z0-9 外,还包含以下键盘上实际有的键:
# (区分大小写)
# BackSpace 退格
# Tab 水平定位符
# Linefeed 换行
# Clear 清除
# Return 回车
# Pause 暂停
# Sys_Req 印屏
# Escape 退出
# Delete 删除
# Home 原位
# Left 左箭头
# Up 上箭头
# Right 右箭头
# Down 下箭头
# Prior、Page_Up 上翻
# Next、Page_Down 下翻
# End 末位
# Begin 始位
# Shift_L 左Shift
# Shift_R 右Shift
# Control_L 左Ctrl
# Control_R 右Ctrl
# Meta_L 左Meta
# Meta_R 右Meta
# Alt_L 左Alt
# Alt_R 右Alt
# Super_L 左Super
# Super_R 右Super
# Hyper_L 左Hyper
# Hyper_R 右Hyper
# Caps_Lock 大写锁
# Shift_Lock 上档锁
# Scroll_Lock 滚动锁
# Num_Lock 小键板锁
# Select 选定
# Print 打印
# Execute 运行
# Insert 插入
# Undo 还原
# Redo 重做
# Menu 菜单
# Find 搜寻
# Cancel 取消
# Help 帮助
# Break 中断
# space 空格
# exclam !
# quotedbl "
# numbersign #
# dollar $
# percent %
# ampersand &
# apostrophe '
# parenleft (
# parenright )
# asterisk *
# plus +
# comma ,
# minus -
# period .
# slash /
# colon :
# semicolon ;
# less <
# equal =
# greater >
# question ?
# at @
# bracketleft [
# backslash \
# bracketright ]
# asciicircum ^
# underscore _
# grave `
# braceleft {
# bar |
# braceright }
# asciitilde ~
# KP_Space 小键板空格
# KP_Tab 小键板水平定位符
# KP_Enter 小键板回车
# KP_Delete 小键板删除
# KP_Home 小键板原位
# KP_Left 小键板左箭头
# KP_Up 小键板上箭头
# KP_Right 小键板右箭头
# KP_Down 小键板下箭头
# KP_Prior、KP_Page_Up 小键板上翻
# KP_Next、KP_Page_Down 小键板下翻
# KP_End 小键板末位
# KP_Begin 小键板始位
# KP_Insert 小键板插入
# KP_Equal 小键板等于
# KP_Multiply 小键板乘号
# KP_Add 小键板加号
# KP_Subtract 小键板减号
# KP_Divide 小键板除号
# KP_Decimal 小键板小数点
# KP_0 小键板0
# KP_1 小键板1
# KP_2 小键板2
# KP_3 小键板3
# KP_4 小键板4
# KP_5 小键板5
# KP_6 小键板6
# KP_7 小键板7
# KP_8 小键板8
# KP_9 小键板9

358
double_pinyin.schema.yaml Normal file
View File

@ -0,0 +1,358 @@
# Rime schema
# encoding: utf-8
# 复制自 rime_ice.schema.yaml ,适配了双拼。
# 双拼键位映射复制自 https://github.com/rime/rime-double-pinyin
# 双拼之间主要就是 speller/algebra 和 translator/preedit_format 这里有区别。
#
# 全拼的自定义文本和双拼有些冲突,改成了 custom_phrase_double ,需要创建 custom_phrase_double.txt 文件。
#
# 目前配置中有个别功能仍然是全拼拼写,不能自动适配,所以需要手动修改一下:
# - 英文中部分符号的派生规则:在英文方案文件 melt_eng.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# - 部件拆字的拼写规则:在部件拆字方案 radical_pinyin.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# 打个补丁一劳永逸,补丁写法参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133) 或 others/双拼补丁示例/ 文件夹
# 方案说明
schema:
schema_id: double_pinyin
name: 自然码双拼
version: "1"
author:
- Dvel
description: |
雾凇拼音 - 自然码双拼
https://github.com/iDvel/rime-ice
dependencies:
- melt_eng # 英文输入,作为次翻译器挂载到拼音方案
- radical_pinyin # 部件拆字,反查及辅码
# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符abbrev 可自定义一个字符
switches:
- name: ascii_mode
states: [ 中, ]
- name: ascii_punct # 中英标点
states: [ ¥, $ ]
- name: traditionalization
states: [ 简, 繁 ]
- name: emoji
states: [ 💀, 😄 ]
reset: 1
- name: full_shape
states: [ 半角, 全角 ]
- name: search_single_char # search.lua 的功能开关,辅码查词时是否单字优先
states: [正常, 单字]
abbrev: [词, 单]
# 输入引擎
engine:
processors:
- lua_processor@*select_character # 以词定字
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- affix_segmentor@radical_lookup # 部件拆字自定义 tag
- punct_segmentor
- fallback_segmentor
translators:
- punct_translator
- script_translator
- lua_translator@*date_translator # 时间、日期、星期
- lua_translator@*lunar # 农历
- table_translator@custom_phrase # 自定义短语 custom_phrase_double.txt
- table_translator@melt_eng # 英文输入
- table_translator@cn_en # 中英混合词汇
- table_translator@radical_lookup # 部件拆字反查
- lua_translator@*unicode # Unicode
- lua_translator@*number_translator # 数字、金额大写
- lua_translator@*calc_translator # 计算器
- lua_translator@*force_gc # 暴力 GC
filters:
- lua_filter@*corrector # 错音错字提示
- reverse_lookup_filter@radical_reverse_lookup # 部件拆字滤镜
- lua_filter@*autocap_filter # 英文自动大写
- lua_filter@*pin_cand_filter # 置顶候选项(顺序要求:置顶候选项 > Emoji > 简繁切换)
- lua_filter@*reduce_english_filter # 降低部分英语单词在候选项的位置
- simplifier@emoji # Emoji
- simplifier@traditionalize # 简繁切换
- lua_filter@*search@radical_pinyin # 部件拆字辅码
- uniquifier # 去重
# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字
date_translator:
date: date # 日期: 2022-11-29
time: time # 时间: 18:13
week: week # 星期: 星期二
datetime: datetime # ISO 8601 2022-11-29T18:13:11+08:00
timestamp: timestamp # 时间戳: 1669716794
# Lua 配置:农历的触发关键字
lunar: lunar # 农历: 二〇二三年冬月二十 癸卯年(兔)冬月二十
# Lua 配置: 降低部分英语单词在候选项的位置。
# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」
# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」
# 几种模式:
# all 降低脚本内置的单词(所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母words 作为自定义的额外补充
# custom 完全自定义,只降低 words 里的
# none 不降低任何单词,相当于没有启用这个 Lua
# (匹配的是编码,不是单词)
reduce_english_filter:
mode: custom # all | custom | none
idx: 2 # 降低到第 idx 个位置
# 自定义的单词列表,示例列表没有降低部分常用单词,如 and cat mail Mac but bad shit ……
words: [
aid, ann,
bail, bait, bam, band, bans, bat, bay, bend, bent, benz, bib, bid, bien, biz, boc, bop, bos, bud, buf, bach, bench, bush,
cab, cad, cain, cam, cans, cap, cef, chad, chan, chap, chef, cher, chew, chic, chin, chip, chit, coup, cum, cunt, cur, couch,
dab, dag, dal, dam, dent, dew, dial, diet, dim, din, dip, dis, dit, doug, dub, dug, dunn,
fab, fax, fob, fog, foul, fur,
gag, gail, gain, gal, gam, gaol, ged, gel, ger, guam, gus, gut,
hail, ham, hank, hans, hat, hay, heil, heir, hem, hep, hud, hum, hung, hunk, hut, hush,
jim, jug,
kat,
lab, lad, lag, laid, lam, laos, lap, lat, lax, lay, led, leg, lex, liam, lib, lid, lied, lien, lies, linn, lip, lit, liz, lob, lug, lund, lung, lux, lash, loch, lush,
mag, maid, mann, mar, mat, med, mel, mend, mens, ment, mil, mins, mint, mob, moc, mop, mos, mot, mud, mug, mum, mesh,
nap, nat, nay, neil, nib, nip, noun, nous, nun, nut, nail, nash,
pac, paid, pail, pain, pair, pak, pal, pam, pans, pant, pap, par, pat, paw, pax, pens, pic, pier, pies, pins, pint, pit, pix, pod, pop, pos, pot, pour, pow, pub, pinch, pouch,
rand, rant, rent, rep, res, ret, rex, rib, rid, rig, rim, rub, rug, rum, runc, runs, ranch,
sac, sail, sal, sam, sans, sap, saw, sax, sew, sham, shaw, shin, sig, sin, sip, sis, suit, sung, suns, sup, sur, sus,
tad, tail, taj, tar, tax, tec, ted, tel, ter, tex, tic, tied, tier, ties, tim, tin, tit, tour, tout, tum,
wag, wand, womens, wap, wax, weir, won,
yan, yen,
zach
]
# Lua 配置: 置顶候选项
# 注释太长了,请参考 pin_cand_filter.lua 开头的说明书。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml
enable_word_completion: true # 大于 4 音节的词条自动补全librime > 1.11.2
prism: double_pinyin # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
spelling_hints: 8 # corrector.lua :为了让错音错字提示的 Lua 同时适配全拼双拼,将拼音显示在 comment 中
always_show_comments: true # corrector.lua Rime 默认在 preedit 等于 comment 时取消显示 comment这里强制一直显示供 corrector.lua 做判断用。
initial_quality: 1.2 # 拼音的权重应该比英文大
comment_format: # 标记拼音注释,供 corrector.lua 做判断用
- xform/^//
- xform/$//
preedit_format: # preedit_format 影响到输入框的显示和“Shift+回车”上屏的字符
- xform/(^|[ '])aa/$1a/
- xform/(^|[ '])ee/$1e/
- xform/(^|[ '])oo/$1o/
- xform/([bpmnljqxy])n/$1in/
- xform/(\w)g/$1eng/
- xform/(\w)q/$1iu/
- xform/([gkhvuirzcs])w/$1ua/
- xform/(\w)w/$1ia/
- xform/([dtnlgkhjqxyvuirzcs])r/$1uan/
- xform/(\w)t/$1ve/
- xform/([gkhvuirzcs])y/$1uai/
- xform/(\w)y/$1ing/
- xform/([dtnlgkhvuirzcs])o/$1uo/
- xform/(\w)p/$1un/
- xform/([jqx])s/$1iong/
- xform/(\w)s/$1ong/
- xform/([jqxnlb])d/$1iang/
- xform/(\w)d/$1uang/
- xform/(\w)f/$1en/
- xform/(\w)h/$1ang/
- xform/(\w)j/$1an/
- xform/(\w)k/$1ao/
- xform/(\w)l/$1ai/
- xform/(\w)z/$1ei/
- xform/(\w)x/$1ie/
- xform/(\w)c/$1iao/
- xform/([dtgkhvuirzcs])v/$1ui/
- xform/(\w)b/$1ou/
- xform/(\w)m/$1ian/
- xform/([aoe])\1(\w)/$1$2/
- "xform/(^|[ '])v/$1zh/"
- "xform/(^|[ '])i/$1ch/"
- "xform/(^|[ '])u/$1sh/"
- xform/([jqxy])v/$1u/
- xform/([nl])v/$1ü/
- xform/ü/v/ # ü 显示为 v
- xform/(?<=[A-Z])\s(?=[A-Z])// # 消除大写字母之间的空格
# 次翻译器,英文
melt_eng:
dictionary: melt_eng # 挂载词库 melt_eng.dict.yaml
enable_sentence: false # 禁止造句
enable_user_dict: false # 禁用用户词典
initial_quality: 1.1 # 初始权重
comment_format: # 自定义提示码
- xform/.*// # 清空提示码
# 中英混合词汇
cn_en:
dictionary: ""
user_dict: en_dicts/cn_en_double_pinyin
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 0.5
comment_format:
- xform/^.+$//
# 自定义短语
custom_phrase:
dictionary: ""
user_dict: custom_phrase_double # 需要手动创建 custom_phrase_double.txt 文件
db_class: stabledb
enable_completion: false # 补全提示
enable_sentence: false # 禁止造句
initial_quality: 99 # custom_phrase 的权重应该比 pinyin 和 melt_eng 大
# Emoji
emoji:
option_name: emoji # 对应 switches 中的 name
opencc_config: emoji.json # 选择要加载的 OpenCC 配置
inherit_comment: false # 在 corrector.lua 及反查中emoji 的 comment 显示为空
# 简繁切换
traditionalize:
option_name: traditionalization # 对应 switches 中的 name
opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json Rime 内置配置,在程序目录可找到)
tips: none # 转换提示: all 都显示 | char 仅单字显示 | none 不显示。
tags: [ abc, number, gregorian_to_lunar ] # 限制在对应 tag不对其他如反查的内容做简繁转换
# 标点符号
# punctuator 下面的三个子项:
# full_shape 全角标点映射
# half_shape 半角标点映射
# symbols Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的 symbols_caps_v.yaml 修改成了 'V' 开头。
# 以及新版 digit_separators 相关的属性
punctuator:
__include: default:/punctuator # 从 default.yaml 导入 punctuator 的所有配置,为了引用 digit_separators 等属性
full_shape:
__include: default:/punctuator/full_shape # 从 default.yaml 导入配置
half_shape:
__include: default:/punctuator/half_shape # 从 default.yaml 导入配置
symbols:
__include: symbols_caps_v:/symbols # 从 symbols_caps_v.yaml 导入配置
# 部件拆字反查
radical_lookup:
tag: radical_lookup
dictionary: radical_pinyin
enable_user_dict: false
prefix: "uU" # 反查前缀(反查时前缀会消失影响打英文所以设定为两个字母,或可改成一个非字母符号),与 recognizer/patterns/radical_lookup 匹配
tips: " 〔拆字〕"
comment_format:
- erase/^.*$//
# 部件拆字滤镜
radical_reverse_lookup:
tags: [ radical_lookup ]
# dictionary 为拼音标注来源,目前是显示本方案词库的注音。
# 可去部件拆字方案下载更全的、带声调的、已编译好的词典: https://github.com/mirtlecn/rime-radical-pinyin#反查带声调注音
dictionary: rime_ice
# comment_format: # 自定义 comment例如在左右加上括号
# - xform/^/(/
# - xform/$/)/
# 处理符合特定规则的输入码,如网址、反查
recognizer:
import_preset: default # 从 default.yaml 继承通用的
patterns: # 再增加方案专有的:
punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols
radical_lookup: "^uU[a-z]+$" # 响应部件拆字的反查,触发前缀与 radical_lookup/prefix 匹配
unicode: "^U[a-f0-9]+" # 脚本将自动获取第 2 个字符 U 作为触发前缀,响应 lua_translator@*unicode输出 Unicode 字符
number: "^R[0-9]+[.]?[0-9]*" # 脚本将自动获取第 2 个字符 R 作为触发前缀,响应 lua_translator@*number_translator数字金额大写
calculator: "^cC.+" # 响应 lua_translator@*calc_translator计算器。前缀设定项 calculator/prefix
gregorian_to_lunar: "^N[0-9]{1,8}" # 脚本将自动获取第 2 个字符 N 作为触发前缀,响应 lua_translator@*lunar公历转农历输入 N20240115 得到「二〇二三年腊月初五」
# 从 default 继承快捷键
key_binder:
import_preset: default # 从 default.yaml 继承通用的
search: "`" # 辅码引导符,要添加到 speller/alphabet
# bindings: # 也可以再增加方案专有的
# editor 用来定制操作键的行为,以下是默认行为 https://github.com/rime/librime/blob/master/src/rime/gear/editor.cc
editor:
bindings:
space: confirm # 空格键:上屏候选项
Return: commit_raw_input # 回车键:上屏原始输入
Control+Return: commit_script_text # Ctrl+回车键:上屏变换后输入(经过 preedit_format 转换的)
Control+Shift+Return: commit_comment # Ctrl+Shift+回车键:上屏 comment
BackSpace: revert # 退格键:向前删除(撤消上次输入)
Delete: delete # Delete 键:向后删除
Control+BackSpace: back_syllable # Ctrl+退格键:删除一个音节
Control+Delete: delete_candidate # Ctrl+Delete键删除或降权候选项
Escape: cancel # Esc 键:取消输入
# 拼写设定
speller:
# 如果不想让什么标点直接上屏,可以加在 alphabet或者编辑标点符号为两个及以上的映射
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA`
# initials 定义仅作为始码的按键,排除 ` 让单个的 ` 可以直接上屏
initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '" # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
algebra:
- erase/^xx$/
- derive/^([jqxy])u$/$1v/
- derive/^([aoe])([ioun])$/$1$1$2/
- xform/^([aoe])(ng)?$/$1$1$2/
- xform/iu$/Ⓠ/
- xform/[iu]a$/Ⓦ/
- xform/[uv]an$/Ⓡ/
- xform/[uv]e$/Ⓣ/
- xform/ing$|uai$/Ⓨ/
- xform/^sh/Ⓤ/
- xform/^ch/Ⓘ/
- xform/^zh/Ⓥ/
- xform/uo$/Ⓞ/
- xform/[uv]n$/Ⓟ/
- xform/(.)i?ong$/$1Ⓢ/
- xform/[iu]ang$/Ⓓ/
- xform/(.)en$/$1Ⓕ/
- xform/(.)eng$/$1Ⓖ/
- xform/(.)ang$/$1Ⓗ/
- xform/ian$/Ⓜ/
- xform/(.)an$/$1Ⓙ/
- xform/iao$/Ⓒ/
- xform/(.)ao$/$1Ⓚ/
- xform/(.)ai$/$1Ⓛ/
- xform/(.)ei$/$1Ⓩ/
- xform/ie$/Ⓧ/
- xform/ui$/Ⓥ/
- xform/(.)ou$/$1Ⓑ/
- xform/in$/Ⓝ/
- xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⓂⒿⒸⓀⓁⓏⓍⓋⒷⓃ/qwrtyuiopsdfghmjcklzxvbn/
# - abbrev/^(.).+$/$1/ # 首字母简拼,开启后会导致 3 个字母时 kj'x 变成 k'jx 的问题

View File

@ -0,0 +1,355 @@
# Rime schema
# encoding: utf-8
# 复制自 rime_ice.schema.yaml ,适配了双拼。
# 双拼键位映射复制自 https://github.com/rime/rime-double-pinyin
# 双拼之间主要就是 speller/algebra 和 translator/preedit_format 这里有区别。
#
# 全拼的自定义文本和双拼有些冲突,改成了 custom_phrase_double ,需要创建 custom_phrase_double.txt 文件。
#
# 目前配置中有个别功能仍然是全拼拼写,不能自动适配,所以需要手动修改一下:
# - 英文中部分符号的派生规则:在英文方案文件 melt_eng.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# - 部件拆字的拼写规则:在部件拆字方案 radical_pinyin.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# 打个补丁一劳永逸,补丁写法参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133) 或 others/双拼补丁示例/ 文件夹
# 方案说明
schema:
schema_id: double_pinyin_abc
name: 智能 ABC 双拼
version: "1"
author:
- Dvel
description: |
雾凇拼音 - 智能 ABC 双拼
https://github.com/iDvel/rime-ice
dependencies:
- melt_eng # 英文输入,作为次翻译器挂载到拼音方案
- radical_pinyin # 部件拆字,反查及辅码
# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符abbrev 可自定义一个字符
switches:
- name: ascii_mode
states: [ 中, ]
- name: ascii_punct # 中英标点
states: [ ¥, $ ]
- name: traditionalization
states: [ 简, 繁 ]
- name: emoji
states: [ 💀, 😄 ]
reset: 1
- name: full_shape
states: [ 半角, 全角 ]
- name: search_single_char # search.lua 的功能开关,辅码查词时是否单字优先
states: [正常, 单字]
abbrev: [词, 单]
# 输入引擎
engine:
processors:
- lua_processor@*select_character # 以词定字
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- affix_segmentor@radical_lookup # 部件拆字自定义 tag
- punct_segmentor
- fallback_segmentor
translators:
- punct_translator
- script_translator
- lua_translator@*date_translator # 时间、日期、星期
- lua_translator@*lunar # 农历
- table_translator@custom_phrase # 自定义短语 custom_phrase_double.txt
- table_translator@melt_eng # 英文输入
- table_translator@cn_en # 中英混合词汇
- table_translator@radical_lookup # 部件拆字反查
- lua_translator@*unicode # Unicode
- lua_translator@*number_translator # 数字、金额大写
- lua_translator@*calc_translator # 计算器
- lua_translator@*force_gc # 暴力 GC
filters:
- lua_filter@*corrector # 错音错字提示
- reverse_lookup_filter@radical_reverse_lookup # 部件拆字滤镜
- lua_filter@*autocap_filter # 英文自动大写
- lua_filter@*pin_cand_filter # 置顶候选项(顺序要求:置顶候选项 > Emoji > 简繁切换)
- lua_filter@*reduce_english_filter # 降低部分英语单词在候选项的位置
- simplifier@emoji # Emoji
- simplifier@traditionalize # 简繁切换
- lua_filter@*search@radical_pinyin # 部件拆字辅码
- uniquifier # 去重
# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字
date_translator:
date: date # 日期: 2022-11-29
time: time # 时间: 18:13
week: week # 星期: 星期二
datetime: datetime # ISO 8601 2022-11-29T18:13:11+08:00
timestamp: timestamp # 时间戳: 1669716794
# Lua 配置:农历的触发关键字
lunar: lunar # 农历: 二〇二三年冬月二十 癸卯年(兔)冬月二十
# Lua 配置: 降低部分英语单词在候选项的位置。
# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」
# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」
# 几种模式:
# all 降低脚本内置的单词(所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母words 作为自定义的额外补充
# custom 完全自定义,只降低 words 里的
# none 不降低任何单词,相当于没有启用这个 Lua
# (匹配的是编码,不是单词)
reduce_english_filter:
mode: custom # all | custom | none
idx: 2 # 降低到第 idx 个位置
# 自定义的单词列表,示例列表没有降低部分常用单词,如 and cat mail Mac but bad shit ……
words: [
aid, ann,
bail, bait, bam, band, bans, bat, bay, bend, bent, benz, bib, bid, bien, biz, boc, bop, bos, bud, buf, bach, bench, bush,
cab, cad, cain, cam, cans, cap, cef, chad, chan, chap, chef, cher, chew, chic, chin, chip, chit, coup, cum, cunt, cur, couch,
dab, dag, dal, dam, dent, dew, dial, diet, dim, din, dip, dis, dit, doug, dub, dug, dunn,
fab, fax, fob, fog, foul, fur,
gag, gail, gain, gal, gam, gaol, ged, gel, ger, guam, gus, gut,
hail, ham, hank, hans, hat, hay, heil, heir, hem, hep, hud, hum, hung, hunk, hut, hush,
jim, jug,
kat,
lab, lad, lag, laid, lam, laos, lap, lat, lax, lay, led, leg, lex, liam, lib, lid, lied, lien, lies, linn, lip, lit, liz, lob, lug, lund, lung, lux, lash, loch, lush,
mag, maid, mann, mar, mat, med, mel, mend, mens, ment, mil, mins, mint, mob, moc, mop, mos, mot, mud, mug, mum, mesh,
nap, nat, nay, neil, nib, nip, noun, nous, nun, nut, nail, nash,
pac, paid, pail, pain, pair, pak, pal, pam, pans, pant, pap, par, pat, paw, pax, pens, pic, pier, pies, pins, pint, pit, pix, pod, pop, pos, pot, pour, pow, pub, pinch, pouch,
rand, rant, rent, rep, res, ret, rex, rib, rid, rig, rim, rub, rug, rum, runc, runs, ranch,
sac, sail, sal, sam, sans, sap, saw, sax, sew, sham, shaw, shin, sig, sin, sip, sis, suit, sung, suns, sup, sur, sus,
tad, tail, taj, tar, tax, tec, ted, tel, ter, tex, tic, tied, tier, ties, tim, tin, tit, tour, tout, tum,
wag, wand, womens, wap, wax, weir, won,
yan, yen,
zach
]
# Lua 配置: 置顶候选项
# 注释太长了,请参考 pin_cand_filter.lua 开头的说明书。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml
enable_word_completion: true # 大于 4 音节的词条自动补全librime > 1.11.2
prism: double_pinyin_abc # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
spelling_hints: 8 # corrector.lua :为了让错音错字提示的 Lua 同时适配全拼双拼,将拼音显示在 comment 中
always_show_comments: true # corrector.lua Rime 默认在 preedit 等于 comment 时取消显示 comment这里强制一直显示供 corrector.lua 做判断用。
initial_quality: 1.2 # 拼音的权重应该比英文大
comment_format: # 标记拼音注释,供 corrector.lua 做判断用
- xform/^//
- xform/$//
preedit_format: # preedit_format 影响到输入框的显示和“Shift+回车”上屏的字符
- xform/o(\w)/0$1/
- xform/(\w)q/$1ei/
- xform/(\w)n/$1un/
- xform/(\w)g/$1eng/
- xform/(\w)w/$1ian/
- xform/([dtnljqx])r/$1iu/
- xform/0r/0er/
- xform/([nljqxb])t/$1iang/
- xform/(\w)t/$1uang/
- xform/(\w)y/$1ing/
- xform/([dtnlgkhaevrzcs])o/$1uo/
- xform/(\w)p/$1uan/
- xform/([jqx])s/$1iong/
- xform/(\w)s/$1ong/
- xform/([gkhaevrzcs])d/$1ua/
- xform/(\w)d/$1ia/
- xform/(\w)f/$1en/
- xform/(\w)h/$1ang/
- xform/(\w)j/$1an/
- xform/(\w)k/$1ao/
- xform/(\w)l/$1ai/
- xform/(\w)z/$1iao/
- xform/(\w)x/$1ie/
- xform/([gkhaev])c/$1uai/
- xform/(\w)c/$1in/
- xform/(\w)b/$1ou/
- xform/([nl])m/$1ve/
- xform/([jqxy])m/$1ue/
- xform/(\w)m/$1ui/
- "xform/(^|[ '])a/$1zh/"
- "xform/(^|[ '])e/$1ch/"
- "xform/(^|[ '])v/$1sh/"
- xform/0(\w)/$1/
- xform/([nl])v/$1ü/
- xform/([jqxy])v/$1u/
- xform/ü/v/ # ü 显示为 v
- xform/(?<=[A-Z])\s(?=[A-Z])// # 消除大写字母之间的空格
# 次翻译器,英文
melt_eng:
dictionary: melt_eng # 挂载词库 melt_eng.dict.yaml
enable_sentence: false # 禁止造句
enable_user_dict: false # 禁用用户词典
initial_quality: 1.1 # 初始权重
comment_format: # 自定义提示码
- xform/.*// # 清空提示码
# 中英混合词汇
cn_en:
dictionary: ""
user_dict: en_dicts/cn_en_abc
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 0.5
comment_format:
- xform/^.+$//
# 自定义短语
custom_phrase:
dictionary: ""
user_dict: custom_phrase_double # 需要手动创建 custom_phrase_double.txt 文件
db_class: stabledb
enable_completion: false # 补全提示
enable_sentence: false # 禁止造句
initial_quality: 99 # custom_phrase 的权重应该比 pinyin 和 melt_eng 大
# Emoji
emoji:
option_name: emoji # 对应 switches 中的 name
opencc_config: emoji.json # 选择要加载的 OpenCC 配置
inherit_comment: false # 在 corrector.lua 及反查中emoji 的 comment 显示为空
# 简繁切换
traditionalize:
option_name: traditionalization # 对应 switches 中的 name
opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json Rime 内置配置,在程序目录可找到)
tips: none # 转换提示: all 都显示 | char 仅单字显示 | none 不显示。
tags: [ abc, number, gregorian_to_lunar ] # 限制在对应 tag不对其他如反查的内容做简繁转换
# 标点符号
# punctuator 下面的三个子项:
# full_shape 全角标点映射
# half_shape 半角标点映射
# symbols Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的 symbols_caps_v.yaml 修改成了 'V' 开头。
# 以及新版 digit_separators 相关的属性
punctuator:
__include: default:/punctuator # 从 default.yaml 导入 punctuator 的所有配置,为了引用 digit_separators 等属性
full_shape:
__include: default:/punctuator/full_shape # 从 default.yaml 导入配置
half_shape:
__include: default:/punctuator/half_shape # 从 default.yaml 导入配置
symbols:
__include: symbols_caps_v:/symbols # 从 symbols_caps_v.yaml 导入配置
# 部件拆字反查
radical_lookup:
tag: radical_lookup
dictionary: radical_pinyin
enable_user_dict: false
prefix: "uU" # 反查前缀(反查时前缀会消失影响打英文所以设定为两个字母,或可改成一个非字母符号),与 recognizer/patterns/radical_lookup 匹配
tips: " 〔拆字〕"
comment_format:
- erase/^.*$//
# 部件拆字滤镜
radical_reverse_lookup:
tags: [ radical_lookup ]
# dictionary 为拼音标注来源,目前是显示本方案词库的注音。
# 可去部件拆字方案下载更全的、带声调的、已编译好的词典: https://github.com/mirtlecn/rime-radical-pinyin#反查带声调注音
dictionary: rime_ice
# comment_format: # 自定义 comment例如在左右加上括号
# - xform/^/(/
# - xform/$/)/
# 处理符合特定规则的输入码,如网址、反查
recognizer:
import_preset: default # 从 default.yaml 继承通用的
patterns: # 再增加方案专有的:
punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols
radical_lookup: "^uU[a-z]+$" # 响应部件拆字的反查,触发前缀与 radical_lookup/prefix 匹配
unicode: "^U[a-f0-9]+" # 脚本将自动获取第 2 个字符 U 作为触发前缀,响应 lua_translator@*unicode输出 Unicode 字符
number: "^R[0-9]+[.]?[0-9]*" # 脚本将自动获取第 2 个字符 R 作为触发前缀,响应 lua_translator@*number_translator数字金额大写
calculator: "^cC.+" # 响应 lua_translator@*calc_translator计算器。前缀设定项 calculator/prefix
gregorian_to_lunar: "^N[0-9]{1,8}" # 脚本将自动获取第 2 个字符 N 作为触发前缀,响应 lua_translator@*lunar公历转农历输入 N20240115 得到「二〇二三年腊月初五」
# 从 default 继承快捷键
key_binder:
import_preset: default # 从 default.yaml 继承通用的
search: "`" # 辅码引导符,要添加到 speller/alphabet
# bindings: # 也可以再增加方案专有的
# editor 用来定制操作键的行为,以下是默认行为 https://github.com/rime/librime/blob/master/src/rime/gear/editor.cc
editor:
bindings:
space: confirm # 空格键:上屏候选项
Return: commit_raw_input # 回车键:上屏原始输入
Control+Return: commit_script_text # Ctrl+回车键:上屏变换后输入(经过 preedit_format 转换的)
Control+Shift+Return: commit_comment # Ctrl+Shift+回车键:上屏 comment
BackSpace: revert # 退格键:向前删除(撤消上次输入)
Delete: delete # Delete 键:向后删除
Control+BackSpace: back_syllable # Ctrl+退格键:删除一个音节
Control+Delete: delete_candidate # Ctrl+Delete键删除或降权候选项
Escape: cancel # Esc 键:取消输入
# 拼写设定
speller:
# 如果不想让什么标点直接上屏,可以加在 alphabet或者编辑标点符号为两个及以上的映射
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA`
# initials 定义仅作为始码的按键,排除 ` 让单个的 ` 可以直接上屏
initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '" # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
algebra:
- erase/^xx$/
- xform/^zh/Ⓐ/
- xform/^ch/Ⓔ/
- xform/^sh/Ⓥ/
- xform/^([aoe].*)$/Ⓞ$1/
- xform/ei$/Ⓠ/
- xform/ian$/Ⓦ/
- xform/er$|iu$/Ⓡ/
- xform/[iu]ang$/Ⓣ/
- xform/ing$/Ⓨ/
- xform/uo$/Ⓞ/
- xform/uan$/Ⓟ/
- xform/(.)i?ong$/$1Ⓢ/
- xform/[iu]a$/Ⓓ/
- xform/en$/Ⓕ/
- xform/eng$/Ⓖ/
- xform/ang$/Ⓗ/
- xform/an$/Ⓙ/
- xform/iao$/Ⓩ/
- xform/ao$/Ⓚ/
- xform/in$|uai$/Ⓒ/
- xform/ai$/Ⓛ/
- xform/ie$/Ⓧ/
- xform/ou$/Ⓑ/
- xform/un$/Ⓝ/
- xform/[uv]e$|ui$/Ⓜ/
- xlit/ⓆⓌⒺⓇⓉⓎⓄⓅⒶⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwertyopasdfghjklzxcvbnm/
# - abbrev/^(.).+$/$1/ # 首字母简拼,开启后会导致 3 个字母时 kj'x 变成 k'jx 的问题

View File

@ -0,0 +1,358 @@
# Rime schema
# encoding: utf-8
# 复制自 rime_ice.schema.yaml ,适配了双拼。
# 双拼键位映射复制自 https://github.com/rime/rime-double-pinyin
# 双拼之间主要就是 speller/algebra 和 translator/preedit_format 这里有区别。
#
# 全拼的自定义文本和双拼有些冲突,改成了 custom_phrase_double ,需要创建 custom_phrase_double.txt 文件。
#
# 目前配置中有个别功能仍然是全拼拼写,不能自动适配,所以需要手动修改一下:
# - 英文中部分符号的派生规则:在英文方案文件 melt_eng.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# - 部件拆字的拼写规则:在部件拆字方案 radical_pinyin.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# 打个补丁一劳永逸,补丁写法参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133) 或 others/双拼补丁示例/ 文件夹
# 方案说明
schema:
schema_id: double_pinyin_flypy
name: 小鹤双拼
version: "1"
author:
- Dvel
description: |
雾凇拼音 - 小鹤双拼
https://github.com/iDvel/rime-ice
dependencies:
- melt_eng # 英文输入,作为次翻译器挂载到拼音方案
- radical_pinyin # 部件拆字,反查及辅码
# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符abbrev 可自定义一个字符
switches:
- name: ascii_mode
states: [ 中, ]
- name: ascii_punct # 中英标点
states: [ ¥, $ ]
- name: traditionalization
states: [ 简, 繁 ]
- name: emoji
states: [ 💀, 😄 ]
reset: 1
- name: full_shape
states: [ 半角, 全角 ]
- name: search_single_char # search.lua 的功能开关,辅码查词时是否单字优先
states: [正常, 单字]
abbrev: [词, 单]
# 输入引擎
engine:
processors:
- lua_processor@*select_character # 以词定字
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- affix_segmentor@radical_lookup # 部件拆字自定义 tag
- punct_segmentor
- fallback_segmentor
translators:
- punct_translator
- script_translator
- lua_translator@*date_translator # 时间、日期、星期
- lua_translator@*lunar # 农历
- table_translator@custom_phrase # 自定义短语 custom_phrase_double.txt
- table_translator@melt_eng # 英文输入
- table_translator@cn_en # 中英混合词汇
- table_translator@radical_lookup # 部件拆字反查
- lua_translator@*unicode # Unicode
- lua_translator@*number_translator # 数字、金额大写
- lua_translator@*calc_translator # 计算器
- lua_translator@*force_gc # 暴力 GC
filters:
- lua_filter@*corrector # 错音错字提示
- reverse_lookup_filter@radical_reverse_lookup # 部件拆字滤镜
- lua_filter@*autocap_filter # 英文自动大写
- lua_filter@*pin_cand_filter # 置顶候选项(顺序要求:置顶候选项 > Emoji > 简繁切换)
- lua_filter@*reduce_english_filter # 降低部分英语单词在候选项的位置
- simplifier@emoji # Emoji
- simplifier@traditionalize # 简繁切换
- lua_filter@*search@radical_pinyin # 部件拆字辅码
- uniquifier # 去重
# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字
date_translator:
date: date # 日期: 2022-11-29
time: time # 时间: 18:13
week: week # 星期: 星期二
datetime: datetime # ISO 8601 2022-11-29T18:13:11+08:00
timestamp: timestamp # 时间戳: 1669716794
# Lua 配置:农历的触发关键字
lunar: lunar # 农历: 二〇二三年冬月二十 癸卯年(兔)冬月二十
# Lua 配置: 降低部分英语单词在候选项的位置。
# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」
# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」
# 几种模式:
# all 降低脚本内置的单词(所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母words 作为自定义的额外补充
# custom 完全自定义,只降低 words 里的
# none 不降低任何单词,相当于没有启用这个 Lua
# (匹配的是编码,不是单词)
reduce_english_filter:
mode: custom # all | custom | none
idx: 2 # 降低到第 idx 个位置
# 自定义的单词列表,示例列表没有降低部分常用单词,如 and cat mail Mac but bad shit ……
words: [
aid, ann,
bail, bait, bam, band, bans, bat, bay, bend, bent, benz, bib, bid, bien, biz, boc, bop, bos, bud, buf, bach, bench, bush,
cab, cad, cain, cam, cans, cap, cef, chad, chan, chap, chef, cher, chew, chic, chin, chip, chit, coup, cum, cunt, cur, couch,
dab, dag, dal, dam, dent, dew, dial, diet, dim, din, dip, dis, dit, doug, dub, dug, dunn,
fab, fax, fob, fog, foul, fur,
gag, gail, gain, gal, gam, gaol, ged, gel, ger, guam, gus, gut,
hail, ham, hank, hans, hat, hay, heil, heir, hem, hep, hud, hum, hung, hunk, hut, hush,
jim, jug,
kat,
lab, lad, lag, laid, lam, laos, lap, lat, lax, lay, led, leg, lex, liam, lib, lid, lied, lien, lies, linn, lip, lit, liz, lob, lug, lund, lung, lux, lash, loch, lush,
mag, maid, mann, mar, mat, med, mel, mend, mens, ment, mil, mins, mint, mob, moc, mop, mos, mot, mud, mug, mum, mesh,
nap, nat, nay, neil, nib, nip, noun, nous, nun, nut, nail, nash,
pac, paid, pail, pain, pair, pak, pal, pam, pans, pant, pap, par, pat, paw, pax, pens, pic, pier, pies, pins, pint, pit, pix, pod, pop, pos, pot, pour, pow, pub, pinch, pouch,
rand, rant, rent, rep, res, ret, rex, rib, rid, rig, rim, rub, rug, rum, runc, runs, ranch,
sac, sail, sal, sam, sans, sap, saw, sax, sew, sham, shaw, shin, sig, sin, sip, sis, suit, sung, suns, sup, sur, sus,
tad, tail, taj, tar, tax, tec, ted, tel, ter, tex, tic, tied, tier, ties, tim, tin, tit, tour, tout, tum,
wag, wand, womens, wap, wax, weir, won,
yan, yen,
zach
]
# Lua 配置: 置顶候选项
# 注释太长了,请参考 pin_cand_filter.lua 开头的说明书。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml
enable_word_completion: true # 大于 4 音节的词条自动补全librime > 1.11.2
prism: double_pinyin_flypy # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
spelling_hints: 8 # corrector.lua :为了让错音错字提示的 Lua 同时适配全拼双拼,将拼音显示在 comment 中
always_show_comments: true # corrector.lua Rime 默认在 preedit 等于 comment 时取消显示 comment这里强制一直显示供 corrector.lua 做判断用。
initial_quality: 1.2 # 拼音的权重应该比英文大
comment_format: # 标记拼音注释,供 corrector.lua 做判断用
- xform/^//
- xform/$//
preedit_format: # preedit_format 影响到输入框的显示和“Shift+回车”上屏的字符
- xform/(^|[ '])aa/$1a/
- xform/(^|[ '])ee/$1e/
- xform/(^|[ '])oo/$1o/
- xform/([bpmfdtnljqx])n/$1iao/
- xform/(\w)g/$1eng/
- xform/(\w)q/$1iu/
- xform/(\w)w/$1ei/
- xform/([dtnlgkhjqxyvuirzcs])r/$1uan/
- xform/(\w)t/$1ve/
- xform/(\w)y/$1un/
- xform/([dtnlgkhvuirzcs])o/$1uo/
- xform/(\w)p/$1ie/
- xform/([jqx])s/$1iong/
- xform/(\w)s/$1ong/
- xform/(\w)d/$1ai/
- xform/(\w)f/$1en/
- xform/(\w)h/$1ang/
- xform/(\w)j/$1an/
- xform/([gkhvuirzcs])k/$1uai/
- xform/(\w)k/$1ing/
- xform/([jqxnlb])l/$1iang/
- xform/(\w)l/$1uang/
- xform/(\w)z/$1ou/
- xform/([gkhvuirzcs])x/$1ua/
- xform/(\w)x/$1ia/
- xform/(\w)c/$1ao/
- xform/([dtgkhvuirzcs])v/$1ui/
- xform/(\w)b/$1in/
- xform/(\w)m/$1ian/
- xform/([aoe])\1(\w)/$1$2/
- "xform/(^|[ '])v/$1zh/"
- "xform/(^|[ '])i/$1ch/"
- "xform/(^|[ '])u/$1sh/"
- xform/([jqxy])v/$1u/
- xform/([nl])v/$1ü/
- xform/ü/v/ # ü 显示为 v
- xform/(?<=[A-Z])\s(?=[A-Z])// # 消除大写字母之间的空格
# 次翻译器,英文
melt_eng:
dictionary: melt_eng # 挂载词库 melt_eng.dict.yaml
enable_sentence: false # 禁止造句
enable_user_dict: false # 禁用用户词典
initial_quality: 1.1 # 初始权重
comment_format: # 自定义提示码
- xform/.*// # 清空提示码
# 中英混合词汇
cn_en:
dictionary: ""
user_dict: en_dicts/cn_en_flypy
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 0.5
comment_format:
- xform/^.+$//
# 自定义短语
custom_phrase:
dictionary: ""
user_dict: custom_phrase_double # 需要手动创建 custom_phrase_double.txt 文件
db_class: stabledb
enable_completion: false # 补全提示
enable_sentence: false # 禁止造句
initial_quality: 99 # custom_phrase 的权重应该比 pinyin 和 melt_eng 大
# Emoji
emoji:
option_name: emoji # 对应 switches 中的 name
opencc_config: emoji.json # 选择要加载的 OpenCC 配置
inherit_comment: false # 在 corrector.lua 及反查中emoji 的 comment 显示为空
# 简繁切换
traditionalize:
option_name: traditionalization # 对应 switches 中的 name
opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json Rime 内置配置,在程序目录可找到)
tips: none # 转换提示: all 都显示 | char 仅单字显示 | none 不显示。
tags: [ abc, number, gregorian_to_lunar ] # 限制在对应 tag不对其他如反查的内容做简繁转换
# 标点符号
# punctuator 下面的三个子项:
# full_shape 全角标点映射
# half_shape 半角标点映射
# symbols Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的 symbols_caps_v.yaml 修改成了 'V' 开头。
# 以及新版 digit_separators 相关的属性
punctuator:
__include: default:/punctuator # 从 default.yaml 导入 punctuator 的所有配置,为了引用 digit_separators 等属性
full_shape:
__include: default:/punctuator/full_shape # 从 default.yaml 导入配置
half_shape:
__include: default:/punctuator/half_shape # 从 default.yaml 导入配置
symbols:
__include: symbols_caps_v:/symbols # 从 symbols_caps_v.yaml 导入配置
# 部件拆字反查
radical_lookup:
tag: radical_lookup
dictionary: radical_pinyin
enable_user_dict: false
prefix: "uU" # 反查前缀(反查时前缀会消失影响打英文所以设定为两个字母,或可改成一个非字母符号),与 recognizer/patterns/radical_lookup 匹配
tips: " 〔拆字〕"
comment_format:
- erase/^.*$//
# 部件拆字滤镜
radical_reverse_lookup:
tags: [ radical_lookup ]
# dictionary 为拼音标注来源,目前是显示本方案词库的注音。
# 可去部件拆字方案下载更全的、带声调的、已编译好的词典: https://github.com/mirtlecn/rime-radical-pinyin#反查带声调注音
dictionary: rime_ice
# comment_format: # 自定义 comment例如在左右加上括号
# - xform/^/(/
# - xform/$/)/
# 处理符合特定规则的输入码,如网址、反查
recognizer:
import_preset: default # 从 default.yaml 继承通用的
patterns: # 再增加方案专有的:
punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols
radical_lookup: "^uU[a-z]+$" # 响应部件拆字的反查,触发前缀与 radical_lookup/prefix 匹配
unicode: "^U[a-f0-9]+" # 脚本将自动获取第 2 个字符 U 作为触发前缀,响应 lua_translator@*unicode输出 Unicode 字符
number: "^R[0-9]+[.]?[0-9]*" # 脚本将自动获取第 2 个字符 R 作为触发前缀,响应 lua_translator@*number_translator数字金额大写
calculator: "^cC.+" # 响应 lua_translator@*calc_translator计算器。前缀设定项 calculator/prefix
gregorian_to_lunar: "^N[0-9]{1,8}" # 脚本将自动获取第 2 个字符 N 作为触发前缀,响应 lua_translator@*lunar公历转农历输入 N20240115 得到「二〇二三年腊月初五」
# 从 default 继承快捷键
key_binder:
import_preset: default # 从 default.yaml 继承通用的
search: "`" # 辅码引导符,要添加到 speller/alphabet
# bindings: # 也可以再增加方案专有的
# editor 用来定制操作键的行为,以下是默认行为 https://github.com/rime/librime/blob/master/src/rime/gear/editor.cc
editor:
bindings:
space: confirm # 空格键:上屏候选项
Return: commit_raw_input # 回车键:上屏原始输入
Control+Return: commit_script_text # Ctrl+回车键:上屏变换后输入(经过 preedit_format 转换的)
Control+Shift+Return: commit_comment # Ctrl+Shift+回车键:上屏 comment
BackSpace: revert # 退格键:向前删除(撤消上次输入)
Delete: delete # Delete 键:向后删除
Control+BackSpace: back_syllable # Ctrl+退格键:删除一个音节
Control+Delete: delete_candidate # Ctrl+Delete键删除或降权候选项
Escape: cancel # Esc 键:取消输入
# 拼写设定
speller:
# 如果不想让什么标点直接上屏,可以加在 alphabet或者编辑标点符号为两个及以上的映射
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA`
# initials 定义仅作为始码的按键,排除 ` 让单个的 ` 可以直接上屏
initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '" # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
algebra:
- erase/^xx$/
- derive/^([jqxy])u$/$1v/
- derive/^([aoe])([ioun])$/$1$1$2/
- xform/^([aoe])(ng)?$/$1$1$2/
- xform/iu$/Ⓠ/
- xform/(.)ei$/$1Ⓦ/
- xform/uan$/Ⓡ/
- xform/[uv]e$/Ⓣ/
- xform/un$/Ⓨ/
- xform/^sh/Ⓤ/
- xform/^ch/Ⓘ/
- xform/^zh/Ⓥ/
- xform/uo$/Ⓞ/
- xform/ie$/Ⓟ/
- xform/(.)i?ong$/$1Ⓢ/
- xform/ing$|uai$/Ⓚ/
- xform/(.)ai$/$1Ⓓ/
- xform/(.)en$/$1Ⓕ/
- xform/(.)eng$/$1Ⓖ/
- xform/[iu]ang$/Ⓛ/
- xform/(.)ang$/$1Ⓗ/
- xform/ian$/Ⓜ/
- xform/(.)an$/$1Ⓙ/
- xform/(.)ou$/$1Ⓩ/
- xform/[iu]a$/Ⓧ/
- xform/iao$/Ⓝ/
- xform/(.)ao$/$1Ⓒ/
- xform/ui$/Ⓥ/
- xform/in$/Ⓑ/
- xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/
# - abbrev/^(.).+$/$1/ # 首字母简拼,开启后会导致 3 个字母时 kj'x 变成 k'jx 的问题

View File

@ -0,0 +1,361 @@
# Rime schema
# encoding: utf-8
# 复制自 rime_ice.schema.yaml ,适配了双拼。
# 双拼键位映射复制自 https://github.com/rime/rime-double-pinyin
# 双拼之间主要就是 speller/algebra 和 translator/preedit_format 这里有区别。
#
# 全拼的自定义文本和双拼有些冲突,改成了 custom_phrase_double ,需要创建 custom_phrase_double.txt 文件。
#
# 目前配置中有个别功能仍然是全拼拼写,不能自动适配,所以需要手动修改一下:
# - 英文中部分符号的派生规则:在英文方案文件 melt_eng.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# - 部件拆字的拼写规则:在部件拆字方案 radical_pinyin.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# 打个补丁一劳永逸,补丁写法参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133) 或 others/双拼补丁示例/ 文件夹
# 方案说明
schema:
schema_id: double_pinyin_mspy
name: 微软双拼
version: "1"
author:
- Dvel
description: |
雾凇拼音 - 微软双拼
https://github.com/iDvel/rime-ice
dependencies:
- melt_eng # 英文输入,作为次翻译器挂载到拼音方案
- radical_pinyin # 部件拆字,反查及辅码
# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符abbrev 可自定义一个字符
switches:
- name: ascii_mode
states: [ 中, ]
- name: ascii_punct # 中英标点
states: [ ¥, $ ]
- name: traditionalization
states: [ 简, 繁 ]
- name: emoji
states: [ 💀, 😄 ]
reset: 1
- name: full_shape
states: [ 半角, 全角 ]
- name: search_single_char # search.lua 的功能开关,辅码查词时是否单字优先
states: [正常, 单字]
abbrev: [词, 单]
# 输入引擎
engine:
processors:
- lua_processor@*select_character # 以词定字
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- affix_segmentor@radical_lookup # 部件拆字自定义 tag
- punct_segmentor
- fallback_segmentor
translators:
- punct_translator
- script_translator
- lua_translator@*date_translator # 时间、日期、星期
- lua_translator@*lunar # 农历
- table_translator@custom_phrase # 自定义短语 custom_phrase_double.txt
- table_translator@melt_eng # 英文输入
- table_translator@cn_en # 中英混合词汇
- table_translator@radical_lookup # 部件拆字反查
- lua_translator@*unicode # Unicode
- lua_translator@*number_translator # 数字、金额大写
- lua_translator@*calc_translator # 计算器
- lua_translator@*force_gc # 暴力 GC
filters:
- lua_filter@*corrector # 错音错字提示
- reverse_lookup_filter@radical_reverse_lookup # 部件拆字滤镜
- lua_filter@*autocap_filter # 英文自动大写
- lua_filter@*pin_cand_filter # 置顶候选项(顺序要求:置顶候选项 > Emoji > 简繁切换)
- lua_filter@*reduce_english_filter # 降低部分英语单词在候选项的位置
- simplifier@emoji # Emoji
- simplifier@traditionalize # 简繁切换
- lua_filter@*search@radical_pinyin # 部件拆字辅码
- uniquifier # 去重
# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字
date_translator:
date: date # 日期: 2022-11-29
time: time # 时间: 18:13
week: week # 星期: 星期二
datetime: datetime # ISO 8601 2022-11-29T18:13:11+08:00
timestamp: timestamp # 时间戳: 1669716794
# Lua 配置:农历的触发关键字
lunar: lunar # 农历: 二〇二三年冬月二十 癸卯年(兔)冬月二十
# Lua 配置: 降低部分英语单词在候选项的位置。
# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」
# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」
# 几种模式:
# all 降低脚本内置的单词(所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母words 作为自定义的额外补充
# custom 完全自定义,只降低 words 里的
# none 不降低任何单词,相当于没有启用这个 Lua
# (匹配的是编码,不是单词)
reduce_english_filter:
mode: custom # all | custom | none
idx: 2 # 降低到第 idx 个位置
# 自定义的单词列表,示例列表没有降低部分常用单词,如 and cat mail Mac but bad shit ……
words: [
aid, ann,
bail, bait, bam, band, bans, bat, bay, bend, bent, benz, bib, bid, bien, biz, boc, bop, bos, bud, buf, bach, bench, bush,
cab, cad, cain, cam, cans, cap, cef, chad, chan, chap, chef, cher, chew, chic, chin, chip, chit, coup, cum, cunt, cur, couch,
dab, dag, dal, dam, dent, dew, dial, diet, dim, din, dip, dis, dit, doug, dub, dug, dunn,
fab, fax, fob, fog, foul, fur,
gag, gail, gain, gal, gam, gaol, ged, gel, ger, guam, gus, gut,
hail, ham, hank, hans, hat, hay, heil, heir, hem, hep, hud, hum, hung, hunk, hut, hush,
jim, jug,
kat,
lab, lad, lag, laid, lam, laos, lap, lat, lax, lay, led, leg, lex, liam, lib, lid, lied, lien, lies, linn, lip, lit, liz, lob, lug, lund, lung, lux, lash, loch, lush,
mag, maid, mann, mar, mat, med, mel, mend, mens, ment, mil, mins, mint, mob, moc, mop, mos, mot, mud, mug, mum, mesh,
nap, nat, nay, neil, nib, nip, noun, nous, nun, nut, nail, nash,
pac, paid, pail, pain, pair, pak, pal, pam, pans, pant, pap, par, pat, paw, pax, pens, pic, pier, pies, pins, pint, pit, pix, pod, pop, pos, pot, pour, pow, pub, pinch, pouch,
rand, rant, rent, rep, res, ret, rex, rib, rid, rig, rim, rub, rug, rum, runc, runs, ranch,
sac, sail, sal, sam, sans, sap, saw, sax, sew, sham, shaw, shin, sig, sin, sip, sis, suit, sung, suns, sup, sur, sus,
tad, tail, taj, tar, tax, tec, ted, tel, ter, tex, tic, tied, tier, ties, tim, tin, tit, tour, tout, tum,
wag, wand, womens, wap, wax, weir, won,
yan, yen,
zach
]
# Lua 配置: 置顶候选项
# 注释太长了,请参考 pin_cand_filter.lua 开头的说明书。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml
enable_word_completion: true # 大于 4 音节的词条自动补全librime > 1.11.2
prism: double_pinyin_mspy # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
spelling_hints: 8 # corrector.lua :为了让错音错字提示的 Lua 同时适配全拼双拼,将拼音显示在 comment 中
always_show_comments: true # corrector.lua Rime 默认在 preedit 等于 comment 时取消显示 comment这里强制一直显示供 corrector.lua 做判断用。
initial_quality: 1.2 # 拼音的权重应该比英文大
comment_format: # 标记拼音注释,供 corrector.lua 做判断用
- xform/^//
- xform/$//
preedit_format: # preedit_format 影响到输入框的显示和“Shift+回车”上屏的字符
- xform/([aoe])(\w)/0$2/
- xform/([bpmnljqxy])n/$1in/
- xform/(\w)g/$1eng/
- xform/(\w)q/$1iu/
- xform/([gkhvuirzcs])w/$1ua/
- xform/(\w)w/$1ia/
- xform/([dtnlgkhjqxyvuirzcs])r/$1uan/
- xform/0r/er/
- xform/([dtgkhvuirzcs])v/$1ui/
- xform/(\w)v/$1ve/
- xform/(\w)t/$1ve/
- xform/([gkhvuirzcs])y/$1uai/
- xform/(\w)y/$1v/
- xform/([dtnlgkhvuirzcs])o/$1uo/
- xform/(\w)p/$1un/
- xform/([jqx])s/$1iong/
- xform/(\w)s/$1ong/
- xform/([jqxnlb])d/$1iang/
- xform/(\w)d/$1uang/
- xform/(\w)f/$1en/
- xform/(\w)h/$1ang/
- xform/(\w)j/$1an/
- xform/(\w)k/$1ao/
- xform/(\w)l/$1ai/
- xform/(\w)z/$1ei/
- xform/(\w)x/$1ie/
- xform/(\w)c/$1iao/
- xform/(\w)b/$1ou/
- xform/(\w)m/$1ian/
- xform/(\w);/$1ing/
- xform/0(\w)/$1/
- "xform/(^|[ '])v/$1zh/"
- "xform/(^|[ '])i/$1ch/"
- "xform/(^|[ '])u/$1sh/"
- xform/([jqxy])v/$1u/
- xform/([nl])v/$1ü/
- xform/ü/v/ # ü 显示为 v
- xform/(?<=[A-Z])\s(?=[A-Z])// # 消除大写字母之间的空格
# 次翻译器,英文
melt_eng:
dictionary: melt_eng # 挂载词库 melt_eng.dict.yaml
enable_sentence: false # 禁止造句
enable_user_dict: false # 禁用用户词典
initial_quality: 1.1 # 初始权重
comment_format: # 自定义提示码
- xform/.*// # 清空提示码
# 中英混合词汇
cn_en:
dictionary: ""
user_dict: en_dicts/cn_en_mspy
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 0.5
comment_format:
- xform/^.+$//
# 自定义短语
custom_phrase:
dictionary: ""
user_dict: custom_phrase_double # 需要手动创建 custom_phrase_double.txt 文件
db_class: stabledb
enable_completion: false # 补全提示
enable_sentence: false # 禁止造句
initial_quality: 99 # custom_phrase 的权重应该比 pinyin 和 melt_eng 大
# Emoji
emoji:
option_name: emoji # 对应 switches 中的 name
opencc_config: emoji.json # 选择要加载的 OpenCC 配置
inherit_comment: false # 在 corrector.lua 及反查中emoji 的 comment 显示为空
# 简繁切换
traditionalize:
option_name: traditionalization # 对应 switches 中的 name
opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json Rime 内置配置,在程序目录可找到)
tips: none # 转换提示: all 都显示 | char 仅单字显示 | none 不显示。
tags: [ abc, number, gregorian_to_lunar ] # 限制在对应 tag不对其他如反查的内容做简繁转换
# 标点符号
# punctuator 下面的三个子项:
# full_shape 全角标点映射
# half_shape 半角标点映射
# symbols Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的 symbols_caps_v.yaml 修改成了 'V' 开头。
# 以及新版 digit_separators 相关的属性
punctuator:
__include: default:/punctuator # 从 default.yaml 导入 punctuator 的所有配置,为了引用 digit_separators 等属性
full_shape:
__include: default:/punctuator/full_shape # 从 default.yaml 导入配置
half_shape:
__include: default:/punctuator/half_shape # 从 default.yaml 导入配置
symbols:
__include: symbols_caps_v:/symbols # 从 symbols_caps_v.yaml 导入配置
# 部件拆字反查
radical_lookup:
tag: radical_lookup
dictionary: radical_pinyin
enable_user_dict: false
prefix: "uU" # 反查前缀(反查时前缀会消失影响打英文所以设定为两个字母,或可改成一个非字母符号),与 recognizer/patterns/radical_lookup 匹配
tips: " 〔拆字〕"
comment_format:
- erase/^.*$//
# 部件拆字滤镜
radical_reverse_lookup:
tags: [ radical_lookup ]
# dictionary 为拼音标注来源,目前是显示本方案词库的注音。
# 可去部件拆字方案下载更全的、带声调的、已编译好的词典: https://github.com/mirtlecn/rime-radical-pinyin#反查带声调注音
dictionary: rime_ice
# comment_format: # 自定义 comment例如在左右加上括号
# - xform/^/(/
# - xform/$/)/
# 处理符合特定规则的输入码,如网址、反查
recognizer:
import_preset: default # 从 default.yaml 继承通用的
patterns: # 再增加方案专有的:
punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols
radical_lookup: "^uU[a-z;]+$" # 响应部件拆字的反查,触发前缀与 radical_lookup/prefix 匹配
unicode: "^U[a-f0-9]+" # 脚本将自动获取第 2 个字符 U 作为触发前缀,响应 lua_translator@*unicode输出 Unicode 字符
number: "^R[0-9]+[.]?[0-9]*" # 脚本将自动获取第 2 个字符 R 作为触发前缀,响应 lua_translator@*number_translator数字金额大写
calculator: "^cC.+" # 响应 lua_translator@*calc_translator计算器。前缀设定项 calculator/prefix
gregorian_to_lunar: "^N[0-9]{1,8}" # 脚本将自动获取第 2 个字符 N 作为触发前缀,响应 lua_translator@*lunar公历转农历输入 N20240115 得到「二〇二三年腊月初五」
# 从 default 继承快捷键
key_binder:
import_preset: default # 从 default.yaml 继承通用的
search: "`" # 辅码引导符,要添加到 speller/alphabet
# bindings: # 也可以再增加方案专有的
# editor 用来定制操作键的行为,以下是默认行为 https://github.com/rime/librime/blob/master/src/rime/gear/editor.cc
editor:
bindings:
space: confirm # 空格键:上屏候选项
Return: commit_raw_input # 回车键:上屏原始输入
Control+Return: commit_script_text # Ctrl+回车键:上屏变换后输入(经过 preedit_format 转换的)
Control+Shift+Return: commit_comment # Ctrl+Shift+回车键:上屏 comment
BackSpace: revert # 退格键:向前删除(撤消上次输入)
Delete: delete # Delete 键:向后删除
Control+BackSpace: back_syllable # Ctrl+退格键:删除一个音节
Control+Delete: delete_candidate # Ctrl+Delete键删除或降权候选项
Escape: cancel # Esc 键:取消输入
# 拼写设定
speller:
# 如果不想让什么标点直接上屏,可以加在 alphabet或者编辑标点符号为两个及以上的映射
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA;`
# initials 定义仅作为始码的按键,排除 ` ; 让单个的 ` ; 可以直接上屏
initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '" # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
algebra:
- erase/^xx$/
- derive/^([jqxy])u$/$1v/
- derive/^([aoe].*)$/o$1/
- xform/^([ae])(.*)$/$1$1$2/
- xform/iu$/Ⓠ/
- xform/[iu]a$/Ⓦ/
- xform/er$|[uv]an$/Ⓡ/
- xform/[uv]e$/Ⓣ/
- xform/v$|uai$/Ⓨ/
- xform/^sh/Ⓤ/
- xform/^ch/Ⓘ/
- xform/^zh/Ⓥ/
- xform/uo$/Ⓞ/
- xform/[uv]n$/Ⓟ/
- xform/(.)i?ong$/$1Ⓢ/
- xform/[iu]ang$/Ⓓ/
- xform/(.)en$/$1Ⓕ/
- xform/(.)eng$/$1Ⓖ/
- xform/(.)ang$/$1Ⓗ/
- xform/ian$/Ⓜ/
- xform/(.)an$/$1Ⓙ/
- xform/iao$/Ⓒ/
- xform/(.)ao$/$1Ⓚ/
- xform/(.)ai$/$1Ⓛ/
- xform/(.)ei$/$1Ⓩ/
- xform/ie$/Ⓧ/
- xform/ui$/Ⓥ/
- derive/Ⓣ$/Ⓥ/
- xform/(.)ou$/$1Ⓑ/
- xform/in$/Ⓝ/
- xform/ing$/;/
- xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⓂⒿⒸⓀⓁⓏⓍⓋⒷⓃ/qwrtyuiopsdfghmjcklzxvbn/
# - abbrev/^(.).+$/$1/ # 首字母简拼,开启后会导致 3 个字母时 kj'x 变成 k'jx 的问题

View File

@ -0,0 +1,360 @@
# Rime schema
# encoding: utf-8
# 复制自 rime_ice.schema.yaml ,适配了双拼。
# 双拼键位映射复制自 https://github.com/rime/rime-double-pinyin
# 双拼之间主要就是 speller/algebra 和 translator/preedit_format 这里有区别。
#
# 全拼的自定义文本和双拼有些冲突,改成了 custom_phrase_double ,需要创建 custom_phrase_double.txt 文件。
#
# 目前配置中有个别功能仍然是全拼拼写,不能自动适配,所以需要手动修改一下:
# - 英文中部分符号的派生规则:在英文方案文件 melt_eng.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# - 部件拆字的拼写规则:在部件拆字方案 radical_pinyin.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# 打个补丁一劳永逸,补丁写法参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133) 或 others/双拼补丁示例/ 文件夹
# 方案说明
schema:
schema_id: double_pinyin_sogou
name: 搜狗双拼
version: "1"
author:
- Dvel
description: |
雾凇拼音 - 搜狗双拼
https://github.com/iDvel/rime-ice
dependencies:
- melt_eng # 英文输入,作为次翻译器挂载到拼音方案
- radical_pinyin # 部件拆字,反查及辅码
# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符abbrev 可自定义一个字符
switches:
- name: ascii_mode
states: [ 中, ]
- name: ascii_punct # 中英标点
states: [ ¥, $ ]
- name: traditionalization
states: [ 简, 繁 ]
- name: emoji
states: [ 💀, 😄 ]
reset: 1
- name: full_shape
states: [ 半角, 全角 ]
- name: search_single_char # search.lua 的功能开关,辅码查词时是否单字优先
states: [正常, 单字]
abbrev: [词, 单]
# 输入引擎
engine:
processors:
- lua_processor@*select_character # 以词定字
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- affix_segmentor@radical_lookup # 部件拆字自定义 tag
- punct_segmentor
- fallback_segmentor
translators:
- punct_translator
- script_translator
- lua_translator@*date_translator # 时间、日期、星期
- lua_translator@*lunar # 农历
- table_translator@custom_phrase # 自定义短语 custom_phrase_double.txt
- table_translator@cn_en # 中英混合词汇
- table_translator@melt_eng # 英文输入
- table_translator@radical_lookup # 部件拆字反查
- lua_translator@*unicode # Unicode
- lua_translator@*number_translator # 数字、金额大写
- lua_translator@*calc_translator # 计算器
- lua_translator@*force_gc # 暴力 GC
filters:
- lua_filter@*corrector # 错音错字提示
- reverse_lookup_filter@radical_reverse_lookup # 部件拆字滤镜
- lua_filter@*autocap_filter # 英文自动大写
- lua_filter@*pin_cand_filter # 置顶候选项(顺序要求:置顶候选项 > Emoji > 简繁切换)
- lua_filter@*reduce_english_filter # 降低部分英语单词在候选项的位置
- simplifier@emoji # Emoji
- simplifier@traditionalize # 简繁切换
- lua_filter@*search@radical_pinyin # 部件拆字辅码
- uniquifier # 去重
# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字
date_translator:
date: date # 日期: 2022-11-29
time: time # 时间: 18:13
week: week # 星期: 星期二
datetime: datetime # ISO 8601 2022-11-29T18:13:11+08:00
timestamp: timestamp # 时间戳: 1669716794
# Lua 配置:农历的触发关键字
lunar: lunar # 农历: 二〇二三年冬月二十 癸卯年(兔)冬月二十
# Lua 配置: 降低部分英语单词在候选项的位置。
# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」
# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」
# 几种模式:
# all 降低脚本内置的单词(所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母words 作为自定义的额外补充
# custom 完全自定义,只降低 words 里的
# none 不降低任何单词,相当于没有启用这个 Lua
# (匹配的是编码,不是单词)
reduce_english_filter:
mode: custom # all | custom | none
idx: 2 # 降低到第 idx 个位置
# 自定义的单词列表,示例列表没有降低部分常用单词,如 and cat mail Mac but bad shit ……
words: [
aid, ann,
bail, bait, bam, band, bans, bat, bay, bend, bent, benz, bib, bid, bien, biz, boc, bop, bos, bud, buf, bach, bench, bush,
cab, cad, cain, cam, cans, cap, cef, chad, chan, chap, chef, cher, chew, chic, chin, chip, chit, coup, cum, cunt, cur, couch,
dab, dag, dal, dam, dent, dew, dial, diet, dim, din, dip, dis, dit, doug, dub, dug, dunn,
fab, fax, fob, fog, foul, fur,
gag, gail, gain, gal, gam, gaol, ged, gel, ger, guam, gus, gut,
hail, ham, hank, hans, hat, hay, heil, heir, hem, hep, hud, hum, hung, hunk, hut, hush,
jim, jug,
kat,
lab, lad, lag, laid, lam, laos, lap, lat, lax, lay, led, leg, lex, liam, lib, lid, lied, lien, lies, linn, lip, lit, liz, lob, lug, lund, lung, lux, lash, loch, lush,
mag, maid, mann, mar, mat, med, mel, mend, mens, ment, mil, mins, mint, mob, moc, mop, mos, mot, mud, mug, mum, mesh,
nap, nat, nay, neil, nib, nip, noun, nous, nun, nut, nail, nash,
pac, paid, pail, pain, pair, pak, pal, pam, pans, pant, pap, par, pat, paw, pax, pens, pic, pier, pies, pins, pint, pit, pix, pod, pop, pos, pot, pour, pow, pub, pinch, pouch,
rand, rant, rent, rep, res, ret, rex, rib, rid, rig, rim, rub, rug, rum, runc, runs, ranch,
sac, sail, sal, sam, sans, sap, saw, sax, sew, sham, shaw, shin, sig, sin, sip, sis, suit, sung, suns, sup, sur, sus,
tad, tail, taj, tar, tax, tec, ted, tel, ter, tex, tic, tied, tier, ties, tim, tin, tit, tour, tout, tum,
wag, wand, womens, wap, wax, weir, won,
yan, yen,
zach
]
# Lua 配置: 置顶候选项
# 注释太长了,请参考 pin_cand_filter.lua 开头的说明书。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml
enable_word_completion: true # 大于 4 音节的词条自动补全librime > 1.11.2
prism: double_pinyin_sogou # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
spelling_hints: 8 # corrector.lua :为了让错音错字提示的 Lua 同时适配全拼双拼,将拼音显示在 comment 中
always_show_comments: true # corrector.lua Rime 默认在 preedit 等于 comment 时取消显示 comment这里强制一直显示供 corrector.lua 做判断用。
initial_quality: 1.2 # 拼音的权重应该比英文大
comment_format: # 标记拼音注释,供 corrector.lua 做判断用
- xform/^//
- xform/$//
preedit_format: # preedit_format 影响到输入框的显示和“Shift+回车”上屏的字符
- xform/([aoe])(\w)/0$2/
- xform/([bpmnljqxy])n/$1in/
- xform/(\w)g/$1eng/
- xform/(\w)q/$1iu/
- xform/([gkhvuirzcs])w/$1ua/
- xform/(\w)w/$1ia/
- xform/([dtnlgkhjqxyvuirzcs])r/$1uan/
- xform/0r/er/
- xform/([dtgkhvuirzcs])v/$1ui/
- xform/(\w)v/$1ve/
- xform/(\w)t/$1ve/
- xform/([gkhvuirzcs])y/$1uai/
- xform/(\w)y/$1v/
- xform/([dtnlgkhvuirzcs])o/$1uo/
- xform/(\w)p/$1un/
- xform/([jqx])s/$1iong/
- xform/(\w)s/$1ong/
- xform/([jqxnlb])d/$1iang/
- xform/(\w)d/$1uang/
- xform/(\w)f/$1en/
- xform/(\w)h/$1ang/
- xform/(\w)j/$1an/
- xform/(\w)k/$1ao/
- xform/(\w)l/$1ai/
- xform/(\w)z/$1ei/
- xform/(\w)x/$1ie/
- xform/(\w)c/$1iao/
- xform/(\w)b/$1ou/
- xform/(\w)m/$1ian/
- xform/(\w);/$1ing/
- xform/0(\w)/$1/
- "xform/(^|[ '])v/$1zh/"
- "xform/(^|[ '])i/$1ch/"
- "xform/(^|[ '])u/$1sh/"
- xform/([jqxy])v/$1u/
- xform/([nl])v/$1ü/
- xform/ü/v/ # ü 显示为 v
- xform/(?<=[A-Z])\s(?=[A-Z])// # 消除大写字母之间的空格
# 次翻译器,英文
melt_eng:
dictionary: melt_eng # 挂载词库 melt_eng.dict.yaml
enable_sentence: false # 禁止造句
enable_user_dict: false # 禁用用户词典
initial_quality: 1.1 # 初始权重
comment_format: # 自定义提示码
- xform/.*// # 清空提示码
# 中英混合词汇
cn_en:
dictionary: ""
user_dict: en_dicts/cn_en_sogou
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 0.5
comment_format:
- xform/^.+$//
# 自定义短语
custom_phrase:
dictionary: ""
user_dict: custom_phrase_double # 需要手动创建 custom_phrase_double.txt 文件
db_class: stabledb
enable_completion: false # 补全提示
enable_sentence: false # 禁止造句
initial_quality: 99 # custom_phrase 的权重应该比 pinyin 和 melt_eng 大
# Emoji
emoji:
option_name: emoji # 对应 switches 中的 name
opencc_config: emoji.json # 选择要加载的 OpenCC 配置
inherit_comment: false # 在 corrector.lua 及反查中emoji 的 comment 显示为空
# 简繁切换
traditionalize:
option_name: traditionalization # 对应 switches 中的 name
opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json Rime 内置配置,在程序目录可找到)
tips: none # 转换提示: all 都显示 | char 仅单字显示 | none 不显示。
tags: [ abc, number, gregorian_to_lunar ] # 限制在对应 tag不对其他如反查的内容做简繁转换
# 标点符号
# punctuator 下面的三个子项:
# full_shape 全角标点映射
# half_shape 半角标点映射
# symbols Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的 symbols_caps_v.yaml 修改成了 'V' 开头。
# 以及新版 digit_separators 相关的属性
punctuator:
__include: default:/punctuator # 从 default.yaml 导入 punctuator 的所有配置,为了引用 digit_separators 等属性
full_shape:
__include: default:/punctuator/full_shape # 从 default.yaml 导入配置
half_shape:
__include: default:/punctuator/half_shape # 从 default.yaml 导入配置
symbols:
__include: symbols_caps_v:/symbols # 从 symbols_caps_v.yaml 导入配置
# 部件拆字反查
radical_lookup:
tag: radical_lookup
dictionary: radical_pinyin
enable_user_dict: false
prefix: "uU" # 反查前缀(反查时前缀会消失影响打英文所以设定为两个字母,或可改成一个非字母符号),与 recognizer/patterns/radical_lookup 匹配
tips: " 〔拆字〕"
comment_format:
- erase/^.*$//
# 部件拆字滤镜
radical_reverse_lookup:
tags: [ radical_lookup ]
# dictionary 为拼音标注来源,目前是显示本方案词库的注音。
# 可去部件拆字方案下载更全的、带声调的、已编译好的词典: https://github.com/mirtlecn/rime-radical-pinyin#反查带声调注音
dictionary: rime_ice
# comment_format: # 自定义 comment例如在左右加上括号
# - xform/^/(/
# - xform/$/)/
# 处理符合特定规则的输入码,如网址、反查
recognizer:
import_preset: default # 从 default.yaml 继承通用的
patterns: # 再增加方案专有的:
punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols
radical_lookup: "^uU[a-z;]+$" # 响应部件拆字的反查,触发前缀与 radical_lookup/prefix 匹配
unicode: "^U[a-f0-9]+" # 脚本将自动获取第 2 个字符 U 作为触发前缀,响应 lua_translator@*unicode输出 Unicode 字符
number: "^R[0-9]+[.]?[0-9]*" # 脚本将自动获取第 2 个字符 R 作为触发前缀,响应 lua_translator@*number_translator数字金额大写
calculator: "^cC.+" # 响应 lua_translator@*calc_translator计算器。前缀设定项 calculator/prefix
gregorian_to_lunar: "^N[0-9]{1,8}" # 脚本将自动获取第 2 个字符 N 作为触发前缀,响应 lua_translator@*lunar公历转农历输入 N20240115 得到「二〇二三年腊月初五」
# 从 default 继承快捷键
key_binder:
import_preset: default # 从 default.yaml 继承通用的
search: "`" # 辅码引导符,要添加到 speller/alphabet
# bindings: # 也可以再增加方案专有的
# editor 用来定制操作键的行为,以下是默认行为 https://github.com/rime/librime/blob/master/src/rime/gear/editor.cc
editor:
bindings:
space: confirm # 空格键:上屏候选项
Return: commit_raw_input # 回车键:上屏原始输入
Control+Return: commit_script_text # Ctrl+回车键:上屏变换后输入(经过 preedit_format 转换的)
Control+Shift+Return: commit_comment # Ctrl+Shift+回车键:上屏 comment
BackSpace: revert # 退格键:向前删除(撤消上次输入)
Delete: delete # Delete 键:向后删除
Control+BackSpace: back_syllable # Ctrl+退格键:删除一个音节
Control+Delete: delete_candidate # Ctrl+Delete键删除或降权候选项
Escape: cancel # Esc 键:取消输入
# 拼写设定
speller:
# 如果不想让什么标点直接上屏,可以加在 alphabet或者编辑标点符号为两个及以上的映射
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA;`
# initials 定义仅作为始码的按键,排除 ` ; 让单个的 ` ; 可以直接上屏
initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '" # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
algebra:
- erase/^xx$/
- derive/^([jqxy])u$/$1v/
- derive/^([aoe].*)$/o$1/
- xform/^([ae])(.*)$/$1$1$2/
- xform/iu$/Ⓠ/
- xform/[iu]a$/Ⓦ/
- xform/er$|[uv]an$/Ⓡ/
- xform/[uv]e$/Ⓣ/
- xform/v$|uai$/Ⓨ/
- xform/^sh/Ⓤ/
- xform/^ch/Ⓘ/
- xform/^zh/Ⓥ/
- xform/uo$/Ⓞ/
- xform/[uv]n$/Ⓟ/
- xform/(.)i?ong$/$1Ⓢ/
- xform/[iu]ang$/Ⓓ/
- xform/(.)en$/$1Ⓕ/
- xform/(.)eng$/$1Ⓖ/
- xform/(.)ang$/$1Ⓗ/
- xform/ian$/Ⓜ/
- xform/(.)an$/$1Ⓙ/
- xform/iao$/Ⓒ/
- xform/(.)ao$/$1Ⓚ/
- xform/(.)ai$/$1Ⓛ/
- xform/(.)ei$/$1Ⓩ/
- xform/ie$/Ⓧ/
- xform/ui$/Ⓥ/
- xform/(.)ou$/$1Ⓑ/
- xform/in$/Ⓝ/
- xform/ing$/;/
- xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⓂⒿⒸⓀⓁⓏⓍⓋⒷⓃ/qwrtyuiopsdfghmjcklzxvbn/
# - abbrev/^(.).+$/$1/ # 首字母简拼,开启后会导致 3 个字母时 kj'x 变成 k'jx 的问题

View File

@ -0,0 +1,355 @@
# Rime schema
# encoding: utf-8
# 复制自 rime_ice.schema.yaml ,适配了双拼。
# 双拼键位映射复制自 https://github.com/rime/rime-double-pinyin
# 双拼之间主要就是 speller/algebra 和 translator/preedit_format 这里有区别。
#
# 全拼的自定义文本和双拼有些冲突,改成了 custom_phrase_double ,需要创建 custom_phrase_double.txt 文件。
#
# 目前配置中有个别功能仍然是全拼拼写,不能自动适配,所以需要手动修改一下:
# - 英文中部分符号的派生规则:在英文方案文件 melt_eng.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# - 部件拆字的拼写规则:在部件拆字方案 radical_pinyin.schema.yaml > speller > algebra 修改为对应的双拼拼写运算
# 打个补丁一劳永逸,补丁写法参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133) 或 others/双拼补丁示例/ 文件夹
# 方案说明
schema:
schema_id: double_pinyin_ziguang
name: 紫光双拼
version: "1"
author:
- Dvel
description: |
雾凇拼音 - 紫光双拼
https://github.com/iDvel/rime-ice
dependencies:
- melt_eng # 英文输入,作为次翻译器挂载到拼音方案
- radical_pinyin # 部件拆字,反查及辅码
# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符abbrev 可自定义一个字符
switches:
- name: ascii_mode
states: [ 中, ]
- name: ascii_punct # 中英标点
states: [ ¥, $ ]
- name: traditionalization
states: [ 简, 繁 ]
- name: emoji
states: [ 💀, 😄 ]
reset: 1
- name: full_shape
states: [ 半角, 全角 ]
- name: search_single_char # search.lua 的功能开关,辅码查词时是否单字优先
states: [正常, 单字]
abbrev: [词, 单]
# 输入引擎
engine:
processors:
- lua_processor@*select_character # 以词定字
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- affix_segmentor@radical_lookup # 部件拆字自定义 tag
- punct_segmentor
- fallback_segmentor
translators:
- punct_translator
- script_translator
- lua_translator@*date_translator # 时间、日期、星期
- lua_translator@*lunar # 农历
- table_translator@custom_phrase # 自定义短语 custom_phrase_double.txt
- table_translator@melt_eng # 英文输入
- table_translator@cn_en # 中英混合词汇
- table_translator@radical_lookup # 部件拆字反查
- lua_translator@*unicode # Unicode
- lua_translator@*number_translator # 数字、金额大写
- lua_translator@*calc_translator # 计算器
- lua_translator@*force_gc # 暴力 GC
filters:
- lua_filter@*corrector # 错音错字提示
- reverse_lookup_filter@radical_reverse_lookup # 部件拆字滤镜
- lua_filter@*autocap_filter # 英文自动大写
- lua_filter@*pin_cand_filter # 置顶候选项(顺序要求:置顶候选项 > Emoji > 简繁切换)
- lua_filter@*reduce_english_filter # 降低部分英语单词在候选项的位置
- simplifier@emoji # Emoji
- simplifier@traditionalize # 简繁切换
- lua_filter@*search@radical_pinyin # 部件拆字辅码
- uniquifier # 去重
# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字
date_translator:
date: date # 日期: 2022-11-29
time: time # 时间: 18:13
week: week # 星期: 星期二
datetime: datetime # ISO 8601 2022-11-29T18:13:11+08:00
timestamp: timestamp # 时间戳: 1669716794
# Lua 配置:农历的触发关键字
lunar: lunar # 农历: 二〇二三年冬月二十 癸卯年(兔)冬月二十
# Lua 配置: 降低部分英语单词在候选项的位置。
# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」
# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」
# 几种模式:
# all 降低脚本内置的单词(所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母words 作为自定义的额外补充
# custom 完全自定义,只降低 words 里的
# none 不降低任何单词,相当于没有启用这个 Lua
# (匹配的是编码,不是单词)
reduce_english_filter:
mode: custom # all | custom | none
idx: 2 # 降低到第 idx 个位置
# 自定义的单词列表,示例列表没有降低部分常用单词,如 and cat mail Mac but bad shit ……
words: [
aid, ann,
bail, bait, bam, band, bans, bat, bay, bend, bent, benz, bib, bid, bien, biz, boc, bop, bos, bud, buf, bach, bench, bush,
cab, cad, cain, cam, cans, cap, cef, chad, chan, chap, chef, cher, chew, chic, chin, chip, chit, coup, cum, cunt, cur, couch,
dab, dag, dal, dam, dent, dew, dial, diet, dim, din, dip, dis, dit, doug, dub, dug, dunn,
fab, fax, fob, fog, foul, fur,
gag, gail, gain, gal, gam, gaol, ged, gel, ger, guam, gus, gut,
hail, ham, hank, hans, hat, hay, heil, heir, hem, hep, hud, hum, hung, hunk, hut, hush,
jim, jug,
kat,
lab, lad, lag, laid, lam, laos, lap, lat, lax, lay, led, leg, lex, liam, lib, lid, lied, lien, lies, linn, lip, lit, liz, lob, lug, lund, lung, lux, lash, loch, lush,
mag, maid, mann, mar, mat, med, mel, mend, mens, ment, mil, mins, mint, mob, moc, mop, mos, mot, mud, mug, mum, mesh,
nap, nat, nay, neil, nib, nip, noun, nous, nun, nut, nail, nash,
pac, paid, pail, pain, pair, pak, pal, pam, pans, pant, pap, par, pat, paw, pax, pens, pic, pier, pies, pins, pint, pit, pix, pod, pop, pos, pot, pour, pow, pub, pinch, pouch,
rand, rant, rent, rep, res, ret, rex, rib, rid, rig, rim, rub, rug, rum, runc, runs, ranch,
sac, sail, sal, sam, sans, sap, saw, sax, sew, sham, shaw, shin, sig, sin, sip, sis, suit, sung, suns, sup, sur, sus,
tad, tail, taj, tar, tax, tec, ted, tel, ter, tex, tic, tied, tier, ties, tim, tin, tit, tour, tout, tum,
wag, wand, womens, wap, wax, weir, won,
yan, yen,
zach
]
# Lua 配置: 置顶候选项
# 注释太长了,请参考 pin_cand_filter.lua 开头的说明书。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml
enable_word_completion: true # 大于 4 音节的词条自动补全librime > 1.11.2
prism: double_pinyin_ziguang # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
spelling_hints: 8 # corrector.lua :为了让错音错字提示的 Lua 同时适配全拼双拼,将拼音显示在 comment 中
always_show_comments: true # corrector.lua Rime 默认在 preedit 等于 comment 时取消显示 comment这里强制一直显示供 corrector.lua 做判断用。
initial_quality: 1.2 # 拼音的权重应该比英文大
comment_format: # 标记拼音注释,供 corrector.lua 做判断用
- xform/^//
- xform/$//
preedit_format: # preedit_format 影响到输入框的显示和“Shift+回车”上屏的字符
- xform/o(\w)/0$1/ # 零聲母先改爲0以方便後面的轉換
- xform/([jqxy])n/$1ue/ # 提前轉換雙拼碼 n 和 g因爲轉換後的拼音裏就快要出現這兩個字母了那時將難以分辨出雙拼碼
- xform/([nl])n/$1ve/
- xform/([dtgkhzcsuai])n/$1ui/
- xform/([nljqxb])g/$1iang/
- xform/([gkhuai])g/$1uang/
- xform/(\w)w/$1en/
- xform/(\w)r/$1an/
- xform/(\w)t/$1eng/
- xform/([jqxylmnbp])y/$1in/
- xform/([zcsuaigkh])y/$1uai/
- xform/([dtnlgkhrzcsuai])o/$1uo/
- xform/(\w)q/$1ao/
- xform/(\w)p/$1ai/
- xform/(\w)s/$1ang/
- xform/(\w)d/$1ie/
- xform/(\w)f/$1ian/
- xform/([jqx])h/$1iong/
- xform/([dtnlgkhrzcsuai])h/$1ong/
- xform/0j/0er/
- xform/([dnlmjqx])j/$1iu/
- xform/(\w)k/$1ei/
- xform/(\w)l/$1uan/
- xform/(\w)z/$1ou/
- xform/([jqxl])x/$1ia/
- xform/([gkhuai])x/$1ua/
- xform/(\w);/$1ing/
- xform/(\w)b/$1iao/
- xform/(\w)m/$1un/
- "xform/(^|[ '])u/$1zh/" # 復原聲母音節開始處的雙拼字母a改寫爲zh其他位置的才真正是a
- "xform/(^|[ '])a/$1ch/"
- "xform/(^|[ '])i/$1sh/"
- xform/0(\w)/$1/ # 好了,現在可以把零聲母拿掉啦
- xform/([nljqxy])v/$1ü/ # 這樣纔是漢語拼音 :-)
- xform/ü/v/ # ü 显示为 v
- xform/(?<=[A-Z])\s(?=[A-Z])// # 消除大写字母之间的空格
# 次翻译器,英文
melt_eng:
dictionary: melt_eng # 挂载词库 melt_eng.dict.yaml
enable_sentence: false # 禁止造句
enable_user_dict: false # 禁用用户词典
initial_quality: 1.1 # 初始权重
comment_format: # 自定义提示码
- xform/.*// # 清空提示码
# 中英混合词汇
cn_en:
dictionary: ""
user_dict: en_dicts/cn_en_ziguang
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 0.5
comment_format:
- xform/^.+$//
# 自定义短语
custom_phrase:
dictionary: ""
user_dict: custom_phrase_double # 需要手动创建 custom_phrase_double.txt 文件
db_class: stabledb
enable_completion: false # 补全提示
enable_sentence: false # 禁止造句
initial_quality: 99 # custom_phrase 的权重应该比 pinyin 和 melt_eng 大
# Emoji
emoji:
option_name: emoji # 对应 switches 中的 name
opencc_config: emoji.json # 选择要加载的 OpenCC 配置
inherit_comment: false # 在 corrector.lua 及反查中emoji 的 comment 显示为空
# 简繁切换
traditionalize:
option_name: traditionalization # 对应 switches 中的 name
opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json Rime 内置配置,在程序目录可找到)
tips: none # 转换提示: all 都显示 | char 仅单字显示 | none 不显示。
tags: [ abc, number, gregorian_to_lunar ] # 限制在对应 tag不对其他如反查的内容做简繁转换
# 标点符号
# punctuator 下面的三个子项:
# full_shape 全角标点映射
# half_shape 半角标点映射
# symbols Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的 symbols_caps_v.yaml 修改成了 'V' 开头。
# 以及新版 digit_separators 相关的属性
punctuator:
__include: default:/punctuator # 从 default.yaml 导入 punctuator 的所有配置,为了引用 digit_separators 等属性
full_shape:
__include: default:/punctuator/full_shape # 从 default.yaml 导入配置
half_shape:
__include: default:/punctuator/half_shape # 从 default.yaml 导入配置
symbols:
__include: symbols_caps_v:/symbols # 从 symbols_caps_v.yaml 导入配置
# 部件拆字反查
radical_lookup:
tag: radical_lookup
dictionary: radical_pinyin
enable_user_dict: false
prefix: "uU" # 反查前缀(反查时前缀会消失影响打英文所以设定为两个字母,或可改成一个非字母符号),与 recognizer/patterns/radical_lookup 匹配
tips: " 〔拆字〕"
comment_format:
- erase/^.*$//
# 部件拆字滤镜
radical_reverse_lookup:
tags: [ radical_lookup ]
# dictionary 为拼音标注来源,目前是显示本方案词库的注音。
# 可去部件拆字方案下载更全的、带声调的、已编译好的词典: https://github.com/mirtlecn/rime-radical-pinyin#反查带声调注音
dictionary: rime_ice
# comment_format: # 自定义 comment例如在左右加上括号
# - xform/^/(/
# - xform/$/)/
# 处理符合特定规则的输入码,如网址、反查
recognizer:
import_preset: default # 从 default.yaml 继承通用的
patterns: # 再增加方案专有的:
punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols
radical_lookup: "^uU[a-z;]+$" # 响应部件拆字的反查,触发前缀与 radical_lookup/prefix 匹配
unicode: "^U[a-f0-9]+" # 脚本将自动获取第 2 个字符 U 作为触发前缀,响应 lua_translator@*unicode输出 Unicode 字符
number: "^R[0-9]+[.]?[0-9]*" # 脚本将自动获取第 2 个字符 R 作为触发前缀,响应 lua_translator@*number_translator数字金额大写
calculator: "^cC.+" # 响应 lua_translator@*calc_translator计算器。前缀设定项 calculator/prefix
gregorian_to_lunar: "^N[0-9]{1,8}" # 脚本将自动获取第 2 个字符 N 作为触发前缀,响应 lua_translator@*lunar公历转农历输入 N20240115 得到「二〇二三年腊月初五」
# 从 default 继承快捷键
key_binder:
import_preset: default # 从 default.yaml 继承通用的
search: "`" # 辅码引导符,要添加到 speller/alphabet
# bindings: # 也可以再增加方案专有的
# editor 用来定制操作键的行为,以下是默认行为 https://github.com/rime/librime/blob/master/src/rime/gear/editor.cc
editor:
bindings:
space: confirm # 空格键:上屏候选项
Return: commit_raw_input # 回车键:上屏原始输入
Control+Return: commit_script_text # Ctrl+回车键:上屏变换后输入(经过 preedit_format 转换的)
Control+Shift+Return: commit_comment # Ctrl+Shift+回车键:上屏 comment
BackSpace: revert # 退格键:向前删除(撤消上次输入)
Delete: delete # Delete 键:向后删除
Control+BackSpace: back_syllable # Ctrl+退格键:删除一个音节
Control+Delete: delete_candidate # Ctrl+Delete键删除或降权候选项
Escape: cancel # Esc 键:取消输入
# 拼写设定
speller:
# 如果不想让什么标点直接上屏,可以加在 alphabet或者编辑标点符号为两个及以上的映射
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA;`
# initials 定义仅作为始码的按键,排除 ` ; 让单个的 ` ; 可以直接上屏
initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '" # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
algebra:
- erase/^xx$/
- derive/^([jqxy])u$/$1v/
- xform/^([aoe].*)$/Ⓞ$1/ # 添上固定的零聲母o先標記爲大寫O
- xform/en$/Ⓦ/
- xform/eng$/Ⓣ/
- xform/in$|uai$/Ⓨ/
- xform/^zh/Ⓤ/
- xform/^sh/Ⓘ/
- xform/uo$/Ⓞ/
- xform/ai$/Ⓟ/
- xform/^ch/Ⓐ/
- xform/[iu]ang$/Ⓖ/
- xform/ang$/Ⓢ/ # ang should be placed after iang/uang
- xform/ie$/Ⓓ/
- xform/ian$/Ⓕ/
- xform/(.)i?ong$/$1Ⓗ/
- xform/er$|iu$/Ⓙ/
- xform/ei$/Ⓚ/
- xform/uan$/Ⓛ/
- xform/ing$/;/
- xform/ou$/Ⓩ/
- xform/[iu]a$/Ⓧ/
- xform/iao$/Ⓑ/
- xform/ue$|ui$|ve$/Ⓝ/
- xform/un$/Ⓜ/
- xform/ao$/Ⓠ/ # ao should be placed after iao
- xform/an$/Ⓡ/ # an should be placed after uan/ian
- xlit/ⓌⓉⓎⓊⒾⓄⓅⒶⒼⓈⒹⒻⒽⒿⓀⓁⓏⓍⒷⓃⓂⓆⓇ/wtyuiopagsdfhjklzxbnmqr/
# - abbrev/^(.).+$/$1/ # 首字母简拼,开启后会导致 3 个字母时 kj'x 变成 k'jx 的问题

941
en_dicts/cn_en.txt Normal file
View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 全拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xguang
X光 xguang
X光片 Xguangpian
X光片 xguangpian
X射线 Xshexian
X射线 xshexian
Nabla算子 Nablasuanzi
Nabla算子 nablasuanzi
T恤 Txu
T恤 txu
T恤衫 Txushan
T恤衫 txushan
AD钙奶 ADgainai
AD钙奶 adgainai
UU加速器 UUjiasuqi
UU加速器 uujiasuqi
Cinity厅 Cinityting
Cinity厅 cinityting
Eul的神圣法杖 Euldeshenshengfazhang
Eul的神圣法杖 euldeshenshengfazhang
A杖 Azhang
A杖 azhang
红Buff hongBuff
红Buff hongbuff
蓝Buff lanBuff
蓝Buff lanbuff
老Baby laoBaby
老Baby laobaby
小Baby xiaoBaby
小Baby xiaobaby
艾AA aiAA
艾AA aiaa
炒CP chaoCP
炒CP chaocp
嗑CP keCP
嗑CP kecp
U盘 Upan
U盘 upan
B站 Bzhan
B站 bzhan
V站 Vzhan
V站 vzhan
P站 Pzhan
P站 pzhan
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhao
QQ号 qqhao
QQ号码 QQhaoma
QQ号码 qqhaoma
QQ空间 QQkongjian
QQ空间 qqkongjian
QQ群 QQqun
QQ群 qqqun
QQ邮箱 QQyouxiang
QQ邮箱 qqyouxiang
QQ音乐 QQyinyue
QQ音乐 qqyinyue
QQ拼音 QQpinyin
QQ拼音 qqpinyin
QQ会员 QQhuiyuan
QQ会员 qqhuiyuan
QQ好友 QQhaoyou
QQ好友 qqhaoyou
QQ输入法 QQshurufa
QQ输入法 qqshurufa
Dock栏 Docklan
Dock栏 docklan
阿Q精神 aQjingshen
阿Q精神 aqjingshen
Win版 Winban
Win版 winban
Win版本 Winbanben
Win版本 winbanben
Windows版 Windowsban
Windows版 windowsban
Windows版本 Windowsbanben
Windows版本 windowsbanben
Mac版 Macban
Mac版 macban
Mac版本 Macbanben
Mac版本 macbanben
macOS版 macOSban
macOS版 macosban
macOS版本 macOSbanben
macOS版本 macosbanben
iOS版 iOSban
iOS版 iosban
iOS版本 iOSbanben
iOS版本 iosbanben
Android版 Androidban
Android版 androidban
Android版本 Androidbanben
Android版本 androidbanben
Web版 Webban
Web版 webban
Web版本 Webbanben
Web版本 webbanben
PC端 PCduan
PC端 pcduan
Win端 Winduan
Win端 winduan
Windows端 Windowsduan
Windows端 windowsduan
Mac端 Macduan
Mac端 macduan
macOS端 macOSduan
macOS端 macosduan
Web端 Webduan
Web端 webduan
iOS端 iOSduan
iOS端 iosduan
Android端 Androidduan
Android端 androidduan
e招贷 ezhaodai
G胖 Gpang
G胖 gpang
Up主 Upzhu
Up主 upzhu
BOSS直聘 BOSSzhipin
BOSS直聘 bosszhipin
P社 Pshe
P社 pshe
V社 Vshe
V社 vshe
Go语言 Goyuyan
Go语言 goyuyan
维生素A weishengsuA
维生素A weishengsua
维生素B weishengsuB
维生素B weishengsub
维生素C weishengsuC
维生素C weishengsuc
维生素D weishengsuD
维生素D weishengsud
维生素E weishengsuE
维生素E weishengsue
维生素K weishengsuK
维生素K weishengsuk
维A weiA
维A weia
维B weiB
维B weib
维C weiC
维C weic
维D weiD
维D weid
维E weiE
维E weie
维K weiK
维K weik
维E乳 weiEru
维E乳 weieru
维生素E乳 weishengsuEru
维生素E乳 weishengsueru
阿Q aQ
阿Q aq
阿Q正传 aQzhengzhuan
阿Q正传 aqzhengzhuan
单边z变换 danbianzbianhuan
逗B douB
逗B doub
哆啦A梦 duolaAmeng
哆啦A梦 duolaameng
二B erB
二B erb
卡拉OK kalaOK
卡拉OK kalaok
牛B niuB
牛B niub
三K党 sanKdang
三K党 sankdang
傻B shaB
傻B shab
傻X shaX
傻X shax
智能ABC zhinengABC
智能ABC zhinengabc
智能ABC双拼 zhinengABCshuangpin
智能ABC双拼 zhinengabcshuangpin
智能ABC双拼方案 zhinengABCshuangpinfangan
智能ABC双拼方案 zhinengabcshuangpinfangan
智能ABC输入法 zhinengABCshurufa
智能ABC输入法 zhinengabcshurufa
装B zhuangB
装B zhuangb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apan
A盘 apan
A片 Apian
A片 apian
AA制 AAzhi
AA制 aazhi
ATM机 ATMji
ATM机 atmji
B超 Bchao
B超 bchao
B淋巴细胞 Blinbaxibao
B淋巴细胞 blinbaxibao
B盘 Bpan
B盘 bpan
B细胞 Bxibao
B细胞 bxibao
C盘 Cpan
C盘 cpan
C语言 Cyuyan
C语言 cyuyan
D盘 Dpan
D盘 dpan
E盘 Epan
E盘 epan
F盘 Fpan
F盘 fpan
G点 Gdian
G点 gdian
G盘 Gpan
G盘 gpan
IP地址 IPdizhi
IP地址 ipdizhi
IP电话 IPdianhua
IP电话 ipdianhua
IP卡 IPka
IP卡 ipka
J盘 Jpan
J盘 jpan
K宝 Kbao
K宝 kbao
K粉 Kfen
K粉 kfen
K歌 Kge
K歌 kge
K歌王 Kgewang
K歌王 kgewang
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlinbaxibao
T淋巴细胞 tlinbaxibao
T细胞 Txibao
T细胞 txibao
T型台 Txingtai
T型台 txingtai
U盾 Udun
U盾 udun
S形 Sxing
S形 sxing
U形 Uxing
U形 uxing
U形管 Uxingguan
U形管 uxingguan
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdao
X刀 xdao
X染色体 Xranseti
X染色体 xranseti
Y染色体 Yranseti
Y染色体 yranseti
z变换 zbianhuan
z逆变换 znibianhuan
D之国 Dzhiguo
D之国 dzhiguo
D之一族 Dzhiyizu
D之一族 dzhiyizu
Beta版 Betaban
Beta版 betaban
Beta版本 Betabanben
Beta版本 betabanben
AV女优 AVnvyou
AV女优 avnvyou
X战警 Xzhanjing
X战警 xzhanjing
YY语音 YYyuyin
YY语音 yyyuyin
A4纸 Asizhi
A4纸 asizhi
A4腰 Asiyao
A4腰 asiyao
N多 Nduo
N多 nduo
N多个 Nduoge
N多个 nduoge
N次 Nci
N次 nci
N遍 Nbian
N遍 nbian
蒙奇·D·路飞 mengqiDlufei
蒙奇·D·路飞 mengqidlufei
蒙奇·D·龙 mengqiDlong
蒙奇·D·龙 mengqidlong
哥尔·D·罗杰 geerDluojie
哥尔·D·罗杰 geerdluojie
马歇尔·D·蒂奇 maxieerDdiqi
马歇尔·D·蒂奇 maxieerddiqi
X·德雷克 Xdeleike
X·德雷克 xdeleike
蒙奇·D·卡普 mengqiDkapu
蒙奇·D·卡普 mengqidkapu
波特卡斯·D·艾斯 botekasiDaisi
波特卡斯·D·艾斯 botekasidaisi
VIP中P VIPzhongP
VIP中P vipzhongp
QQ秀 QQxiu
QQ秀 qqxiu
Big胆 Bigdan
Big胆 bigdan
我叫MT wojiaoMT
我叫MT wojiaomt
谜拟Q miniQ
谜拟Q miniq
多边兽Z duobianshouZ
多边兽Z duobianshouz
藤子·F·不二雄 tengziFbuerxiong
藤子·F·不二雄 tengzifbuerxiong
PC版 PCban
PC版 pcban
PC版本 PCbanben
PC版本 pcbanben
A塔 Ata
A塔 ata
平A pingA
平A pinga
立Flag liFlag
立Flag liflag
C罗 Cluo
C罗 cluo
IE浏览器 IEliulanqi
IE浏览器 ieliulanqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amian
A面 amian
B面 Bmian
B面 bmian
C面 Cmian
C面 cmian
D面 Dmian
D面 dmian
Server酱 Serverjiang
Server酱 serverjiang
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixia
P一下 pyixia
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQtang
QQ堂 qqtang
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS guandiBOSS
关底BOSS guandiboss
AA吧 AAba
AA吧 aaba
喊cut hancut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Goshengjing
Go圣经 goshengjing
江南Style jiangnanStyle
江南Style jiangnanstyle
头文字D touwenziD
头文字D touwenzid
三无Marblue sanwuMarblue
三无Marblue sanwumarblue
A罩杯 Azhaobei
A罩杯 azhaobei
B罩杯 Bzhaobei
B罩杯 bzhaobei
C罩杯 Czhaobei
C罩杯 czhaobei
D罩杯 Dzhaobei
D罩杯 dzhaobei
E罩杯 Ezhaobei
E罩杯 ezhaobei
F罩杯 Fzhaobei
F罩杯 fzhaobei
G罩杯 Gzhaobei
G罩杯 gzhaobei
H罩杯 Hzhaobei
H罩杯 hzhaobei
A罩 Azhao
A罩 azhao
B罩 Bzhao
B罩 bzhao
C罩 Czhao
C罩 czhao
D罩 Dzhao
D罩 dzhao
E罩 Ezhao
E罩 ezhao
F罩 Fzhao
F罩 fzhao
G罩 Gzhao
G罩 gzhao
H罩 Hzhao
H罩 hzhao
A杯 Abei
A杯 abei
B杯 Bbei
B杯 bbei
C杯 Cbei
C杯 cbei
D杯 Dbei
D杯 dbei
E杯 Ebei
E杯 ebei
F杯 Fbei
F杯 fbei
G杯 Gbei
G杯 gbei
H杯 Hbei
H杯 hbei
TV版 TVban
TV版 tvban
TV版本 TVbanben
TV版本 tvbanben
芒果TV mangguoTV
芒果TV mangguotv
V字仇杀队 Vzichoushadui
V字仇杀队 vzichoushadui
V怪客 Vguaike
V怪客 vguaike
V煞 Vsha
V煞 vsha
Q弹 Qtan
Q弹 qtan
Steam云 Steamyun
Steam云 steamyun
M系列 Mxilie
M系列 mxilie
阿Sir aSir
阿Sir asir
Pro版 Proban
Pro版 proban
Pro版本 Probanben
Pro版本 probanben
Lite版 Liteban
Lite版 liteban
Lite版本 Litebanben
Lite版本 litebanben
X教授 Xjiaoshou
X教授 xjiaoshou
Papi酱 Papijiang
Papi酱 papijiang
MAC地址 MACdizhi
MAC地址 macdizhi
DNS劫持 DNSjiechi
DNS劫持 dnsjiechi
DNS污染 DNSwuran
DNS污染 dnswuran
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKa
OK啊 oka
我OK啊 woOKa
我OK啊 wooka
OK了吗 OKlema
OK了吗 oklema
腾讯QQ tengxunQQ
腾讯QQ tengxunqq
公网IP gongwangIP
公网IP gongwangip
Web开发 Webkaifa
Web开发 webkaifa
Switch版 Switchban
Switch版 switchban
Switch版本 Switchbanben
Switch版本 switchbanben
A型血 Axingxue
A型血 axingxue
A血型 Axuexing
A血型 axuexing
B型血 Bxingxue
B型血 bxingxue
B血型 Bxuexing
B血型 bxuexing
AB型 ABxing
AB型 abxing
AB型血 ABxingxue
AB型血 abxingxue
AB血型 ABxuexing
AB血型 abxuexing
O型 Oxing
O型 oxing
O型血 Oxingxue
O型血 oxingxue
O血型 Oxuexing
O血型 oxuexing
IT界 ITjie
IT界 itjie
Fn键 Fnjian
Fn键 fnjian
Cmd键 Cmdjian
Cmd键 cmdjian
Command键 Commandjian
Command键 commandjian
Ctrl键 Ctrljian
Ctrl键 ctrljian
Control键 Controljian
Control键 controljian
Opt键 Optjian
Opt键 optjian
Option键 Optionjian
Option键 optionjian
Shift键 Shiftjian
Shift键 shiftjian
Tab键 Tabjian
Tab键 tabjian
Caps键 Capsjian
Caps键 capsjian
CapsLock键 CapsLockjian
CapsLock键 capslockjian
Return键 Returnjian
Return键 returnjian
Enter键 Enterjian
Enter键 enterjian
Space键 Spacejian
Space键 spacejian
Backspace键 Backspacejian
Backspace键 backspacejian
Del键 Deljian
Del键 deljian
Delete键 Deletejian
Delete键 deletejian
Esc键 Escjian
Esc键 escjian
Eject键 Ejectjian
Eject键 ejectjian
周刊少年Jump zhoukanshaonianJump
周刊少年Jump zhoukanshaonianjump
ICP备案 ICPbeian
ICP备案 icpbeian
啥bug shabug
有bug youbug
没bug meibug
没有bug meiyoubug
卡bug kabug
提bug tibug
写bug xiebug
改bug gaibug
查bug chabug
找bug zhaobug
J.K.罗琳 JKluolin
J.K.罗琳 jkluolin
J.R.R.托尔金 JRRtuoerjin
J.R.R.托尔金 jrrtuoerjin
乔治·R.R.马丁 qiaozhiRRmading
乔治·R.R.马丁 qiaozhirrmading
异维A酸 yiweiAsuan
异维A酸 yiweiasuan
互fo hufo
减CD jianCD
减CD jiancd
随身Wi-Fi suishenWiFi
随身Wi-Fi suishenwifi
U型锁 Uxingsuo
U型锁 uxingsuo
Go程 Gocheng
Go程 gocheng
TG群 TGqun
TG群 tgqun
Telegram群 Telegramqun
Telegram群 telegramqun
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjiance
DNA检测 dnajiance
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT paiCT
拍CT paict
CT检查 CTjiancha
CT检查 ctjiancha
PVC管 PVCguan
PVC管 pvcguan
DoS攻击 DoSgongji
DoS攻击 dosgongji
DDoS攻击 DDoSgongji
DDoS攻击 ddosgongji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qban
Q版 qban
A班 Aban
A班 aban
B班 Bban
B班 bban
C班 Cban
C班 cban
D班 Dban
D班 dban
老K laoK
老K laok
加Q jiaQ
加Q jiaq
加QQ jiaQQ
加QQ jiaqq
A座 Azuo
A座 azuo
B座 Bzuo
B座 bzuo
C座 Czuo
C座 czuo
D座 Dzuo
D座 dzuo
E座 Ezuo
E座 ezuo
F座 Fzuo
F座 fzuo
H版 Hban
H版 hban
A口 Akou
A口 akou
B口 Bkou
B口 bkou
C口 Ckou
C口 ckou
D口 Dkou
D口 dkou
E口 Ekou
E口 ekou
F口 Fkou
F口 fkou
A出口 Achukou
A出口 achukou
B出口 Bchukou
B出口 bchukou
C出口 Cchukou
C出口 cchukou
D出口 Dchukou
D出口 dchukou
E出口 Echukou
E出口 echukou
F出口 Fchukou
F出口 fchukou
A楼 Alou
A楼 alou
B楼 Blou
B楼 blou
C楼 Clou
C楼 clou
D楼 Dlou
D楼 dlou
E楼 Elou
E楼 elou
F楼 Flou
F楼 flou
A型号 Axinghao
A型号 axinghao
B型号 Bxinghao
B型号 bxinghao
C型号 Cxinghao
C型号 cxinghao
D型号 Dxinghao
D型号 dxinghao
E型号 Exinghao
E型号 exinghao
F型号 Fxinghao
F型号 fxinghao
A型 Axing
A型 axing
B型 Bxing
B型 bxing
C型 Cxing
C型 cxing
D型 Dxing
D型 dxing
E型 Exing
E型 exing
F型 Fxing
F型 fxing
A款 Akuan
A款 akuan
B款 Bkuan
B款 bkuan
C款 Ckuan
C款 ckuan
D款 Dkuan
D款 dkuan
E款 Ekuan
E款 ekuan
F款 Fkuan
F款 fkuan
A栋 Adong
A栋 adong
B栋 Bdong
B栋 bdong
C栋 Cdong
C栋 cdong
D栋 Ddong
D栋 ddong
E栋 Edong
E栋 edong
F栋 Fdong
F栋 fdong
X轴 Xzhou
X轴 xzhou
Y轴 Yzhou
Y轴 yzhou
Z轴 Zzhou
Z轴 zzhou
V领 Vling
V领 vling
V字领 Vziling
V字领 vziling
V字形 Vzixing
V字形 vzixing
IT业 ITye
IT业 itye
IT行业 IThangye
IT行业 ithangye
K线 Kxian
K线 kxian
K线图 Kxiantu
K线图 kxiantu
日K线 riKxian
日K线 rikxian
周K线 zhouKxian
周K线 zhoukxian
月K线 yueKxian
月K线 yuekxian
T台 Ttai
T台 ttai
TF卡 TFka
TF卡 tfka
N年 Nnian
N年 nnian
A点 Adian
A点 adian
B点 Bdian
B点 bdian
A屏 Aping
A屏 aping
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zuoBchao
做B超 zuobchao
DJ版 DJban
DJ版 djban
唱K changK
唱K changk
PK赛 PKsai
PK赛 pksai
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP chaIP
查IP chaip
封IP fengIP
封IP fengip
换IP huanIP
换IP huanip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhuiyuan
VIP会员 viphuiyuan
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDban
DVD版 dvdban
USB线 USBxian
USB线 usbxian
USB口 USBkou
USB口 usbkou
USB接口 USBjiekou
USB接口 usbjiekou
X档案 Xdangan
X档案 xdangan
n次方 ncifang
N多人 Nduoren
N多人 nduoren
S曲线 Squxian
S曲线 squxian
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 chongQbi
充Q币 chongqbi
就OK jiuOK
就OK jiuok
不OK buOK
不OK buok
很OK henOK
很OK henok
特拉法尔加·D·瓦铁尔·罗 telafaerjiaDwatieerluo
特拉法尔加·D·瓦铁尔·罗 telafaerjiadwatieerluo
开party kaiparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQyouxi
QQ游戏 qqyouxi
QQ游戏大厅 QQyouxidating
QQ游戏大厅 qqyouxidating
QQ音速 QQyinsu
QQ音速 qqyinsu
QQ飞车 QQfeiche
QQ飞车 qqfeiche
QQ三国 QQsanguo
QQ三国 qqsanguo
4S店 siSdian
4S店 sisdian
丰田AE86 fengtianAEbaliu
丰田AE86 fengtianaebaliu
TF版 TFban
TF版 tfban
TF版本 TFbanben
TF版本 tfbanben
O不OK ObuOK
O不OK obuok
人均GDP renjunGDP
人均GDP renjungdp
V8引擎 Vbayinqing
V8引擎 vbayinqing
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 erGwangluo
2G网络 ergwangluo
3G网络 sanGwangluo
3G网络 sangwangluo
4G网络 siGwangluo
4G网络 sigwangluo
5G网络 wuGwangluo
5G网络 wugwangluo
3G流量 sanGliuliang
3G流量 sangliuliang
4G流量 siGliuliang
4G流量 sigliuliang
5G流量 wuGliuliang
5G流量 wugliuliang
3D打印 sanDdayin
3D打印 sanddayin
2D电影 erDdianying
2D电影 erddianying
3D电影 sanDdianying
3D电影 sanddianying
city不city citybucity
打call dacall
hold住 holdzhu

941
en_dicts/cn_en_abc.txt Normal file
View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en_abc.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 智能 ABC 双拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xgt
X光 xgt
X光片 Xgtpw
X光片 xgtpw
X射线 Xvexw
X射线 xvexw
Nabla算子 Nablaspzi
Nabla算子 nablaspzi
T恤 Txu
T恤 txu
T恤衫 Txuvj
T恤衫 txuvj
AD钙奶 ADglnl
AD钙奶 adglnl
UU加速器 UUjdsuqi
UU加速器 uujdsuqi
Cinity厅 Cinityty
Cinity厅 cinityty
Eul的神圣法杖 Euldevfvgfaah
Eul的神圣法杖 euldevfvgfaah
A杖 Aah
A杖 aah
红Buff hsBuff
红Buff hsbuff
蓝Buff ljBuff
蓝Buff ljbuff
老Baby lkBaby
老Baby lkbaby
小Baby xzBaby
小Baby xzbaby
艾AA olAA
艾AA olaa
炒CP ekCP
炒CP ekcp
嗑CP keCP
嗑CP kecp
U盘 Upj
U盘 upj
B站 Baj
B站 baj
V站 Vaj
V站 vaj
P站 Paj
P站 paj
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhk
QQ号 qqhk
QQ号码 QQhkma
QQ号码 qqhkma
QQ空间 QQksjw
QQ空间 qqksjw
QQ群 QQqn
QQ群 qqqn
QQ邮箱 QQybxt
QQ邮箱 qqybxt
QQ音乐 QQycym
QQ音乐 qqycym
QQ拼音 QQpcyc
QQ拼音 qqpcyc
QQ会员 QQhmyp
QQ会员 qqhmyp
QQ好友 QQhkyb
QQ好友 qqhkyb
QQ输入法 QQvurufa
QQ输入法 qqvurufa
Dock栏 Docklj
Dock栏 docklj
阿Q精神 oaQjyvf
阿Q精神 oaqjyvf
Win版 Winbj
Win版 winbj
Win版本 Winbjbf
Win版本 winbjbf
Windows版 Windowsbj
Windows版 windowsbj
Windows版本 Windowsbjbf
Windows版本 windowsbjbf
Mac版 Macbj
Mac版 macbj
Mac版本 Macbjbf
Mac版本 macbjbf
macOS版 macOSbj
macOS版 macosbj
macOS版本 macOSbjbf
macOS版本 macosbjbf
iOS版 iOSbj
iOS版 iosbj
iOS版本 iOSbjbf
iOS版本 iosbjbf
Android版 Androidbj
Android版 androidbj
Android版本 Androidbjbf
Android版本 androidbjbf
Web版 Webbj
Web版 webbj
Web版本 Webbjbf
Web版本 webbjbf
PC端 PCdp
PC端 pcdp
Win端 Windp
Win端 windp
Windows端 Windowsdp
Windows端 windowsdp
Mac端 Macdp
Mac端 macdp
macOS端 macOSdp
macOS端 macosdp
Web端 Webdp
Web端 webdp
iOS端 iOSdp
iOS端 iosdp
Android端 Androiddp
Android端 androiddp
e招贷 eakdl
G胖 Gph
G胖 gph
Up主 Upau
Up主 upau
BOSS直聘 BOSSaipc
BOSS直聘 bossaipc
P社 Pve
P社 pve
V社 Vve
V社 vve
Go语言 Goyuyj
Go语言 goyuyj
维生素A wqvgsuA
维生素A wqvgsua
维生素B wqvgsuB
维生素B wqvgsub
维生素C wqvgsuC
维生素C wqvgsuc
维生素D wqvgsuD
维生素D wqvgsud
维生素E wqvgsuE
维生素E wqvgsue
维生素K wqvgsuK
维生素K wqvgsuk
维A wqA
维A wqa
维B wqB
维B wqb
维C wqC
维C wqc
维D wqD
维D wqd
维E wqE
维E wqe
维K wqK
维K wqk
维E乳 wqEru
维E乳 wqeru
维生素E乳 wqvgsuEru
维生素E乳 wqvgsueru
阿Q oaQ
阿Q oaq
阿Q正传 oaQagap
阿Q正传 oaqagap
单边z变换 djbwzbwhp
逗B dbB
逗B dbb
哆啦A梦 dolaAmg
哆啦A梦 dolaamg
二B orB
二B orb
卡拉OK kalaOK
卡拉OK kalaok
牛B nrB
牛B nrb
三K党 sjKdh
三K党 sjkdh
傻B vaB
傻B vab
傻X vaX
傻X vax
智能ABC aingABC
智能ABC aingabc
智能ABC双拼 aingABCvtpc
智能ABC双拼 aingabcvtpc
智能ABC双拼方案 aingABCvtpcfhoj
智能ABC双拼方案 aingabcvtpcfhoj
智能ABC输入法 aingABCvurufa
智能ABC输入法 aingabcvurufa
装B atB
装B atb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apj
A盘 apj
A片 Apw
A片 apw
AA制 AAai
AA制 aaai
ATM机 ATMji
ATM机 atmji
B超 Bek
B超 bek
B淋巴细胞 Blcbaxibk
B淋巴细胞 blcbaxibk
B盘 Bpj
B盘 bpj
B细胞 Bxibk
B细胞 bxibk
C盘 Cpj
C盘 cpj
C语言 Cyuyj
C语言 cyuyj
D盘 Dpj
D盘 dpj
E盘 Epj
E盘 epj
F盘 Fpj
F盘 fpj
G点 Gdw
G点 gdw
G盘 Gpj
G盘 gpj
IP地址 IPdiai
IP地址 ipdiai
IP电话 IPdwhd
IP电话 ipdwhd
IP卡 IPka
IP卡 ipka
J盘 Jpj
J盘 jpj
K宝 Kbk
K宝 kbk
K粉 Kff
K粉 kff
K歌 Kge
K歌 kge
K歌王 Kgewh
K歌王 kgewh
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlcbaxibk
T淋巴细胞 tlcbaxibk
T细胞 Txibk
T细胞 txibk
T型台 Txytl
T型台 txytl
U盾 Udn
U盾 udn
S形 Sxy
S形 sxy
U形 Uxy
U形 uxy
U形管 Uxygp
U形管 uxygp
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdk
X刀 xdk
X染色体 Xrjseti
X染色体 xrjseti
Y染色体 Yrjseti
Y染色体 yrjseti
z变换 zbwhp
z逆变换 znibwhp
D之国 Daigo
D之国 daigo
D之一族 Daiyizu
D之一族 daiyizu
Beta版 Betabj
Beta版 betabj
Beta版本 Betabjbf
Beta版本 betabjbf
AV女优 AVnvyb
AV女优 avnvyb
X战警 Xajjy
X战警 xajjy
YY语音 YYyuyc
YY语音 yyyuyc
A4纸 Asiai
A4纸 asiai
A4腰 Asiyk
A4腰 asiyk
N多 Ndo
N多 ndo
N多个 Ndoge
N多个 ndoge
N次 Nci
N次 nci
N遍 Nbw
N遍 nbw
蒙奇·D·路飞 mgqiDlufq
蒙奇·D·路飞 mgqidlufq
蒙奇·D·龙 mgqiDls
蒙奇·D·龙 mgqidls
哥尔·D·罗杰 georDlojx
哥尔·D·罗杰 geordlojx
马歇尔·D·蒂奇 maxxorDdiqi
马歇尔·D·蒂奇 maxxorddiqi
X·德雷克 Xdelqke
X·德雷克 xdelqke
蒙奇·D·卡普 mgqiDkapu
蒙奇·D·卡普 mgqidkapu
波特卡斯·D·艾斯 botekasiDolsi
波特卡斯·D·艾斯 botekasidolsi
VIP中P VIPasP
VIP中P vipasp
QQ秀 QQxr
QQ秀 qqxr
Big胆 Bigdj
Big胆 bigdj
我叫MT wojzMT
我叫MT wojzmt
谜拟Q miniQ
谜拟Q miniq
多边兽Z dobwvbZ
多边兽Z dobwvbz
藤子·F·不二雄 tgziFbuorxs
藤子·F·不二雄 tgzifbuorxs
PC版 PCbj
PC版 pcbj
PC版本 PCbjbf
PC版本 pcbjbf
A塔 Ata
A塔 ata
平A pyA
平A pya
立Flag liFlag
立Flag liflag
C罗 Clo
C罗 clo
IE浏览器 IElrljqi
IE浏览器 ielrljqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amw
A面 amw
B面 Bmw
B面 bmw
C面 Cmw
C面 cmw
D面 Dmw
D面 dmw
Server酱 Serverjt
Server酱 serverjt
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixd
P一下 pyixd
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQth
QQ堂 qqth
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS gpdiBOSS
关底BOSS gpdiboss
AA吧 AAba
AA吧 aaba
喊cut hjcut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Govgjy
Go圣经 govgjy
江南Style jtnjStyle
江南Style jtnjstyle
头文字D tbwfziD
头文字D tbwfzid
三无Marblue sjwuMarblue
三无Marblue sjwumarblue
A罩杯 Aakbq
A罩杯 aakbq
B罩杯 Bakbq
B罩杯 bakbq
C罩杯 Cakbq
C罩杯 cakbq
D罩杯 Dakbq
D罩杯 dakbq
E罩杯 Eakbq
E罩杯 eakbq
F罩杯 Fakbq
F罩杯 fakbq
G罩杯 Gakbq
G罩杯 gakbq
H罩杯 Hakbq
H罩杯 hakbq
A罩 Aak
A罩 aak
B罩 Bak
B罩 bak
C罩 Cak
C罩 cak
D罩 Dak
D罩 dak
E罩 Eak
E罩 eak
F罩 Fak
F罩 fak
G罩 Gak
G罩 gak
H罩 Hak
H罩 hak
A杯 Abq
A杯 abq
B杯 Bbq
B杯 bbq
C杯 Cbq
C杯 cbq
D杯 Dbq
D杯 dbq
E杯 Ebq
E杯 ebq
F杯 Fbq
F杯 fbq
G杯 Gbq
G杯 gbq
H杯 Hbq
H杯 hbq
TV版 TVbj
TV版 tvbj
TV版本 TVbjbf
TV版本 tvbjbf
芒果TV mhgoTV
芒果TV mhgotv
V字仇杀队 Vziebvadm
V字仇杀队 vziebvadm
V怪客 Vgcke
V怪客 vgcke
V煞 Vva
V煞 vva
Q弹 Qtj
Q弹 qtj
Steam云 Steamyn
Steam云 steamyn
M系列 Mxilx
M系列 mxilx
阿Sir oaSir
阿Sir oasir
Pro版 Probj
Pro版 probj
Pro版本 Probjbf
Pro版本 probjbf
Lite版 Litebj
Lite版 litebj
Lite版本 Litebjbf
Lite版本 litebjbf
X教授 Xjzvb
X教授 xjzvb
Papi酱 Papijt
Papi酱 papijt
MAC地址 MACdiai
MAC地址 macdiai
DNS劫持 DNSjxei
DNS劫持 dnsjxei
DNS污染 DNSwurj
DNS污染 dnswurj
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKoa
OK啊 okoa
我OK啊 woOKoa
我OK啊 wookoa
OK了吗 OKlema
OK了吗 oklema
腾讯QQ tgxnQQ
腾讯QQ tgxnqq
公网IP gswhIP
公网IP gswhip
Web开发 Webklfa
Web开发 webklfa
Switch版 Switchbj
Switch版 switchbj
Switch版本 Switchbjbf
Switch版本 switchbjbf
A型血 Axyxm
A型血 axyxm
A血型 Axmxy
A血型 axmxy
B型血 Bxyxm
B型血 bxyxm
B血型 Bxmxy
B血型 bxmxy
AB型 ABxy
AB型 abxy
AB型血 ABxyxm
AB型血 abxyxm
AB血型 ABxmxy
AB血型 abxmxy
O型 Oxy
O型 oxy
O型血 Oxyxm
O型血 oxyxm
O血型 Oxmxy
O血型 oxmxy
IT界 ITjx
IT界 itjx
Fn键 Fnjw
Fn键 fnjw
Cmd键 Cmdjw
Cmd键 cmdjw
Command键 Commandjw
Command键 commandjw
Ctrl键 Ctrljw
Ctrl键 ctrljw
Control键 Controljw
Control键 controljw
Opt键 Optjw
Opt键 optjw
Option键 Optionjw
Option键 optionjw
Shift键 Shiftjw
Shift键 shiftjw
Tab键 Tabjw
Tab键 tabjw
Caps键 Capsjw
Caps键 capsjw
CapsLock键 CapsLockjw
CapsLock键 capslockjw
Return键 Returnjw
Return键 returnjw
Enter键 Enterjw
Enter键 enterjw
Space键 Spacejw
Space键 spacejw
Backspace键 Backspacejw
Backspace键 backspacejw
Del键 Deljw
Del键 deljw
Delete键 Deletejw
Delete键 deletejw
Esc键 Escjw
Esc键 escjw
Eject键 Ejectjw
Eject键 ejectjw
周刊少年Jump abkjvknwJump
周刊少年Jump abkjvknwjump
ICP备案 ICPbqoj
ICP备案 icpbqoj
啥bug vabug
有bug ybbug
没bug mqbug
没有bug mqybbug
卡bug kabug
提bug tibug
写bug xxbug
改bug glbug
查bug eabug
找bug akbug
J.K.罗琳 JKlolc
J.K.罗琳 jklolc
J.R.R.托尔金 JRRtoorjc
J.R.R.托尔金 jrrtoorjc
乔治·R.R.马丁 qzaiRRmady
乔治·R.R.马丁 qzairrmady
异维A酸 yiwqAsp
异维A酸 yiwqasp
互fo hufo
减CD jwCD
减CD jwcd
随身Wi-Fi smvfWiFi
随身Wi-Fi smvfwifi
U型锁 Uxyso
U型锁 uxyso
Go程 Goeg
Go程 goeg
TG群 TGqn
TG群 tgqn
Telegram群 Telegramqn
Telegram群 telegramqn
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjwce
DNA检测 dnajwce
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT plCT
拍CT plct
CT检查 CTjwea
CT检查 ctjwea
PVC管 PVCgp
PVC管 pvcgp
DoS攻击 DoSgsji
DoS攻击 dosgsji
DDoS攻击 DDoSgsji
DDoS攻击 ddosgsji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qbj
Q版 qbj
A班 Abj
A班 abj
B班 Bbj
B班 bbj
C班 Cbj
C班 cbj
D班 Dbj
D班 dbj
老K lkK
老K lkk
加Q jdQ
加Q jdq
加QQ jdQQ
加QQ jdqq
A座 Azo
A座 azo
B座 Bzo
B座 bzo
C座 Czo
C座 czo
D座 Dzo
D座 dzo
E座 Ezo
E座 ezo
F座 Fzo
F座 fzo
H版 Hbj
H版 hbj
A口 Akb
A口 akb
B口 Bkb
B口 bkb
C口 Ckb
C口 ckb
D口 Dkb
D口 dkb
E口 Ekb
E口 ekb
F口 Fkb
F口 fkb
A出口 Aeukb
A出口 aeukb
B出口 Beukb
B出口 beukb
C出口 Ceukb
C出口 ceukb
D出口 Deukb
D出口 deukb
E出口 Eeukb
E出口 eeukb
F出口 Feukb
F出口 feukb
A楼 Alb
A楼 alb
B楼 Blb
B楼 blb
C楼 Clb
C楼 clb
D楼 Dlb
D楼 dlb
E楼 Elb
E楼 elb
F楼 Flb
F楼 flb
A型号 Axyhk
A型号 axyhk
B型号 Bxyhk
B型号 bxyhk
C型号 Cxyhk
C型号 cxyhk
D型号 Dxyhk
D型号 dxyhk
E型号 Exyhk
E型号 exyhk
F型号 Fxyhk
F型号 fxyhk
A型 Axy
A型 axy
B型 Bxy
B型 bxy
C型 Cxy
C型 cxy
D型 Dxy
D型 dxy
E型 Exy
E型 exy
F型 Fxy
F型 fxy
A款 Akp
A款 akp
B款 Bkp
B款 bkp
C款 Ckp
C款 ckp
D款 Dkp
D款 dkp
E款 Ekp
E款 ekp
F款 Fkp
F款 fkp
A栋 Ads
A栋 ads
B栋 Bds
B栋 bds
C栋 Cds
C栋 cds
D栋 Dds
D栋 dds
E栋 Eds
E栋 eds
F栋 Fds
F栋 fds
X轴 Xab
X轴 xab
Y轴 Yab
Y轴 yab
Z轴 Zab
Z轴 zab
V领 Vly
V领 vly
V字领 Vzily
V字领 vzily
V字形 Vzixy
V字形 vzixy
IT业 ITye
IT业 itye
IT行业 IThhye
IT行业 ithhye
K线 Kxw
K线 kxw
K线图 Kxwtu
K线图 kxwtu
日K线 riKxw
日K线 rikxw
周K线 abKxw
周K线 abkxw
月K线 ymKxw
月K线 ymkxw
T台 Ttl
T台 ttl
TF卡 TFka
TF卡 tfka
N年 Nnw
N年 nnw
A点 Adw
A点 adw
B点 Bdw
B点 bdw
A屏 Apy
A屏 apy
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zoBek
做B超 zobek
DJ版 DJbj
DJ版 djbj
唱K ehK
唱K ehk
PK赛 PKsl
PK赛 pksl
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP eaIP
查IP eaip
封IP fgIP
封IP fgip
换IP hpIP
换IP hpip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhmyp
VIP会员 viphmyp
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDbj
DVD版 dvdbj
USB线 USBxw
USB线 usbxw
USB口 USBkb
USB口 usbkb
USB接口 USBjxkb
USB接口 usbjxkb
X档案 Xdhoj
X档案 xdhoj
n次方 ncifh
N多人 Ndorf
N多人 ndorf
S曲线 Squxw
S曲线 squxw
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 esQbi
充Q币 esqbi
就OK jrOK
就OK jrok
不OK buOK
不OK buok
很OK hfOK
很OK hfok
特拉法尔加·D·瓦铁尔·罗 telafaorjdDwatxorlo
特拉法尔加·D·瓦铁尔·罗 telafaorjddwatxorlo
开party klparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQybxi
QQ游戏 qqybxi
QQ游戏大厅 QQybxidaty
QQ游戏大厅 qqybxidaty
QQ音速 QQycsu
QQ音速 qqycsu
QQ飞车 QQfqee
QQ飞车 qqfqee
QQ三国 QQsjgo
QQ三国 qqsjgo
4S店 siSdw
4S店 sisdw
丰田AE86 fgtwAEbalr
丰田AE86 fgtwaebalr
TF版 TFbj
TF版 tfbj
TF版本 TFbjbf
TF版本 tfbjbf
O不OK ObuOK
O不OK obuok
人均GDP rfjnGDP
人均GDP rfjngdp
V8引擎 Vbaycqy
V8引擎 vbaycqy
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 orGwhlo
2G网络 orgwhlo
3G网络 sjGwhlo
3G网络 sjgwhlo
4G网络 siGwhlo
4G网络 sigwhlo
5G网络 wuGwhlo
5G网络 wugwhlo
3G流量 sjGlrlt
3G流量 sjglrlt
4G流量 siGlrlt
4G流量 siglrlt
5G流量 wuGlrlt
5G流量 wuglrlt
3D打印 sjDdayc
3D打印 sjddayc
2D电影 orDdwyy
2D电影 orddwyy
3D电影 sjDdwyy
3D电影 sjddwyy
city不city citybucity
打call dacall
hold住 holdau

View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en_double_pinyin.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 自然码双拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xgd
X光 xgd
X光片 Xgdpm
X光片 xgdpm
X射线 Xuexm
X射线 xuexm
Nabla算子 Nablasrzi
Nabla算子 nablasrzi
T恤 Txu
T恤 txu
T恤衫 Txuuj
T恤衫 txuuj
AD钙奶 ADglnl
AD钙奶 adglnl
UU加速器 UUjwsuqi
UU加速器 uujwsuqi
Cinity厅 Cinityty
Cinity厅 cinityty
Eul的神圣法杖 Euldeufugfavh
Eul的神圣法杖 euldeufugfavh
A杖 Avh
A杖 avh
红Buff hsBuff
红Buff hsbuff
蓝Buff ljBuff
蓝Buff ljbuff
老Baby lkBaby
老Baby lkbaby
小Baby xcBaby
小Baby xcbaby
艾AA aiAA
艾AA aiaa
炒CP ikCP
炒CP ikcp
嗑CP keCP
嗑CP kecp
U盘 Upj
U盘 upj
B站 Bvj
B站 bvj
V站 Vvj
V站 vvj
P站 Pvj
P站 pvj
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhk
QQ号 qqhk
QQ号码 QQhkma
QQ号码 qqhkma
QQ空间 QQksjm
QQ空间 qqksjm
QQ群 QQqp
QQ群 qqqp
QQ邮箱 QQybxd
QQ邮箱 qqybxd
QQ音乐 QQynyt
QQ音乐 qqynyt
QQ拼音 QQpnyn
QQ拼音 qqpnyn
QQ会员 QQhvyr
QQ会员 qqhvyr
QQ好友 QQhkyb
QQ好友 qqhkyb
QQ输入法 QQuurufa
QQ输入法 qquurufa
Dock栏 Docklj
Dock栏 docklj
阿Q精神 aaQjyuf
阿Q精神 aaqjyuf
Win版 Winbj
Win版 winbj
Win版本 Winbjbf
Win版本 winbjbf
Windows版 Windowsbj
Windows版 windowsbj
Windows版本 Windowsbjbf
Windows版本 windowsbjbf
Mac版 Macbj
Mac版 macbj
Mac版本 Macbjbf
Mac版本 macbjbf
macOS版 macOSbj
macOS版 macosbj
macOS版本 macOSbjbf
macOS版本 macosbjbf
iOS版 iOSbj
iOS版 iosbj
iOS版本 iOSbjbf
iOS版本 iosbjbf
Android版 Androidbj
Android版 androidbj
Android版本 Androidbjbf
Android版本 androidbjbf
Web版 Webbj
Web版 webbj
Web版本 Webbjbf
Web版本 webbjbf
PC端 PCdr
PC端 pcdr
Win端 Windr
Win端 windr
Windows端 Windowsdr
Windows端 windowsdr
Mac端 Macdr
Mac端 macdr
macOS端 macOSdr
macOS端 macosdr
Web端 Webdr
Web端 webdr
iOS端 iOSdr
iOS端 iosdr
Android端 Androiddr
Android端 androiddr
e招贷 evkdl
G胖 Gph
G胖 gph
Up主 Upvu
Up主 upvu
BOSS直聘 BOSSvipn
BOSS直聘 bossvipn
P社 Pue
P社 pue
V社 Vue
V社 vue
Go语言 Goyuyj
Go语言 goyuyj
维生素A wzugsuA
维生素A wzugsua
维生素B wzugsuB
维生素B wzugsub
维生素C wzugsuC
维生素C wzugsuc
维生素D wzugsuD
维生素D wzugsud
维生素E wzugsuE
维生素E wzugsue
维生素K wzugsuK
维生素K wzugsuk
维A wzA
维A wza
维B wzB
维B wzb
维C wzC
维C wzc
维D wzD
维D wzd
维E wzE
维E wze
维K wzK
维K wzk
维E乳 wzEru
维E乳 wzeru
维生素E乳 wzugsuEru
维生素E乳 wzugsueru
阿Q aaQ
阿Q aaq
阿Q正传 aaQvgvr
阿Q正传 aaqvgvr
单边z变换 djbmzbmhr
逗B dbB
逗B dbb
哆啦A梦 dolaAmg
哆啦A梦 dolaamg
二B erB
二B erb
卡拉OK kalaOK
卡拉OK kalaok
牛B nqB
牛B nqb
三K党 sjKdh
三K党 sjkdh
傻B uaB
傻B uab
傻X uaX
傻X uax
智能ABC vingABC
智能ABC vingabc
智能ABC双拼 vingABCudpn
智能ABC双拼 vingabcudpn
智能ABC双拼方案 vingABCudpnfhan
智能ABC双拼方案 vingabcudpnfhan
智能ABC输入法 vingABCuurufa
智能ABC输入法 vingabcuurufa
装B vdB
装B vdb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apj
A盘 apj
A片 Apm
A片 apm
AA制 AAvi
AA制 aavi
ATM机 ATMji
ATM机 atmji
B超 Bik
B超 bik
B淋巴细胞 Blnbaxibk
B淋巴细胞 blnbaxibk
B盘 Bpj
B盘 bpj
B细胞 Bxibk
B细胞 bxibk
C盘 Cpj
C盘 cpj
C语言 Cyuyj
C语言 cyuyj
D盘 Dpj
D盘 dpj
E盘 Epj
E盘 epj
F盘 Fpj
F盘 fpj
G点 Gdm
G点 gdm
G盘 Gpj
G盘 gpj
IP地址 IPdivi
IP地址 ipdivi
IP电话 IPdmhw
IP电话 ipdmhw
IP卡 IPka
IP卡 ipka
J盘 Jpj
J盘 jpj
K宝 Kbk
K宝 kbk
K粉 Kff
K粉 kff
K歌 Kge
K歌 kge
K歌王 Kgewh
K歌王 kgewh
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlnbaxibk
T淋巴细胞 tlnbaxibk
T细胞 Txibk
T细胞 txibk
T型台 Txytl
T型台 txytl
U盾 Udp
U盾 udp
S形 Sxy
S形 sxy
U形 Uxy
U形 uxy
U形管 Uxygr
U形管 uxygr
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdk
X刀 xdk
X染色体 Xrjseti
X染色体 xrjseti
Y染色体 Yrjseti
Y染色体 yrjseti
z变换 zbmhr
z逆变换 znibmhr
D之国 Dvigo
D之国 dvigo
D之一族 Dviyizu
D之一族 dviyizu
Beta版 Betabj
Beta版 betabj
Beta版本 Betabjbf
Beta版本 betabjbf
AV女优 AVnvyb
AV女优 avnvyb
X战警 Xvjjy
X战警 xvjjy
YY语音 YYyuyn
YY语音 yyyuyn
A4纸 Asivi
A4纸 asivi
A4腰 Asiyk
A4腰 asiyk
N多 Ndo
N多 ndo
N多个 Ndoge
N多个 ndoge
N次 Nci
N次 nci
N遍 Nbm
N遍 nbm
蒙奇·D·路飞 mgqiDlufz
蒙奇·D·路飞 mgqidlufz
蒙奇·D·龙 mgqiDls
蒙奇·D·龙 mgqidls
哥尔·D·罗杰 geerDlojx
哥尔·D·罗杰 geerdlojx
马歇尔·D·蒂奇 maxxerDdiqi
马歇尔·D·蒂奇 maxxerddiqi
X·德雷克 Xdelzke
X·德雷克 xdelzke
蒙奇·D·卡普 mgqiDkapu
蒙奇·D·卡普 mgqidkapu
波特卡斯·D·艾斯 botekasiDaisi
波特卡斯·D·艾斯 botekasidaisi
VIP中P VIPvsP
VIP中P vipvsp
QQ秀 QQxq
QQ秀 qqxq
Big胆 Bigdj
Big胆 bigdj
我叫MT wojcMT
我叫MT wojcmt
谜拟Q miniQ
谜拟Q miniq
多边兽Z dobmubZ
多边兽Z dobmubz
藤子·F·不二雄 tgziFbuerxs
藤子·F·不二雄 tgzifbuerxs
PC版 PCbj
PC版 pcbj
PC版本 PCbjbf
PC版本 pcbjbf
A塔 Ata
A塔 ata
平A pyA
平A pya
立Flag liFlag
立Flag liflag
C罗 Clo
C罗 clo
IE浏览器 IElqljqi
IE浏览器 ielqljqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amm
A面 amm
B面 Bmm
B面 bmm
C面 Cmm
C面 cmm
D面 Dmm
D面 dmm
Server酱 Serverjd
Server酱 serverjd
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixw
P一下 pyixw
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQth
QQ堂 qqth
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS grdiBOSS
关底BOSS grdiboss
AA吧 AAba
AA吧 aaba
喊cut hjcut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Gougjy
Go圣经 gougjy
江南Style jdnjStyle
江南Style jdnjstyle
头文字D tbwfziD
头文字D tbwfzid
三无Marblue sjwuMarblue
三无Marblue sjwumarblue
A罩杯 Avkbz
A罩杯 avkbz
B罩杯 Bvkbz
B罩杯 bvkbz
C罩杯 Cvkbz
C罩杯 cvkbz
D罩杯 Dvkbz
D罩杯 dvkbz
E罩杯 Evkbz
E罩杯 evkbz
F罩杯 Fvkbz
F罩杯 fvkbz
G罩杯 Gvkbz
G罩杯 gvkbz
H罩杯 Hvkbz
H罩杯 hvkbz
A罩 Avk
A罩 avk
B罩 Bvk
B罩 bvk
C罩 Cvk
C罩 cvk
D罩 Dvk
D罩 dvk
E罩 Evk
E罩 evk
F罩 Fvk
F罩 fvk
G罩 Gvk
G罩 gvk
H罩 Hvk
H罩 hvk
A杯 Abz
A杯 abz
B杯 Bbz
B杯 bbz
C杯 Cbz
C杯 cbz
D杯 Dbz
D杯 dbz
E杯 Ebz
E杯 ebz
F杯 Fbz
F杯 fbz
G杯 Gbz
G杯 gbz
H杯 Hbz
H杯 hbz
TV版 TVbj
TV版 tvbj
TV版本 TVbjbf
TV版本 tvbjbf
芒果TV mhgoTV
芒果TV mhgotv
V字仇杀队 Vziibuadv
V字仇杀队 vziibuadv
V怪客 Vgyke
V怪客 vgyke
V煞 Vua
V煞 vua
Q弹 Qtj
Q弹 qtj
Steam云 Steamyp
Steam云 steamyp
M系列 Mxilx
M系列 mxilx
阿Sir aaSir
阿Sir aasir
Pro版 Probj
Pro版 probj
Pro版本 Probjbf
Pro版本 probjbf
Lite版 Litebj
Lite版 litebj
Lite版本 Litebjbf
Lite版本 litebjbf
X教授 Xjcub
X教授 xjcub
Papi酱 Papijd
Papi酱 papijd
MAC地址 MACdivi
MAC地址 macdivi
DNS劫持 DNSjxii
DNS劫持 dnsjxii
DNS污染 DNSwurj
DNS污染 dnswurj
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKaa
OK啊 okaa
我OK啊 woOKaa
我OK啊 wookaa
OK了吗 OKlema
OK了吗 oklema
腾讯QQ tgxpQQ
腾讯QQ tgxpqq
公网IP gswhIP
公网IP gswhip
Web开发 Webklfa
Web开发 webklfa
Switch版 Switchbj
Switch版 switchbj
Switch版本 Switchbjbf
Switch版本 switchbjbf
A型血 Axyxt
A型血 axyxt
A血型 Axtxy
A血型 axtxy
B型血 Bxyxt
B型血 bxyxt
B血型 Bxtxy
B血型 bxtxy
AB型 ABxy
AB型 abxy
AB型血 ABxyxt
AB型血 abxyxt
AB血型 ABxtxy
AB血型 abxtxy
O型 Oxy
O型 oxy
O型血 Oxyxt
O型血 oxyxt
O血型 Oxtxy
O血型 oxtxy
IT界 ITjx
IT界 itjx
Fn键 Fnjm
Fn键 fnjm
Cmd键 Cmdjm
Cmd键 cmdjm
Command键 Commandjm
Command键 commandjm
Ctrl键 Ctrljm
Ctrl键 ctrljm
Control键 Controljm
Control键 controljm
Opt键 Optjm
Opt键 optjm
Option键 Optionjm
Option键 optionjm
Shift键 Shiftjm
Shift键 shiftjm
Tab键 Tabjm
Tab键 tabjm
Caps键 Capsjm
Caps键 capsjm
CapsLock键 CapsLockjm
CapsLock键 capslockjm
Return键 Returnjm
Return键 returnjm
Enter键 Enterjm
Enter键 enterjm
Space键 Spacejm
Space键 spacejm
Backspace键 Backspacejm
Backspace键 backspacejm
Del键 Deljm
Del键 deljm
Delete键 Deletejm
Delete键 deletejm
Esc键 Escjm
Esc键 escjm
Eject键 Ejectjm
Eject键 ejectjm
周刊少年Jump vbkjuknmJump
周刊少年Jump vbkjuknmjump
ICP备案 ICPbzan
ICP备案 icpbzan
啥bug uabug
有bug ybbug
没bug mzbug
没有bug mzybbug
卡bug kabug
提bug tibug
写bug xxbug
改bug glbug
查bug iabug
找bug vkbug
J.K.罗琳 JKloln
J.K.罗琳 jkloln
J.R.R.托尔金 JRRtoerjn
J.R.R.托尔金 jrrtoerjn
乔治·R.R.马丁 qcviRRmady
乔治·R.R.马丁 qcvirrmady
异维A酸 yiwzAsr
异维A酸 yiwzasr
互fo hufo
减CD jmCD
减CD jmcd
随身Wi-Fi svufWiFi
随身Wi-Fi svufwifi
U型锁 Uxyso
U型锁 uxyso
Go程 Goig
Go程 goig
TG群 TGqp
TG群 tgqp
Telegram群 Telegramqp
Telegram群 telegramqp
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjmce
DNA检测 dnajmce
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT plCT
拍CT plct
CT检查 CTjmia
CT检查 ctjmia
PVC管 PVCgr
PVC管 pvcgr
DoS攻击 DoSgsji
DoS攻击 dosgsji
DDoS攻击 DDoSgsji
DDoS攻击 ddosgsji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qbj
Q版 qbj
A班 Abj
A班 abj
B班 Bbj
B班 bbj
C班 Cbj
C班 cbj
D班 Dbj
D班 dbj
老K lkK
老K lkk
加Q jwQ
加Q jwq
加QQ jwQQ
加QQ jwqq
A座 Azo
A座 azo
B座 Bzo
B座 bzo
C座 Czo
C座 czo
D座 Dzo
D座 dzo
E座 Ezo
E座 ezo
F座 Fzo
F座 fzo
H版 Hbj
H版 hbj
A口 Akb
A口 akb
B口 Bkb
B口 bkb
C口 Ckb
C口 ckb
D口 Dkb
D口 dkb
E口 Ekb
E口 ekb
F口 Fkb
F口 fkb
A出口 Aiukb
A出口 aiukb
B出口 Biukb
B出口 biukb
C出口 Ciukb
C出口 ciukb
D出口 Diukb
D出口 diukb
E出口 Eiukb
E出口 eiukb
F出口 Fiukb
F出口 fiukb
A楼 Alb
A楼 alb
B楼 Blb
B楼 blb
C楼 Clb
C楼 clb
D楼 Dlb
D楼 dlb
E楼 Elb
E楼 elb
F楼 Flb
F楼 flb
A型号 Axyhk
A型号 axyhk
B型号 Bxyhk
B型号 bxyhk
C型号 Cxyhk
C型号 cxyhk
D型号 Dxyhk
D型号 dxyhk
E型号 Exyhk
E型号 exyhk
F型号 Fxyhk
F型号 fxyhk
A型 Axy
A型 axy
B型 Bxy
B型 bxy
C型 Cxy
C型 cxy
D型 Dxy
D型 dxy
E型 Exy
E型 exy
F型 Fxy
F型 fxy
A款 Akr
A款 akr
B款 Bkr
B款 bkr
C款 Ckr
C款 ckr
D款 Dkr
D款 dkr
E款 Ekr
E款 ekr
F款 Fkr
F款 fkr
A栋 Ads
A栋 ads
B栋 Bds
B栋 bds
C栋 Cds
C栋 cds
D栋 Dds
D栋 dds
E栋 Eds
E栋 eds
F栋 Fds
F栋 fds
X轴 Xvb
X轴 xvb
Y轴 Yvb
Y轴 yvb
Z轴 Zvb
Z轴 zvb
V领 Vly
V领 vly
V字领 Vzily
V字领 vzily
V字形 Vzixy
V字形 vzixy
IT业 ITye
IT业 itye
IT行业 IThhye
IT行业 ithhye
K线 Kxm
K线 kxm
K线图 Kxmtu
K线图 kxmtu
日K线 riKxm
日K线 rikxm
周K线 vbKxm
周K线 vbkxm
月K线 ytKxm
月K线 ytkxm
T台 Ttl
T台 ttl
TF卡 TFka
TF卡 tfka
N年 Nnm
N年 nnm
A点 Adm
A点 adm
B点 Bdm
B点 bdm
A屏 Apy
A屏 apy
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zoBik
做B超 zobik
DJ版 DJbj
DJ版 djbj
唱K ihK
唱K ihk
PK赛 PKsl
PK赛 pksl
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP iaIP
查IP iaip
封IP fgIP
封IP fgip
换IP hrIP
换IP hrip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhvyr
VIP会员 viphvyr
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDbj
DVD版 dvdbj
USB线 USBxm
USB线 usbxm
USB口 USBkb
USB口 usbkb
USB接口 USBjxkb
USB接口 usbjxkb
X档案 Xdhan
X档案 xdhan
n次方 ncifh
N多人 Ndorf
N多人 ndorf
S曲线 Squxm
S曲线 squxm
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 isQbi
充Q币 isqbi
就OK jqOK
就OK jqok
不OK buOK
不OK buok
很OK hfOK
很OK hfok
特拉法尔加·D·瓦铁尔·罗 telafaerjwDwatxerlo
特拉法尔加·D·瓦铁尔·罗 telafaerjwdwatxerlo
开party klparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQybxi
QQ游戏 qqybxi
QQ游戏大厅 QQybxidaty
QQ游戏大厅 qqybxidaty
QQ音速 QQynsu
QQ音速 qqynsu
QQ飞车 QQfzie
QQ飞车 qqfzie
QQ三国 QQsjgo
QQ三国 qqsjgo
4S店 siSdm
4S店 sisdm
丰田AE86 fgtmAEbalq
丰田AE86 fgtmaebalq
TF版 TFbj
TF版 tfbj
TF版本 TFbjbf
TF版本 tfbjbf
O不OK ObuOK
O不OK obuok
人均GDP rfjpGDP
人均GDP rfjpgdp
V8引擎 Vbaynqy
V8引擎 vbaynqy
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 erGwhlo
2G网络 ergwhlo
3G网络 sjGwhlo
3G网络 sjgwhlo
4G网络 siGwhlo
4G网络 sigwhlo
5G网络 wuGwhlo
5G网络 wugwhlo
3G流量 sjGlqld
3G流量 sjglqld
4G流量 siGlqld
4G流量 siglqld
5G流量 wuGlqld
5G流量 wuglqld
3D打印 sjDdayn
3D打印 sjddayn
2D电影 erDdmyy
2D电影 erddmyy
3D电影 sjDdmyy
3D电影 sjddmyy
city不city citybucity
打call dacall
hold住 holdvu

941
en_dicts/cn_en_flypy.txt Normal file
View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en_flypy.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 小鹤双拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xgl
X光 xgl
X光片 Xglpm
X光片 xglpm
X射线 Xuexm
X射线 xuexm
Nabla算子 Nablasrzi
Nabla算子 nablasrzi
T恤 Txu
T恤 txu
T恤衫 Txuuj
T恤衫 txuuj
AD钙奶 ADgdnd
AD钙奶 adgdnd
UU加速器 UUjxsuqi
UU加速器 uujxsuqi
Cinity厅 Cinitytk
Cinity厅 cinitytk
Eul的神圣法杖 Euldeufugfavh
Eul的神圣法杖 euldeufugfavh
A杖 Avh
A杖 avh
红Buff hsBuff
红Buff hsbuff
蓝Buff ljBuff
蓝Buff ljbuff
老Baby lcBaby
老Baby lcbaby
小Baby xnBaby
小Baby xnbaby
艾AA aiAA
艾AA aiaa
炒CP icCP
炒CP iccp
嗑CP keCP
嗑CP kecp
U盘 Upj
U盘 upj
B站 Bvj
B站 bvj
V站 Vvj
V站 vvj
P站 Pvj
P站 pvj
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhc
QQ号 qqhc
QQ号码 QQhcma
QQ号码 qqhcma
QQ空间 QQksjm
QQ空间 qqksjm
QQ群 QQqy
QQ群 qqqy
QQ邮箱 QQyzxl
QQ邮箱 qqyzxl
QQ音乐 QQybyt
QQ音乐 qqybyt
QQ拼音 QQpbyb
QQ拼音 qqpbyb
QQ会员 QQhvyr
QQ会员 qqhvyr
QQ好友 QQhcyz
QQ好友 qqhcyz
QQ输入法 QQuurufa
QQ输入法 qquurufa
Dock栏 Docklj
Dock栏 docklj
阿Q精神 aaQjkuf
阿Q精神 aaqjkuf
Win版 Winbj
Win版 winbj
Win版本 Winbjbf
Win版本 winbjbf
Windows版 Windowsbj
Windows版 windowsbj
Windows版本 Windowsbjbf
Windows版本 windowsbjbf
Mac版 Macbj
Mac版 macbj
Mac版本 Macbjbf
Mac版本 macbjbf
macOS版 macOSbj
macOS版 macosbj
macOS版本 macOSbjbf
macOS版本 macosbjbf
iOS版 iOSbj
iOS版 iosbj
iOS版本 iOSbjbf
iOS版本 iosbjbf
Android版 Androidbj
Android版 androidbj
Android版本 Androidbjbf
Android版本 androidbjbf
Web版 Webbj
Web版 webbj
Web版本 Webbjbf
Web版本 webbjbf
PC端 PCdr
PC端 pcdr
Win端 Windr
Win端 windr
Windows端 Windowsdr
Windows端 windowsdr
Mac端 Macdr
Mac端 macdr
macOS端 macOSdr
macOS端 macosdr
Web端 Webdr
Web端 webdr
iOS端 iOSdr
iOS端 iosdr
Android端 Androiddr
Android端 androiddr
e招贷 evcdd
G胖 Gph
G胖 gph
Up主 Upvu
Up主 upvu
BOSS直聘 BOSSvipb
BOSS直聘 bossvipb
P社 Pue
P社 pue
V社 Vue
V社 vue
Go语言 Goyuyj
Go语言 goyuyj
维生素A wwugsuA
维生素A wwugsua
维生素B wwugsuB
维生素B wwugsub
维生素C wwugsuC
维生素C wwugsuc
维生素D wwugsuD
维生素D wwugsud
维生素E wwugsuE
维生素E wwugsue
维生素K wwugsuK
维生素K wwugsuk
维A wwA
维A wwa
维B wwB
维B wwb
维C wwC
维C wwc
维D wwD
维D wwd
维E wwE
维E wwe
维K wwK
维K wwk
维E乳 wwEru
维E乳 wweru
维生素E乳 wwugsuEru
维生素E乳 wwugsueru
阿Q aaQ
阿Q aaq
阿Q正传 aaQvgvr
阿Q正传 aaqvgvr
单边z变换 djbmzbmhr
逗B dzB
逗B dzb
哆啦A梦 dolaAmg
哆啦A梦 dolaamg
二B erB
二B erb
卡拉OK kalaOK
卡拉OK kalaok
牛B nqB
牛B nqb
三K党 sjKdh
三K党 sjkdh
傻B uaB
傻B uab
傻X uaX
傻X uax
智能ABC vingABC
智能ABC vingabc
智能ABC双拼 vingABCulpb
智能ABC双拼 vingabculpb
智能ABC双拼方案 vingABCulpbfhan
智能ABC双拼方案 vingabculpbfhan
智能ABC输入法 vingABCuurufa
智能ABC输入法 vingabcuurufa
装B vlB
装B vlb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apj
A盘 apj
A片 Apm
A片 apm
AA制 AAvi
AA制 aavi
ATM机 ATMji
ATM机 atmji
B超 Bic
B超 bic
B淋巴细胞 Blbbaxibc
B淋巴细胞 blbbaxibc
B盘 Bpj
B盘 bpj
B细胞 Bxibc
B细胞 bxibc
C盘 Cpj
C盘 cpj
C语言 Cyuyj
C语言 cyuyj
D盘 Dpj
D盘 dpj
E盘 Epj
E盘 epj
F盘 Fpj
F盘 fpj
G点 Gdm
G点 gdm
G盘 Gpj
G盘 gpj
IP地址 IPdivi
IP地址 ipdivi
IP电话 IPdmhx
IP电话 ipdmhx
IP卡 IPka
IP卡 ipka
J盘 Jpj
J盘 jpj
K宝 Kbc
K宝 kbc
K粉 Kff
K粉 kff
K歌 Kge
K歌 kge
K歌王 Kgewh
K歌王 kgewh
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlbbaxibc
T淋巴细胞 tlbbaxibc
T细胞 Txibc
T细胞 txibc
T型台 Txktd
T型台 txktd
U盾 Udy
U盾 udy
S形 Sxk
S形 sxk
U形 Uxk
U形 uxk
U形管 Uxkgr
U形管 uxkgr
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdc
X刀 xdc
X染色体 Xrjseti
X染色体 xrjseti
Y染色体 Yrjseti
Y染色体 yrjseti
z变换 zbmhr
z逆变换 znibmhr
D之国 Dvigo
D之国 dvigo
D之一族 Dviyizu
D之一族 dviyizu
Beta版 Betabj
Beta版 betabj
Beta版本 Betabjbf
Beta版本 betabjbf
AV女优 AVnvyz
AV女优 avnvyz
X战警 Xvjjk
X战警 xvjjk
YY语音 YYyuyb
YY语音 yyyuyb
A4纸 Asivi
A4纸 asivi
A4腰 Asiyc
A4腰 asiyc
N多 Ndo
N多 ndo
N多个 Ndoge
N多个 ndoge
N次 Nci
N次 nci
N遍 Nbm
N遍 nbm
蒙奇·D·路飞 mgqiDlufw
蒙奇·D·路飞 mgqidlufw
蒙奇·D·龙 mgqiDls
蒙奇·D·龙 mgqidls
哥尔·D·罗杰 geerDlojp
哥尔·D·罗杰 geerdlojp
马歇尔·D·蒂奇 maxperDdiqi
马歇尔·D·蒂奇 maxperddiqi
X·德雷克 Xdelwke
X·德雷克 xdelwke
蒙奇·D·卡普 mgqiDkapu
蒙奇·D·卡普 mgqidkapu
波特卡斯·D·艾斯 botekasiDaisi
波特卡斯·D·艾斯 botekasidaisi
VIP中P VIPvsP
VIP中P vipvsp
QQ秀 QQxq
QQ秀 qqxq
Big胆 Bigdj
Big胆 bigdj
我叫MT wojnMT
我叫MT wojnmt
谜拟Q miniQ
谜拟Q miniq
多边兽Z dobmuzZ
多边兽Z dobmuzz
藤子·F·不二雄 tgziFbuerxs
藤子·F·不二雄 tgzifbuerxs
PC版 PCbj
PC版 pcbj
PC版本 PCbjbf
PC版本 pcbjbf
A塔 Ata
A塔 ata
平A pkA
平A pka
立Flag liFlag
立Flag liflag
C罗 Clo
C罗 clo
IE浏览器 IElqljqi
IE浏览器 ielqljqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amm
A面 amm
B面 Bmm
B面 bmm
C面 Cmm
C面 cmm
D面 Dmm
D面 dmm
Server酱 Serverjl
Server酱 serverjl
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixx
P一下 pyixx
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQth
QQ堂 qqth
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS grdiBOSS
关底BOSS grdiboss
AA吧 AAba
AA吧 aaba
喊cut hjcut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Gougjk
Go圣经 gougjk
江南Style jlnjStyle
江南Style jlnjstyle
头文字D tzwfziD
头文字D tzwfzid
三无Marblue sjwuMarblue
三无Marblue sjwumarblue
A罩杯 Avcbw
A罩杯 avcbw
B罩杯 Bvcbw
B罩杯 bvcbw
C罩杯 Cvcbw
C罩杯 cvcbw
D罩杯 Dvcbw
D罩杯 dvcbw
E罩杯 Evcbw
E罩杯 evcbw
F罩杯 Fvcbw
F罩杯 fvcbw
G罩杯 Gvcbw
G罩杯 gvcbw
H罩杯 Hvcbw
H罩杯 hvcbw
A罩 Avc
A罩 avc
B罩 Bvc
B罩 bvc
C罩 Cvc
C罩 cvc
D罩 Dvc
D罩 dvc
E罩 Evc
E罩 evc
F罩 Fvc
F罩 fvc
G罩 Gvc
G罩 gvc
H罩 Hvc
H罩 hvc
A杯 Abw
A杯 abw
B杯 Bbw
B杯 bbw
C杯 Cbw
C杯 cbw
D杯 Dbw
D杯 dbw
E杯 Ebw
E杯 ebw
F杯 Fbw
F杯 fbw
G杯 Gbw
G杯 gbw
H杯 Hbw
H杯 hbw
TV版 TVbj
TV版 tvbj
TV版本 TVbjbf
TV版本 tvbjbf
芒果TV mhgoTV
芒果TV mhgotv
V字仇杀队 Vziizuadv
V字仇杀队 vziizuadv
V怪客 Vgkke
V怪客 vgkke
V煞 Vua
V煞 vua
Q弹 Qtj
Q弹 qtj
Steam云 Steamyy
Steam云 steamyy
M系列 Mxilp
M系列 mxilp
阿Sir aaSir
阿Sir aasir
Pro版 Probj
Pro版 probj
Pro版本 Probjbf
Pro版本 probjbf
Lite版 Litebj
Lite版 litebj
Lite版本 Litebjbf
Lite版本 litebjbf
X教授 Xjnuz
X教授 xjnuz
Papi酱 Papijl
Papi酱 papijl
MAC地址 MACdivi
MAC地址 macdivi
DNS劫持 DNSjpii
DNS劫持 dnsjpii
DNS污染 DNSwurj
DNS污染 dnswurj
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKaa
OK啊 okaa
我OK啊 woOKaa
我OK啊 wookaa
OK了吗 OKlema
OK了吗 oklema
腾讯QQ tgxyQQ
腾讯QQ tgxyqq
公网IP gswhIP
公网IP gswhip
Web开发 Webkdfa
Web开发 webkdfa
Switch版 Switchbj
Switch版 switchbj
Switch版本 Switchbjbf
Switch版本 switchbjbf
A型血 Axkxt
A型血 axkxt
A血型 Axtxk
A血型 axtxk
B型血 Bxkxt
B型血 bxkxt
B血型 Bxtxk
B血型 bxtxk
AB型 ABxk
AB型 abxk
AB型血 ABxkxt
AB型血 abxkxt
AB血型 ABxtxk
AB血型 abxtxk
O型 Oxk
O型 oxk
O型血 Oxkxt
O型血 oxkxt
O血型 Oxtxk
O血型 oxtxk
IT界 ITjp
IT界 itjp
Fn键 Fnjm
Fn键 fnjm
Cmd键 Cmdjm
Cmd键 cmdjm
Command键 Commandjm
Command键 commandjm
Ctrl键 Ctrljm
Ctrl键 ctrljm
Control键 Controljm
Control键 controljm
Opt键 Optjm
Opt键 optjm
Option键 Optionjm
Option键 optionjm
Shift键 Shiftjm
Shift键 shiftjm
Tab键 Tabjm
Tab键 tabjm
Caps键 Capsjm
Caps键 capsjm
CapsLock键 CapsLockjm
CapsLock键 capslockjm
Return键 Returnjm
Return键 returnjm
Enter键 Enterjm
Enter键 enterjm
Space键 Spacejm
Space键 spacejm
Backspace键 Backspacejm
Backspace键 backspacejm
Del键 Deljm
Del键 deljm
Delete键 Deletejm
Delete键 deletejm
Esc键 Escjm
Esc键 escjm
Eject键 Ejectjm
Eject键 ejectjm
周刊少年Jump vzkjucnmJump
周刊少年Jump vzkjucnmjump
ICP备案 ICPbwan
ICP备案 icpbwan
啥bug uabug
有bug yzbug
没bug mwbug
没有bug mwyzbug
卡bug kabug
提bug tibug
写bug xpbug
改bug gdbug
查bug iabug
找bug vcbug
J.K.罗琳 JKlolb
J.K.罗琳 jklolb
J.R.R.托尔金 JRRtoerjb
J.R.R.托尔金 jrrtoerjb
乔治·R.R.马丁 qnviRRmadk
乔治·R.R.马丁 qnvirrmadk
异维A酸 yiwwAsr
异维A酸 yiwwasr
互fo hufo
减CD jmCD
减CD jmcd
随身Wi-Fi svufWiFi
随身Wi-Fi svufwifi
U型锁 Uxkso
U型锁 uxkso
Go程 Goig
Go程 goig
TG群 TGqy
TG群 tgqy
Telegram群 Telegramqy
Telegram群 telegramqy
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjmce
DNA检测 dnajmce
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT pdCT
拍CT pdct
CT检查 CTjmia
CT检查 ctjmia
PVC管 PVCgr
PVC管 pvcgr
DoS攻击 DoSgsji
DoS攻击 dosgsji
DDoS攻击 DDoSgsji
DDoS攻击 ddosgsji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qbj
Q版 qbj
A班 Abj
A班 abj
B班 Bbj
B班 bbj
C班 Cbj
C班 cbj
D班 Dbj
D班 dbj
老K lcK
老K lck
加Q jxQ
加Q jxq
加QQ jxQQ
加QQ jxqq
A座 Azo
A座 azo
B座 Bzo
B座 bzo
C座 Czo
C座 czo
D座 Dzo
D座 dzo
E座 Ezo
E座 ezo
F座 Fzo
F座 fzo
H版 Hbj
H版 hbj
A口 Akz
A口 akz
B口 Bkz
B口 bkz
C口 Ckz
C口 ckz
D口 Dkz
D口 dkz
E口 Ekz
E口 ekz
F口 Fkz
F口 fkz
A出口 Aiukz
A出口 aiukz
B出口 Biukz
B出口 biukz
C出口 Ciukz
C出口 ciukz
D出口 Diukz
D出口 diukz
E出口 Eiukz
E出口 eiukz
F出口 Fiukz
F出口 fiukz
A楼 Alz
A楼 alz
B楼 Blz
B楼 blz
C楼 Clz
C楼 clz
D楼 Dlz
D楼 dlz
E楼 Elz
E楼 elz
F楼 Flz
F楼 flz
A型号 Axkhc
A型号 axkhc
B型号 Bxkhc
B型号 bxkhc
C型号 Cxkhc
C型号 cxkhc
D型号 Dxkhc
D型号 dxkhc
E型号 Exkhc
E型号 exkhc
F型号 Fxkhc
F型号 fxkhc
A型 Axk
A型 axk
B型 Bxk
B型 bxk
C型 Cxk
C型 cxk
D型 Dxk
D型 dxk
E型 Exk
E型 exk
F型 Fxk
F型 fxk
A款 Akr
A款 akr
B款 Bkr
B款 bkr
C款 Ckr
C款 ckr
D款 Dkr
D款 dkr
E款 Ekr
E款 ekr
F款 Fkr
F款 fkr
A栋 Ads
A栋 ads
B栋 Bds
B栋 bds
C栋 Cds
C栋 cds
D栋 Dds
D栋 dds
E栋 Eds
E栋 eds
F栋 Fds
F栋 fds
X轴 Xvz
X轴 xvz
Y轴 Yvz
Y轴 yvz
Z轴 Zvz
Z轴 zvz
V领 Vlk
V领 vlk
V字领 Vzilk
V字领 vzilk
V字形 Vzixk
V字形 vzixk
IT业 ITye
IT业 itye
IT行业 IThhye
IT行业 ithhye
K线 Kxm
K线 kxm
K线图 Kxmtu
K线图 kxmtu
日K线 riKxm
日K线 rikxm
周K线 vzKxm
周K线 vzkxm
月K线 ytKxm
月K线 ytkxm
T台 Ttd
T台 ttd
TF卡 TFka
TF卡 tfka
N年 Nnm
N年 nnm
A点 Adm
A点 adm
B点 Bdm
B点 bdm
A屏 Apk
A屏 apk
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zoBic
做B超 zobic
DJ版 DJbj
DJ版 djbj
唱K ihK
唱K ihk
PK赛 PKsd
PK赛 pksd
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP iaIP
查IP iaip
封IP fgIP
封IP fgip
换IP hrIP
换IP hrip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhvyr
VIP会员 viphvyr
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDbj
DVD版 dvdbj
USB线 USBxm
USB线 usbxm
USB口 USBkz
USB口 usbkz
USB接口 USBjpkz
USB接口 usbjpkz
X档案 Xdhan
X档案 xdhan
n次方 ncifh
N多人 Ndorf
N多人 ndorf
S曲线 Squxm
S曲线 squxm
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 isQbi
充Q币 isqbi
就OK jqOK
就OK jqok
不OK buOK
不OK buok
很OK hfOK
很OK hfok
特拉法尔加·D·瓦铁尔·罗 telafaerjxDwatperlo
特拉法尔加·D·瓦铁尔·罗 telafaerjxdwatperlo
开party kdparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQyzxi
QQ游戏 qqyzxi
QQ游戏大厅 QQyzxidatk
QQ游戏大厅 qqyzxidatk
QQ音速 QQybsu
QQ音速 qqybsu
QQ飞车 QQfwie
QQ飞车 qqfwie
QQ三国 QQsjgo
QQ三国 qqsjgo
4S店 siSdm
4S店 sisdm
丰田AE86 fgtmAEbalq
丰田AE86 fgtmaebalq
TF版 TFbj
TF版 tfbj
TF版本 TFbjbf
TF版本 tfbjbf
O不OK ObuOK
O不OK obuok
人均GDP rfjyGDP
人均GDP rfjygdp
V8引擎 Vbaybqk
V8引擎 vbaybqk
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 erGwhlo
2G网络 ergwhlo
3G网络 sjGwhlo
3G网络 sjgwhlo
4G网络 siGwhlo
4G网络 sigwhlo
5G网络 wuGwhlo
5G网络 wugwhlo
3G流量 sjGlqll
3G流量 sjglqll
4G流量 siGlqll
4G流量 siglqll
5G流量 wuGlqll
5G流量 wuglqll
3D打印 sjDdayb
3D打印 sjddayb
2D电影 erDdmyk
2D电影 erddmyk
3D电影 sjDdmyk
3D电影 sjddmyk
city不city citybucity
打call dacall
hold住 holdvu

941
en_dicts/cn_en_mspy.txt Normal file
View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en_mspy.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 微软双拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xgd
X光 xgd
X光片 Xgdpm
X光片 xgdpm
X射线 Xuexm
X射线 xuexm
Nabla算子 Nablasrzi
Nabla算子 nablasrzi
T恤 Txu
T恤 txu
T恤衫 Txuuj
T恤衫 txuuj
AD钙奶 ADglnl
AD钙奶 adglnl
UU加速器 UUjwsuqi
UU加速器 uujwsuqi
Cinity厅 Cinityt;
Cinity厅 cinityt;
Eul的神圣法杖 Euldeufugfavh
Eul的神圣法杖 euldeufugfavh
A杖 Avh
A杖 avh
红Buff hsBuff
红Buff hsbuff
蓝Buff ljBuff
蓝Buff ljbuff
老Baby lkBaby
老Baby lkbaby
小Baby xcBaby
小Baby xcbaby
艾AA olAA
艾AA olaa
炒CP ikCP
炒CP ikcp
嗑CP keCP
嗑CP kecp
U盘 Upj
U盘 upj
B站 Bvj
B站 bvj
V站 Vvj
V站 vvj
P站 Pvj
P站 pvj
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhk
QQ号 qqhk
QQ号码 QQhkma
QQ号码 qqhkma
QQ空间 QQksjm
QQ空间 qqksjm
QQ群 QQqp
QQ群 qqqp
QQ邮箱 QQybxd
QQ邮箱 qqybxd
QQ音乐 QQynyt
QQ音乐 qqynyt
QQ拼音 QQpnyn
QQ拼音 qqpnyn
QQ会员 QQhvyr
QQ会员 qqhvyr
QQ好友 QQhkyb
QQ好友 qqhkyb
QQ输入法 QQuurufa
QQ输入法 qquurufa
Dock栏 Docklj
Dock栏 docklj
阿Q精神 oaQj;uf
阿Q精神 oaqj;uf
Win版 Winbj
Win版 winbj
Win版本 Winbjbf
Win版本 winbjbf
Windows版 Windowsbj
Windows版 windowsbj
Windows版本 Windowsbjbf
Windows版本 windowsbjbf
Mac版 Macbj
Mac版 macbj
Mac版本 Macbjbf
Mac版本 macbjbf
macOS版 macOSbj
macOS版 macosbj
macOS版本 macOSbjbf
macOS版本 macosbjbf
iOS版 iOSbj
iOS版 iosbj
iOS版本 iOSbjbf
iOS版本 iosbjbf
Android版 Androidbj
Android版 androidbj
Android版本 Androidbjbf
Android版本 androidbjbf
Web版 Webbj
Web版 webbj
Web版本 Webbjbf
Web版本 webbjbf
PC端 PCdr
PC端 pcdr
Win端 Windr
Win端 windr
Windows端 Windowsdr
Windows端 windowsdr
Mac端 Macdr
Mac端 macdr
macOS端 macOSdr
macOS端 macosdr
Web端 Webdr
Web端 webdr
iOS端 iOSdr
iOS端 iosdr
Android端 Androiddr
Android端 androiddr
e招贷 evkdl
G胖 Gph
G胖 gph
Up主 Upvu
Up主 upvu
BOSS直聘 BOSSvipn
BOSS直聘 bossvipn
P社 Pue
P社 pue
V社 Vue
V社 vue
Go语言 Goyuyj
Go语言 goyuyj
维生素A wzugsuA
维生素A wzugsua
维生素B wzugsuB
维生素B wzugsub
维生素C wzugsuC
维生素C wzugsuc
维生素D wzugsuD
维生素D wzugsud
维生素E wzugsuE
维生素E wzugsue
维生素K wzugsuK
维生素K wzugsuk
维A wzA
维A wza
维B wzB
维B wzb
维C wzC
维C wzc
维D wzD
维D wzd
维E wzE
维E wze
维K wzK
维K wzk
维E乳 wzEru
维E乳 wzeru
维生素E乳 wzugsuEru
维生素E乳 wzugsueru
阿Q oaQ
阿Q oaq
阿Q正传 oaQvgvr
阿Q正传 oaqvgvr
单边z变换 djbmzbmhr
逗B dbB
逗B dbb
哆啦A梦 dolaAmg
哆啦A梦 dolaamg
二B orB
二B orb
卡拉OK kalaOK
卡拉OK kalaok
牛B nqB
牛B nqb
三K党 sjKdh
三K党 sjkdh
傻B uaB
傻B uab
傻X uaX
傻X uax
智能ABC vingABC
智能ABC vingabc
智能ABC双拼 vingABCudpn
智能ABC双拼 vingabcudpn
智能ABC双拼方案 vingABCudpnfhoj
智能ABC双拼方案 vingabcudpnfhoj
智能ABC输入法 vingABCuurufa
智能ABC输入法 vingabcuurufa
装B vdB
装B vdb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apj
A盘 apj
A片 Apm
A片 apm
AA制 AAvi
AA制 aavi
ATM机 ATMji
ATM机 atmji
B超 Bik
B超 bik
B淋巴细胞 Blnbaxibk
B淋巴细胞 blnbaxibk
B盘 Bpj
B盘 bpj
B细胞 Bxibk
B细胞 bxibk
C盘 Cpj
C盘 cpj
C语言 Cyuyj
C语言 cyuyj
D盘 Dpj
D盘 dpj
E盘 Epj
E盘 epj
F盘 Fpj
F盘 fpj
G点 Gdm
G点 gdm
G盘 Gpj
G盘 gpj
IP地址 IPdivi
IP地址 ipdivi
IP电话 IPdmhw
IP电话 ipdmhw
IP卡 IPka
IP卡 ipka
J盘 Jpj
J盘 jpj
K宝 Kbk
K宝 kbk
K粉 Kff
K粉 kff
K歌 Kge
K歌 kge
K歌王 Kgewh
K歌王 kgewh
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlnbaxibk
T淋巴细胞 tlnbaxibk
T细胞 Txibk
T细胞 txibk
T型台 Tx;tl
T型台 tx;tl
U盾 Udp
U盾 udp
S形 Sx;
S形 sx;
U形 Ux;
U形 ux;
U形管 Ux;gr
U形管 ux;gr
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdk
X刀 xdk
X染色体 Xrjseti
X染色体 xrjseti
Y染色体 Yrjseti
Y染色体 yrjseti
z变换 zbmhr
z逆变换 znibmhr
D之国 Dvigo
D之国 dvigo
D之一族 Dviyizu
D之一族 dviyizu
Beta版 Betabj
Beta版 betabj
Beta版本 Betabjbf
Beta版本 betabjbf
AV女优 AVnvyb
AV女优 avnvyb
X战警 Xvjj;
X战警 xvjj;
YY语音 YYyuyn
YY语音 yyyuyn
A4纸 Asivi
A4纸 asivi
A4腰 Asiyk
A4腰 asiyk
N多 Ndo
N多 ndo
N多个 Ndoge
N多个 ndoge
N次 Nci
N次 nci
N遍 Nbm
N遍 nbm
蒙奇·D·路飞 mgqiDlufz
蒙奇·D·路飞 mgqidlufz
蒙奇·D·龙 mgqiDls
蒙奇·D·龙 mgqidls
哥尔·D·罗杰 georDlojx
哥尔·D·罗杰 geordlojx
马歇尔·D·蒂奇 maxxorDdiqi
马歇尔·D·蒂奇 maxxorddiqi
X·德雷克 Xdelzke
X·德雷克 xdelzke
蒙奇·D·卡普 mgqiDkapu
蒙奇·D·卡普 mgqidkapu
波特卡斯·D·艾斯 botekasiDolsi
波特卡斯·D·艾斯 botekasidolsi
VIP中P VIPvsP
VIP中P vipvsp
QQ秀 QQxq
QQ秀 qqxq
Big胆 Bigdj
Big胆 bigdj
我叫MT wojcMT
我叫MT wojcmt
谜拟Q miniQ
谜拟Q miniq
多边兽Z dobmubZ
多边兽Z dobmubz
藤子·F·不二雄 tgziFbuorxs
藤子·F·不二雄 tgzifbuorxs
PC版 PCbj
PC版 pcbj
PC版本 PCbjbf
PC版本 pcbjbf
A塔 Ata
A塔 ata
平A p;A
平A p;a
立Flag liFlag
立Flag liflag
C罗 Clo
C罗 clo
IE浏览器 IElqljqi
IE浏览器 ielqljqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amm
A面 amm
B面 Bmm
B面 bmm
C面 Cmm
C面 cmm
D面 Dmm
D面 dmm
Server酱 Serverjd
Server酱 serverjd
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixw
P一下 pyixw
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQth
QQ堂 qqth
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS grdiBOSS
关底BOSS grdiboss
AA吧 AAba
AA吧 aaba
喊cut hjcut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Gougj;
Go圣经 gougj;
江南Style jdnjStyle
江南Style jdnjstyle
头文字D tbwfziD
头文字D tbwfzid
三无Marblue sjwuMarblue
三无Marblue sjwumarblue
A罩杯 Avkbz
A罩杯 avkbz
B罩杯 Bvkbz
B罩杯 bvkbz
C罩杯 Cvkbz
C罩杯 cvkbz
D罩杯 Dvkbz
D罩杯 dvkbz
E罩杯 Evkbz
E罩杯 evkbz
F罩杯 Fvkbz
F罩杯 fvkbz
G罩杯 Gvkbz
G罩杯 gvkbz
H罩杯 Hvkbz
H罩杯 hvkbz
A罩 Avk
A罩 avk
B罩 Bvk
B罩 bvk
C罩 Cvk
C罩 cvk
D罩 Dvk
D罩 dvk
E罩 Evk
E罩 evk
F罩 Fvk
F罩 fvk
G罩 Gvk
G罩 gvk
H罩 Hvk
H罩 hvk
A杯 Abz
A杯 abz
B杯 Bbz
B杯 bbz
C杯 Cbz
C杯 cbz
D杯 Dbz
D杯 dbz
E杯 Ebz
E杯 ebz
F杯 Fbz
F杯 fbz
G杯 Gbz
G杯 gbz
H杯 Hbz
H杯 hbz
TV版 TVbj
TV版 tvbj
TV版本 TVbjbf
TV版本 tvbjbf
芒果TV mhgoTV
芒果TV mhgotv
V字仇杀队 Vziibuadv
V字仇杀队 vziibuadv
V怪客 Vgyke
V怪客 vgyke
V煞 Vua
V煞 vua
Q弹 Qtj
Q弹 qtj
Steam云 Steamyp
Steam云 steamyp
M系列 Mxilx
M系列 mxilx
阿Sir oaSir
阿Sir oasir
Pro版 Probj
Pro版 probj
Pro版本 Probjbf
Pro版本 probjbf
Lite版 Litebj
Lite版 litebj
Lite版本 Litebjbf
Lite版本 litebjbf
X教授 Xjcub
X教授 xjcub
Papi酱 Papijd
Papi酱 papijd
MAC地址 MACdivi
MAC地址 macdivi
DNS劫持 DNSjxii
DNS劫持 dnsjxii
DNS污染 DNSwurj
DNS污染 dnswurj
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKoa
OK啊 okoa
我OK啊 woOKoa
我OK啊 wookoa
OK了吗 OKlema
OK了吗 oklema
腾讯QQ tgxpQQ
腾讯QQ tgxpqq
公网IP gswhIP
公网IP gswhip
Web开发 Webklfa
Web开发 webklfa
Switch版 Switchbj
Switch版 switchbj
Switch版本 Switchbjbf
Switch版本 switchbjbf
A型血 Ax;xt
A型血 ax;xt
A血型 Axtx;
A血型 axtx;
B型血 Bx;xt
B型血 bx;xt
B血型 Bxtx;
B血型 bxtx;
AB型 ABx;
AB型 abx;
AB型血 ABx;xt
AB型血 abx;xt
AB血型 ABxtx;
AB血型 abxtx;
O型 Ox;
O型 ox;
O型血 Ox;xt
O型血 ox;xt
O血型 Oxtx;
O血型 oxtx;
IT界 ITjx
IT界 itjx
Fn键 Fnjm
Fn键 fnjm
Cmd键 Cmdjm
Cmd键 cmdjm
Command键 Commandjm
Command键 commandjm
Ctrl键 Ctrljm
Ctrl键 ctrljm
Control键 Controljm
Control键 controljm
Opt键 Optjm
Opt键 optjm
Option键 Optionjm
Option键 optionjm
Shift键 Shiftjm
Shift键 shiftjm
Tab键 Tabjm
Tab键 tabjm
Caps键 Capsjm
Caps键 capsjm
CapsLock键 CapsLockjm
CapsLock键 capslockjm
Return键 Returnjm
Return键 returnjm
Enter键 Enterjm
Enter键 enterjm
Space键 Spacejm
Space键 spacejm
Backspace键 Backspacejm
Backspace键 backspacejm
Del键 Deljm
Del键 deljm
Delete键 Deletejm
Delete键 deletejm
Esc键 Escjm
Esc键 escjm
Eject键 Ejectjm
Eject键 ejectjm
周刊少年Jump vbkjuknmJump
周刊少年Jump vbkjuknmjump
ICP备案 ICPbzoj
ICP备案 icpbzoj
啥bug uabug
有bug ybbug
没bug mzbug
没有bug mzybbug
卡bug kabug
提bug tibug
写bug xxbug
改bug glbug
查bug iabug
找bug vkbug
J.K.罗琳 JKloln
J.K.罗琳 jkloln
J.R.R.托尔金 JRRtoorjn
J.R.R.托尔金 jrrtoorjn
乔治·R.R.马丁 qcviRRmad;
乔治·R.R.马丁 qcvirrmad;
异维A酸 yiwzAsr
异维A酸 yiwzasr
互fo hufo
减CD jmCD
减CD jmcd
随身Wi-Fi svufWiFi
随身Wi-Fi svufwifi
U型锁 Ux;so
U型锁 ux;so
Go程 Goig
Go程 goig
TG群 TGqp
TG群 tgqp
Telegram群 Telegramqp
Telegram群 telegramqp
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjmce
DNA检测 dnajmce
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT plCT
拍CT plct
CT检查 CTjmia
CT检查 ctjmia
PVC管 PVCgr
PVC管 pvcgr
DoS攻击 DoSgsji
DoS攻击 dosgsji
DDoS攻击 DDoSgsji
DDoS攻击 ddosgsji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qbj
Q版 qbj
A班 Abj
A班 abj
B班 Bbj
B班 bbj
C班 Cbj
C班 cbj
D班 Dbj
D班 dbj
老K lkK
老K lkk
加Q jwQ
加Q jwq
加QQ jwQQ
加QQ jwqq
A座 Azo
A座 azo
B座 Bzo
B座 bzo
C座 Czo
C座 czo
D座 Dzo
D座 dzo
E座 Ezo
E座 ezo
F座 Fzo
F座 fzo
H版 Hbj
H版 hbj
A口 Akb
A口 akb
B口 Bkb
B口 bkb
C口 Ckb
C口 ckb
D口 Dkb
D口 dkb
E口 Ekb
E口 ekb
F口 Fkb
F口 fkb
A出口 Aiukb
A出口 aiukb
B出口 Biukb
B出口 biukb
C出口 Ciukb
C出口 ciukb
D出口 Diukb
D出口 diukb
E出口 Eiukb
E出口 eiukb
F出口 Fiukb
F出口 fiukb
A楼 Alb
A楼 alb
B楼 Blb
B楼 blb
C楼 Clb
C楼 clb
D楼 Dlb
D楼 dlb
E楼 Elb
E楼 elb
F楼 Flb
F楼 flb
A型号 Ax;hk
A型号 ax;hk
B型号 Bx;hk
B型号 bx;hk
C型号 Cx;hk
C型号 cx;hk
D型号 Dx;hk
D型号 dx;hk
E型号 Ex;hk
E型号 ex;hk
F型号 Fx;hk
F型号 fx;hk
A型 Ax;
A型 ax;
B型 Bx;
B型 bx;
C型 Cx;
C型 cx;
D型 Dx;
D型 dx;
E型 Ex;
E型 ex;
F型 Fx;
F型 fx;
A款 Akr
A款 akr
B款 Bkr
B款 bkr
C款 Ckr
C款 ckr
D款 Dkr
D款 dkr
E款 Ekr
E款 ekr
F款 Fkr
F款 fkr
A栋 Ads
A栋 ads
B栋 Bds
B栋 bds
C栋 Cds
C栋 cds
D栋 Dds
D栋 dds
E栋 Eds
E栋 eds
F栋 Fds
F栋 fds
X轴 Xvb
X轴 xvb
Y轴 Yvb
Y轴 yvb
Z轴 Zvb
Z轴 zvb
V领 Vl;
V领 vl;
V字领 Vzil;
V字领 vzil;
V字形 Vzix;
V字形 vzix;
IT业 ITye
IT业 itye
IT行业 IThhye
IT行业 ithhye
K线 Kxm
K线 kxm
K线图 Kxmtu
K线图 kxmtu
日K线 riKxm
日K线 rikxm
周K线 vbKxm
周K线 vbkxm
月K线 ytKxm
月K线 ytkxm
T台 Ttl
T台 ttl
TF卡 TFka
TF卡 tfka
N年 Nnm
N年 nnm
A点 Adm
A点 adm
B点 Bdm
B点 bdm
A屏 Ap;
A屏 ap;
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zoBik
做B超 zobik
DJ版 DJbj
DJ版 djbj
唱K ihK
唱K ihk
PK赛 PKsl
PK赛 pksl
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP iaIP
查IP iaip
封IP fgIP
封IP fgip
换IP hrIP
换IP hrip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhvyr
VIP会员 viphvyr
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDbj
DVD版 dvdbj
USB线 USBxm
USB线 usbxm
USB口 USBkb
USB口 usbkb
USB接口 USBjxkb
USB接口 usbjxkb
X档案 Xdhoj
X档案 xdhoj
n次方 ncifh
N多人 Ndorf
N多人 ndorf
S曲线 Squxm
S曲线 squxm
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 isQbi
充Q币 isqbi
就OK jqOK
就OK jqok
不OK buOK
不OK buok
很OK hfOK
很OK hfok
特拉法尔加·D·瓦铁尔·罗 telafaorjwDwatxorlo
特拉法尔加·D·瓦铁尔·罗 telafaorjwdwatxorlo
开party klparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQybxi
QQ游戏 qqybxi
QQ游戏大厅 QQybxidat;
QQ游戏大厅 qqybxidat;
QQ音速 QQynsu
QQ音速 qqynsu
QQ飞车 QQfzie
QQ飞车 qqfzie
QQ三国 QQsjgo
QQ三国 qqsjgo
4S店 siSdm
4S店 sisdm
丰田AE86 fgtmAEbalq
丰田AE86 fgtmaebalq
TF版 TFbj
TF版 tfbj
TF版本 TFbjbf
TF版本 tfbjbf
O不OK ObuOK
O不OK obuok
人均GDP rfjpGDP
人均GDP rfjpgdp
V8引擎 Vbaynq;
V8引擎 vbaynq;
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 orGwhlo
2G网络 orgwhlo
3G网络 sjGwhlo
3G网络 sjgwhlo
4G网络 siGwhlo
4G网络 sigwhlo
5G网络 wuGwhlo
5G网络 wugwhlo
3G流量 sjGlqld
3G流量 sjglqld
4G流量 siGlqld
4G流量 siglqld
5G流量 wuGlqld
5G流量 wuglqld
3D打印 sjDdayn
3D打印 sjddayn
2D电影 orDdmy;
2D电影 orddmy;
3D电影 sjDdmy;
3D电影 sjddmy;
city不city citybucity
打call dacall
hold住 holdvu

941
en_dicts/cn_en_sogou.txt Normal file
View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en_sogou.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 搜狗双拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xgd
X光 xgd
X光片 Xgdpm
X光片 xgdpm
X射线 Xuexm
X射线 xuexm
Nabla算子 Nablasrzi
Nabla算子 nablasrzi
T恤 Txu
T恤 txu
T恤衫 Txuuj
T恤衫 txuuj
AD钙奶 ADglnl
AD钙奶 adglnl
UU加速器 UUjwsuqi
UU加速器 uujwsuqi
Cinity厅 Cinityt;
Cinity厅 cinityt;
Eul的神圣法杖 Euldeufugfavh
Eul的神圣法杖 euldeufugfavh
A杖 Avh
A杖 avh
红Buff hsBuff
红Buff hsbuff
蓝Buff ljBuff
蓝Buff ljbuff
老Baby lkBaby
老Baby lkbaby
小Baby xcBaby
小Baby xcbaby
艾AA olAA
艾AA olaa
炒CP ikCP
炒CP ikcp
嗑CP keCP
嗑CP kecp
U盘 Upj
U盘 upj
B站 Bvj
B站 bvj
V站 Vvj
V站 vvj
P站 Pvj
P站 pvj
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhk
QQ号 qqhk
QQ号码 QQhkma
QQ号码 qqhkma
QQ空间 QQksjm
QQ空间 qqksjm
QQ群 QQqp
QQ群 qqqp
QQ邮箱 QQybxd
QQ邮箱 qqybxd
QQ音乐 QQynyt
QQ音乐 qqynyt
QQ拼音 QQpnyn
QQ拼音 qqpnyn
QQ会员 QQhvyr
QQ会员 qqhvyr
QQ好友 QQhkyb
QQ好友 qqhkyb
QQ输入法 QQuurufa
QQ输入法 qquurufa
Dock栏 Docklj
Dock栏 docklj
阿Q精神 oaQj;uf
阿Q精神 oaqj;uf
Win版 Winbj
Win版 winbj
Win版本 Winbjbf
Win版本 winbjbf
Windows版 Windowsbj
Windows版 windowsbj
Windows版本 Windowsbjbf
Windows版本 windowsbjbf
Mac版 Macbj
Mac版 macbj
Mac版本 Macbjbf
Mac版本 macbjbf
macOS版 macOSbj
macOS版 macosbj
macOS版本 macOSbjbf
macOS版本 macosbjbf
iOS版 iOSbj
iOS版 iosbj
iOS版本 iOSbjbf
iOS版本 iosbjbf
Android版 Androidbj
Android版 androidbj
Android版本 Androidbjbf
Android版本 androidbjbf
Web版 Webbj
Web版 webbj
Web版本 Webbjbf
Web版本 webbjbf
PC端 PCdr
PC端 pcdr
Win端 Windr
Win端 windr
Windows端 Windowsdr
Windows端 windowsdr
Mac端 Macdr
Mac端 macdr
macOS端 macOSdr
macOS端 macosdr
Web端 Webdr
Web端 webdr
iOS端 iOSdr
iOS端 iosdr
Android端 Androiddr
Android端 androiddr
e招贷 evkdl
G胖 Gph
G胖 gph
Up主 Upvu
Up主 upvu
BOSS直聘 BOSSvipn
BOSS直聘 bossvipn
P社 Pue
P社 pue
V社 Vue
V社 vue
Go语言 Goyuyj
Go语言 goyuyj
维生素A wzugsuA
维生素A wzugsua
维生素B wzugsuB
维生素B wzugsub
维生素C wzugsuC
维生素C wzugsuc
维生素D wzugsuD
维生素D wzugsud
维生素E wzugsuE
维生素E wzugsue
维生素K wzugsuK
维生素K wzugsuk
维A wzA
维A wza
维B wzB
维B wzb
维C wzC
维C wzc
维D wzD
维D wzd
维E wzE
维E wze
维K wzK
维K wzk
维E乳 wzEru
维E乳 wzeru
维生素E乳 wzugsuEru
维生素E乳 wzugsueru
阿Q oaQ
阿Q oaq
阿Q正传 oaQvgvr
阿Q正传 oaqvgvr
单边z变换 djbmzbmhr
逗B dbB
逗B dbb
哆啦A梦 dolaAmg
哆啦A梦 dolaamg
二B orB
二B orb
卡拉OK kalaOK
卡拉OK kalaok
牛B nqB
牛B nqb
三K党 sjKdh
三K党 sjkdh
傻B uaB
傻B uab
傻X uaX
傻X uax
智能ABC vingABC
智能ABC vingabc
智能ABC双拼 vingABCudpn
智能ABC双拼 vingabcudpn
智能ABC双拼方案 vingABCudpnfhoj
智能ABC双拼方案 vingabcudpnfhoj
智能ABC输入法 vingABCuurufa
智能ABC输入法 vingabcuurufa
装B vdB
装B vdb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apj
A盘 apj
A片 Apm
A片 apm
AA制 AAvi
AA制 aavi
ATM机 ATMji
ATM机 atmji
B超 Bik
B超 bik
B淋巴细胞 Blnbaxibk
B淋巴细胞 blnbaxibk
B盘 Bpj
B盘 bpj
B细胞 Bxibk
B细胞 bxibk
C盘 Cpj
C盘 cpj
C语言 Cyuyj
C语言 cyuyj
D盘 Dpj
D盘 dpj
E盘 Epj
E盘 epj
F盘 Fpj
F盘 fpj
G点 Gdm
G点 gdm
G盘 Gpj
G盘 gpj
IP地址 IPdivi
IP地址 ipdivi
IP电话 IPdmhw
IP电话 ipdmhw
IP卡 IPka
IP卡 ipka
J盘 Jpj
J盘 jpj
K宝 Kbk
K宝 kbk
K粉 Kff
K粉 kff
K歌 Kge
K歌 kge
K歌王 Kgewh
K歌王 kgewh
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlnbaxibk
T淋巴细胞 tlnbaxibk
T细胞 Txibk
T细胞 txibk
T型台 Tx;tl
T型台 tx;tl
U盾 Udp
U盾 udp
S形 Sx;
S形 sx;
U形 Ux;
U形 ux;
U形管 Ux;gr
U形管 ux;gr
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdk
X刀 xdk
X染色体 Xrjseti
X染色体 xrjseti
Y染色体 Yrjseti
Y染色体 yrjseti
z变换 zbmhr
z逆变换 znibmhr
D之国 Dvigo
D之国 dvigo
D之一族 Dviyizu
D之一族 dviyizu
Beta版 Betabj
Beta版 betabj
Beta版本 Betabjbf
Beta版本 betabjbf
AV女优 AVnvyb
AV女优 avnvyb
X战警 Xvjj;
X战警 xvjj;
YY语音 YYyuyn
YY语音 yyyuyn
A4纸 Asivi
A4纸 asivi
A4腰 Asiyk
A4腰 asiyk
N多 Ndo
N多 ndo
N多个 Ndoge
N多个 ndoge
N次 Nci
N次 nci
N遍 Nbm
N遍 nbm
蒙奇·D·路飞 mgqiDlufz
蒙奇·D·路飞 mgqidlufz
蒙奇·D·龙 mgqiDls
蒙奇·D·龙 mgqidls
哥尔·D·罗杰 georDlojx
哥尔·D·罗杰 geordlojx
马歇尔·D·蒂奇 maxxorDdiqi
马歇尔·D·蒂奇 maxxorddiqi
X·德雷克 Xdelzke
X·德雷克 xdelzke
蒙奇·D·卡普 mgqiDkapu
蒙奇·D·卡普 mgqidkapu
波特卡斯·D·艾斯 botekasiDolsi
波特卡斯·D·艾斯 botekasidolsi
VIP中P VIPvsP
VIP中P vipvsp
QQ秀 QQxq
QQ秀 qqxq
Big胆 Bigdj
Big胆 bigdj
我叫MT wojcMT
我叫MT wojcmt
谜拟Q miniQ
谜拟Q miniq
多边兽Z dobmubZ
多边兽Z dobmubz
藤子·F·不二雄 tgziFbuorxs
藤子·F·不二雄 tgzifbuorxs
PC版 PCbj
PC版 pcbj
PC版本 PCbjbf
PC版本 pcbjbf
A塔 Ata
A塔 ata
平A p;A
平A p;a
立Flag liFlag
立Flag liflag
C罗 Clo
C罗 clo
IE浏览器 IElqljqi
IE浏览器 ielqljqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amm
A面 amm
B面 Bmm
B面 bmm
C面 Cmm
C面 cmm
D面 Dmm
D面 dmm
Server酱 Serverjd
Server酱 serverjd
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixw
P一下 pyixw
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQth
QQ堂 qqth
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS grdiBOSS
关底BOSS grdiboss
AA吧 AAba
AA吧 aaba
喊cut hjcut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Gougj;
Go圣经 gougj;
江南Style jdnjStyle
江南Style jdnjstyle
头文字D tbwfziD
头文字D tbwfzid
三无Marblue sjwuMarblue
三无Marblue sjwumarblue
A罩杯 Avkbz
A罩杯 avkbz
B罩杯 Bvkbz
B罩杯 bvkbz
C罩杯 Cvkbz
C罩杯 cvkbz
D罩杯 Dvkbz
D罩杯 dvkbz
E罩杯 Evkbz
E罩杯 evkbz
F罩杯 Fvkbz
F罩杯 fvkbz
G罩杯 Gvkbz
G罩杯 gvkbz
H罩杯 Hvkbz
H罩杯 hvkbz
A罩 Avk
A罩 avk
B罩 Bvk
B罩 bvk
C罩 Cvk
C罩 cvk
D罩 Dvk
D罩 dvk
E罩 Evk
E罩 evk
F罩 Fvk
F罩 fvk
G罩 Gvk
G罩 gvk
H罩 Hvk
H罩 hvk
A杯 Abz
A杯 abz
B杯 Bbz
B杯 bbz
C杯 Cbz
C杯 cbz
D杯 Dbz
D杯 dbz
E杯 Ebz
E杯 ebz
F杯 Fbz
F杯 fbz
G杯 Gbz
G杯 gbz
H杯 Hbz
H杯 hbz
TV版 TVbj
TV版 tvbj
TV版本 TVbjbf
TV版本 tvbjbf
芒果TV mhgoTV
芒果TV mhgotv
V字仇杀队 Vziibuadv
V字仇杀队 vziibuadv
V怪客 Vgyke
V怪客 vgyke
V煞 Vua
V煞 vua
Q弹 Qtj
Q弹 qtj
Steam云 Steamyp
Steam云 steamyp
M系列 Mxilx
M系列 mxilx
阿Sir oaSir
阿Sir oasir
Pro版 Probj
Pro版 probj
Pro版本 Probjbf
Pro版本 probjbf
Lite版 Litebj
Lite版 litebj
Lite版本 Litebjbf
Lite版本 litebjbf
X教授 Xjcub
X教授 xjcub
Papi酱 Papijd
Papi酱 papijd
MAC地址 MACdivi
MAC地址 macdivi
DNS劫持 DNSjxii
DNS劫持 dnsjxii
DNS污染 DNSwurj
DNS污染 dnswurj
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKoa
OK啊 okoa
我OK啊 woOKoa
我OK啊 wookoa
OK了吗 OKlema
OK了吗 oklema
腾讯QQ tgxpQQ
腾讯QQ tgxpqq
公网IP gswhIP
公网IP gswhip
Web开发 Webklfa
Web开发 webklfa
Switch版 Switchbj
Switch版 switchbj
Switch版本 Switchbjbf
Switch版本 switchbjbf
A型血 Ax;xt
A型血 ax;xt
A血型 Axtx;
A血型 axtx;
B型血 Bx;xt
B型血 bx;xt
B血型 Bxtx;
B血型 bxtx;
AB型 ABx;
AB型 abx;
AB型血 ABx;xt
AB型血 abx;xt
AB血型 ABxtx;
AB血型 abxtx;
O型 Ox;
O型 ox;
O型血 Ox;xt
O型血 ox;xt
O血型 Oxtx;
O血型 oxtx;
IT界 ITjx
IT界 itjx
Fn键 Fnjm
Fn键 fnjm
Cmd键 Cmdjm
Cmd键 cmdjm
Command键 Commandjm
Command键 commandjm
Ctrl键 Ctrljm
Ctrl键 ctrljm
Control键 Controljm
Control键 controljm
Opt键 Optjm
Opt键 optjm
Option键 Optionjm
Option键 optionjm
Shift键 Shiftjm
Shift键 shiftjm
Tab键 Tabjm
Tab键 tabjm
Caps键 Capsjm
Caps键 capsjm
CapsLock键 CapsLockjm
CapsLock键 capslockjm
Return键 Returnjm
Return键 returnjm
Enter键 Enterjm
Enter键 enterjm
Space键 Spacejm
Space键 spacejm
Backspace键 Backspacejm
Backspace键 backspacejm
Del键 Deljm
Del键 deljm
Delete键 Deletejm
Delete键 deletejm
Esc键 Escjm
Esc键 escjm
Eject键 Ejectjm
Eject键 ejectjm
周刊少年Jump vbkjuknmJump
周刊少年Jump vbkjuknmjump
ICP备案 ICPbzoj
ICP备案 icpbzoj
啥bug uabug
有bug ybbug
没bug mzbug
没有bug mzybbug
卡bug kabug
提bug tibug
写bug xxbug
改bug glbug
查bug iabug
找bug vkbug
J.K.罗琳 JKloln
J.K.罗琳 jkloln
J.R.R.托尔金 JRRtoorjn
J.R.R.托尔金 jrrtoorjn
乔治·R.R.马丁 qcviRRmad;
乔治·R.R.马丁 qcvirrmad;
异维A酸 yiwzAsr
异维A酸 yiwzasr
互fo hufo
减CD jmCD
减CD jmcd
随身Wi-Fi svufWiFi
随身Wi-Fi svufwifi
U型锁 Ux;so
U型锁 ux;so
Go程 Goig
Go程 goig
TG群 TGqp
TG群 tgqp
Telegram群 Telegramqp
Telegram群 telegramqp
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjmce
DNA检测 dnajmce
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT plCT
拍CT plct
CT检查 CTjmia
CT检查 ctjmia
PVC管 PVCgr
PVC管 pvcgr
DoS攻击 DoSgsji
DoS攻击 dosgsji
DDoS攻击 DDoSgsji
DDoS攻击 ddosgsji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qbj
Q版 qbj
A班 Abj
A班 abj
B班 Bbj
B班 bbj
C班 Cbj
C班 cbj
D班 Dbj
D班 dbj
老K lkK
老K lkk
加Q jwQ
加Q jwq
加QQ jwQQ
加QQ jwqq
A座 Azo
A座 azo
B座 Bzo
B座 bzo
C座 Czo
C座 czo
D座 Dzo
D座 dzo
E座 Ezo
E座 ezo
F座 Fzo
F座 fzo
H版 Hbj
H版 hbj
A口 Akb
A口 akb
B口 Bkb
B口 bkb
C口 Ckb
C口 ckb
D口 Dkb
D口 dkb
E口 Ekb
E口 ekb
F口 Fkb
F口 fkb
A出口 Aiukb
A出口 aiukb
B出口 Biukb
B出口 biukb
C出口 Ciukb
C出口 ciukb
D出口 Diukb
D出口 diukb
E出口 Eiukb
E出口 eiukb
F出口 Fiukb
F出口 fiukb
A楼 Alb
A楼 alb
B楼 Blb
B楼 blb
C楼 Clb
C楼 clb
D楼 Dlb
D楼 dlb
E楼 Elb
E楼 elb
F楼 Flb
F楼 flb
A型号 Ax;hk
A型号 ax;hk
B型号 Bx;hk
B型号 bx;hk
C型号 Cx;hk
C型号 cx;hk
D型号 Dx;hk
D型号 dx;hk
E型号 Ex;hk
E型号 ex;hk
F型号 Fx;hk
F型号 fx;hk
A型 Ax;
A型 ax;
B型 Bx;
B型 bx;
C型 Cx;
C型 cx;
D型 Dx;
D型 dx;
E型 Ex;
E型 ex;
F型 Fx;
F型 fx;
A款 Akr
A款 akr
B款 Bkr
B款 bkr
C款 Ckr
C款 ckr
D款 Dkr
D款 dkr
E款 Ekr
E款 ekr
F款 Fkr
F款 fkr
A栋 Ads
A栋 ads
B栋 Bds
B栋 bds
C栋 Cds
C栋 cds
D栋 Dds
D栋 dds
E栋 Eds
E栋 eds
F栋 Fds
F栋 fds
X轴 Xvb
X轴 xvb
Y轴 Yvb
Y轴 yvb
Z轴 Zvb
Z轴 zvb
V领 Vl;
V领 vl;
V字领 Vzil;
V字领 vzil;
V字形 Vzix;
V字形 vzix;
IT业 ITye
IT业 itye
IT行业 IThhye
IT行业 ithhye
K线 Kxm
K线 kxm
K线图 Kxmtu
K线图 kxmtu
日K线 riKxm
日K线 rikxm
周K线 vbKxm
周K线 vbkxm
月K线 ytKxm
月K线 ytkxm
T台 Ttl
T台 ttl
TF卡 TFka
TF卡 tfka
N年 Nnm
N年 nnm
A点 Adm
A点 adm
B点 Bdm
B点 bdm
A屏 Ap;
A屏 ap;
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zoBik
做B超 zobik
DJ版 DJbj
DJ版 djbj
唱K ihK
唱K ihk
PK赛 PKsl
PK赛 pksl
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP iaIP
查IP iaip
封IP fgIP
封IP fgip
换IP hrIP
换IP hrip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhvyr
VIP会员 viphvyr
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDbj
DVD版 dvdbj
USB线 USBxm
USB线 usbxm
USB口 USBkb
USB口 usbkb
USB接口 USBjxkb
USB接口 usbjxkb
X档案 Xdhoj
X档案 xdhoj
n次方 ncifh
N多人 Ndorf
N多人 ndorf
S曲线 Squxm
S曲线 squxm
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 isQbi
充Q币 isqbi
就OK jqOK
就OK jqok
不OK buOK
不OK buok
很OK hfOK
很OK hfok
特拉法尔加·D·瓦铁尔·罗 telafaorjwDwatxorlo
特拉法尔加·D·瓦铁尔·罗 telafaorjwdwatxorlo
开party klparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQybxi
QQ游戏 qqybxi
QQ游戏大厅 QQybxidat;
QQ游戏大厅 qqybxidat;
QQ音速 QQynsu
QQ音速 qqynsu
QQ飞车 QQfzie
QQ飞车 qqfzie
QQ三国 QQsjgo
QQ三国 qqsjgo
4S店 siSdm
4S店 sisdm
丰田AE86 fgtmAEbalq
丰田AE86 fgtmaebalq
TF版 TFbj
TF版 tfbj
TF版本 TFbjbf
TF版本 tfbjbf
O不OK ObuOK
O不OK obuok
人均GDP rfjpGDP
人均GDP rfjpgdp
V8引擎 Vbaynq;
V8引擎 vbaynq;
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 orGwhlo
2G网络 orgwhlo
3G网络 sjGwhlo
3G网络 sjgwhlo
4G网络 siGwhlo
4G网络 sigwhlo
5G网络 wuGwhlo
5G网络 wugwhlo
3G流量 sjGlqld
3G流量 sjglqld
4G流量 siGlqld
4G流量 siglqld
5G流量 wuGlqld
5G流量 wuglqld
3D打印 sjDdayn
3D打印 sjddayn
2D电影 orDdmy;
2D电影 orddmy;
3D电影 sjDdmy;
3D电影 sjddmy;
city不city citybucity
打call dacall
hold住 holdvu

941
en_dicts/cn_en_ziguang.txt Normal file
View File

@ -0,0 +1,941 @@
# Rime table
# coding: utf-8
#@/db_name cn_en_ziguang.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for 紫光双拼 -------
# 由 others/cn_en.txt 自动生成
#
# 此行之后不能写注释
X光 Xgg
X光 xgg
X光片 Xggpf
X光片 xggpf
X射线 Xiexf
X射线 xiexf
Nabla算子 Nablaslzi
Nabla算子 nablaslzi
T恤 Txu
T恤 txu
T恤衫 Txuir
T恤衫 txuir
AD钙奶 ADgpnp
AD钙奶 adgpnp
UU加速器 UUjxsuqi
UU加速器 uujxsuqi
Cinity厅 Cinityt;
Cinity厅 cinityt;
Eul的神圣法杖 Euldeiwitfaus
Eul的神圣法杖 euldeiwitfaus
A杖 Aus
A杖 aus
红Buff hhBuff
红Buff hhbuff
蓝Buff lrBuff
蓝Buff lrbuff
老Baby lqBaby
老Baby lqbaby
小Baby xbBaby
小Baby xbbaby
艾AA opAA
艾AA opaa
炒CP aqCP
炒CP aqcp
嗑CP keCP
嗑CP kecp
U盘 Upr
U盘 upr
B站 Bur
B站 bur
V站 Vur
V站 vur
P站 Pur
P站 pur
大V daV
大V dav
Q币 Qbi
Q币 qbi
QQ号 QQhq
QQ号 qqhq
QQ号码 QQhqma
QQ号码 qqhqma
QQ空间 QQkhjf
QQ空间 qqkhjf
QQ群 QQqm
QQ群 qqqm
QQ邮箱 QQyzxg
QQ邮箱 qqyzxg
QQ音乐 QQyyyn
QQ音乐 qqyyyn
QQ拼音 QQpyyy
QQ拼音 qqpyyy
QQ会员 QQhnyl
QQ会员 qqhnyl
QQ好友 QQhqyz
QQ好友 qqhqyz
QQ输入法 QQiurufa
QQ输入法 qqiurufa
Dock栏 Docklr
Dock栏 docklr
阿Q精神 oaQj;iw
阿Q精神 oaqj;iw
Win版 Winbr
Win版 winbr
Win版本 Winbrbw
Win版本 winbrbw
Windows版 Windowsbr
Windows版 windowsbr
Windows版本 Windowsbrbw
Windows版本 windowsbrbw
Mac版 Macbr
Mac版 macbr
Mac版本 Macbrbw
Mac版本 macbrbw
macOS版 macOSbr
macOS版 macosbr
macOS版本 macOSbrbw
macOS版本 macosbrbw
iOS版 iOSbr
iOS版 iosbr
iOS版本 iOSbrbw
iOS版本 iosbrbw
Android版 Androidbr
Android版 androidbr
Android版本 Androidbrbw
Android版本 androidbrbw
Web版 Webbr
Web版 webbr
Web版本 Webbrbw
Web版本 webbrbw
PC端 PCdl
PC端 pcdl
Win端 Windl
Win端 windl
Windows端 Windowsdl
Windows端 windowsdl
Mac端 Macdl
Mac端 macdl
macOS端 macOSdl
macOS端 macosdl
Web端 Webdl
Web端 webdl
iOS端 iOSdl
iOS端 iosdl
Android端 Androiddl
Android端 androiddl
e招贷 euqdp
G胖 Gps
G胖 gps
Up主 Upuu
Up主 upuu
BOSS直聘 BOSSuipy
BOSS直聘 bossuipy
P社 Pie
P社 pie
V社 Vie
V社 vie
Go语言 Goyuyr
Go语言 goyuyr
维生素A wkitsuA
维生素A wkitsua
维生素B wkitsuB
维生素B wkitsub
维生素C wkitsuC
维生素C wkitsuc
维生素D wkitsuD
维生素D wkitsud
维生素E wkitsuE
维生素E wkitsue
维生素K wkitsuK
维生素K wkitsuk
维A wkA
维A wka
维B wkB
维B wkb
维C wkC
维C wkc
维D wkD
维D wkd
维E wkE
维E wke
维K wkK
维K wkk
维E乳 wkEru
维E乳 wkeru
维生素E乳 wkitsuEru
维生素E乳 wkitsueru
阿Q oaQ
阿Q oaq
阿Q正传 oaQutul
阿Q正传 oaqutul
单边z变换 drbfzbfhl
逗B dzB
逗B dzb
哆啦A梦 dolaAmt
哆啦A梦 dolaamt
二B ojB
二B ojb
卡拉OK kalaOK
卡拉OK kalaok
牛B njB
牛B njb
三K党 srKds
三K党 srkds
傻B iaB
傻B iab
傻X iaX
傻X iax
智能ABC uintABC
智能ABC uintabc
智能ABC双拼 uintABCigpy
智能ABC双拼 uintabcigpy
智能ABC双拼方案 uintABCigpyfsor
智能ABC双拼方案 uintabcigpyfsor
智能ABC输入法 uintABCiurufa
智能ABC输入法 uintabciurufa
装B ugB
装B ugb
A股 Agu
A股 agu
B股 Bgu
B股 bgu
H股 Hgu
H股 hgu
N股 Ngu
N股 ngu
S股 Sgu
S股 sgu
A盘 Apr
A盘 apr
A片 Apf
A片 apf
AA制 AAui
AA制 aaui
ATM机 ATMji
ATM机 atmji
B超 Baq
B超 baq
B淋巴细胞 Blybaxibq
B淋巴细胞 blybaxibq
B盘 Bpr
B盘 bpr
B细胞 Bxibq
B细胞 bxibq
C盘 Cpr
C盘 cpr
C语言 Cyuyr
C语言 cyuyr
D盘 Dpr
D盘 dpr
E盘 Epr
E盘 epr
F盘 Fpr
F盘 fpr
G点 Gdf
G点 gdf
G盘 Gpr
G盘 gpr
IP地址 IPdiui
IP地址 ipdiui
IP电话 IPdfhx
IP电话 ipdfhx
IP卡 IPka
IP卡 ipka
J盘 Jpr
J盘 jpr
K宝 Kbq
K宝 kbq
K粉 Kfw
K粉 kfw
K歌 Kge
K歌 kge
K歌王 Kgews
K歌王 kgews
POS机 POSji
POS机 posji
SIM卡 SIMka
SIM卡 simka
T淋巴细胞 Tlybaxibq
T淋巴细胞 tlybaxibq
T细胞 Txibq
T细胞 txibq
T型台 Tx;tp
T型台 tx;tp
U盾 Udm
U盾 udm
S形 Sx;
S形 sx;
U形 Ux;
U形 ux;
U形管 Ux;gl
U形管 ux;gl
UIM卡 UIMka
UIM卡 uimka
USIM卡 USIMka
USIM卡 usimka
X刀 Xdq
X刀 xdq
X染色体 Xrrseti
X染色体 xrrseti
Y染色体 Yrrseti
Y染色体 yrrseti
z变换 zbfhl
z逆变换 znibfhl
D之国 Duigo
D之国 duigo
D之一族 Duiyizu
D之一族 duiyizu
Beta版 Betabr
Beta版 betabr
Beta版本 Betabrbw
Beta版本 betabrbw
AV女优 AVnvyz
AV女优 avnvyz
X战警 Xurj;
X战警 xurj;
YY语音 YYyuyy
YY语音 yyyuyy
A4纸 Asiui
A4纸 asiui
A4腰 Asiyq
A4腰 asiyq
N多 Ndo
N多 ndo
N多个 Ndoge
N多个 ndoge
N次 Nci
N次 nci
N遍 Nbf
N遍 nbf
蒙奇·D·路飞 mtqiDlufk
蒙奇·D·路飞 mtqidlufk
蒙奇·D·龙 mtqiDlh
蒙奇·D·龙 mtqidlh
哥尔·D·罗杰 geojDlojd
哥尔·D·罗杰 geojdlojd
马歇尔·D·蒂奇 maxdojDdiqi
马歇尔·D·蒂奇 maxdojddiqi
X·德雷克 Xdelkke
X·德雷克 xdelkke
蒙奇·D·卡普 mtqiDkapu
蒙奇·D·卡普 mtqidkapu
波特卡斯·D·艾斯 botekasiDopsi
波特卡斯·D·艾斯 botekasidopsi
VIP中P VIPuhP
VIP中P vipuhp
QQ秀 QQxj
QQ秀 qqxj
Big胆 Bigdr
Big胆 bigdr
我叫MT wojbMT
我叫MT wojbmt
谜拟Q miniQ
谜拟Q miniq
多边兽Z dobfizZ
多边兽Z dobfizz
藤子·F·不二雄 ttziFbuojxh
藤子·F·不二雄 ttzifbuojxh
PC版 PCbr
PC版 pcbr
PC版本 PCbrbw
PC版本 pcbrbw
A塔 Ata
A塔 ata
平A p;A
平A p;a
立Flag liFlag
立Flag liflag
C罗 Clo
C罗 clo
IE浏览器 IEljlrqi
IE浏览器 ieljlrqi
A壳 Ake
A壳 ake
B壳 Bke
B壳 bke
C壳 Cke
C壳 cke
D壳 Dke
D壳 dke
A面 Amf
A面 amf
B面 Bmf
B面 bmf
C面 Cmf
C面 cmf
D面 Dmf
D面 dmf
Server酱 Serverjg
Server酱 serverjg
P图 Ptu
P图 ptu
P个图 Pgetu
P个图 pgetu
P一下 Pyixx
P一下 pyixx
芭比Q babiQ
芭比Q babiq
芭比Q了 babiQle
芭比Q了 babiqle
QQ堂 QQts
QQ堂 qqts
PIN码 PINma
PIN码 pinma
PUK码 PUKma
PUK码 pukma
关底BOSS gldiBOSS
关底BOSS gldiboss
AA吧 AAba
AA吧 aaba
喊cut hrcut
ASCII码 ASCIIma
ASCII码 asciima
Go圣经 Goitj;
Go圣经 goitj;
江南Style jgnrStyle
江南Style jgnrstyle
头文字D tzwwziD
头文字D tzwwzid
三无Marblue srwuMarblue
三无Marblue srwumarblue
A罩杯 Auqbk
A罩杯 auqbk
B罩杯 Buqbk
B罩杯 buqbk
C罩杯 Cuqbk
C罩杯 cuqbk
D罩杯 Duqbk
D罩杯 duqbk
E罩杯 Euqbk
E罩杯 euqbk
F罩杯 Fuqbk
F罩杯 fuqbk
G罩杯 Guqbk
G罩杯 guqbk
H罩杯 Huqbk
H罩杯 huqbk
A罩 Auq
A罩 auq
B罩 Buq
B罩 buq
C罩 Cuq
C罩 cuq
D罩 Duq
D罩 duq
E罩 Euq
E罩 euq
F罩 Fuq
F罩 fuq
G罩 Guq
G罩 guq
H罩 Huq
H罩 huq
A杯 Abk
A杯 abk
B杯 Bbk
B杯 bbk
C杯 Cbk
C杯 cbk
D杯 Dbk
D杯 dbk
E杯 Ebk
E杯 ebk
F杯 Fbk
F杯 fbk
G杯 Gbk
G杯 gbk
H杯 Hbk
H杯 hbk
TV版 TVbr
TV版 tvbr
TV版本 TVbrbw
TV版本 tvbrbw
芒果TV msgoTV
芒果TV msgotv
V字仇杀队 Vziaziadn
V字仇杀队 vziaziadn
V怪客 Vgyke
V怪客 vgyke
V煞 Via
V煞 via
Q弹 Qtr
Q弹 qtr
Steam云 Steamym
Steam云 steamym
M系列 Mxild
M系列 mxild
阿Sir oaSir
阿Sir oasir
Pro版 Probr
Pro版 probr
Pro版本 Probrbw
Pro版本 probrbw
Lite版 Litebr
Lite版 litebr
Lite版本 Litebrbw
Lite版本 litebrbw
X教授 Xjbiz
X教授 xjbiz
Papi酱 Papijg
Papi酱 papijg
MAC地址 MACdiui
MAC地址 macdiui
DNS劫持 DNSjdai
DNS劫持 dnsjdai
DNS污染 DNSwurr
DNS污染 dnswurr
OK了 OKle
OK了 okle
OK啦 OKla
OK啦 okla
OK啊 OKoa
OK啊 okoa
我OK啊 woOKoa
我OK啊 wookoa
OK了吗 OKlema
OK了吗 oklema
腾讯QQ ttxmQQ
腾讯QQ ttxmqq
公网IP ghwsIP
公网IP ghwsip
Web开发 Webkpfa
Web开发 webkpfa
Switch版 Switchbr
Switch版 switchbr
Switch版本 Switchbrbw
Switch版本 switchbrbw
A型血 Ax;xn
A型血 ax;xn
A血型 Axnx;
A血型 axnx;
B型血 Bx;xn
B型血 bx;xn
B血型 Bxnx;
B血型 bxnx;
AB型 ABx;
AB型 abx;
AB型血 ABx;xn
AB型血 abx;xn
AB血型 ABxnx;
AB血型 abxnx;
O型 Ox;
O型 ox;
O型血 Ox;xn
O型血 ox;xn
O血型 Oxnx;
O血型 oxnx;
IT界 ITjd
IT界 itjd
Fn键 Fnjf
Fn键 fnjf
Cmd键 Cmdjf
Cmd键 cmdjf
Command键 Commandjf
Command键 commandjf
Ctrl键 Ctrljf
Ctrl键 ctrljf
Control键 Controljf
Control键 controljf
Opt键 Optjf
Opt键 optjf
Option键 Optionjf
Option键 optionjf
Shift键 Shiftjf
Shift键 shiftjf
Tab键 Tabjf
Tab键 tabjf
Caps键 Capsjf
Caps键 capsjf
CapsLock键 CapsLockjf
CapsLock键 capslockjf
Return键 Returnjf
Return键 returnjf
Enter键 Enterjf
Enter键 enterjf
Space键 Spacejf
Space键 spacejf
Backspace键 Backspacejf
Backspace键 backspacejf
Del键 Deljf
Del键 deljf
Delete键 Deletejf
Delete键 deletejf
Esc键 Escjf
Esc键 escjf
Eject键 Ejectjf
Eject键 ejectjf
周刊少年Jump uzkriqnfJump
周刊少年Jump uzkriqnfjump
ICP备案 ICPbkor
ICP备案 icpbkor
啥bug iabug
有bug yzbug
没bug mkbug
没有bug mkyzbug
卡bug kabug
提bug tibug
写bug xdbug
改bug gpbug
查bug aabug
找bug uqbug
J.K.罗琳 JKloly
J.K.罗琳 jkloly
J.R.R.托尔金 JRRtoojjy
J.R.R.托尔金 jrrtoojjy
乔治·R.R.马丁 qbuiRRmad;
乔治·R.R.马丁 qbuirrmad;
异维A酸 yiwkAsl
异维A酸 yiwkasl
互fo hufo
减CD jfCD
减CD jfcd
随身Wi-Fi sniwWiFi
随身Wi-Fi sniwwifi
U型锁 Ux;so
U型锁 ux;so
Go程 Goat
Go程 goat
TG群 TGqm
TG群 tgqm
Telegram群 Telegramqm
Telegram群 telegramqm
Wi-Fi密码 WiFimima
Wi-Fi密码 wifimima
DNA检测 DNAjfce
DNA检测 dnajfce
A级 Aji
A级 aji
B级 Bji
B级 bji
C级 Cji
C级 cji
D级 Dji
D级 dji
S级 Sji
S级 sji
拍CT ppCT
拍CT ppct
CT检查 CTjfaa
CT检查 ctjfaa
PVC管 PVCgl
PVC管 pvcgl
DoS攻击 DoSghji
DoS攻击 dosghji
DDoS攻击 DDoSghji
DDoS攻击 ddosghji
N卡 Nka
N卡 nka
A卡 Aka
A卡 aka
M码 Mma
M码 mma
S码 Sma
S码 sma
L码 Lma
L码 lma
Q我 Qwo
Q我 qwo
R级 Rji
R级 rji
A区 Aqu
A区 aqu
B区 Bqu
B区 bqu
C区 Cqu
C区 cqu
D区 Dqu
D区 dqu
E区 Equ
E区 equ
F区 Fqu
F区 fqu
A组 Azu
A组 azu
B组 Bzu
B组 bzu
C组 Czu
C组 czu
D组 Dzu
D组 dzu
E组 Ezu
E组 ezu
F组 Fzu
F组 fzu
B哥 Bge
B哥 bge
Q版 Qbr
Q版 qbr
A班 Abr
A班 abr
B班 Bbr
B班 bbr
C班 Cbr
C班 cbr
D班 Dbr
D班 dbr
老K lqK
老K lqk
加Q jxQ
加Q jxq
加QQ jxQQ
加QQ jxqq
A座 Azo
A座 azo
B座 Bzo
B座 bzo
C座 Czo
C座 czo
D座 Dzo
D座 dzo
E座 Ezo
E座 ezo
F座 Fzo
F座 fzo
H版 Hbr
H版 hbr
A口 Akz
A口 akz
B口 Bkz
B口 bkz
C口 Ckz
C口 ckz
D口 Dkz
D口 dkz
E口 Ekz
E口 ekz
F口 Fkz
F口 fkz
A出口 Aaukz
A出口 aaukz
B出口 Baukz
B出口 baukz
C出口 Caukz
C出口 caukz
D出口 Daukz
D出口 daukz
E出口 Eaukz
E出口 eaukz
F出口 Faukz
F出口 faukz
A楼 Alz
A楼 alz
B楼 Blz
B楼 blz
C楼 Clz
C楼 clz
D楼 Dlz
D楼 dlz
E楼 Elz
E楼 elz
F楼 Flz
F楼 flz
A型号 Ax;hq
A型号 ax;hq
B型号 Bx;hq
B型号 bx;hq
C型号 Cx;hq
C型号 cx;hq
D型号 Dx;hq
D型号 dx;hq
E型号 Ex;hq
E型号 ex;hq
F型号 Fx;hq
F型号 fx;hq
A型 Ax;
A型 ax;
B型 Bx;
B型 bx;
C型 Cx;
C型 cx;
D型 Dx;
D型 dx;
E型 Ex;
E型 ex;
F型 Fx;
F型 fx;
A款 Akl
A款 akl
B款 Bkl
B款 bkl
C款 Ckl
C款 ckl
D款 Dkl
D款 dkl
E款 Ekl
E款 ekl
F款 Fkl
F款 fkl
A栋 Adh
A栋 adh
B栋 Bdh
B栋 bdh
C栋 Cdh
C栋 cdh
D栋 Ddh
D栋 ddh
E栋 Edh
E栋 edh
F栋 Fdh
F栋 fdh
X轴 Xuz
X轴 xuz
Y轴 Yuz
Y轴 yuz
Z轴 Zuz
Z轴 zuz
V领 Vl;
V领 vl;
V字领 Vzil;
V字领 vzil;
V字形 Vzix;
V字形 vzix;
IT业 ITye
IT业 itye
IT行业 IThsye
IT行业 ithsye
K线 Kxf
K线 kxf
K线图 Kxftu
K线图 kxftu
日K线 riKxf
日K线 rikxf
周K线 uzKxf
周K线 uzkxf
月K线 ynKxf
月K线 ynkxf
T台 Ttp
T台 ttp
TF卡 TFka
TF卡 tfka
N年 Nnf
N年 nnf
A点 Adf
A点 adf
B点 Bdf
B点 bdf
A屏 Ap;
A屏 ap;
OK吗 OKma
OK吗 okma
OK嘛 OKma
OK嘛 okma
OK么 OKme
OK么 okme
OK呀 OKya
OK呀 okya
OK不 OKbu
OK不 okbu
BB机 BBji
BB机 bbji
做B超 zoBaq
做B超 zobaq
DJ版 DJbr
DJ版 djbr
唱K asK
唱K ask
PK赛 PKsp
PK赛 pksp
A和B AheB
A和B aheb
X和Y XheY
X和Y xhey
查IP aaIP
查IP aaip
封IP ftIP
封IP ftip
换IP hlIP
换IP hlip
VIP卡 VIPka
VIP卡 vipka
VIP会员 VIPhnyl
VIP会员 viphnyl
AAA级 AAAji
AAA级 aaaji
第N次 diNci
第N次 dinci
发EMS faEMS
发EMS faems
DVD版 DVDbr
DVD版 dvdbr
USB线 USBxf
USB线 usbxf
USB口 USBkz
USB口 usbkz
USB接口 USBjdkz
USB接口 usbjdkz
X档案 Xdsor
X档案 xdsor
n次方 ncifs
N多人 Ndorw
N多人 ndorw
S曲线 Squxf
S曲线 squxf
DJ舞曲 DJwuqu
DJ舞曲 djwuqu
充Q币 ahQbi
充Q币 ahqbi
就OK jjOK
就OK jjok
不OK buOK
不OK buok
很OK hwOK
很OK hwok
特拉法尔加·D·瓦铁尔·罗 telafaojjxDwatdojlo
特拉法尔加·D·瓦铁尔·罗 telafaojjxdwatdojlo
开party kpparty
Chromium系 Chromiumxi
Chromium系 chromiumxi
Chrome系 Chromexi
Chrome系 chromexi
QQ游戏 QQyzxi
QQ游戏 qqyzxi
QQ游戏大厅 QQyzxidat;
QQ游戏大厅 qqyzxidat;
QQ音速 QQyysu
QQ音速 qqyysu
QQ飞车 QQfkae
QQ飞车 qqfkae
QQ三国 QQsrgo
QQ三国 qqsrgo
4S店 siSdf
4S店 sisdf
丰田AE86 fttfAEbalj
丰田AE86 fttfaebalj
TF版 TFbr
TF版 tfbr
TF版本 TFbrbw
TF版本 tfbrbw
O不OK ObuOK
O不OK obuok
人均GDP rwjmGDP
人均GDP rwjmgdp
V8引擎 Vbayyq;
V8引擎 vbayyq;
4A级 siAji
4A级 siaji
5A级 wuAji
5A级 wuaji
2G网络 ojGwslo
2G网络 ojgwslo
3G网络 srGwslo
3G网络 srgwslo
4G网络 siGwslo
4G网络 sigwslo
5G网络 wuGwslo
5G网络 wugwslo
3G流量 srGljlg
3G流量 srgljlg
4G流量 siGljlg
4G流量 sigljlg
5G流量 wuGljlg
5G流量 wugljlg
3D打印 srDdayy
3D打印 srddayy
2D电影 ojDdfy;
2D电影 ojddfy;
3D电影 srDdfy;
3D电影 srddfy;
city不city citybucity
打call dacall
hold住 holduu

21484
en_dicts/en.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

2172
en_dicts/en_ext.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

62
lua/autocap_filter.lua Normal file
View File

@ -0,0 +1,62 @@
--[[
#302@abcdefg233 #305@Mirtle
-
- Hello Hello
- 2 HEllo HELLO
--]]
local function autocap_filter(input, env)
local code = env.engine.context.input -- 输入码
local codeLen = #code
local codeAllUCase = false
local codeUCase = false
-- 不转换:
if codeLen == 1 or -- 码长为 1
code:find("^[%l%p]") -- 输入码首位为小写字母或标点
then -- 输入码不满足条件不判断候选项
for cand in input:iter() do
yield(cand)
end
return
---- 输入码全大写
-- elseif code == code:upper() then
-- codeAllUCase = true
-- 输入码前 2 - n 位大写
elseif code:find("^%u%u+.*") then
codeAllUCase = true
-- 输入码首位大写
elseif code:find("^%u.*") then
codeUCase = true
end
local pureCode = code:gsub("[%s%p]", "") -- 删除标点和空格的输入码
for cand in input:iter() do
local text = cand.text -- 候选词
local pureText = text:gsub("[%s%p]", "") -- 删除标点和空格的候选词
-- 不转换:
if
text:find("[^%w%p%s]") or -- 候选词包含非字母和数字、非标点符号、非空格的字符
text:find("%s") or -- 候选词中包含空格
pureText:find("^" .. code) or -- 输入码完全匹配候选词
(cand.type ~= "completion" and -- 单词与其对应的编码不一致
pureCode:lower() ~= pureText:lower()) -- 例如 PS - Photoshop
then
yield(cand)
-- 输入码前 2~10 位大写,候选词转换为全大写
elseif codeAllUCase then
text = text:upper()
yield(Candidate(cand.type, 0, codeLen, text, cand.comment))
-- 输入码首位大写,候选词转换为首位大写
elseif codeUCase then
text = text:gsub("^%a", string.upper)
yield(Candidate(cand.type, 0, codeLen, text, cand.comment))
else
yield(cand)
end
end
end
return autocap_filter

209
lua/calc_translator.lua Normal file
View File

@ -0,0 +1,209 @@
-- 计算器插件
-- author: https://github.com/ChaosAlphard
local calc = {}
function calc.init( env )
local config = env.engine.schema.config
env.prefix = config:get_string( 'calculator/prefix' ) or 'cC'
env.show_prefix = config:get_bool( 'calculator/show_prefix' ) -- set to true to show prefix in preedit area
-- env.decimalPlaces = config:get_string('calculator/decimalPlaces') or '4'
end
local function startsWith( str, start ) return string.sub( str, 1, string.len( start ) ) == start end
local function truncateFromStart( str, truncateStr ) return string.sub( str, string.len( truncateStr ) + 1 ) end
local function yield_calc_cand( seg, cand_text, cand_comment, cand_preedit, show_prefix )
local cand = Candidate( 'calc', seg.start, seg._end, cand_text, cand_comment )
cand.quality = 99999
if not show_prefix then cand.preedit = cand_preedit end
yield( cand )
end
-- 函数表
local calcPlugin = {
-- e, exp(1) = e^1 = e
e = math.exp( 1 ),
-- π
pi = math.pi,
}
-- random([m [,n ]]) 返回m-n之间的随机数, n为空则返回1-m之间, 都为空则返回0-1之间的小数
local function random( ... ) return math.random( ... ) end
-- 注册到函数表中
calcPlugin['rdm'] = random
calcPlugin['random'] = random
-- 正弦
local function sin( x ) return math.sin( x ) end
calcPlugin['sin'] = sin
-- 双曲正弦
local function sinh( x ) return math.sinh( x ) end
calcPlugin['sinh'] = sinh
-- 反正弦
local function asin( x ) return math.asin( x ) end
calcPlugin['asin'] = asin
-- 余弦
local function cos( x ) return math.cos( x ) end
calcPlugin['cos'] = cos
-- 双曲余弦
local function cosh( x ) return math.cosh( x ) end
calcPlugin['cosh'] = cosh
-- 反余弦
local function acos( x ) return math.acos( x ) end
calcPlugin['acos'] = acos
-- 正切
local function tan( x ) return math.tan( x ) end
calcPlugin['tan'] = tan
-- 双曲正切
local function tanh( x ) return math.tanh( x ) end
calcPlugin['tanh'] = tanh
-- 反正切
-- 返回以弧度为单位的点相对于x轴的逆时针角度。x是点的横纵坐标比值
-- 返回范围从−π到π (以弧度为单位),其中负角度表示向下旋转,正角度表示向上旋转
local function atan( x ) return math.atan( x ) end
calcPlugin['atan'] = atan
-- 反正切
-- atan( y/x ) = atan2(y, x)
-- 返回以弧度为单位的点相对于x轴的逆时针角度。y是点的纵坐标x是点的横坐标
-- 返回范围从−π到π (以弧度为单位),其中负角度表示向下旋转,正角度表示向上旋转
-- 与 math.atan(y/x) 函数相比具有更好的数学定义因为它能够正确处理边界情况例如x=0
local function atan2( y, x ) return math.atan2( y, x ) end
calcPlugin['atan2'] = atan2
-- 将角度从弧度转换为度 e.g. deg(π) = 180
local function deg( x ) return math.deg( x ) end
calcPlugin['deg'] = deg
-- 将角度从度转换为弧度 e.g. rad(180) = π
local function rad( x ) return math.rad( x ) end
calcPlugin['rad'] = rad
-- 返回两个值, 无法参与运算后续, 只能单独使用
-- 返回m,e 使得x = m * 2^e
local function frexp( x )
local m, e = math.frexp( x )
return m .. ' * 2^' .. e
end
calcPlugin['frexp'] = frexp
-- 返回 x * 2^y
local function ldexp( x, y ) return math.ldexp( x, y ) end
calcPlugin['ldexp'] = ldexp
-- 返回 e^x
local function exp( x ) return math.exp( x ) end
calcPlugin['exp'] = exp
-- 返回x的平方根 e.g. sqrt(x) = x^0.5
local function sqrt( x ) return math.sqrt( x ) end
calcPlugin['sqrt'] = sqrt
-- y为底x的对数, 使用换底公式实现
local function log( y, x )
-- 不能为负数或0
if x <= 0 or y <= 0 then return nil end
return math.log( x ) / math.log( y )
end
calcPlugin['log'] = log
-- e为底x的对数
local function loge( x )
-- 不能为负数或0
if x <= 0 then return nil end
return math.log( x )
end
calcPlugin['loge'] = loge
-- 10为底x的对数
local function log10( x )
-- 不能为负数或0
if x <= 0 then return nil end
return math.log10( x )
end
calcPlugin['log10'] = log10
-- 平均值
local function avg( ... )
local data = { ... }
local n = select( '#', ... )
-- 样本数量不能为0
if n == 0 then return nil end
-- 计算总和
local sum = 0
for _, value in ipairs( data ) do sum = sum + value end
return sum / n
end
calcPlugin['avg'] = avg
-- 方差
local function variance( ... )
local data = { ... }
local n = select( '#', ... )
-- 样本数量不能为0
if n == 0 then return nil end
-- 计算均值
local sum = 0
for _, value in ipairs( data ) do sum = sum + value end
local mean = sum / n
-- 计算方差
local sum_squared_diff = 0
for _, value in ipairs( data ) do sum_squared_diff = sum_squared_diff + (value - mean) ^ 2 end
return sum_squared_diff / n
end
calcPlugin['var'] = variance
-- 阶乘
local function factorial( x )
-- 不能为负数
if x < 0 then return nil end
if x == 0 or x == 1 then return 1 end
local result = 1
for i = 1, x do result = result * i end
return result
end
calcPlugin['fact'] = factorial
-- 实现阶乘计算(!)
local function replaceToFactorial( str )
-- 替换[0-9]!字符为fact([0-9])以实现阶乘
return str:gsub( '([0-9]+)!', 'fact(%1)' )
end
-- 简单计算器
function calc.func( input, seg, env )
if not seg:has_tag( 'calculator' ) or input == '' then return end
-- 提取算式
local express = truncateFromStart( input, env.prefix )
if express == '' then return end -- 防止用户写错了正则表达式造成错误
local code = replaceToFactorial( express )
local success, result = pcall( load( 'return ' .. code, 'calculate', 't', calcPlugin ) )
if success and result and (type( result ) == 'string' or type( result ) == 'number') and #tostring( result ) > 0 then
yield_calc_cand( seg, result, '', express, env.show_prefix )
yield_calc_cand( seg, express .. '=' .. result, '', express, env.show_prefix )
else
yield_calc_cand( seg, express, '解析失败', express, env.show_prefix )
yield_calc_cand( seg, code, '入参', express, env.show_prefix )
end
end
return calc

31
lua/cn_en_spacer.lua Normal file
View File

@ -0,0 +1,31 @@
-- 中英混输词条自动空格
-- 在 engine/filters 增加 - lua_filter@cn_en_spacer
--
-- 为中英混输词条cn_en.dict.yaml自动空格
-- 示例:`VIP中P` → `VIP 中 P`
--
-- ChatGPT 写的
local function add_spaces(s)
-- 在中文字符后和英文字符前插入空格
s = s:gsub("([\228-\233][\128-\191]-)([%w%p])", "%1 %2")
-- 在英文字符后和中文字符前插入空格
s = s:gsub("([%w%p])([\228-\233][\128-\191]-)", "%1 %2")
return s
end
-- 是否同时包含中文和英文数字
local function is_mixed_cn_en_num(s)
return s:find("([\228-\233][\128-\191]-)") and s:find("[%a%d]")
end
local function cn_en_spacer(input, env)
for cand in input:iter() do
if is_mixed_cn_en_num(cand.text) then
cand = cand:to_shadow_candidate(cand.type, add_spaces(cand.text), cand.comment)
end
yield(cand)
end
end
return cn_en_spacer

View File

@ -0,0 +1,3 @@
local drop_words =
{ "示~例~", "肏女人", }
return drop_words

View File

@ -0,0 +1,72 @@
-- 词条隐藏、降频
-- 在 engine/processors 增加 - lua_processor@cold_word_drop.processor
-- 在 engine/filters 增加 - lua_filter@cold_word_drop.filter
-- 在 key_binder 增加快捷键:
-- reduce_freq_cand: "Control+j" # 匹配当前输入码后隐藏指定的候选字词 或候选词条放到第四候选位置
-- drop_cand: "Control+d" # 强制删词, 无视输入的编码
-- get_record_filername() 函数中仅支持了 Windows、macOS、Linux
local filter = {}
function filter.init(env)
local engine = env.engine
local config = engine.schema.config
local _sd, drop_words = pcall(require, "cold_word_drop/drop_words")
local _sh, hide_words = pcall(require, "cold_word_drop/hide_words")
local _st, turn_down_words = pcall(require, "cold_word_drop/turn_down_words")
local _sr, reduce_freq_words = pcall(require, "cold_word_drop/reduce_freq_words")
env.word_reduce_idx = config:get_int("cold_word_reduce/idx") or 4
env.drop_words = _sd and drop_words or {}
env.hide_words = _sh and hide_words or {}
env.reduce_freq_words = (_st and turn_down_words) or (_sr and reduce_freq_words) or {}
end
function filter.func(input, env)
local cands = {}
local context = env.engine.context
local preedit_str = context.input:gsub(" ", "")
local drop_words = env.drop_words
local hide_words = env.hide_words
local word_reduce_idx = env.word_reduce_idx
local reduce_freq_words = env.reduce_freq_words
for cand in input:iter() do
local cand_text = cand.text:gsub(" ", "")
local preedit_code = cand.preedit:gsub(" ", "") or preedit_str
local reduce_freq_list = reduce_freq_words[cand_text] or {}
if word_reduce_idx > 1 then
-- 前三个 候选项排除 要调整词频的词条, 要删的(实际假性删词, 彻底隐藏罢了) 和要隐藏的词条
if reduce_freq_list and table.find_index(reduce_freq_list, preedit_code) then
table.insert(cands, cand)
elseif
not (
table.find_index(drop_words, cand_text)
or (hide_words[cand_text] and table.find_index(hide_words[cand_text], preedit_code))
)
then
yield(cand)
word_reduce_idx = word_reduce_idx - 1
end
else
if
not (
table.find_index(drop_words, cand_text)
or (hide_words[cand_text] and table.find_index(hide_words[cand_text], preedit_code))
)
then
table.insert(cands, cand)
end
end
if #cands >= 180 then
break
end
end
for _, cand in ipairs(cands) do
yield(cand)
end
end
return filter

View File

@ -0,0 +1,5 @@
local hide_words =
{ ["示~例~"] = { "shil", "shili", },
["么特瑞"] = { "meter", },
}
return hide_words

View File

@ -0,0 +1,48 @@
-- runLog.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local M = {}
local dbgFlg = true
--设置 dbg 开关
M.setDbg = function(flg)
dbgFlg = flg
print('runLog dbgFlg is ' .. tostring(dbgFlg))
end
local current_path = string.sub(debug.getinfo(1).source, 2, string.len("/runLog.lua") * -1)
M.logDoc = current_path .. 'runLog.txt'
M.writeLog = function(logStr, newLineFlg)
logStr = logStr or "nothing"
if not newLineFlg then newLineFlg = true end
local f = io.open(M.logDoc, 'a')
if f then
local timeStamp = os.date("%Y/%m/%d %H:%M:%S")
f:write(timeStamp .. '[' .. _VERSION .. ']' .. '\t' .. logStr .. '\n')
f:close()
end
end
--===========================test========================
M.test = function(printPrefix)
if nil == printPrefix then
printPrefix = ' '
end
if dbgFlg then
M.writeLog('this is a test string on new line', true)
M.writeLog('this is a test string appending the last line', false)
M.writeLog('runLogDoc is: ' .. M.logDoc, true)
end
end
function M.init(...)
--如果有需要初始化的动作,可以在这里运行
end
M.init()
return M

View File

@ -0,0 +1,168 @@
-- create metatable
orgtype = type
function type(obj)
local _type = orgtype(obj)
if "table" == _type and obj._cname then
return obj._cname
end
return _type
end
function metatable(...)
if ... and type(...) == "table" then
return setmetatable(..., { __index = table })
else
return setmetatable({ ... }, { __index = table })
end
end
-- chech metatble
function metatable_chk(tab)
if "table" == type(tab) then
return (tab.each and tab) or metatable(tab)
else
return tab
end
end
table.eachi = function(tab, func)
for i = 1, #tab do
func(tab[i], i)
end
return tab
end
table.eacha = function(tab, func)
for i, v in ipairs(tab) do
func(v, i)
end
return tab
end
table.each = function(tab, func)
for k, v in pairs(tab) do
func(v, k)
end
return tab
end
table.find_index = function(tab, elm, ...)
local _, i = table.find(tab, elm, ...)
return i
end
table.find = function(tab, elm, func)
for i, v in ipairs(tab) do
if elm == v then
return v, i
end
end
end
table.find_with_func = function(tab, elm, ...)
local i, v = table.find(tab, elm)
end
table.delete = function(tab, elm, ...)
local index = table.find_index(tab, elm)
return index and table.remove(tab, index)
end
table.find_all = function(tab, elm, ...)
local tmptab = setmetatable({}, { __index = table })
local _func = (type(elm) == "function" and elm) or function(v, k, ...)
return v == elm
end
for k, v in pairs(tab) do
if _func(v, k, ...) then
tmptab:insert(v)
end
end
return tmptab
end
table.select = table.find_all
table.reduce = function(tab, func, arg)
local new, old = arg, arg
for i, v in ipairs(tab) do
new, old = func(v, new)
end
return new, arg
end
table.map = function(tab, func)
local newtab = setmetatable({}, { __index = table })
func = func or function(v, i)
return v, i
end
for i, v in ipairs(tab) do
newtab[i] = func(v, i)
end
return newtab
end
table.map_hash = function(tab, func) -- table to list of array { key, v}
local newtab = setmetatable({}, { __index = table })
func = func or function(k, v)
return { k, v }
end
for k, v in pairs(tab) do
newtab:insert(func(k, v))
end
return newtab
end
function table:push(elm)
self:insert(elm)
end
table.append = table.push
function table:pop()
return self:remove(#self)
end
function table:shift()
self:remove(1)
end
function table:unshift(elm)
self:insert(1, elm)
end
function table.len(t)
local leng = 0
for k, v in pairs(t) do
leng = leng + 1
end
return leng
end
-- table to string 序列化
function table.serialize(obj)
local serialize_str = ""
local t = type(obj)
if t == "number" then
serialize_str = serialize_str .. obj
elseif t == "boolean" then
serialize_str = serialize_str .. tostring(obj)
elseif t == "string" then
serialize_str = serialize_str .. string.format("%q", obj)
elseif t == "table" then
serialize_str = serialize_str .. "{ "
local record_sep = #obj < 4 and ", " or ",\n"
local record_prefix = #obj < 4 and "" or "\t"
for k, v in pairs(obj) do
if type(k) == "number" then
serialize_str = serialize_str .. record_prefix .. '"' .. v .. '"' .. record_sep
else
serialize_str = serialize_str .. "\t[" .. table.serialize(k) .. "] = " .. table.serialize(v) .. ",\n"
end
end
-- local metatable = getmetatable(obj)
-- if metatable ~= nil and type(metatable.__index) == "table" then
-- for k, v in pairs(metatable.__index) do
-- serialize_str = serialize_str .. "[" .. table.serialize(k) .. "]=" .. table.serialize(v) .. ",\n"
-- end
-- end
serialize_str = serialize_str .. "}"
elseif t == "nil" then
return nil
else
error("can not serialize a " .. t .. " type.")
end
return serialize_str
end

View File

@ -0,0 +1,132 @@
-- 词条隐藏、降频
-- 在 engine/processors 增加 - lua_processor@cold_word_drop.processor
-- 在 engine/filters 增加 - lua_filter@cold_word_drop.filter
-- 在 key_binder 增加快捷键:
-- reduce_freq_cand: "Control+j" # 匹配当前输入码后隐藏指定的候选字词 或候选词条放到第四候选位置
-- drop_cand: "Control+d" # 强制删词, 无视输入的编码
-- get_record_filername() 函数中仅支持了 Windows、macOS、Linux
require("cold_word_drop.string")
require("cold_word_drop.metatable")
local processor = {}
local function get_record_filername(record_type)
local path_sep = "/"
local user_data_dir = rime_api:get_user_data_dir()
local user_distribute_name = rime_api:get_distribution_code_name()
if user_distribute_name:lower():match("weasel") then path_sep = [[\]] end
if user_distribute_name:lower():match("ibus") then
return string.format("%s/rime/lua/cold_word_drop/%s_words.lua",
os.getenv("HOME") .. "/.config/ibus",
record_type
)
else
local file_path = string.format("%s/lua/cold_word_drop/%s_words.lua", user_data_dir, record_type)
return file_path:gsub("/", path_sep)
end
end
local function write_word_to_file(env, record_type)
local filename = get_record_filername(record_type)
local record_header = string.format("local %s_words =\n", record_type)
local record_tailer = string.format("\nreturn %s_words", record_type)
if not filename then
return false
end
local fd = assert(io.open(filename, "w")) --打开
-- fd:flush() --刷新
local x = string.format("%s_list", record_type)
local record = table.serialize(env.tbls[x]) -- lua 的 table 对象 序列化为字符串
fd:setvbuf("line")
fd:write(record_header) --写入文件头部
fd:write(record) --写入 序列化的字符串
fd:write(record_tailer) --写入文件尾部, 结束记录
fd:close() --关闭
end
local function append_word_to_droplist(env, ctx, action_type)
local word = ctx.word:gsub(" ", "")
local input_code = ctx.code:gsub(" ", "")
if action_type == "drop" then
table.insert(env.drop_words, word) -- 高亮选中的词条插入到 drop_list
return true
end
if action_type == "hide" then
if not env.hide_words[word] then
env.hide_words[word] = { input_code }
-- 隐藏的词条如果已经在 hide_list 中, 则将输入串追加到 值表中, 如: ['藏'] = {'chang', 'zhang'}
elseif not table.find_index(env.hide_words[word], input_code) then
table.insert(env.hide_words[word], input_code)
end
return true
end
if action_type == "reduce_freq" then
if env.reduce_freq_words[word] then
table.insert(env.reduce_freq_words[word], input_code)
else
env.reduce_freq_words[word] = { input_code }
end
return true
end
end
function processor.init(env)
local engine = env.engine
local config = engine.schema.config
local _sd, drop_words = pcall(require, "cold_word_drop/drop_words")
local _sh, hide_words = pcall(require, "cold_word_drop/hide_words")
local _st, turn_down_words = pcall(require, "cold_word_drop/turn_down_words")
local _sr, reduce_freq_words = pcall(require, "cold_word_drop/reduce_freq_words")
env.drop_words = _sd and drop_words or {}
env.hide_words = _sh and hide_words or {}
env.reduce_freq_words = (_st and turn_down_words) or (_sr and reduce_freq_words) or {}
env.drop_cand_key = config:get_string("key_binder/drop_cand") or "Control+d"
env.hide_cand_key = config:get_string("key_binder/hide_cand") or "Control+x"
env.turn_down_cand_key = config:get_string("key_binder/turn_down_cand") or nil
env.reduce_cand_key = env.turn_down_cand_key or config:get_string("key_binder/reduce_freq_cand") or "Control+j"
env.tbls = {
["drop_list"] = env.drop_words,
["hide_list"] = env.hide_words,
["reduce_freq_list"] = env.reduce_freq_words,
}
end
function processor.func(key, env)
local engine = env.engine
local context = engine.context
local preedit_code = context:get_script_text()
local action_map = {
[env.drop_cand_key] = "drop",
[env.hide_cand_key] = "hide",
[env.reduce_cand_key] = "reduce_freq",
}
if context:has_menu() and action_map[key:repr()] then
local cand = context:get_selected_candidate()
local action_type = action_map[key:repr()]
local ctx_map = {
["word"] = cand.text,
["code"] = preedit_code,
}
local res = append_word_to_droplist(env, ctx_map, action_type)
context:refresh_non_confirmed_composition() -- 刷新当前输入法候选菜单, 实现看到实时效果
if not res then
return 2
end
if res then
-- 期望被删的词和隐藏的词条写入文件(drop_words.lua, hide_words.lua)
write_word_to_file(env, action_type)
end
return 1 -- kAccept
end
return 2 -- kNoop, 不做任何操作, 交给下个组件处理
end
return processor

View File

@ -0,0 +1,5 @@
local reduce_freq_words =
{ ["示~例~"] = { "shili", },
["颜射"] = { "yanshe", },
}
return reduce_freq_words

View File

@ -0,0 +1,40 @@
-- wrap utf8.sub(str,head_index, tail_index)
-- wrap string.split(str,sp,sp1)
-- string.utf8_len = utf8.len
-- string.utf8_offset= utf8.offset
-- string.utf8_sub= utf8.sub
function string.split(str, sp, sp1)
sp = type(sp) == "string" and sp or " "
if #sp == 0 then
sp = "([%z\1-\127\194-\244][\128-\191]*)"
elseif #sp == 1 then
sp = "[^" .. (sp == "%" and "%%" or sp) .. "]*"
else
sp1 = sp1 or "^"
str = str:gsub(sp, sp1)
sp = "[^" .. sp1 .. "]*"
end
local tab = {}
for v in str:gmatch(sp) do
table.insert(tab, v)
end
return tab
end
function utf8.gsub(str, si, ei)
local function index(ustr, i)
return i >= 0 and (ustr:utf8_offset(i) or ustr:len() + 1) or (ustr:utf8_offset(i) or 1)
end
local u_si = index(str, si)
ei = ei or str:utf8_len()
ei = ei >= 0 and ei + 1 or ei
local u_ei = index(str, ei) - 1
return str:sub(u_si, u_ei)
end
string.utf8_len = utf8.len
string.utf8_offset = utf8.offset
string.utf8_sub = utf8.gsub
return true

213
lua/corrector.lua Normal file
View File

@ -0,0 +1,213 @@
--[[
ji yu gei yu comment
comment
Lua translator/spelling_hints comment
Lua 使 `spelling_hints` comment
@[Shewer Lu](https://github.com/shewer)
cn_dicts/others.dict.yaml issue
--]]
local M = {}
function M.init(env)
local config = env.engine.schema.config
env.keep_comment = config:get_bool('translator/keep_comments')
local delimiter = config:get_string('speller/delimiter')
if delimiter and #delimiter > 0 and delimiter:sub(1,1) ~= ' ' then
env.delimiter = delimiter:sub(1,1)
end
env.name_space = env.name_space:gsub('^*', '')
M.style = config:get_string(env.name_space) or '{comment}'
M.corrections = {
-- 错音
["hun dun"] = { text = "馄饨", comment = "hún tun" },
["zhu jiao"] = { text = "主角", comment = "zhǔ jué" },
["jiao se"] = { text = "角色", comment = "jué sè" },
["chi pi sa"] = { text = "吃比萨", comment = "chī bǐ sà" },
["pi sa bing"] = { text = "比萨饼", comment = "bǐ sà bǐng" },
["shui fu"] = { text = "说服", comment = "shuō fú" },
["dao hang"] = { text = "道行", comment = "dào heng" },
["mo yang"] = { text = "模样", comment = "mú yàng" },
["you mo you yang"] = { text = "有模有样", comment = "yǒu mú yǒu yàng" },
["yi mo yi yang"] = { text = "一模一样", comment = "yī mú yī yàng" },
["zhuang mo zuo yang"] = { text = "装模作样", comment = "zhuāng mú zuò yàng" },
["ren mo gou yang"] = { text = "人模狗样", comment = "rén mú gǒu yàng" },
["mo ban"] = { text = "模板", comment = "mú bǎn" },
["a mi tuo fo"] = { text = "阿弥陀佛", comment = "ē mí tuó fó" },
["na mo a mi tuo fo"] = { text = "南无阿弥陀佛", comment = "nā mó ē mí tuó fó" },
["nan wu a mi tuo fo"] = { text = "南无阿弥陀佛", comment = "nā mó ē mí tuó fó" },
["nan wu e mi tuo fo"] = { text = "南无阿弥陀佛", comment = "nā mó ē mí tuó fó" },
["gei yu"] = { text = "给予", comment = "jǐ yǔ" },
["bin lang"] = { text = "槟榔", comment = "bīng láng" },
["zhang bai zhi"] = { text = "张柏芝", comment = "zhāng bó zhī" },
["teng man"] = { text = "藤蔓", comment = "téng wàn" },
["nong tang"] = { text = "弄堂", comment = "lòng táng" },
["xin kuan ti pang"] = { text = "心宽体胖", comment = "xīn kuān tǐ pán" },
["mai yuan"] = { text = "埋怨", comment = "mán yuàn" },
["xu yu wei she"] = { text = "虚与委蛇", comment = "xū yǔ wēi yí" },
["mu na"] = { text = "木讷", comment = "mù nè" },
["du le le"] = { text = "独乐乐", comment = "dú yuè lè" },
["zhong le le"] = { text = "众乐乐", comment = "zhòng yuè lè" },
["xun ma"] = { text = "荨麻", comment = "qián má" },
["qian ma zhen"] = { text = "荨麻疹", comment = "xún má zhěn" },
["mo ju"] = { text = "模具", comment = "mú jù" },
["cao zhi"] = { text = "草薙", comment = "cǎo tì" },
["cao zhi jing"] = { text = "草薙京", comment = "cǎo tì jīng" },
["cao zhi jian"] = { text = "草薙剑", comment = "cǎo tì jiàn" },
["jia ping ao"] = { text = "贾平凹", comment = "jiǎ píng wā" },
["xue fo lan"] = { text = "雪佛兰", comment = "xuě fú lán" },
["qiang jin"] = { text = "强劲", comment = "qiáng jìng" },
["tong ti"] = { text = "胴体", comment = "dòng tǐ" },
["li neng kang ding"] = { text = "力能扛鼎", comment = "lì néng gāng dǐng" },
["ya lv jiang"] = { text = "鸭绿江", comment = "yā lù jiāng" },
["da fu bian bian"] = { text = "大腹便便", comment = "dà fù pián pián" },
["ka bo zi"] = { text = "卡脖子", comment = "qiǎ bó zi" },
["zhi sheng"] = { text = "吱声", comment = "zī shēng" },
["chan he"] = { text = "掺和", comment = "chān huo" },
["can huo"] = { text = "掺和", comment = "chān huo" },
["can he"] = { text = "掺和", comment = "chān huo" },
["cheng zhi"] = { text = "称职", comment = "chèn zhí" },
["luo shi fen"] = { text = "螺蛳粉", comment = "luó sī fěn" },
["tiao huan"] = { text = "调换", comment = "diào huàn" },
["tai xing shan"] = { text = "太行山", comment = "tài háng shān" },
["jie si di li"] = { text = "歇斯底里", comment = "xiē sī dǐ lǐ" },
["fa xiao"] = { text = "发酵", comment = "fā jiào" },
["xiao mu jun"] = { text = "酵母菌", comment = "jiào mǔ jūn" },
["yin hong"] = { text = "殷红", comment = "yān hóng" },
["nuan he"] = { text = "暖和", comment = "nuǎn huo" },
["mo ling liang ke"] = { text = "模棱两可", comment = "mó léng liǎng kě" },
["pan yang hu"] = { text = "鄱阳湖", comment = "pó yáng hú" },
["bo jing"] = { text = "脖颈", comment = "bó gěng" },
["bo jing er"] = { text = "脖颈儿", comment = "bó gěng er" },
["niu pi xian"] = { text = "牛皮癣", comment = "niú pí xuǎn" },
["hua ban xian"] = { text = "花斑癣", comment = "huā bān xuǎn" },
["ti xian"] = { text = "体癣", comment = "tǐ xuǎn" },
["gu xian"] = { text = "股癣", comment = "gǔ xuǎn" },
["jiao xian"] = { text = "脚癣", comment = "jiǎo xuǎn" },
["zu xian"] = { text = "足癣", comment = "zú xuǎn" },
["jie zha"] = { text = "结扎", comment = "jié zā" },
["hai shen wei"] = { text = "海参崴", comment = "hǎi shēn wǎi" },
["hou pu"] = { text = "厚朴", comment = "hòu pò " },
["da wan ma"] = { text = "大宛马", comment = "dà yuān mǎ" },
["ci ya"] = { text = "龇牙", comment = "zī yá" },
["ci zhe ya"] = { text = "龇着牙", comment = "zī zhe yá" },
["ci ya lie zui"] = { text = "龇牙咧嘴", comment = "zī yá liě zuǐ" },
["tou pi xue"] = { text = "头皮屑", comment = "tóu pí xiè" },
["liu an shi"] = { text = "六安市", comment = "lù ān shì" },
["liu an xian"] = { text = "六安县", comment = "lù ān xiàn" },
["an hui sheng liu an shi"] = { text = "安徽省六安市", comment = "ān huī shěng lù ān shì" },
["an hui liu an"] = { text = "安徽六安", comment = "ān huī lù ān" },
["an hui liu an shi"] = { text = "安徽六安市", comment = "ān huī lù ān shì" },
["nan jing liu he"] = { text = "南京六合", comment = "nán jīng lù hé" },
["nan jing shi liu he"] = { text = "南京六合区", comment = "nán jīng lù hé qū" },
["nan jing shi liu he qu"] = { text = "南京市六合区", comment = "nán jīng shì lù hé qū" },
["nuo da"] = { text = "偌大", comment = "偌(ruò)大" },
["yin jiu zhi ke"] = { text = "饮鸩止渴", comment = "饮鸩(zhèn)止渴" },
["yin jiu jie ke"] = { text = "饮鸩解渴", comment = "饮鸩(zhèn)解渴" },
["gong shang jiao zhi yu"] = { text = "宫商角徵羽", comment = "宫商角(jué)徵羽" },
["shan qi deng"] = { text = "氙气灯", comment = "氙(xiān)气灯" },
["shan qi da deng"] = { text = "氙气大灯", comment = "氙(xiān)气大灯" },
["shan qi shou dian tong"] = { text = "氙气手电筒", comment = "氙(xiān)气手电筒" },
["yin gai"] = { text = "应该", comment = "应(yīng)该" },
["nian tie"] = { text = "粘贴", comment = "粘(zhān)贴" },
["gao ju li"] = { text = "高句丽", comment = "高句(gōu)丽" },
["jiao dou shi"] = { text = "角斗士", comment = "角(jué)斗士" },
["suo sha mi"] = { text = "缩砂密", comment = "缩(sù)砂密" },
["po ji pao"] = { text = "迫击炮", comment = "迫(pǎi)击炮" },
["wen bo"] = { text = "榅桲", comment = "wēn po" },
["bi ji"] = { text = "荸荠", comment = "bí qi" },
["rou yi"] = { text = "柔荑", comment = "柔荑(tí)" },
["rou yi hua xu"] = { text = "柔荑花序", comment = "柔荑(tí)花序" },
["shou ru rou yi"] = { text = "手如柔荑", comment = "手如柔荑(tí)" },
["wen ting jun"] = { text = "温庭筠", comment = "温庭筠(yún)" },
["zhu you tang"] = { text = "朱祐樘", comment = "朱祐樘(chēng)" },
["guan ka"] = { text = "关卡", comment = "guān qiǎ" },
["san wei zhen huo"] = { text = "三昧真火", comment = "三昧(mèi)真火" },
["qing ping zhi mo"] = { text = "青𬞟之末", comment = "青𬞟(pín)之末" },
["qi yu qing ping zhi mo"] = { text = "起于青𬞟之末", comment = "起于青𬞟(pín)之末" },
["feng qi yu qing ping zhi mo"] = { text = "风起于青𬞟之末", comment = "风起于青𬞟(pín)之末" },
["you hui juan"] = { text = "优惠券", comment = "优惠券(quàn)" },
["gong quan"] = { text = "拱券", comment = "gǒng xuàn" },
["pu ru"] = { text = "哺乳", comment = "bǔ rǔ" },
["nao zu zhong"] = { text = "脑卒中", comment = "nǎo cù zhòng" },
["xie hu"] = { text = "潟湖", comment = "xì hú" },
["guo pu"] = { text = "果脯", comment = "guǒ fǔ" },
["rou pu"] = { text = "肉脯", comment = "ròu fǔ" },
["pu an suan"] = { text = "脯氨酸", comment = "脯(fǔ)氨酸" },
["luo an suan"] = { text = "酪氨酸", comment = "酪(lào)氨酸" },
["mei shi zi"] = { text = "没食子", comment = "没(mò)食子" },
["shang feng die"] = { text = "裳凤蝶", comment = "裳(cháng)凤蝶" },
["bai qi tun"] = { text = "白𬶨豚", comment = "bái jì tún" },
["nao gu"] = { text = "桡骨", comment = "ráo gǔ" },
["bai zhe bu rao"] = { text = "百折不挠", comment = "百折不挠(náo)" },
["zhui xin qi xie"] = { text = "椎心泣血", comment = "椎(chuí)心泣血" },
["zhui xin qi xue"] = { text = "椎心泣血", comment = "椎(chuí)心泣血" },
["xia chi"] = { text = "挟持", comment = "挟(xié)持" },
["hao zhou"] = { text = "亳州", comment = "亳(bó)州" },
["niu jing"] = { text = "牛丼", comment = "牛丼(dǎn)" },
["niu jing fan"] = { text = "牛丼饭", comment = "牛丼(dǎn)饭" },
["an pou"] = { text = "安瓿", comment = "安瓿(bù)" },
["an pou ping"] = { text = "安瓿瓶", comment = "安瓿(bù)瓶" },
["jie pao"] = { text = "解剖", comment = "jiě pōu" },
["pao fen"] = { text = "剖分", comment = "pōu fēn" },
["pao fu chan"] = { text = "剖腹产", comment = "剖(pōu)腹产" },
["pao gong chan"] = { text = "剖宫产", comment = "剖(pōu)宫产" },
["jin kui"] = { text = "金匮", comment = "金匮(guì)" },
["qing ping le"] = { text = "清平乐", comment = "清平乐(yuè)" },
["ta sha xing"] = { text = "踏莎行", comment = "踏莎(suō)行" },
["sha cao"] = { text = "莎草", comment = "suō cǎo" },
["shan mu"] = { text = "杉木", comment = "shā mù" },
["dao zai shi ni"] = { text = "道在屎溺", comment = "道在屎溺(niào)" },
-- 错字
["pu jie"] = { text = "扑街", comment = "仆街" },
["pu gai"] = { text = "扑街", comment = "仆街" },
["pu jie zai"] = { text = "扑街仔", comment = "仆街仔" },
["pu gai zai"] = { text = "扑街仔", comment = "仆街仔" },
["ceng jin"] = { text = "曾今", comment = "曾经" },
["an nai"] = { text = "按耐", comment = "按捺(nà)" },
["an nai bu zhu"] = { text = "按耐不住", comment = "按捺(nà)不住" },
["bie jie"] = { text = "别介", comment = "别价(jie)" },
["beng jie"] = { text = "甭介", comment = "甭价(jie)" },
["xue mai pen zhang"] = { text = "血脉喷张", comment = "血脉贲(bēn)张 | 血脉偾(fèn)张" },
["qi ke fu"] = { text = "契科夫", comment = "契诃(hē)夫" },
["zhao cha"] = { text = "找茬", comment = "找碴" },
["zhao cha er"] = { text = "找茬儿", comment = "找碴儿" },
["da jia lai zhao cha"] = { text = "大家来找茬", comment = "大家来找碴" },
["da jia lai zhao cha er"] = { text = "大家来找茬儿", comment = "大家来找碴儿" },
["cou huo"] = { text = "凑活", comment = "凑合(he)" },
["ju hui"] = { text = "钜惠", comment = "巨惠" },
["mo xie zuo"] = { text = "魔蝎座", comment = "摩羯(jié)座" },
["pi sa"] = { text = "披萨", comment = "比(bǐ)萨" },
["geng quan"] = { text = "梗犬", comment = "㹴犬" },
}
end
function M.func(input, env)
for cand in input:iter() do
-- cand.comment 是目前输入的词汇的完整拼音
local pinyin = cand.comment:match("^(.-)$")
if pinyin and #pinyin > 0 then
local correction_pinyin = pinyin
if env.delimiter then
correction_pinyin = correction_pinyin:gsub(env.delimiter,' ')
end
local c = M.corrections[correction_pinyin]
if c and cand.text == c.text then
cand:get_genuine().comment = string.gsub(M.style, "{comment}", c.comment)
else
if env.keep_comment then
cand:get_genuine().comment = string.gsub(M.style, "{comment}", pinyin)
else
cand:get_genuine().comment = ""
end
end
end
yield(cand)
end
end
return M

72
lua/date_translator.lua Normal file
View File

@ -0,0 +1,72 @@
-- 日期时间,可在方案中配置触发关键字。
-- 提高权重的原因:因为在方案中设置了大于 1 的 initial_quality导致 rq sj xq dt ts 产出的候选项在所有词语的最后。
local function yield_cand(seg, text)
local cand = Candidate('', seg.start, seg._end, text, '')
cand.quality = 100
yield(cand)
end
local M = {}
function M.init(env)
local config = env.engine.schema.config
env.name_space = env.name_space:gsub('^*', '')
M.date = config:get_string(env.name_space .. '/date') or 'rq'
M.time = config:get_string(env.name_space .. '/time') or 'sj'
M.week = config:get_string(env.name_space .. '/week') or 'xq'
M.datetime = config:get_string(env.name_space .. '/datetime') or 'dt'
M.timestamp = config:get_string(env.name_space .. '/timestamp') or 'ts'
end
function M.func(input, seg, env)
-- 日期
if (input == M.date) then
local current_time = os.time()
yield_cand(seg, os.date('%Y-%m-%d', current_time))
yield_cand(seg, os.date('%Y/%m/%d', current_time))
yield_cand(seg, os.date('%Y.%m.%d', current_time))
yield_cand(seg, os.date('%Y%m%d', current_time))
yield_cand(seg, os.date('%Y年%m月%d日', current_time):gsub('年0', ''):gsub('月0',''))
-- 时间
elseif (input == M.time) then
local current_time = os.time()
yield_cand(seg, os.date('%H:%M', current_time))
yield_cand(seg, os.date('%H:%M:%S', current_time))
-- 星期
elseif (input == M.week) then
local current_time = os.time()
local week_tab = {'', '', '', '', '', '', ''}
local text = week_tab[tonumber(os.date('%w', current_time) + 1)]
yield_cand(seg, '星期' .. text)
yield_cand(seg, '礼拜' .. text)
yield_cand(seg, '' .. text)
-- ISO 8601/RFC 3339 的时间格式 (固定东八区)(示例 2022-01-07T20:42:51+08:00
elseif (input == M.datetime) then
local current_time = os.time()
yield_cand(seg, os.date('%Y-%m-%dT%H:%M:%S+08:00', current_time))
yield_cand(seg, os.date('%Y-%m-%d %H:%M:%S', current_time))
yield_cand(seg, os.date('%Y%m%d%H%M%S', current_time))
-- 时间戳(十位数,到秒,示例 1650861664
elseif (input == M.timestamp) then
local current_time = os.time()
yield_cand(seg, string.format('%d', current_time))
end
-- -- 显示内存
-- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "")
-- cand.quality = 100
-- yield(cand)
-- if input == "xxx" then
-- collectgarbage()
-- local cand = Candidate("date", seg.start, seg._end, "collectgarbage()", "")
-- cand.quality = 100
-- yield(cand)
-- end
end
return M

12
lua/debuger.lua Normal file
View File

@ -0,0 +1,12 @@
local function debuger(input, env)
for cand in input:iter() do
yield(ShadowCandidate(
cand,
cand.type,
cand.text,
env.engine.context.input .. " - " .. env.engine.context:get_preedit().text .. " - " .. cand.preedit
))
end
end
return debuger

18
lua/en_spacer.lua Normal file
View File

@ -0,0 +1,18 @@
-- 英文词条上屏自动添加空格
-- 在 engine/filters 的倒数第二个位置,增加 - lua_filter@en_spacer
--
-- 英文后,再输入英文单词(必须为候选项)自动添加空格
local F = {}
function F.func( input, env )
local latest_text = env.engine.context.commit_history:latest_text()
for cand in input:iter() do
if cand.text:match( '^[%a\']+[%a\']*$' ) and latest_text and #latest_text > 0 and
latest_text:find( '^ ?[%a\']+[%a\']*$' ) then
cand = cand:to_shadow_candidate( 'en_spacer', cand.text:gsub( '(%a+\'?%a*)', ' %1' ), cand.comment )
end
yield( cand )
end
end
return F

9
lua/force_gc.lua Normal file
View File

@ -0,0 +1,9 @@
-- 暴力 GC
-- 详情 https://github.com/hchunhui/librime-lua/issues/307
-- 这样也不会导致卡顿,那就每次都调用一下吧,内存稳稳的
local function force_gc()
-- collectgarbage()
collectgarbage("step")
end
return force_gc

29
lua/is_in_user_dict.lua Normal file
View File

@ -0,0 +1,29 @@
-- 根据是否在用户词典,在 comment 上加上一个星号 *
-- 在 engine/filters 增加 - lua_filter@is_in_user_dict
-- 在方案里写配置项:
-- is_in_user_dict: true 为输入过的内容加星号
-- is_in_user_dict: false 为未输入过的内容加星号
local M = {}
function M.init(env)
local config = env.engine.schema.config
env.name_space = env.name_space:gsub('^*', '')
M.is_in_user_dict = config:get_bool(env.name_space) or nil
end
local is_user = {
user_table = true,
user_phrase = true,
}
function M.func(input)
for cand in input:iter() do
if is_user[cand.type] == M.is_in_user_dict then
cand.comment = cand.comment .. '*'
end
yield(cand)
end
end
return M

52
lua/long_word_filter.lua Normal file
View File

@ -0,0 +1,52 @@
-- 长词优先(提升「西安」「提案」「图案」「饥饿」等词汇的优先级)
-- 感谢&参考于: https://github.com/tumuyan/rime-melt
-- 不提升包含英文、数字的候选项
-- 不提升包含 emoji、假名的候选项通过将此 Lua 放到 simplifier@emoji 前面来实现)
local M = {}
function M.init(env)
-- 提升 count 个词语,插入到第 idx 个位置,默认 2、4。
local config = env.engine.schema.config
env.name_space = env.name_space:gsub("^*", "")
M.count = config:get_int(env.name_space .. "/count") or 2
M.idx = config:get_int(env.name_space .. "/idx") or 4
end
function M.func(input)
local l = {}
local firstWordLength = 0 -- 记录第一个候选词的长度,提前的候选词至少要比第一个候选词长
local done = 0 -- 记录筛选了多少个词条(只提升 count 个词的权重)
local i = 1
for cand in input:iter() do
local leng = utf8.len(cand.text)
-- 只以第一个候选项的长度作为参考
if firstWordLength < 1 then
firstWordLength = leng
end
-- 不处理 M.idx 之前的候选项
if i < M.idx then
i = i + 1
yield(cand)
-- 长词直接 yield其余的放到 l 里
elseif leng <= firstWordLength or cand.text:find("[%a%d]") then
table.insert(l, cand)
else
yield(cand)
done = done + 1
end
-- 找齐了或者 l 太大了,就不找了,一般前 50 个就够了
if done == M.count or #l > 50 then
break
end
end
-- yield l 及后续的候选项
for _, cand in ipairs(l) do
yield(cand)
end
for cand in input:iter() do
yield(cand)
end
end
return M

674
lua/lunar.lua Normal file
View File

@ -0,0 +1,674 @@
--[[
Lua https://blog.csdn.net/lp12345678910/article/details/121396243
https://github.com/boomker/rime-fast-xhup
--]]
--
-- 农历,可在方案中配置触发关键字。
-- 数字转中文:
local numerical_units = {
"",
"",
"",
"",
"",
"",
"",
"",
"亿",
"",
"",
"",
"",
"",
"",
"",
}
local numerical_names = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
local function convert_arab_to_chinese(number)
local n_number = tonumber(number)
assert(n_number, "传入参数非正确number类型!")
-- 0 ~ 9
if n_number < 10 then
return numerical_names[n_number + 1]
end
-- 一十九 => 十九
if n_number < 20 then
local digit = string.sub(n_number, 2, 2)
if digit == "0" then
return ""
else
return "" .. numerical_names[digit + 1]
end
end
--[[
1. 9
9string的len加2位.0
~ 亿
0 ~ 999999999
2. 1414
~ 亿
0 ~ 99999999999999
--]]
local len_max = 9
local len_number = string.len(number)
assert(
len_number > 0 and len_number <= len_max,
"传入参数位数" .. len_number .. "必须在(0, " .. len_max .. "]之间!"
)
-- 01数字转成表结构存储
local numerical_tbl = {}
for i = 1, len_number do
numerical_tbl[i] = tonumber(string.sub(n_number, i, i))
end
local pre_zero = false
local result = ""
for index, digit in ipairs(numerical_tbl) do
local curr_unit = numerical_units[len_number - index + 1]
local curr_name = numerical_names[digit + 1]
if digit == 0 then
if not pre_zero then
result = result .. curr_name
end
pre_zero = true
else
result = result .. curr_name .. curr_unit
pre_zero = false
end
end
result = string.gsub(result, "零+$", "")
return result
end
-- 农历:
-- 天干名称
local cTianGan = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
-- 地支名称
local cDiZhi = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
-- 属相名称
local cShuXiang = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
-- 农历日期名
local cDayName = {
"初一",
"初二",
"初三",
"初四",
"初五",
"初六",
"初七",
"初八",
"初九",
"初十",
"十一",
"十二",
"十三",
"十四",
"十五",
"十六",
"十七",
"十八",
"十九",
"二十",
"廿一",
"廿二",
"廿三",
"廿四",
"廿五",
"廿六",
"廿七",
"廿八",
"廿九",
"三十",
}
-- 农历月份名
local cMonName = {
"正月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"冬月",
"腊月",
}
-- 农历数据
local wNongliData = {
"AB500D2",
"4BD0883",
"4AE00DB",
"A5700D0",
"54D0581",
"D2600D8",
"D9500CC",
"655147D",
"56A00D5",
"9AD00CA",
"55D027A",
"4AE00D2",
"A5B0682",
"A4D00DA",
"D2500CE",
"D25157E",
"B5500D6",
"56A00CC",
"ADA027B",
"95B00D3",
"49717C9",
"49B00DC",
"A4B00D0",
"B4B0580",
"6A500D8",
"6D400CD",
"AB5147C",
"2B600D5",
"95700CA",
"52F027B",
"49700D2",
"6560682",
"D4A00D9",
"EA500CE",
"6A9157E",
"5AD00D6",
"2B600CC",
"86E137C",
"92E00D3",
"C8D1783",
"C9500DB",
"D4A00D0",
"D8A167F",
"B5500D7",
"56A00CD",
"A5B147D",
"25D00D5",
"92D00CA",
"D2B027A",
"A9500D2",
"B550781",
"6CA00D9",
"B5500CE",
"535157F",
"4DA00D6",
"A5B00CB",
"457037C",
"52B00D4",
"A9A0883",
"E9500DA",
"6AA00D0",
"AEA0680",
"AB500D7",
"4B600CD",
"AAE047D",
"A5700D5",
"52600CA",
"F260379",
"D9500D1",
"5B50782",
"56A00D9",
"96D00CE",
"4DD057F",
"4AD00D7",
"A4D00CB",
"D4D047B",
"D2500D3",
"D550883",
"B5400DA",
"B6A00CF",
"95A1680",
"95B00D8",
"49B00CD",
"A97047D",
"A4B00D5",
"B270ACA",
"6A500DC",
"6D400D1",
"AF40681",
"AB600D9",
"93700CE",
"4AF057F",
"49700D7",
"64B00CC",
"74A037B",
"EA500D2",
"6B50883",
"5AC00DB",
"AB600CF",
"96D0580",
"92E00D8",
"C9600CD",
"D95047C",
"D4A00D4",
"DA500C9",
"755027A",
"56A00D1",
"ABB0781",
"25D00DA",
"92D00CF",
"CAB057E",
"A9500D6",
"B4A00CB",
"BAA047B",
"AD500D2",
"55D0983",
"4BA00DB",
"A5B00D0",
"5171680",
"52B00D8",
"A9300CD",
"795047D",
"6AA00D4",
"AD500C9",
"5B5027A",
"4B600D2",
"96E0681",
"A4E00D9",
"D2600CE",
"EA6057E",
"D5300D5",
"5AA00CB",
"76A037B",
"96D00D3",
"4AB0B83",
"4AD00DB",
"A4D00D0",
"D0B1680",
"D2500D7",
"D5200CC",
"DD4057C",
"B5A00D4",
"56D00C9",
"55B027A",
"49B00D2",
"A570782",
"A4B00D9",
"AA500CE",
"B25157E",
"6D200D6",
"ADA00CA",
"4B6137B",
"93700D3",
"49F08C9",
"49700DB",
"64B00D0",
"68A1680",
"EA500D7",
"6AA00CC",
"A6C147C",
"AAE00D4",
"92E00CA",
"D2E0379",
"C9600D1",
"D550781",
"D4A00D9",
"DA400CD",
"5D5057E",
"56A00D6",
"A6C00CB",
"55D047B",
"52D00D3",
"A9B0883",
"A9500DB",
"B4A00CF",
"B6A067F",
"AD500D7",
"55A00CD",
"ABA047C",
"A5A00D4",
"52B00CA",
"B27037A",
"69300D1",
"7330781",
"6AA00D9",
"AD500CE",
"4B5157E",
"4B600D6",
"A5700CB",
"54E047C",
"D1600D2",
"E960882",
"D5200DA",
"DAA00CF",
"6AA167F",
"56D00D7",
"4AE00CD",
"A9D047D",
"A2D00D4",
"D1500C9",
"F250279",
"D5200D1",
}
-- 十进制转二进制
local function Dec2bin(n)
local t, t1
local tables = {}
t = tonumber(n)
while math.floor(t / 2) >= 1 do
t1 = t and math.fmod(t, 2)
if t1 > 0 then
if #tables > 0 then
table.insert(tables, 1, 1)
else
tables[1] = 1
end
else
if #tables > 0 then
table.insert(tables, 1, 0)
else
tables[1] = 0
end
end
t = math.floor(t / 2)
if t == 1 then
if #tables > 0 then
table.insert(tables, 1, 1)
else
tables[1] = 1
end
end
end
return string.gsub(table.concat(tables), "^[0]+", "")
end
-- 2/10/16进制互转
local function Atoi(x, inPuttype, outputtype)
local r
if tonumber(inPuttype) == 2 then
if tonumber(outputtype) == 10 then -- 2进制-->10进制
r = tonumber(tostring(x), 2)
-- elseif tonumber(outputtype) == 16 then -- 2进制-->16进制
-- r = bin2hex(tostring(x))
end
elseif tonumber(inPuttype) == 10 then
if tonumber(outputtype) == 2 then -- 10进制-->2进制
r = Dec2bin(tonumber(x))
elseif tonumber(outputtype) == 16 then -- 10进制-->16进制
r = string.format("%x", x)
end
elseif tonumber(inPuttype) == 16 then
if tonumber(outputtype) == 2 then -- 16进制-->2进制
r = Dec2bin(tonumber(tostring(x), 16))
elseif tonumber(outputtype) == 10 then -- 16进制-->10进制
r = tonumber(tostring(x), 16)
end
end
return r
end
-- 农历16进制数据分解
local function Analyze(Data)
local rtn1, rtn2, rtn3, rtn4
rtn1 = Atoi(string.sub(Data, 1, 3), 16, 2)
if string.len(rtn1) < 12 then
rtn1 = "0" .. rtn1
end
rtn2 = string.sub(Data, 4, 4)
rtn3 = Atoi(string.sub(Data, 5, 5), 16, 10)
rtn4 = Atoi(string.sub(Data, -2, -1), 16, 10)
if string.len(rtn4) == 3 then
rtn4 = "0" .. Atoi(string.sub(Data, -2, -1), 16, 10)
end
-- string.gsub(rtn1, "^[0]*", "")
return { rtn1, rtn2, rtn3, rtn4 }
end
-- 年天数判断
local function IsLeap(y)
local year = tonumber(y)
if not year then
return nil
end
if math.fmod(year, 400) ~= 0 and math.fmod(year, 4) == 0 or math.fmod(year, 400) == 0 then
return 366
else
return 365
end
end
-- 返回当年过了多少天
local function leaveDate(y)
local day, total
total = 0
if IsLeap(tonumber(string.sub(y, 1, 4))) > 365 then
day = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
else
day = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
end
if tonumber(string.sub(y, 5, 6)) > 1 then
for i = 1, tonumber(string.sub(y, 5, 6)) - 1 do
total = total + day[i]
end
total = total + tonumber(string.sub(y, 7, 8))
else
return tonumber(string.sub(y, 7, 8))
end
return tonumber(total)
end
-- 计算日期差两个8位数日期之间相隔的天数date2>date1
local function diffDate(date1, date2)
local n, total
total = 0
date1 = tostring(date1)
date2 = tostring(date2)
if tonumber(date2) > tonumber(date1) then
n = tonumber(string.sub(date2, 1, 4)) - tonumber(string.sub(date1, 1, 4))
if n > 1 then
for i = 1, n - 1 do
total = total + IsLeap(tonumber(string.sub(date1, 1, 4)) + i)
end
total = total
+ leaveDate(tonumber(string.sub(date2, 1, 8)))
+ IsLeap(tonumber(string.sub(date1, 1, 4)))
- leaveDate(tonumber(string.sub(date1, 1, 8)))
elseif n == 1 then
total = IsLeap(tonumber(string.sub(date1, 1, 4)))
- leaveDate(tonumber(string.sub(date1, 1, 8)))
+ leaveDate(tonumber(string.sub(date2, 1, 8)))
else
total = leaveDate(tonumber(string.sub(date2, 1, 8))) - leaveDate(tonumber(string.sub(date1, 1, 8)))
-- print(date1 .. "-" .. date2)
end
elseif tonumber(date2) == tonumber(date1) then
return 0
else
return -1
end
return total
end
-- 公历转农历支持转化范围公元1900-2100年
-- 公历日期 Gregorian:格式 YYYYMMDD
-- <返回值>农历日期 中文 天干地支属相
local function Date2LunarDate(Gregorian)
Gregorian = tostring(Gregorian)
local Year, Month, Day, Pos, Data0, Data1, MonthInfo, LeapInfo, Leap, Newyear, LYear, thisMonthInfo
Year = tonumber(Gregorian.sub(Gregorian, 1, 4))
Month = tonumber(Gregorian.sub(Gregorian, 5, 6))
Day = tonumber(Gregorian.sub(Gregorian, 7, 8))
if Year > 2100 or Year < 1899 or Month > 12 or Month < 1 or Day < 1 or Day > 31 or string.len(Gregorian) < 8 then
-- 2024.07.27 这个不能判断不存在的日期,例如 02.31 04.30 等,会显示农历,但不存在 by Mirtle
return "无效日期", "无效日期"
end
-- 获取两百年内的农历数据
Pos = Year - 1900 + 2
Data0 = wNongliData[Pos - 1]
Data1 = wNongliData[Pos]
-- 判断农历年份
local tb1 = Analyze(Data1)
MonthInfo = tb1[1]
LeapInfo = tb1[2]
Leap = tb1[3]
Newyear = tb1[4]
local Date1 = Year .. Newyear
local Date2 = Gregorian
local Date3 = diffDate(Date1, Date2) -- 和当年农历新年相差的天数
if Date3 < 0 then
-- print(Data0 .. "-2")
tb1 = Analyze(Data0)
Year = Year - 1
MonthInfo = tb1[1]
LeapInfo = tb1[2]
Leap = tb1[3]
Newyear = tb1[4]
Date1 = Year .. Newyear
Date2 = Gregorian
Date3 = diffDate(Date1, Date2)
-- print(Date2 .. "--" .. Date1 .. "--" .. Date3)
end
Date3 = Date3 + 1
LYear = Year -- 农历年份,就是上面计算后的值
if Leap > 0 then -- 有闰月
thisMonthInfo = string.sub(MonthInfo, 1, tonumber(Leap)) .. LeapInfo .. string.sub(MonthInfo, Leap + 1)
else
thisMonthInfo = MonthInfo
end
local thisMonth, thisDays, LMonth, LDay, Isleap, LunarDate, LunarDate2, LunarYear, LunarMonth
for i = 1, 13 do
thisMonth = string.sub(thisMonthInfo, i, i)
thisDays = 29 + thisMonth
if Date3 > thisDays then
Date3 = Date3 - thisDays
else
if Leap > 0 then
if Leap >= i then
LMonth = i
Isleap = 0
else
LMonth = i - 1
if i - Leap == 1 then
Isleap = 1
else
Isleap = 0
end
end
else
LMonth = i
Isleap = 0
end
LDay = math.floor(Date3)
break
end
end
if Isleap > 0 then
LunarMonth = "" .. cMonName[LMonth]
else
LunarMonth = cMonName[LMonth]
end
local _nis = tostring(LYear)
local _LunarYears = ""
for i = 1, _nis:len() do
local _ni_digit = tonumber(_nis:sub(i, i))
_LunarYears = _LunarYears .. convert_arab_to_chinese(_ni_digit)
end
LunarYear = string.gsub(_LunarYears, "", "")
LunarDate = cTianGan[math.fmod(LYear - 4, 10) + 1]
.. cDiZhi[math.fmod(LYear - 4, 12) + 1]
.. "年("
.. cShuXiang[math.fmod(LYear - 4, 12) + 1]
.. ""
.. LunarMonth
.. cDayName[LDay]
LunarDate2 = LunarYear .. "" .. LunarMonth .. cDayName[LDay]
return LunarDate, LunarDate2
end
-- 农历
-- 从 lunar: nl 获取农历触发关键字(双拼默认为 lunar
-- 从 recognizer/patterns/gregorian_to_lunar 获取第 2 个字符作为公历转农历的触发前缀,默认为 N
local function translator(input, seg, env)
env.lunar_key_word = env.lunar_key_word or
(env.engine.schema.config:get_string(env.name_space:gsub('^*', '')) or 'nl')
env.gregorian_to_lunar = env.gregorian_to_lunar or
(env.engine.schema.config:get_string('recognizer/patterns/gregorian_to_lunar'):sub(2, 2) or 'N')
if input == env.lunar_key_word then
local date1, date2 = Date2LunarDate(os.date("%Y%m%d"))
local lunar_ymd = (Candidate("", seg.start, seg._end, date2, ""))
lunar_ymd.quality = 999
yield(lunar_ymd)
local lunar_date = Candidate("", seg.start, seg._end, date1, "")
lunar_date.quality = 999
yield(lunar_date)
elseif env.gregorian_to_lunar ~= '' and input:sub(1, 1) == env.gregorian_to_lunar and input:sub(2):find("^%d%d%d%d%d%d%d%d$") then
local date1, date2 = Date2LunarDate(input:sub(2))
local lunar_ymd = (Candidate("", seg.start, seg._end, date2, ""))
lunar_ymd.quality = 999
yield(lunar_ymd)
local lunar_date = Candidate("", seg.start, seg._end, date1, "")
lunar_date.quality = 999
yield(lunar_date)
end
end
return translator

163
lua/number_translator.lua Normal file
View File

@ -0,0 +1,163 @@
-- 来源 https://github.com/yanhuacuo/98wubi-tables > http://98wb.ysepan.com/
-- 数字、金额大写
-- 触发前缀默认为 recognizer/patterns/number 的第 2 个字符,即 R
local function splitNumPart(str)
local part = {}
part.int, part.dot, part.dec = string.match(str, "^(%d*)(%.?)(%d*)")
return part
end
local function GetPreciseDecimal(nNum, n)
if type(nNum) ~= "number" then nNum = tonumber(nNum) end
n = n or 0;
n = math.floor(n)
if n < 0 then n = 0 end
local nDecimal = 10 ^ n
local nTemp = math.floor(nNum * nDecimal);
local nRet = nTemp / nDecimal;
return nRet;
end
local function decimal_func(str, posMap, valMap)
local dec
posMap = posMap or { [1] = "", [2] = "", [3] = "", [4] = "" }
valMap = valMap or { [0] = "", "", "", "", "", "", "", "", "", "" }
if #str > 4 then dec = string.sub(tostring(str), 1, 4) else dec = tostring(str) end
dec = string.gsub(dec, "0+$", "")
if dec == "" then return "" end
local result = ""
for pos = 1, #dec do
local val = tonumber(string.sub(dec, pos, pos))
if val ~= 0 then result = result .. valMap[val] .. posMap[pos] else result = result .. valMap[val] end
end
result = result:gsub(valMap[0] .. valMap[0], valMap[0])
return result:gsub(valMap[0] .. valMap[0], valMap[0])
end
-- 把数字串按千分位四位数分割,进行转换为中文
local function formatNum(num, t)
local digitUnit, wordFigure
local result = ""
num = tostring(num)
if tonumber(t) < 1 then digitUnit = { "", "", "", "" } else digitUnit = { "", "", "", "" } end
if tonumber(t) < 1 then
wordFigure = { "", "", "", "", "", "", "", "", "", "" }
else
wordFigure = { "", "", "", "", "", "", "", "", "", "" }
end
if string.len(num) > 4 or tonumber(num) == 0 then return wordFigure[1] end
local lens = string.len(num)
for i = 1, lens do
local n = wordFigure[tonumber(string.sub(num, -i, -i)) + 1]
if n ~= wordFigure[1] then result = n .. digitUnit[i] .. result else result = n .. result end
end
result = result:gsub(wordFigure[1] .. wordFigure[1], wordFigure[1])
result = result:gsub(wordFigure[1] .. "$", "")
result = result:gsub(wordFigure[1] .. "$", "")
return result
end
-- 数值转换为中文
local function number2cnChar(num, flag, digitUnit, wordFigure) --flag=0中文小写反之为大写
local result = ""
if tonumber(flag) < 1 then
digitUnit = digitUnit or { [1] = "", [2] = "亿" }
wordFigure = wordFigure or { [1] = "", [2] = "", [3] = "", [4] = "" }
else
digitUnit = digitUnit or { [1] = "", [2] = "亿" }
wordFigure = wordFigure or { [1] = "", [2] = "", [3] = "", [4] = "" }
end
local lens = string.len(num)
if lens < 5 then
result = formatNum(num, flag)
elseif lens < 9 then
result = formatNum(string.sub(num, 1, -5), flag) .. digitUnit[1] .. formatNum(string.sub(num, -4, -1), flag)
elseif lens < 13 then
result = formatNum(string.sub(num, 1, -9), flag) ..
digitUnit[2] ..
formatNum(string.sub(num, -8, -5), flag) .. digitUnit[1] .. formatNum(string.sub(num, -4, -1), flag)
else
result = ""
end
result = result:gsub("^" .. wordFigure[1], "")
result = result:gsub(wordFigure[1] .. digitUnit[1], "")
result = result:gsub(wordFigure[1] .. digitUnit[2], "")
result = result:gsub(wordFigure[1] .. wordFigure[1], wordFigure[1])
result = result:gsub(wordFigure[1] .. "$", "")
if lens > 4 then result = result:gsub("^" .. wordFigure[2] .. wordFigure[3], wordFigure[3]) end
if result ~= "" then result = result .. wordFigure[4] else result = "数值超限!" end
return result
end
local function number2zh(num, t)
local result, wordFigure
result = ""
if tonumber(t) < 1 then
wordFigure = { "", "", "", "", "", "", "", "", "", "" }
else
wordFigure = { "", "", "", "", "", "", "", "", "", "" }
end
if tostring(num) == nil then return "" end
for pos = 1, string.len(num) do
result = result .. wordFigure[tonumber(string.sub(num, pos, pos) + 1)]
end
result = result:gsub(wordFigure[1] .. wordFigure[1], wordFigure[1])
return result:gsub(wordFigure[1] .. wordFigure[1], wordFigure[1])
end
local function number_translatorFunc(num)
local numberPart = splitNumPart(num)
local result = {}
if numberPart.dot ~= "" then
table.insert(result,
{ number2cnChar(numberPart.int, 0, { "", "亿" }, { "", "", "", "" }) .. number2zh(numberPart.dec, 0),
"〔数字小写〕" })
table.insert(result,
{ number2cnChar(numberPart.int, 1, { "", "" }, { "", "", "", "" }) .. number2zh(numberPart.dec, 1),
"〔数字大写〕" })
else
table.insert(result, { number2cnChar(numberPart.int, 0, { "", "亿" }, { "", "", "", "" }), "〔数字小写〕" })
table.insert(result, { number2cnChar(numberPart.int, 1, { "", "" }, { "", "", "", "" }), "〔数字大写〕" })
end
table.insert(result,
{ number2cnChar(numberPart.int, 0) ..
decimal_func(numberPart.dec, { [1] = "", [2] = "", [3] = "", [4] = "" },
{ [0] = "", "", "", "", "", "", "", "", "", "" }), "〔金额小写〕" })
local number2cnCharInt = number2cnChar(numberPart.int, 1)
local number2cnCharDec = decimal_func(numberPart.dec, { [1] = "", [2] = "", [3] = "", [4] = "" }, { [0] = "", "", "", "", "", "", "", "", "", "" })
if string.len(numberPart.int) > 4 and number2cnCharInt:find('^拾[壹贰叁肆伍陆柒捌玖]?') and number2cnCharInt:find('[万亿]') then -- 简易地规避 utf8 匹配问题
local number2cnCharInt_var = number2cnCharInt:gsub('^拾', '壹拾')
table.insert(result, { number2cnCharInt_var .. number2cnCharDec , "〔金额大写〕"})
-- 会计书写要求 https://github.com/iDvel/rime-ice/issues/989
else
table.insert(result, { number2cnCharInt .. number2cnCharDec , "〔金额大写〕"})
end
return result
end
local function number_translator(input, seg, env)
-- 获取 recognizer/patterns/number 的第 2 个字符作为触发前缀
env.number_keyword = env.number_keyword or
env.engine.schema.config:get_string('recognizer/patterns/number'):sub(2, 2)
local str, num, numberPart
if env.number_keyword ~= '' and input:sub(1, 1) == env.number_keyword then
str = string.gsub(input, "^(%a+)", "")
numberPart = number_translatorFunc(str)
if str and #str > 0 and #numberPart > 0 then
for i = 1, #numberPart do
yield(Candidate(input, seg.start, seg._end, numberPart[i][1], numberPart[i][2]))
end
end
end
end
-- print(#number_translatorFunc(3355.433))
return number_translator

238
lua/pin_cand_filter.lua Normal file
View File

@ -0,0 +1,238 @@
-- 置顶候选项
--[[
(preedit)
cand.preedit
cand.preedit translator/preedit_format
preedit_format v ü ü
'shuang pin' 'ul pb'
<Tab>1<Space>2
YAML pin_cand_filter: [l , 'de 的', "ni hao 你好"]
- 'le 了' # le
- 'ta 他 她 它' #
- 'l 了 啦' # l
- 'l 了 > 啦' # >
- 'ta 啊' # custom_phrase
- 'hao 好 👌' # emoji
###
- s m
- wsm
###
- nihao
nihao nihao nih
- ni hao
nihao nih nih
- bu hao chi
zh ch sh zh ch sh
buhaochi buhaoc buhaoch
###
- da zhuang
- da zhong
'da z' 'da zh'
- da z
使
daz dazh
--]]
local function find_index(list, str)
for i, v in ipairs(list) do
if v == str then
return i
end
end
return 0
end
local M = {}
function M.init(env)
env.name_space = env.name_space:gsub("^*", "")
if env.pin_cands ~= nil then return end
local list = env.engine.schema.config:get_list(env.name_space)
if not list or list.size == 0 then return end
-- 如果定义了 'da zhuan' 或 'da zhong' ,会自动生成 'daz' 和 'dazh' 的键。
-- 然而,如果明确定义了 'da z' 或 'da zh',则会优先使用这些明确自定义的简码,用 set 来做判断。
local set = {}
for i = 0, list.size - 1 do
local preedit, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)")
if #preedit > 0 and #texts > 0 then
set[preedit:gsub(" ", "")] = true
end
end
-- 遍历要置顶的候选项列表,将其转换为 table 存储到 env.pin_cands
-- 'l 了 啦' → env.pin_cands["l"] = {"了", "啦"}
-- 'ta 他 她 它' → env.pin_cands["ta"] = {"他", "她", "它"}
--
-- 无空格的键,如 `nihao 你好` → env.pin_cands["nihao"] = {"你好"}
--
-- 包含空格的的键,同时生成简码的拼写(最后一个空格后的首字母),如:
-- 'ni hao 你好 拟好' → env.pin_cands["nihao"] = {"你好", "拟好"}
-- → env.pin_cands["nih"] = {"你好", "拟好"}
--
-- 如果最后一个空格后以 zh ch sh 开头,额外再生成 zh, ch, sh 的拼写,如:
-- 'zhi chi 支持' → env.pin_cands["zhichi"] = {"支持"}
-- → env.pin_cands["zhic"] = {"支持"}
-- → env.pin_cands["zhich"] = {"支持"}
--
-- 如果同时定义了 'da zhuan 大专' 'da zhong 大众',会生成:
-- env.pin_cands["dazhuan"] = {"大专"}
-- env.pin_cands["dazhong"] = {"大众"}
-- env.pin_cands["daz"] = {"大专", "大众"} -- 先写的排在前面
-- env.pin_cands["dazh"] = {"大专", "大众"} -- 先写的排在前面
--
-- 如果同时定义了 'da zhuan 大专' 'da zhong 大众' 且明确定义了简码形式 'da z 打字',会生成:
-- env.pin_cands["dazhuan"] = {"大专"}
-- env.pin_cands["dazhong"] = {"大众"}
-- env.pin_cands["daz"] = {"打字"} -- 明确定义的优先级更高
-- env.pin_cands["dazh"] = {"大专", "大众"} -- 没明确定义的,仍然按上面的方式,先写的排在前面
env.pin_cands = {}
for i = 0, list.size - 1 do
local preedit, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)")
if #preedit > 0 and #texts > 0 then
-- 按照 " > " 或 " " 分割词汇
local delimiter = "\0"
if texts:find(" > ") then
texts = texts:gsub(" > ", delimiter)
else
texts = texts:gsub(" ", delimiter)
end
-- 按照键生成完整的拼写
local preedit_no_spaces = preedit:gsub(" ", "")
env.pin_cands[preedit_no_spaces] = {}
for text in texts:gmatch("[^" .. delimiter .. "]+") do
table.insert(env.pin_cands[preedit_no_spaces], text)
end
-- 额外处理包含空格的 preedit增加最后一个拼音的首字母和 zh, ch, sh 的简码
if preedit:find(" ") then
local preceding_part, last_part = preedit:match("^(.+)%s(%S+)$")
local p1, p2 = "", ""
-- p1 生成最后一个拼音的首字母简码拼写(最后一个空格后的首字母),如 ni hao 生成 nih
p1 = preceding_part:gsub(" ", "") .. last_part:sub(1, 1)
-- p2 生成最后一个拼音的 zh, ch, sh 的简码拼写(最后一个空格后以 zh ch sh 开头),如 zhi chi 生成 zhich
if last_part:match("^[zcs]h") then
p2 = preceding_part:gsub(" ", "") .. last_part:sub(1, 2)
end
for _, p in ipairs({ p1, p2 }) do
-- 只在没有明确定义此简码时才生成,已有的追加,没有的直接赋值
if p ~= "" and not set[p] then
if env.pin_cands[p] ~= nil then
for text in texts:gmatch("[^" .. delimiter .. "]+") do
table.insert(env.pin_cands[p], text)
end
else
env.pin_cands[p] = env.pin_cands[preedit_no_spaces]
end
end
end
end
end
end
end
function M.func(input, env)
-- 当前输入框的 preedit未经过方案 translator/preedit_format 转换
-- 输入 nihaoshij 则为 nihaoshij选择了「你好」后变成 你好shij
local full_preedit = env.engine.context:get_preedit().text
-- 非汉字部分的 preedit如 shij
local letter_only_preedit = string.gsub(full_preedit, "[^a-zA-Z]", "")
if env.pin_cands == nil or next(env.pin_cands) == nil or #letter_only_preedit == 0 then
for cand in input:iter() do yield(cand) end
return
end
--[[
full_preedit
hao ...
hao ...
haobu ... ...
haobu ... ...
letter_only_preedit
hao ...
haobu ... ...
cand.preedit
letter_only_preedit cand.preedit
--------------------------------------------------
dian dian ... di
ha ha
hao hao ... ha
haobu hao bu ... hao ... ha
--]]
-- 用 pined 和 others 调整顺序,找齐后先遍历 pined 再遍历 others
local pined = {} -- 提升的候选项
local others = {} -- 其余候选项
local pined_count = 0
for cand in input:iter() do
local preedit = cand.preedit:gsub(" ", "") -- 对比去掉空格的 cand.preedit
local texts = env.pin_cands[preedit]
if texts == nil then
-- 当前候选项无须排序,直接 yield 并结束循环
-- 当前候选项正在排序,例如要置顶某个 `hao`,但从 `hao` 查到 `ha` 了还没找齐,不能直接 yield要先输出 pined 和 others 中的 `hao`
if letter_only_preedit == preedit then
yield(cand)
else
table.insert(others, cand)
end
break
else
-- 给 pined 几个空字符串占位元素,后面直接 pined[idx] = cand 确保 pined 与 texts 顺序一致
if #pined < #texts then
for _ = 1, #texts do
table.insert(pined, "")
end
end
-- 要置顶的放到 pined 中,其余的放到 others
local idx = find_index(texts, cand.text)
if idx ~= 0 then
pined[idx] = cand
pined_count = pined_count + 1
else
table.insert(others, cand)
end
-- 找齐了或查询超过 100 个就不找了(如果要提升的候选项不在前 100 则不会被提升)
if pined_count == #texts or #others > 100 then
break
end
end
end
-- yield pined others 及后续的候选项
for _, cand in ipairs(pined) do
if cand ~= "" then
yield(cand)
end
end
for _, cand in ipairs(others) do
yield(cand)
end
for cand in input:iter() do
yield(cand)
end
end
return M

View File

@ -0,0 +1,114 @@
-- 降低部分英语单词在候选项的位置,可在方案中配置要降低的模式和单词
-- https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题
-- 感谢大佬 @[Shewer Lu](https://github.com/shewer) 指点
-- Mintimate 修改:
-- 1. 在不设置 mode 情况下,调整为默认全降模式(原本为 none 模式);
-- 2. all 会合并默认全降内容和自定义内容。
local M = {}
function M.init(env)
local config = env.engine.schema.config
env.name_space = env.name_space:gsub("^*", "")
-- 要降低到的位置
M.idx = config:get_int(env.name_space .. "/idx")
-- 所有 3~4 位长度、前 2~3 位是完整拼音、最后一位是声母的单词
local all = { "aid", "aim", "air", "and", "ann", "ant", "any", "bad", "bag", "bail", "bait", "bam", "ban", "band",
"bang", "bank", "bans", "bar", "bat", "bay", "bend", "benq", "bent", "benz", "bib", "bid", "bien", "big", "bin",
"bind", "bit", "biz", "bob", "boc", "bop", "bos", "bot", "bow", "box", "boy", "bud", "buf", "bug", "bus",
"but", "buy", "cab", "cad", "cain", "cam", "can", "cans", "cant", "cap", "car", "cat", "cef", "cen",
"cent", "chad", "chan", "chap", "char", "chat", "chef", "chen", "cher", "chew", "chic", "chin", "chip", "chit",
"coup", "cum", "cunt", "cup", "cur", "cut", "dab", "dad", "dag", "dal", "dam", "day", "def", "del", "den",
"dent", "deny", "der", "dew", "dial", "did", "died", "dies", "diet", "dig", "dim", "din", "dip", "dir", "dis",
"dit", "diy", "doug", "dub", "dug", "dun", "dunn", "don", "end", "err", "fab", "fan", "fans", "faq", "far", "fat",
"fax", "fob", "fog", "for", "foul", "four", "fox", "fun", "fur", "gag", "gail", "gain", "gal", "gam", "gan",
"gang", "gank", "gaol", "gap", "gas", "gay", "ged", "gel", "gem", "gen", "ger", "get", "guam", "guid", "gum",
"gun", "guns", "gus", "gut", "guy", "had", "hail", "hair", "ham", "han", "hand", "hang", "hank", "hans", "has",
"hat", "hay", "heil", "heir", "hem", "hen", "hep", "her", "hex", "hey", "hour", "hub", "hud", "hug", "huh",
"hum", "hung", "hunk", "hunt", "hut", "jim", "jug", "junk", "kat", "kent", "key", "lab", "lad", "lag", "laid",
"lam", "lan", "land", "lang", "laos", "lap", "lat", "law", "lax", "lay", "led", "leg", "len", "let", "lex",
"liam", "liar", "lib", "lid", "lied", "lien", "lies", "ling", "link", "linn", "lip", "lit", "liz", "lob", "log",
"lol", "lot", "loud", "low", "lug", "lund", "lung", "lux", "mac", "mad", "mag", "maid", "mail", "main", "man",
"mann", "many", "map", "mar", "mat", "max", "may", "med", "mel", "men", "mend", "mens", "ment", "met", "mic",
"mid", "mil", "min", "mind", "ming", "mins", "mint", "mit", "mix", "mob", "moc", "mod", "mom", "mop", "mos",
"mot", "mud", "mug", "mum", "nad", "nail", "nan", "nap", "nas", "nat", "nay", "neil", "net", "new", "nib", "nil",
"nip", "noun", "nous", "nun", "nut", "nvm", "our", "out", "pac", "pad", "paid", "pail", "pain", "pair", "pak", "pal",
"pam", "pan", "pans", "pant", "pap", "par", "pat", "paw", "pax", "pay", "pens", "pic", "pier", "pies", "pig",
"pin", "ping", "pink", "pins", "pint", "pit", "pix", "pod", "pop", "por", "pos", "pot", "pour", "pow", "pub",
"put", "rand", "rang", "rank", "rant", "red", "rent", "rep", "res", "ret", "rex", "rib", "rid", "rig", "rim",
"rip", "rub", "rug", "ruin", "rum", "run", "runc", "runs", "sac", "sad", "said", "sail", "sal", "sam", "san",
"sand", "sang", "sans", "sap", "sat", "saw", "sax", "say", "sec", "send", "sent", "set", "sew", "sex", "sham",
"shaw", "shed", "shin", "ship", "shit", "shut", "sig", "sim", "sin", "sip", "sir", "sis", "sit", "six", "soul",
"soup", "sour", "sub", "suit", "sum", "sun", "sung", "suns", "sup", "sur", "sus", "tab", "tad", "tag", "tail",
"taj", "tan", "tang", "tank", "tap", "tar", "tax", "tec", "ted", "tel", "ten", "ter", "tex", "tic", "tied",
"tier", "ties", "tim", "tin", "tip", "tit", "tour", "tout", "tum", "wag", "wait", "wail", "wan", "wand", "womens",
"want", "wap", "war", "was", "wax", "way", "weir", "went", "won", "wow", "yan", "yang", "yen", "yep", "yes",
"yet", "yin", "your", "yum", "zen", "zip",
-- 后面是 zh ch sh 的
"bach", "bash", "bench", "bush", "cash", "couch", "dash", "dish", "hash", "hush", "lash", "loch", "lunch",
"lush", "mesh", "much", "nash", "pinch", "pouch", "push", "ranch", "rich", "rush", "such", "tech", "touch",
"wash", "zach",
-- 其他
"eg",
"my", "mt", "dj", "as", "js", "cs", "ak", "ps", "cd", "cn", "hk", "bt", "pk", "ml"
}
M.all = {}
for _, v in ipairs(all) do
M.all[v] = true
end
-- 自定义
M.words = {}
local list = config:get_list(env.name_space .. "/words")
local listSize = list and list.size or 0
for i = 0, listSize - 1 do
local word = list:get_value_at(i).value
M.words[word] = true
end
-- 模式
local mode = config:get_string(env.name_space .. "/mode")
if mode == "custom" then
M.map = M.words
elseif mode == "none" then
M.map = {}
else -- 默认 mode 为 all 且合并 M.all 和 words
for key in pairs(M.words) do
M.all[key] = true
end
M.map = M.all
end
end
function M.func(input, env)
-- filter start
local code = env.engine.context.input
if M.map[code] then
local pending_cands = {}
local index = 0
for cand in input:iter() do
index = index + 1
-- 找到要降低的英文词,加入 pending_cands
if cand.preedit:find(" ") or not cand.text:match("[a-zA-Z]") or cand.type == "user_table" then
yield(cand)
else
table.insert(pending_cands, cand)
end
if index >= M.idx + #pending_cands - 1 then
for _, cand in ipairs(pending_cands) do
yield(cand)
end
break
end
end
end
-- yield other
for cand in input:iter() do
yield(cand)
end
end
return M

311
lua/search.lua Normal file
View File

@ -0,0 +1,311 @@
-- 辅码https://github.com/mirtlecn/rime-radical-pinyin/blob/master/search.lua.md
--
-- Copyright (C) [Mirtle](https://github.com/mirtlecn)
-- License: CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)
-- 使用说明:<https://github.com/mirtlecn/rime-radical-pinyin/blob/master/search.lua.md>
-- 处理 lua 中的特殊字符用于匹配
local function alt_lua_punc( s )
if s then
return s:gsub( '([%.%+%-%*%?%[%]%^%$%(%)%%])', '%%%1' )
else
return ''
end
end
-- 获取指定字符在文本中的位置
local function get_pos( text, char )
local pos = {}
if text:find( char ) then
local tmp = text
for i = 1, utf8.len( tmp ) do
local first_char = tmp:sub( 1, utf8.offset( tmp, 2 ) - 1 )
if first_char == char then pos[i] = true end
tmp = tmp:gsub( '^' .. first_char, '' )
i = i + 1
end
end
return pos
end
-- 此函数用于手动写入用户词库,目前仅对双拼有效
local function update_dict_entry( s, code, mem, proj )
if #s == 0 or utf8.len( s ) == #s or (#code % 2 ~= 0) then
log.info( '[search.lua]: Ignored' .. s )
return 0
end
local e = DictEntry()
s = s:gsub( '^%s+', '' ):gsub( '%s+$', '' )
e.text = s
local pos = {}
if s:find( '·' ) and (utf8.len( s ) > 1) then pos = get_pos( s, '·' ) end
local custom_code = {}
local loop = 1
for i = 1, #code, 2 do
local code_convert = code:sub( i, i + 1 )
local p = proj:apply( code_convert, true )
if p and #p > 0 then code_convert = p end
if code_convert == 'dian' and pos[loop] then
-- Ignored
else
table.insert( custom_code, code_convert )
end
loop = loop + 1
end
e.custom_code = table.concat( custom_code, ' ' ) .. ' '
if mem.start_session then mem:start_session() end -- new on librime 2024.05
mem:update_userdict( e, 1, '' )
if mem.finish_session then mem:finish_session() end -- new on librime 2024.05
end
-- 通过 schema 的方式查询(以辅码查字,然后对比候选,慢,但能够匹配到算法转换过的码)
-- 查询方案中的匹配项,并返回字表
local function dict_init( search_string, mem, search_limit, code_projection )
local dict_table = {}
if code_projection then
-- old librime(<= 2023.06) do not return original string when apply failed
local p = code_projection:apply( search_string, true )
if p and #p > 0 then search_string = p end
end
if mem:dict_lookup( search_string, true, search_limit ) then
for entry in mem:iter_dict() do dict_table[entry.text] = true end
end
return dict_table
end
-- 匹配候选
local function dict_match( table, text )
if table[text] == true then return true end
return false
end
-- 通过 reverse db 查询(以字查码,然后比对辅码是否相同,快,但只能匹配未经算法转换的码)
local function reverse_lookup( code_projection, db_table, wildcard, text, s, global_match )
if wildcard then s = s:gsub( wildcard, '.*' ) end
if code_projection then
-- old librime do not return original string when apply failed
local p = code_projection:apply( s, true )
if p and #p > 0 then s = p end
end
-- log.error(s)
for _, db in ipairs( db_table ) do
local code = db:lookup( text )
if code and #code > 0 then
for part in code:gmatch( '%S+' ) do
if global_match then
if part:find( s ) then return true end
else
if part:find( '^' .. s ) then return true end -- an error pointing at this line. do not know why. so I'll keep an eye.
end
end
end
end
return false
end
-- 处理单字优先
local function handle_long_cand( if_single_char_first, cand, long_word_cands )
if if_single_char_first and utf8.len( cand.text ) > 1 then
table.insert( long_word_cands, cand )
else
yield( cand )
end
end
local f = {}
function f.init( env )
local config = env.engine.schema.config
local ns = 'search'
env.if_schema_lookup = false
env.if_reverse_lookup = false
-- 配置:仅限 script_translator 引擎
-- local engine = config:get_list( 'engine/translators' )
-- local engine_table = {}
-- for i = 0, engine.size - 1 do engine_table[engine:get_value_at( i ).value] = true end
-- if not engine_table['script_translator'] then
-- log.error( '[search.lua]: script_translator not found in engine/translators, search.lua will not work' )
-- return
-- end
-- 配置:辅码查字方法
-- --
-- 当在 engine 出直接指定了 namespace 则使用该 namespace 进行 schema 匹配
-- 当在 search_in_cand 节点下指定了 schema 和 db 则进行相应匹配
-- 当该节点下 schema 为 0 或者 false或者不存在时不进行相应匹配
-- --
local schema_name = config:get_string( ns .. '/schema' )
if not env.name_space:find( '^%*' ) then schema_name = env.name_space end
if not schema_name or schema_name == 'false' or schema_name == '0' or #schema_name == 0 then goto checkdb end
env.search = Memory( env.engine, Schema( schema_name ) )
if schema_name and env.search then
env.if_schema_lookup = true
env.search_limit = config:get_int( ns .. '/schema_search_limit' ) or 1000
end
::checkdb::
local db = config:get_list( ns .. '/db' )
if db and db.size > 0 then
env.wildcard = alt_lua_punc( config:get_string( ns .. '/wildcard' ) ) or '*'
env.db_table = {}
for i = 0, db.size - 1 do table.insert( env.db_table, ReverseLookup( db:get_value_at( i ).value ) ) end
env.if_reverse_lookup = true
end
if not env.if_reverse_lookup and not env.if_schema_lookup then return end
-- 配置:辅码转换规则
-- --
-- 例如:- xlit/ABCD/1234/ 就可以用 ABCD 来输入 1234地球拼音音调
local fuma_format = config:get_list( ns .. '/fuma_format' )
if fuma_format and fuma_format.size > 0 then
env.code_projection = Projection()
env.code_projection:load( fuma_format )
else
env.code_projection = nil
end
-- 配置:是否显示不符合辅码的候选
env.show_other_cands = config:get_bool( ns .. '/show_other_cands' )
-- 配置:辅码引导符号,默认为反引号 `
local search_key = config:get_string( 'key_binder/search' ) or config:get_string( ns .. '/key' ) or '`'
env.search_key_alt = alt_lua_punc( search_key )
local code_pattern = config:get_string( ns .. '/code_pattern' ) or '[a-z;]'
-- 配置seg tag
local tag = config:get_list( ns .. '/tags' )
if tag and tag.size > 0 then
env.tag = {}
for i = 0, tag.size - 1 do table.insert( env.tag, tag:get_value_at( i ).value ) end
else
env.tag = { 'abc' }
end
-- 配置:手动写入用户词库
local rules = config:get_list( ns .. '/input2code_format' )
if rules and rules.size > 0 then
env.projection = Projection()
env.projection:load( rules )
env.mem = Memory( env.engine, env.engine.schema )
end
-- 推入输入历史,并手动(如果设定了按键到编码的转换规则)写入用户词库
env.commit_notifier = env.engine.context.commit_notifier:connect(
function( ctx )
if env.have_select_commit and env.commit_code then
local commit_text = ctx:get_commit_text()
if env.mem then
update_dict_entry( commit_text, env.commit_code, env.mem, env.projection )
end
ctx.commit_history:push( 'search.lua', commit_text )
env.have_select_commit = false
else
return
end
end
)
-- 接管选词逻辑,是词组则始终保留引导码,否则直接上屏
env.notifier = env.engine.context.select_notifier:connect(
function( ctx )
local input = ctx.input
local code = input:match( '^(.-)' .. env.search_key_alt )
if (not code or #code == 0) then return end
local preedit = ctx:get_preedit()
local no_search_string = ctx.input:match( '^(.-)' .. env.search_key_alt )
local edit = preedit.text:match( '^(.-)' .. env.search_key_alt )
env.have_select_commit = true
if edit and edit:match( code_pattern ) then
ctx.input = no_search_string .. search_key
else
ctx.input = no_search_string
env.commit_code = no_search_string
ctx:commit()
end
end
)
end
function f.func( input, env )
-- 当且仅当当输入码中含有辅码引导符号,并有有辅码存在,进入匹配逻辑
local code, fuma = env.engine.context.input:match( '^(.-)' .. env.search_key_alt .. '(.+)$' )
if (not code or #code == 0) or (not fuma or #fuma == 0) or (not env.if_reverse_lookup and not env.if_schema_lookup) then
for cand in input:iter() do yield( cand ) end
return
end
local if_single_char_first = env.engine.context:get_option( 'search_single_char' )
local dict_table
local fuma_2
local other_cand = {}
local long_word_cands = {}
if env.if_schema_lookup then dict_table = dict_init( fuma, env.search, env.search_limit, env.code_projection ) end
if fuma:find( env.search_key_alt ) then fuma, fuma_2 = fuma:match( '^(.-)' .. env.search_key_alt .. '(.*)$' ) end
for cand in input:iter() do
if cand.type == 'sentence' then goto skip end
local cand_text = cand.text
local text = cand_text
local text_2 = nil
-- 当候选多于一个字,则取第一个匹配
if utf8.len( cand_text ) and utf8.len( cand_text ) > 1 then
text = cand_text:sub( 1, utf8.offset( cand_text, 2 ) - 1 )
local cand_text_2 = cand_text:gsub( '^' .. text, '' )
text_2 = cand_text_2:sub( 1, utf8.offset( cand_text_2, 2 ) - 1 )
end
if fuma_2 and #fuma_2 > 0 and env.if_reverse_lookup and not env.if_schema_lookup then
if -- 第一个辅码匹配第一个字,第二个辅码正则匹配第一个字**或者**匹配第二个字
reverse_lookup( env.code_projection, env.db_table, env.wildcard, text, fuma ) and
((text_2 and reverse_lookup( env.code_projection, env.db_table, env.wildcard, text_2, fuma_2 )) or
reverse_lookup( env.code_projection, env.db_table, env.wildcard, text, fuma_2, true )) then
handle_long_cand( if_single_char_first, cand, long_word_cands )
else
table.insert( other_cand, cand )
end
else
if -- 用辅码匹配第一个字
(env.if_reverse_lookup and reverse_lookup( env.code_projection, env.db_table, env.wildcard, text, fuma )) or
(env.if_schema_lookup and dict_match( dict_table, text )) then
handle_long_cand( if_single_char_first, cand, long_word_cands )
else
table.insert( other_cand, cand )
end
end
::skip::
end
-- 上屏其余的候选
for i, cand in ipairs( long_word_cands ) do yield( cand ) end
if env.show_other_cands then for i, cand in ipairs( other_cand ) do yield( cand ) end end
end
function f.tags_match( seg, env )
for i, v in ipairs( env.tag ) do if seg.tags[v] then return true end end
return false
end
function f.fini( env )
if env.if_reverse_lookup or env.if_schema_lookup then
env.notifier:disconnect()
env.commit_notifier:disconnect()
if env.mem and env.mem.disconnect then env.mem:disconnect() end
if env.search and env.search.disconnect then env.search:disconnect() end
if env.mem or env.search or env.db_table then
env.db_table = nil
env.mem = nil
env.search = nil
collectgarbage( 'collect' )
end
end
end
return f

50
lua/select_character.lua Normal file
View File

@ -0,0 +1,50 @@
-- 以词定字
-- 原脚本 https://github.com/BlindingDark/rime-lua-select-character
-- 可在 default.yaml → key_binder 下配置快捷键,默认为左右中括号 [ ]
-- 20230526195910 不再错误地获取commit_text而是直接获取get_selected_candidate().text
-- 20240128141207 重写:将读取设置移动到 init 方法中;简化中文取字方法;预先判断候选存在与否,无候选取 input
-- 20240508111725 当候选字数为 1 时,快捷键使该字上屏
local select = {}
function select.init(env)
local config = env.engine.schema.config
env.first_key = config:get_string('key_binder/select_first_character')
env.last_key = config:get_string('key_binder/select_last_character')
end
function select.func(key, env)
local engine = env.engine
local context = env.engine.context
if
not key:release()
and (context:is_composing() or context:has_menu())
and (env.first_key or env.last_key)
then
local text = context.input
if context:get_selected_candidate() then
text = context:get_selected_candidate().text
end
if utf8.len(text) > 1 then
if (key:repr() == env.first_key) then
engine:commit_text(text:sub(1, utf8.offset(text, 2) - 1))
context:clear()
return 1
elseif (key:repr() == env.last_key) then
engine:commit_text(text:sub(utf8.offset(text, -1)))
context:clear()
return 1
end
else
if key:repr() == env.first_key or key:repr() == env.last_key then
engine:commit_text(text)
context:clear()
return 1
end
end
end
return 2
end
return select

18
lua/t9_preedit.lua Normal file
View File

@ -0,0 +1,18 @@
-- 九宫格将输入框的数字转为对应的拼音或英文iRime 用Hamster 不需要。
-- 在 engine/filters 增加 - lua_filter@t9_preedit
--
-- 九宫格专用iRime 用,仓输入法不用
-- 拼写规则通过 xlit 转写: xlit/abcdefghijklmnopqrstuvwxyz/22233344455566677778889999/
-- 然后通过此 Lua 将输入框的数字转为对应的拼音或英文
local function t9_preedit(input, env)
for cand in input:iter() do
if (string.find(cand.text, "%w+") ~= nil) then
cand:get_genuine().preedit = cand.text
else
cand:get_genuine().preedit = cand.comment
end
yield(cand)
end
end
return t9_preedit

36
lua/unicode.lua Normal file
View File

@ -0,0 +1,36 @@
-- Unicode
-- 复制自: https://github.com/shewer/librime-lua-script/blob/main/lua/component/unicode.lua
-- 示例:输入 U62fc 得到「拼」
-- 触发前缀默认为 recognizer/patterns/unicode 的第 2 个字符,即 U
-- 2024.02.26: 限定编码最大值
-- 2024.06.01: 部分变量初始化,条件语句调整。
local path = 'recognizer/patterns/unicode'
local function unicode(input, seg, env)
if not seg:has_tag("unicode") or input == '' then return end
-- 获取 recognizer/patterns/unicode 的第 2 个字符作为触发前缀
-- config:get_string(path) 可能取得 nil 造成error
if not env.unicode_keyword then
local pattern = env.engine.schema.config:get_string(path) or "UU"
env.unicode_keyword = pattern:sub(2,2)
end
local ucodestr = input:match(env.unicode_keyword .. "(%x+)")
if ucodestr and #ucodestr > 1 then
local code = tonumber(ucodestr, 16)
if code > 0x10FFFF then
yield(Candidate("unicode", seg.start, seg._end, "数值超限!", ""))
return
end
local text = utf8.char(code)
yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x", code)))
if code < 0x10000 then
for i = 0, 15 do
local text = utf8.char(code * 16 + i)
yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x~%x", code, i)))
end
end
end
end
return unicode

32
lua/v_filter.lua Normal file
View File

@ -0,0 +1,32 @@
-- v 模式,单个字符优先(全拼)
-- 因为设置了英文翻译器的 initial_quality 大于 1导致输入「va」时候选项是「van vain …… ā á ǎ à」
-- 把候选项应改为「ā á ǎ à …… van vain」让单个字符的排在前面
-- 感谢改进 @[t123yh](https://github.com/t123yh) @[Shewer Lu](https://github.com/shewer)
local function v_filter(input, env)
local code = env.engine.context.input -- 当前编码
env.v_spec_arr = env.v_spec_arr or Set({ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "Vs." })
-- 仅当当前输入以 v 开头,并且编码长度为 2才进行处理
if (string.len(code) == 2 and string.find(code, "^v")) then
local l = {}
for cand in input:iter() do
-- 特殊情况处理
if (env.v_spec_arr[cand.text]) then
yield(cand)
-- 候选项为单个字符的,提到前面来。
elseif (utf8.len(cand.text) == 1) then
yield(cand)
else
table.insert(l, cand)
end
end
for _, cand in ipairs(l) do
yield(cand)
end
else
for cand in input:iter() do
yield(cand)
end
end
end
return v_filter

13
melt_eng.dict.yaml Normal file
View File

@ -0,0 +1,13 @@
# Rime dictionary
# encoding: utf-8
#
# 挂载英文输入方案的词库
#
---
name: melt_eng
version: "2023-05-09"
import_tables:
- en_dicts/en_ext # 补充(里面有些许带权重的,且和 en 重复,需要把 en_ext 放在上面)
- en_dicts/en # 英文主词库
...

314
melt_eng.schema.yaml Normal file
View File

@ -0,0 +1,314 @@
# Rime schema
# vim: set sw=2 sts=2 et:
# encoding: utf-8
#
# 复制自 https://github.com/tumuyan/rime-melt修改了拼写派生
# 感谢 @[Mirtle](https://github.com/mirtlecn) 贡献的极其好用的拼写派生
# 全拼和各个双拼有部分拼写规则不通用,需要修改 speller/algebra 下的 __include: algebra_rime_ice 为你所使用的方案
schema:
schema_id: melt_eng
name: Easy English Nano
version: "2023-10-17"
author:
- Patrick <ipatrickmac@gmail.com>
- tumuyan <tumuyan@21cn.com>
description: Easy English Nano只包含少量常用词汇方便中英文混合输入度方案调用。
switches:
- name: ascii_mode
reset: 0
states: [ASCII-OFF, ASCII-ON]
engine:
processors:
- ascii_composer
- key_binder
- speller
- recognizer
#關閉標點符號轉換對應symbols.yaml - punctuator
- selector
- navigator
- express_editor
segmentors:
- matcher
- ascii_segmentor
- abc_segmentor
- punct_segmentor
- fallback_segmentor
translators:
- table_translator
- punct_translator
filters:
- uniquifier
speller:
alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
delimiter: " '"
algebra:
# 根据当前所用拼音方案选择 __include 的值
# 如果要在补丁中melt_eng.custom.yaml修改 algebra 以适配双拼,请参考 [常见问题](https://github.com/iDvel/rime-ice/issues/133)
__include: algebra_rime_ice # 全拼
# __include: algebra_double_pinyin # 自然码双拼
# __include: algebra_flypy # 小鹤双拼
# __include: algebra_mspy # 微软双拼
# __include: algebra_sogou # 搜狗双拼
# __include: algebra_abc # 智能ABC双拼
# __include: algebra_ziguang # 紫光双拼
translator:
dictionary: melt_eng
spelling_hints: 9
key_binder:
import_preset: default
punctuator:
import_preset: default
recognizer:
import_preset: default
# 通用的派生规则
algebra_common:
# 数字派生
- derive/1([4-7|9])/$1teen/
- derive/11/eleven/
- derive/12/twelve/
- derive/13/thirteen/
- derive/15/fifteen/
- derive/18/eighteen/
- derive/0/o/ # 如 1000 -> oneOOO
- derive/0/O/
- derive/0/zero/
- derive/1/one/
- derive/10/ten/
- derive/2/to/
- derive/2/two/
- derive/3/three/
- derive/4/for/
- derive/4/four/
- derive/5/five/
- derive/6/six/
- derive/7/seven/
- derive/8/eight/
- derive/9/nine/
# 符号派生
- derive/\+/plus/
- derive/\./dot/
- derive/@/at/
- derive/-/hyphen/
- derive/#/hash/
- derive/#/number/
- derive/#/sharp/
- derive/♯/sharp/
- derive / slash
- derive/&/and/
- derive/%/percent/
# 派生无单个特殊字符的拼写
- derive/[.]//
- derive/[+]//
- derive/[@]//
- derive/[-]//
- derive/[_]//
# 派生无任何非字母数字字符的拼写
- derive/[^a-zA-Z0-9]//
# 禁用非英文、数字开头的编码
- erase/^[^a-zA-Z0-9].+$/
# 全小写
- derive/^.+$/\L$0/
# 全大写
- derive/^.+$/\U$0/
# 首字母大写
- derive/^./\U$0/
# 前 2~10 个字母大写
- derive/^([a-z]{2})/\U$1/
- derive/^([a-z]{3})/\U$1/
- derive/^([a-z]{4})/\U$1/
- derive/^([a-z]{5})/\U$1/
- derive/^([a-z]{6})/\U$1/
- derive/^([a-z]{7})/\U$1/
- derive/^([a-z]{8})/\U$1/
- derive/^([a-z]{9})/\U$1/
- derive/^([a-z]{10})/\U$1/
# 全拼
algebra_rime_ice:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/shi$1/
- derive/([1-9])0000(?!0)/$1wan/
- derive/([1-9])000(?!0)/$1qian/
- derive/([1-9])00(?!0)/$1bai/
- derive/([2-9])0(?!0)/$1shi/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1shi$2/
- derive/\./dian/
- derive/10/shi/
- derive/0/ling/
- derive/1/yi/
- derive/2/er/
- derive/2/liang/
- derive/3/san/
- derive/4/si/
- derive/5/wu/
- derive/6/liu/
- derive/7/qi/
- derive/8/ba/
- derive/9/jiu/
- derive/\+/jia/
- derive/#/jing/
# 自然码双拼
algebra_double_pinyin:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/ui$1/
- derive/([1-9])0000(?!0)/$1wj/
- derive/([1-9])000(?!0)/$1qm/
- derive/([1-9])00(?!0)/$1bl/
- derive/([2-9])0(?!0)/$1ui/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1ui$2/
- derive/\./dm/
- derive/10/ui/
- derive/0/ly/
- derive/1/yi/
- derive/2/er/
- derive/2/ld/
- derive/3/sj/
- derive/4/si/
- derive/5/wu/
- derive/6/lq/
- derive/7/qi/
- derive/8/ba/
- derive/9/jq/
- derive/\+/jw/
- derive/#/jy/
# 小鹤双拼
algebra_flypy:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/ui$1/
- derive/([1-9])0000(?!0)/$1wj/
- derive/([1-9])000(?!0)/$1qm/
- derive/([1-9])00(?!0)/$1bd/
- derive/([2-9])0(?!0)/$1ui/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1ui$2/
- derive/\./dm/
- derive/10/ui/
- derive/0/lk/
- derive/1/yi/
- derive/2/er/
- derive/2/ll/
- derive/3/sj/
- derive/4/si/
- derive/5/wu/
- derive/6/lq/
- derive/7/qi/
- derive/8/ba/
- derive/9/jq/
- derive/\+/jx/
- derive/#/jk/
# 微软双拼
algebra_mspy:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/ui$1/
- derive/([1-9])0000(?!0)/$1wj/
- derive/([1-9])000(?!0)/$1qm/
- derive/([1-9])00(?!0)/$1bl/
- derive/([2-9])0(?!0)/$1ui/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1ui$2/
- derive/\./dm/
- derive/10/ui/
- derive/0/l;/
- derive/1/yi/
- derive/2/er/
- derive/2/or/
- derive/2/ld/
- derive/3/sj/
- derive/4/si/
- derive/5/wu/
- derive/6/lq/
- derive/7/qi/
- derive/8/ba/
- derive/9/jq/
- derive/\+/jw/
- derive/#/j;/
# 搜狗双拼
algebra_sogou:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/ui$1/
- derive/([1-9])0000(?!0)/$1wj/
- derive/([1-9])000(?!0)/$1qm/
- derive/([1-9])00(?!0)/$1bl/
- derive/([2-9])0(?!0)/$1ui/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1ui$2/
- derive/\./dm/
- derive/10/ui/
- derive/0/l;/
- derive/1/yi/
- derive/2/er/
- derive/2/or/
- derive/2/ld/
- derive/3/sj/
- derive/4/si/
- derive/5/wu/
- derive/6/lq/
- derive/7/qi/
- derive/8/ba/
- derive/9/jq/
- derive/\+/jw/
- derive/#/jy/
# 智能ABC双拼
algebra_abc:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/vi$1/
- derive/([1-9])0000(?!0)/$1wj/
- derive/([1-9])000(?!0)/$1qw/
- derive/([1-9])00(?!0)/$1bl/
- derive/([2-9])0(?!0)/$1vi/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1vi$2/
- derive/\./dw/
- derive/10/vi/
- derive/0/ly/
- derive/1/yi/
- derive/2/er/
- derive/2/or/
- derive/2/lt/
- derive/3/sj/
- derive/4/si/
- derive/5/wu/
- derive/6/lr/
- derive/7/qi/
- derive/8/ba/
- derive/9/jr/
- derive/\+/jd/
- derive/#/jy/
# 紫光双拼
algebra_ziguang:
__include: algebra_common
__append:
- derive/(?<!\d)1([1-9])(?!\d)/ii$1/
- derive/([1-9])0000(?!0)/$1wr/
- derive/([1-9])000(?!0)/$1qf/
- derive/([1-9])00(?!0)/$1bp/
- derive/([2-9])0(?!0)/$1ii/
- derive/(?<!\d)([2-9])([1-9])(?!\d)/$1ii$2/
- derive/\./df/
- derive/10/ii/
- derive/0/l;/
- derive/1/yi/
- derive/2/er/
- derive/2/oj/
- derive/2/lg/
- derive/3/sr/
- derive/4/si/
- derive/5/wu/
- derive/6/lj/
- derive/7/qi/
- derive/8/ba/
- derive/9/jj/
- derive/\+/jx/
- derive/#/j;/

27
opencc/emoji.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "Chinese to Emoji",
"segmentation": {
"type": "mmseg",
"dict": {
"type": "text",
"file": "emoji.txt"
}
},
"conversion_chain": [
{
"dict": {
"type": "group",
"dicts": [
{
"type": "text",
"file": "emoji.txt"
},
{
"type": "text",
"file": "others.txt"
}
]
}
}
]
}

4752
opencc/emoji.txt Normal file

File diff suppressed because it is too large Load Diff

1478
opencc/others.txt Normal file

File diff suppressed because it is too large Load Diff

187
others/CHANGELOG.md Normal file
View File

@ -0,0 +1,187 @@
# 更新日志
除日常更新词库外的一些主要更新 🆕、破坏性变更 ⚠️。
## 2025-03-30
- `editor` 配置示例(定制操作键的行为) [#1131](https://github.com/iDvel/rime-ice/pull/1131)
## 2025-03-30
- 所有中文词汇的连接号暂时统一使用 Hyphen-minus `U+002D` [#1194](https://github.com/iDvel/rime-ice/pull/1194)
## 2025-02-24
- 适配 `punctuator` 新属性 [#1180](https://github.com/iDvel/rime-ice/issues/1180)
---
*2024.12.12 Release*
## 2024-12-06
- ⚠️ Lua 模块引用方式变更
- 删除了 `rime.lua`
- 在方案中引用时添加 `*` 前缀
---
*2024.11.29 Release*
## 2024-11-27
- `calc_translator.lua` 🆕: 计算器插件,按 `cC` 后输入算式获得结果
## 2024-11-21
- ⚙️ 非夹注的 symbol 调用按键从 `vfj` 更改为 `vfjz`
## 2024-11-04
- ⚠️ 同步新版鼠须管配置,注意 `candidate_format` 和 1.0.0 之前的版本不兼容,需要手动改回旧版 `candidate_format: '%c. %@'`
---
*2024-09-25 Release*
## 2024-09-25
- `number_translator.lua`:⚙️ 依会计凭证书写要求,修正万亿的金额大写格式
- radical_pinyin: 🆕 拆字词典更新至 v2包含更多汉字
## 2024-08-29
- `cold_word_drop`:🆕 支持 iOS (#1003)
## 2024-08-18
- ci: 词典处理脚本可在 GitHub CI 中运行,提交信息以 ` [build]` 结尾或者手动执行时触发。
## 2024-07-27
- `number_translator.lua`: 🆕 转换时,将「拾万」和「壹拾万」作为两个独立的候选。
- `en_spacer.lua`:⚠️ 现在不会在中英标点、空字符前添加空格。将在英文后添加空格,修改为在英文前添加空格。
---
*2024.05.21 Release*
## 2024-05-15
- `select_character.lua`: 🆕 当候选字数为 1 时,快捷键使其上屏(为旧版行为);
- `search.lua`
- 重写,使其在 librime 1.85 也能正常工作;
- 开启辅码方案的用户字典时(非默认行为,您也不应该这么做),不再造成用户词典锁定
- `corrector.lua`
- ⚠️ 使用 translator 中的 comment_format 标记拼音串,以适配 librime 1.11
- 🆕 `translator/keep_comments: true`:可以保留拼音注释
## 2024-02-09 ♻️
重构了 `pin_cand_filter.lua` 置顶候选项功能。 [#675](https://github.com/iDvel/rime-ice/issues/675)
- 调整了方案中 `engine/filters` 的排序
- 不再需要在配置中写 emojiemoji 可自动吸附。
## 2024-02-04 ⚠️
⚠️ 中英混输词库由英文方案附属切换到单独的 table_translator ([#662](https://github.com/iDvel/rime-ice/pull/662))
- 词库文件由 `cn_en*.dict.yaml` 变为 `cn_en*.txt`
- 双拼不再需要去 `melt_eng.dict.yaml` 更改引用词库
## 2024-02-01 🆕
`pin_cand_filter.lua` 置顶候选项 [#586](https://github.com/iDvel/rime-ice/issues/586)
## 2024-01-29 🆕 ⚠️
[部件拆字方案](https://github.com/mirtlecn/rime-radical-pinyin) 反查、辅码 ([#643](https://github.com/iDvel/rime-ice/pull/643))
- 反查:默认以 `uU` 开头
- 辅码:默认以 `` ` ``(反引号)开启查询
⚠️ 部件拆字方案替换掉了两分方案
## 2024-01-02 🆕 🐛 ⚠️
🆕 农历功能 [#565](https://github.com/iDvel/rime-ice/issues/565)
🐛 长词优先 `long_word_filter.lua` 不提升包含英文、数字、emoji、假名的候选项 [#592](https://github.com/iDvel/rime-ice/issues/592)
⚠️ 更新并修改 `weasel_style.yaml``weasel.yaml` [#584](https://github.com/iDvel/rime-ice/pull/584)
## 2023-11-29 ⚠️
九宫格方案 2~9 的映射由 ADGJMPTW 改为 23456789 [a0e0ef8](https://github.com/iDvel/rime-ice/commit/a0e0ef807e4ebc50771563717375f554c9473315)
全键盘切换到九宫格方案不再需要删除词库中的大写字母。
(更新至仓输入法商店版 2.1.0 或 TF 119 后可自动适应)
## 2023-10-30 📖
完成同义多音字的注音问题 [#353](https://github.com/iDvel/rime-ice/issues/353)
## 2023-09-08 🆕
仓输入法九宫格方案 [72acbc7](https://github.com/iDvel/rime-ice/commit/72acbc7a2e53cbac7d6f3ab4a82bc457a7ed8f27)
## 2023-08-07 🆕
支持搜狗双拼 [34ab972](https://github.com/iDvel/rime-ice/commit/34ab9725ea9cdf918cbf9f6a4c27d61db7736b07)
## 2023-08-06 🆕
`corrector.lua` 错音错字提示 [3c3582e](https://github.com/iDvel/rime-ice/commit/3ce582e1951acb6dc381332d8e61381767d35a36)
## 2023-07-28 📖
删除了八股文,因为 [#407](https://github.com/iDvel/rime-ice/issues/407)
全词库完成注音 🎉 [#317](https://github.com/iDvel/rime-ice/issues/317)
## 2023-06-13 ⚠️
中英混输词库不再派生纯大写形式 [6f51bdd](https://github.com/iDvel/rime-ice/commit/6f51bddd1467494c759181a237341f89a1ed3dd1)
- 修改了 `melt_eng.schema.yaml` 派生规则
- 修改了中英混输词库,所有编码前缀加上特殊符号
## 2023-06-09 ⚠️
双拼拼写规则以特殊字符搭桥 [#332](https://github.com/iDvel/rime-ice/pull/332)[说明:#356](https://github.com/iDvel/rime-ice/issues/356)
- 修改了全拼及双拼方案的拼写规则
## 2023-06-07 🆕
英文词中数字和标点自动转写 [#326](https://github.com/iDvel/rime-ice/issues/326)
- 修改了 `melt_eng.schema.yaml` 拼写派生规则
- 修改了英文词库部分编码
## 2023-05-30 🆕
英文词汇自动大写转换 [#305](https://github.com/iDvel/rime-ice/pull/305)
- 增加 Lua 脚本 `autocap_filter.lua`
- 修改了 `melt_eng.schema.yaml` 拼写派生规则。
## 2023-05-24 🐛
修复全拼方案模糊音派生规则 [6c0618a](https://github.com/iDvel/rime-ice/commit/6c0618aeaf2910482e20ff1c057f482aaa98c051)
## 2023-05-13 🆕
数字、金额大写 [#264](https://github.com/iDvel/rime-ice/issues/264)
- 增加 Lua 脚本 `number_translator.lua`
## 2023-05-09 🆕
添加双拼的中英混输词库 [3e24a1e](https://github.com/iDvel/rime-ice/commit/3e24a1ee202054f776f188ba82e86fa30f16ab55)
## 2023-05-08 ⚠️
Lua 模块化 [a34c46a](https://github.com/iDvel/rime-ice/commit/a34c46ad34673d535dc1df4ef208ad4c7e3baf80) [b514049](https://github.com/iDvel/rime-ice/commit/b514049e33c7e0c8fccacec49faa3830bd7bdf26)

7
others/Hamster/README.md Normal file
View File

@ -0,0 +1,7 @@
# Hamster 九宫格
要在仓输入法中启用九宫格,需要切换到九宫格方案,并启用九宫格布局。
(可选)解开 `engine/translators` 下的英文翻译器注释,将 `melt_eng.custom.yaml` 复制到配置目录,可以支持九宫格输入英文,方便输入一些短单词,但会导致全键盘方案无法输入英文。

View File

@ -0,0 +1,4 @@
# 此补丁可以在仓输入法九宫格布局中输入英文
patch:
speller/algebra/+:
- xlit/abcdefghijklmnopqrstuvwxyz/22233344455566677778889999/

479
others/cn_en.txt Normal file
View File

@ -0,0 +1,479 @@
# 中英混输词库
# 根据此文件生成对应的 en_dicts/ 下的全拼及双拼词库
# version: 2024-02-10
X光
X光片
X射线
Nabla算子
T恤
T恤衫
AD钙奶
UU加速器
Cinity厅
Eul的神圣法杖
A杖
红Buff
蓝Buff
老Baby
小Baby
艾AA
炒CP
嗑CP
U盘
B站
V站
P站
大V
Q币
QQ号
QQ号码
QQ空间
QQ群
QQ邮箱
QQ音乐
QQ拼音
QQ会员
QQ好友
QQ输入法
Dock栏
阿Q精神
Win版
Win版本
Windows版
Windows版本
Mac版
Mac版本
macOS版
macOS版本
iOS版
iOS版本
Android版
Android版本
Web版
Web版本
PC端
Win端
Windows端
Mac端
macOS端
Web端
iOS端
Android端
e招贷
G胖
Up主
BOSS直聘
P社
V社
Go语言
维生素A
维生素B
维生素C
维生素D
维生素E
维生素K
维A
维B
维C
维D
维E
维K
维E乳
维生素E乳
阿Q
阿Q正传
单边z变换
逗B
哆啦A梦
二B
卡拉OK
牛B
三K党
傻B
傻X
智能ABC
智能ABC双拼
智能ABC双拼方案
智能ABC输入法
装B
A股
B股
H股
N股
S股
A盘
A片
AA制
ATM机
B超
B淋巴细胞
B盘
B细胞
C盘
C语言
D盘
E盘
F盘
G点
G盘
IP地址
IP电话
IP卡
J盘
K宝
K粉
K歌
K歌王
POS机
SIM卡
T淋巴细胞
T细胞
T型台
U盾
S形
U形
U形管
UIM卡
USIM卡
X刀
X染色体
Y染色体
z变换
z逆变换
D之国
D之一族
Beta版
Beta版本
AV女优
X战警
YY语音
A4纸
A4腰
N多
N多个
N次
N遍
蒙奇·D·路飞
蒙奇·D·龙
哥尔·D·罗杰
马歇尔·D·蒂奇
X·德雷克
蒙奇·D·卡普
波特卡斯·D·艾斯
VIP中P
QQ秀
Big胆
我叫MT
谜拟Q
多边兽Z
藤子·F·不二雄
PC版
PC版本
A塔
平A
立Flag
C罗
IE浏览器
A壳
B壳
C壳
D壳
A面
B面
C面
D面
Server酱
P图
P个图
P一下
芭比Q
芭比Q了
QQ堂
PIN码
PUK码
关底BOSS
AA吧
喊cut
ASCII码
Go圣经
江南Style
头文字D
三无Marblue
A罩杯
B罩杯
C罩杯
D罩杯
E罩杯
F罩杯
G罩杯
H罩杯
A罩
B罩
C罩
D罩
E罩
F罩
G罩
H罩
A杯
B杯
C杯
D杯
E杯
F杯
G杯
H杯
TV版
TV版本
芒果TV
V字仇杀队
V怪客
V煞
Q弹
Steam云
M系列
阿Sir
Pro版
Pro版本
Lite版
Lite版本
X教授
Papi酱
MAC地址
DNS劫持
DNS污染
OK了
OK啦
OK啊
我OK啊
OK了吗
腾讯QQ
公网IP
Web开发
Switch版
Switch版本
A型血
A血型
B型血
B血型
AB型
AB型血
AB血型
O型
O型血
O血型
IT界
Fn键
Cmd键
Command键
Ctrl键
Control键
Opt键
Option键
Shift键
Tab键
Caps键
CapsLock键
Return键
Enter键
Space键
Backspace键
Del键
Delete键
Esc键
Eject键
周刊少年Jump
ICP备案
啥bug
有bug
没bug
没有bug
卡bug
提bug
写bug
改bug
查bug
找bug
J.K.罗琳
J.R.R.托尔金
乔治·R.R.马丁
异维A酸
互fo
减CD
随身Wi-Fi
U型锁
Go程
TG群
Telegram群
Wi-Fi密码
DNA检测
A级
B级
C级
D级
S级
拍CT
CT检查
PVC管
DoS攻击
DDoS攻击
N卡
A卡
M码
S码
L码
Q我
R级
A区
B区
C区
D区
E区
F区
A组
B组
C组
D组
E组
F组
B哥
Q版
A班
B班
C班
D班
老K
加Q
加QQ
A座
B座
C座
D座
E座
F座
H版
A口
B口
C口
D口
E口
F口
A出口
B出口
C出口
D出口
E出口
F出口
A楼
B楼
C楼
D楼
E楼
F楼
A型号
B型号
C型号
D型号
E型号
F型号
A型
B型
C型
D型
E型
F型
A款
B款
C款
D款
E款
F款
A栋
B栋
C栋
D栋
E栋
F栋
X轴
Y轴
Z轴
V领
V字领
V字形
IT业
IT行业
K线
K线图
日K线
周K线
月K线
T台
TF卡
N年
A点
B点
A屏
OK吗
OK嘛
OK么
OK呀
OK不
BB机
做B超
DJ版
唱K
PK赛
A和B
X和Y
查IP
封IP
换IP
VIP卡
VIP会员
AAA级
第N次
发EMS
DVD版
USB线
USB口
USB接口
X档案
n次方
N多人
S曲线
DJ舞曲
充Q币
就OK
不OK
很OK
特拉法尔加·D·瓦铁尔·罗
开party
Chromium系
Chrome系
QQ游戏
QQ游戏大厅
QQ音速
QQ飞车
QQ三国
4S店
丰田AE86
TF版
TF版本
O不OK
人均GDP
V8引擎
4A级
5A级
2G网络
3G网络
4G网络
5G网络
3G流量
4G流量
5G流量
3D打印
2D电影
3D电影
city不city
打call
hold住

BIN
others/demo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

2054
others/emoji-map.txt Normal file

File diff suppressed because it is too large Load Diff

28
others/iRime/README.md Normal file
View File

@ -0,0 +1,28 @@
# iRime 方案
直接拖进去就是全键盘方案。
然后有两组补丁。
<br>
一组九宫格的:
九宫格和 iRime 自带的主要区别能输入英文即「43556」上屏「hello」。
九宫格体验:
重码时不能选拼音,太难受了,要了命了。
<br>
一组全键盘的:
开启模糊拼音,输入单字时比较困扰,不过实在离不开这个功能。
单引号改为了删除自造词(下滑 L 键)。
调整了标点符号的键盘映射,一些上下滑时的操作,比如上滑是两个括号,下滑是单个括号。
「符」按钮直接跳转到「更多」那个页面。

View File

@ -0,0 +1,10 @@
# Rime schema
# vim: set sw=2 sts=2 et:
# encoding: utf-8
patch:
speller/alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA-_1234567890
speller/algebra/+:
- xlit/abcdefghijklmnopqrstuvwxyz/22233344455566677778889999/

View File

@ -0,0 +1,34 @@
# Rime schema
# encoding: utf-8
patch:
# 中文键盘空格键上会显示方案名称
# (英文键盘的空格在主题的 `theme.yaml` 文件下的 `space: {label:` 处修改)
schema/name: "rime-ice"
# 增加数字按键
speller/alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA1234567890
# 去掉电脑上的固顶字
custom_phrase: ~
# 九宫格拼写映射,直接覆盖,放弃 26 键的纠错,否则重码太多了
speller/algebra:
- derive/^[abc].*$/2/
- derive/^[def].*$/3/
- derive/^[mno].*$/6/
- xlit/abcdefghijklmnopqrstuvwxyz/22233344455566677778889999/
# 让输入框从数字变成字母
engine/filters/@before 0: lua_filter@*t9_preedit
translator/spelling_hints: 16
# 重写了,因为需要 @ 和 # 的映射,否则键盘上那俩按钮不起作用。
punctuator/half_shape:
'@' : [ 1,'@',,,、,……,, ]
'#' : [ 0,'#','$','%','^','&','*','(',')' ]
sytle:
theme_name: T9

View File

@ -0,0 +1,18 @@
# Rime schema
# encoding: utf-8
patch:
# 中文键盘空格键上会显示方案名称
# (英文键盘的空格在主题的 `theme.yaml` 文件下的 `space: {label:` 处修改)
schema/name: rime-ice
# 智能纠错(适用于全键盘全拼)
translator/enable_correction: true
key_binder:
import_preset: default
bindings/+:
# 单引号(相应主题为下滑 L 键),改成删除自造词
- { when: composing, accept: "'", send: Shift+Delete }

View File

@ -0,0 +1,3 @@
Name: iPhone默认键盘_custom
Author: 筋斗云
SupportPlatform: iOS,iPadOS

View File

@ -0,0 +1,279 @@
# Trime default style settings
# encoding: utf-8
#
# 以 iRime 自带的「iPhone默认键盘」为模板修改了一些
#
# 按钮调换描述文字中文键盘显示为「中」英文键盘显示为「abc」。
#
# 修改键盘符号的映射,不调用 punctuator/half_shape直接输出指定标点。
# 一般是上滑为全角的,下滑改为半角的。
# / @ # - _ 永远是半角的,上下滑都一样。
# 右引号上滑为直角引号「」
# 括号下滑为输入单个括号,中文的输出全角,英文的输出半角。
#
# 取消符号键盘,点击「符」直接跳转到「更多」那个界面。
config_version: "0.9"
name: 默认键盘 #方案名称
author: 筋斗云#作者资讯
#键盘高度等
height:
1: &jpgd1 43.6 #符号键盘
2: &jpgd2 46 #主键盘
3: &jpgd3 41.5 #数字键盘
4: &jpgd4 12 #主键盘圆角
5: &jpgd5 36 #候选区高度
6: &jpgd6 0.5 #符号键盘行间距
7: &jpgd7 0.5 #符号键盘水平间距
8: &jpgd8 0.0 #符号键盘圆角
9: &jpgd9 11 #主键盘数字键盘行间距
10: &jpgd10 4 #主键盘数字键盘水平间距
style:
key_height: *jpgd2 #键高
keyboards: [default, number, .symbols, english, .number] #键盘配置,所有跳转键盘都需要在这里配置,不然会出错
text_size: 12 #编码字体大小 默认值为12
text_height: 20 #编码框高度 默认值为20
candidate_text_size: 24 #候选字体大小 默认值为24
candidate_view_height: 44 #候选高度 默认值为44
candidate_padding: 14 #候选间距 默认值为14
comment_text_size: 14 #逐码字体大小 默认值为14
comment_height: 16 #逐码高度 默认值为16
show_preview: true #是否显示气泡 默认显示
round_corner: 0 #值为0的话默认 iphone为4ipad为8
color_scheme: default #配色方案
#键盘布局
preset_keyboards:
default:
ascii_mode: 0
author: "筋斗云"
height: *jpgd2
horizontal_gap: *jpgd10
vertical_gap: *jpgd9
round_corner: *jpgd4
#现在只支持配置click,swipe_up,swipe_down键盘
keys:
- {click: q, label: Q, swipe_up: commit1, swipe_down: "一"}
- {click: w, label: W, swipe_up: commit2, swipe_down: "二"}
- {click: e, label: E, swipe_up: commit3, swipe_down: "三"}
- {click: r, label: R, swipe_up: commit4, swipe_down: "四"}
- {click: t, label: T, swipe_up: commit5, swipe_down: "五"}
- {click: y, label: Y, swipe_up: commit6, swipe_down: "六"}
- {click: u, label: U, swipe_up: commit7, swipe_down: "七"}
- {click: i, label: I, swipe_up: commit8, swipe_down: "八"}
- {click: o, label: O, swipe_up: commit9, swipe_down: "九"}
- {click: p, label: P, swipe_up: commit0, swipe_down: ""}
- {width: 5}
- {click: a, label: A, swipe_up: commit, swipe_down: commithalf}
- {click: s, label: S, swipe_up: commitgan, swipe_down: commitgan}
- {click: d, label: D, swipe_up: commit, swipe_down: commithalf}
- {click: f, label: F, swipe_up: commit, swipe_down: commithalf}
- {click: g, label: G, swipe_up: bracket3, swipe_down: commit}
- {click: h, label: H, swipe_up: commit, swipe_down: commit}
- {click: j, label: J, swipe_up: commit@, swipe_down: commit@}
- {click: k, label: K, swipe_up: quotationMarkFull2, swipe_down: '"'}
- {click: l, label: L, swipe_up: quotationMar「」, swipe_down: "'"}
- {width: 5}
- {click: Shift, width: 14}
- {width: 1}
- {click: z, label: Z, swipe_up: commit-, swipe_down: commit-}
- {click: x, label: X, swipe_up: commit_, swipe_down: commit_}
- {click: c, label: C, swipe_up: commitJin, swipe_down: commitJin}
- {click: v, label: V, swipe_up: commit, swipe_down: commithalf}
- {click: b, label: B, swipe_up: commit, swipe_down: commithalf}
- {click: n, label: N, swipe_up: commit, swipe_down: commaHalf}
- {click: m, label: M, swipe_up: commit。, swipe_down: periodHalf}
- {width: 1}
- {click: BackSpace, width: 14}
- {click: symbols, width: 14}
- {click: .number, width: 12}
- {click: space, width: 42}
- {click: english, width: 12}
- {click: Return, width: 20}
name: "默认键盘"
width: 10
english:
ascii_mode: 1
author: "筋斗云"
height: *jpgd2
horizontal_gap: *jpgd10
vertical_gap: *jpgd9
round_corner: *jpgd4
keys:
- {click: q, swipe_up: "1", swipe_down: "一"}
- {click: w, swipe_up: "2", swipe_down: "二"}
- {click: e, swipe_up: "3", swipe_down: "三"}
- {click: r, swipe_up: "4", swipe_down: "四"}
- {click: t, swipe_up: "5", swipe_down: "五"}
- {click: y, swipe_up: "6", swipe_down: "六"}
- {click: u, swipe_up: "7", swipe_down: "七"}
- {click: i, swipe_up: "8", swipe_down: "八"}
- {click: o, swipe_up: "9", swipe_down: "九"}
- {click: p, swipe_up: "0", swipe_down: ""}
- {width: 5}
- {click: a, swipe_up: "~", swipe_down: "~"}
- {click: s, swipe_up: "/", swipe_down: "/"}
- {click: d, swipe_up: ":", swipe_down: ":"}
- {click: f, swipe_up: ";", swipe_down: ";"}
- {click: g, swipe_up: bracket2, swipe_down: "("}
- {click: h, swipe_up: ")", swipe_down: ")"}
- {click: j, swipe_up: "@", swipe_down: "@"}
- {click: k, swipe_up: quotationMarkHalf2, swipe_down: '"'}
- {click: l, swipe_up: quotationMarkHalf1, swipe_down: "'"}
- {width: 5}
- {click: Shift, width: 14}
- {width: 1}
- {click: z, swipe_up: "-", swipe_down: "-"}
- {click: x, swipe_up: "_", swipe_down: "_"}
- {click: c, swipe_up: "#", swipe_down: "#"}
- {click: v, swipe_up: "?", swipe_down: "?"}
- {click: b, swipe_up: "!", swipe_down: "!"}
- {click: n, swipe_up: ",", swipe_down: ","}
- {click: m, swipe_up: ".", swipe_down: "."}
- {width: 1}
- {click: BackSpace, width: 14}
- {click: symbols, width: 14}
- {click: .number, width: 12}
- {click: ., swipe_up: ",", width: 10}
- {click: space, width: 34}
- {click: DefaultKeyboard2, width: 10}
- {click: Return, width: 20}
name: "英文键盘"
width: 10
number:
ascii_mode: 0
author: "筋斗云"
height: *jpgd2
horizontal_gap: *jpgd10
vertical_gap: *jpgd9
round_corner: *jpgd4
keys:
- {click: 1}
- {click: 2}
- {click: 3}
- {click: 4}
- {click: 5}
- {click: 6}
- {click: 7}
- {click: 8}
- {click: 9}
- {click: 0}
- {click: "-"}
- {click: "/"}
- {click: ":"}
- {click: semicolon}
- {click: bracket}
- {click: bracket1}
- {click: "¥"}
- {click: "@"}
- {click: quotationMarkFull}
- {click: quotationMarkFull1}
- {click: .symbols1, width: 14}
- {width: 3}
- {click: periodFull, width: 11}
- {click: commaFull, width: 11}
- {click: dunHalf, width: 11}
- {click: questionMark, width: 11}
- {click: point, width: 11}
- {click: ., width: 11}
- {width: 3}
- {click: BackSpace, width: 14}
- {click: DefaultKeyboard, width: 25}
- {click: space, width: 50}
- {click: Return, width: 25}
name: "苹果数字键盘"
width: 10
preset_color_schemes:
default:
back_color: 0xffffff
preset_keys:
# 键盘类型需要在这里跳转,目前只支持下面的配置。
# 只支持 Shift Return BackSpace space 特殊键盘配置
# 现在text的命令只支持:
# 1,Left(光标向左移动一格);
# 2,Right(光标向右移动一格)
# 3,跳转到指定键盘;
# 其它暂时不支持,具体看事例;
# 现在支持commit命令,直接上屏指定字符
#
Shift: {label: Shift, send: Shift_L}
Return: {label: Enter, send: Return}
BackSpace: {send: BackSpace}
space: {label: "␣", send: space}
number: {label: 123, send: Eisu_toggle, select: number}
# english: {label: "abc", send: Eisu_toggle, select: english}
# 修改:中文状态下显示「中」
english: {label: "中", send: Eisu_toggle, select: english}
# symbols: {label: "符", send: Eisu_toggle, select: number}
# 修改:直接跳到「更多」
symbols: {label: "符", send: Eisu_toggle, select: .symbols}
.symbols: {label: "更多", send: Eisu_toggle, select: .symbols} #默认的符号键盘
.symbols1: {label: "更多", text: "{.symbols}{DefaultKeyboard}"} #默认的符号键盘
.number: {label: 123, send: Eisu_toggle, select: .number} #默认的9宫格数据键盘
DefaultKeyboard: {label: 中, send: Eisu_toggle, select: default}
# DefaultKeyboard2: {label: 中, send: Eisu_toggle, select: default}
# 修改英文状态下显示「abc」
DefaultKeyboard2: {label: "abc", send: Eisu_toggle, select: default}
periodHalf: {label: ".", commit: "."} #直接上屏半角句号
periodFull: {label: "。", text: "。{DefaultKeyboard}"} #上屏全角句号再跳转到default键盘
commaHalf: {label: ",", commit: ","}
commaFull: {label: "", text: "{DefaultKeyboard}"}
dunHalf: {label: "、", text: "、{DefaultKeyboard}"}
questionMark: {label: "", text: "{DefaultKeyboard}"}
point: {label: "", text: "{DefaultKeyboard}"}
semicolon: {label: "", text: ";{DefaultKeyboard}"} #先上屏再跳转到default键盘
bracket: {label: "(", text: "(){Left}{DefaultKeyboard}"} #先上屏()光标往左移动一格再跳转到default键盘
bracket3: {label: "", text: "{Left}"} #先上屏()光标往左移动一格
bracket2: {label: "(", text: "(){Left}"} #先上屏()光标往左移动一格
bracket1: {label: ")", text: "){DefaultKeyboard}"} #先上屏)再跳转到default键盘
quotationMarkFull: {label: "〝", text: "〝〞{Left}{DefaultKeyboard}"}
quotationMarkFull1: {label: "〞", text: "〞"{Left}{DefaultKeyboard}"}
quotationMarkFull2: {label: "〝", text: "〝〞{Left}"}
quotationMar「」: {label: "「", text: "「」{Left}"}
quotationMarkHalf1: {label: "\"", text: "\""}
quotationMarkHalf2: {label: "\"", text: "\"\"{Left}"}
quotationMarkFull: {label: "\"", text: "{DefaultKeyboard}"}
commit1: {label: "1", commit: "1"}
commit2: {label: "2", commit: "2"}
commit3: {label: "3", commit: "3"}
commit4: {label: "4", commit: "4"}
commit5: {label: "5", commit: "5"}
commit6: {label: "6", commit: "6"}
commit7: {label: "7", commit: "7"}
commit8: {label: "8", commit: "8"}
commit9: {label: "9", commit: "9"}
commit0: {label: "0", commit: "0"}
commit: {label: "", commit: ""}
commithalf: {label: "~", commit: "~"}
commitgan: {label: "/", commit: "/"}
commit: {label: "", commit: ""}
commithalf: {label: ":", commit: ":"}
commit: {label: "", commit: ""}
commithalf: {label: ";", commit: ";"}
commit: {label: "", commit: ""}
commit: {label: "", commit: ""}
commit@: {label: "@", commit: "@"}
commit-: {label: "-", commit: "-"}
commit_: {label: "_", commit: "_"}
commitJin: {label: "#", commit: "#"}
commit: {label: "", commit: ""}
commithalf: {label: "?", commit: "?"}
commit: {label: "", commit: ""}
commithalf: {label: "!", commit: "!"}
commit: {label: "", commit: ""}
commithalf: {label: ",", commit: ","}
commit。: {label: "。", commit: "。"}
commit。half: {label: ".", commit: "."}
commit”: {label: "”", commit: "”"}
commit_single_quote: {label: "'", commit: "'"}

12
others/pages/index.html Normal file
View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head></head>
<body>
<script type="module">
import { loadZip } from "./dist/Fcitx5.js"
await loadZip('./rime-ice.zip')
</script>
<h1>雾凇拼音</h1>
<textarea></textarea>
</body>
</html>

View File

@ -0,0 +1,12 @@
# encoding: utf-8
---
recipe:
Rx: others/recipes/all_dicts
args:
description: >-
所有词库安装、更新
install_files: >-
cn_dicts/*.*
en_dicts/*.*
opencc/*.*
radical_pinyin.dict.yaml

View File

@ -0,0 +1,10 @@
# encoding: utf-8
---
recipe:
Rx: others/recipes/cn_dicts
args:
description: >-
拼音词库安装、更新
install_files: >-
radical_pinyin.dict.yaml
cn_dicts/*.*

View File

@ -0,0 +1,24 @@
# encoding: utf-8
---
recipe:
Rx: others/recipes/config
args:
- schema=flypy
description: >-
Customize input schema to enable double_pinyin.
- flypy小鹤双拼
- double_pinyin自然码双拼
- mspy微软双拼
- sogou搜狗双拼
- abc智能 ABC 双拼)
- ziguang紫光双拼
patch_files:
radical_pinyin.custom.yaml:
- patch/+:
speller/algebra:
__include: radical_pinyin.schema.yaml:/algebra_${schema:-flypy}
melt_eng.custom.yaml:
- patch/+:
speller/algebra:
__include: melt_eng.schema.yaml:/algebra_${schema:-flypy}

View File

@ -0,0 +1,9 @@
# encoding: utf-8
---
recipe:
Rx: others/recipes/en_dicts
args:
description: >-
英文词库安装、更新
install_files: >-
en_dicts/*.*

View File

@ -0,0 +1,32 @@
# encoding: utf-8
---
recipe:
Rx: others/recipes/full
args:
description: >-
完整安装、更新
install_files: >-
cn_dicts/*.*
en_dicts/*.*
opencc/*.*
lua/*.*
lua/cold_word_drop/*.*
default.yaml
squirrel.yaml
weasel.yaml
rime_ice.schema.yaml
rime_ice.dict.yaml
t9.schema.yaml
double_pinyin.schema.yaml
double_pinyin_abc.schema.yaml
double_pinyin_mspy.schema.yaml
double_pinyin_sogou.schema.yaml
double_pinyin_flypy.schema.yaml
double_pinyin_ziguang.schema.yaml
symbols_v.yaml
symbols_caps_v.yaml
radical_pinyin.schema.yaml
radical_pinyin.dict.yaml
melt_eng.schema.yaml
melt_eng.dict.yaml
custom_phrase.txt

View File

@ -0,0 +1,9 @@
# encoding: utf-8
---
recipe:
Rx: others/recipes/opencc
args:
description: >-
opencc(Emoji)安装、更新
install_files: >-
opencc/*.*

10
others/script/go.mod Normal file
View File

@ -0,0 +1,10 @@
module script
go 1.22
require github.com/deckarep/golang-set/v2 v2.3.0
require (
github.com/yanyiwu/gojieba v1.3.0
golang.org/x/sys v0.19.0
)

6
others/script/go.sum Normal file
View File

@ -0,0 +1,6 @@
github.com/deckarep/golang-set/v2 v2.3.0 h1:qs18EKUfHm2X9fA50Mr/M5hccg2tNnVqsiBImnyDs0g=
github.com/deckarep/golang-set/v2 v2.3.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
github.com/yanyiwu/gojieba v1.3.0 h1:6VeaPOR+MawnImdeSvWNr7rP4tvUfnGlEKaoBnR33Ds=
github.com/yanyiwu/gojieba v1.3.0/go.mod h1:54wkP7sMJ6bklf7yPl6F+JG71dzVUU1WigZbR47nGdY=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

83
others/script/main.go Normal file
View File

@ -0,0 +1,83 @@
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"script/rime"
"strings"
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
if len(os.Args) > 1 {
switch os.Args[1] {
case "s":
goto SORT
case "t":
rime.Temp()
return
case "tp":
rime.Pinyin(filepath.Join(rime.RimeDir, "cn_dicts/temp.txt"))
return
}
}
// Emoji 检查和更新
rime.CheckAndGenerateEmoji()
fmt.Println("--------------------------------------------------")
// 从 others/cn_en.txt 更新中英混输词库
rime.CnEn()
fmt.Println("--------------------------------------------------")
// 为没注音的词汇半自动注音
rime.Pinyin(rime.ExtPath)
fmt.Println("--------------------------------------------------")
// 为 ext、tencent 没权重的词条加上权重,有权重的改为下面设置的权重
rime.AddWeight(rime.ExtPath, 100)
rime.AddWeight(rime.TencentPath, 100)
fmt.Println("--------------------------------------------------")
// 检查
// _type: 1 只有汉字 2 汉字+注音 3 汉字+注音+权重 4 汉字+权重
rime.Check(rime.HanziPath, 3)
rime.Check(rime.BasePath, 3)
rime.Check(rime.ExtPath, 3)
rime.Check(rime.TencentPath, 4)
fmt.Println("--------------------------------------------------")
// 检查同义多音字
rime.CheckPolyphone(rime.BasePath)
rime.CheckPolyphone(rime.ExtPath)
fmt.Println("--------------------------------------------------")
areYouOK()
SORT:
// 排序,顺便去重
rime.Sort(rime.HanziPath, 3)
rime.Sort(filepath.Join(rime.RimeDir, "cn_dicts/41448.dict.yaml"), 2)
rime.Sort(rime.BasePath, 3)
rime.Sort(rime.ExtPath, 3)
rime.Sort(rime.TencentPath, 4)
rime.Sort(filepath.Join(rime.RimeDir, "en_dicts/en.dict.yaml"), 2)
}
func areYouOK() {
if rime.AutoConfirm {
fmt.Println("Auto confirm enabled. Skipping prompt.")
return
}
fmt.Println("Are you OK:")
var isOK string
_, _ = fmt.Scanf("%s", &isOK)
isOK = strings.ToLower(isOK)
if isOK != "ok" && isOK != "y" && isOK != "yes" {
os.Exit(123)
}
}

317
others/script/rime/check.go Normal file
View File

@ -0,0 +1,317 @@
package rime
import (
"bufio"
"fmt"
"log"
"os"
"path"
"strconv"
"strings"
"sync"
"time"
"unicode"
"unicode/utf8"
mapset "github.com/deckarep/golang-set/v2"
)
var (
specialWords = mapset.NewSet[string]() // 特殊词汇列表,不进行任何检查
polyphoneWords = mapset.NewSet[string]() // 需要注音的字词
wrongWords = mapset.NewSet[string]() // 异形词、错别字
wrongWordsFilter = mapset.NewSet[string]() // 过滤一部分,包含错别字但不是错别字,如「作爱」是错的,但「叫作爱」是对的
hanPinyin = make(map[string][]string) // 汉字拼音映射,用于检查注音是否正确
hanPinyinFilter = mapset.NewSet[string]() // 过滤一部分比如「深厉浅揭qi」只在这个词中念qi并不是错误。
)
// 初始化特殊词汇列表、需要注音列表、错别字列表、拼音列表
func initCheck() {
// 特殊词汇列表,不进行任何检查
specialWords.Add("科科斯(基林)群岛")
specialWords.Add("刚果(金)")
specialWords.Add("刚果(布)")
specialWords.Add("赛博朋克:边缘行者")
specialWords.Add("赛博朋克:边缘跑手")
specialWords.Add("赛博朋克:命运之轮")
// 需要注音的列表
file1, err := os.Open(需要注音TXT)
if err != nil {
log.Fatalln(err)
}
defer file1.Close()
sc := bufio.NewScanner(file1)
for sc.Scan() {
line := sc.Text()
if strings.HasPrefix(line, "#") || line == "" {
continue
}
polyphoneWords.Add(line)
}
// 错别字的两个列表: wrongWords wrongWordsFilter
file2, err := os.Open(错别字TXT)
if err != nil {
log.Fatalln(err)
}
defer file2.Close()
sc = bufio.NewScanner(file2)
isMark := false
for sc.Scan() {
line := sc.Text()
if strings.HasPrefix(line, "# -_-") {
isMark = true
continue
}
if strings.HasPrefix(line, "#") || line == "" {
continue
}
if !isMark {
wrongWords.Add(line)
} else {
wrongWordsFilter.Add(line)
}
}
// 汉字拼音映射 hanPinyin hanPinyinFilter
// 将所有读音读入 hanPinyin
file3, err := os.Open(HanziPath)
if err != nil {
log.Fatalln(err)
}
defer file3.Close()
isMark = false
sc = bufio.NewScanner(file3)
for sc.Scan() {
line := sc.Text()
if !isMark {
if strings.Contains(line, mark) {
isMark = true
}
continue
}
parts := strings.Split(line, "\t")
text, code := parts[0], parts[1]
hanPinyin[text] = append(hanPinyin[text], code)
}
hanPinyin["栖"] = []string{"qi"} // 只检查 qi 音,在 hanPinyinFilter 过滤「栖栖xi、栖栖xi遑遑」
// 给 hanPinyin 补充不在字表的读音,和过滤列表 hanPinyinFilter
file4, err := os.Open(汉字拼音映射TXT)
if err != nil {
log.Fatalln(err)
}
defer file4.Close()
sc = bufio.NewScanner(file4)
isMark = false
for sc.Scan() {
line := sc.Text()
if strings.HasPrefix(line, "#") && !strings.HasPrefix(line, "# -_-") || line == "" {
continue
}
if strings.HasPrefix(line, "# -_-") {
isMark = true
continue
}
if !isMark {
parts := strings.Split(line, " ")
key := parts[0]
values := parts[1:]
hanPinyin[key] = append(hanPinyin[key], values...)
} else {
hanPinyinFilter.Add(line)
}
}
}
// Check 对传入的词库文件进行检查
// dictPath: 词库文件路径
// _type: 词库类型 1 只有汉字 2 汉字+注音 3 汉字+注音+权重 4 汉字+权重
func Check(dictPath string, _type int) {
// 控制台输出
defer printlnTimeCost("检查 "+path.Base(dictPath), time.Now())
// 打开文件
file, err := os.Open(dictPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 开始检查!
lineNumber := 0
isMark := false
sc := bufio.NewScanner(file)
var wg sync.WaitGroup
for sc.Scan() {
lineNumber++
line := sc.Text()
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
wg.Add(1)
go func(line string, lineNumber int) {
defer wg.Done()
checkLine(dictPath, _type, line, lineNumber)
}(line, lineNumber)
}
wg.Wait()
if err := sc.Err(); err != nil {
log.Fatalln(err)
}
}
// 检查一行
func checkLine(dictPath string, _type int, line string, lineNumber int) {
// 忽略注释base 中有很多被注释了的词汇,暂时没有删除
if strings.HasPrefix(line, "#") {
// 注释以 '#' 开头,但不是以 '# '开头(强迫症晚期)
if !strings.HasPrefix(line, "# ") {
fmt.Println("has # but not #␣", line)
}
return
}
// 有空行
if strings.TrimSpace(line) == "" {
fmt.Println("empty line", line)
}
// +---------------------------------------------------------------
// | 开始检查分割后的内容,分割为: 词汇text 编码code 权重weight
// +---------------------------------------------------------------
parts := strings.Split(line, "\t")
var text, code, weight string
switch {
case _type == 1 && len(parts) == 1: // 一列,【汉字】
text = parts[0]
case _type == 2 && len(parts) == 2: // 两列,【汉字+注音】
text, code = parts[0], parts[1]
case _type == 3 && len(parts) == 3: // 三列,【汉字+注音+权重】
text, code, weight = parts[0], parts[1], parts[2]
case _type == 4 && len(parts) == 2: // 两列,【汉字+权重】
text, weight = parts[0], parts[1]
default:
log.Fatalln("❌ 分割错误:", lineNumber, line)
}
// weight 应该是纯数字
if weight != "" {
_, err := strconv.Atoi(weight)
if err != nil {
fmt.Println("❌ weight 非数字:", line)
}
}
// text 和 weight 不应该含有空格
if strings.Contains(text, " ") || strings.Contains(weight, " ") {
fmt.Println("❌ text 和 weight 含有空格:", line)
}
// code 前后不应该有空格
if strings.HasPrefix(code, " ") || strings.HasSuffix(code, " ") {
fmt.Println("❌ code 前后有空格:", line)
}
// code 不应该有非小写字母
for _, r := range code {
if string(r) != " " && !unicode.IsLower(r) {
fmt.Println("❌ code 含有非小写字母:", line)
break
}
}
// 过滤特殊词条
if specialWords.Contains(text) {
return
}
// text 不应该有非汉字内容,除了间隔号 · (Middle Dot: U+00B7)和连接号 - (Hyphen-Minus: U+002D)
for _, c := range text {
if !unicode.Is(unicode.Han, c) && !strings.ContainsRune("·-", c) {
fmt.Println("❌ text 含有非汉字内容:", line)
break
}
}
// 除了字表,其他词库不应该含有单个的汉字
if dictPath != HanziPath && utf8.RuneCountInString(text) == 1 {
fmt.Println("❌ 意外的单个汉字:", line)
}
// 除了 base其他词库不应该含有两个字的词汇
if dictPath != BasePath && utf8.RuneCountInString(text) == 2 {
fmt.Println("❌ 意外的两字词:", line)
}
// 汉字个数应该和拼音个数相等
if code != "" {
codeCount := len(strings.Split(code, " "))
textCount := utf8.RuneCountInString(text)
if strings.ContainsAny(text, "·-") {
textCount -= strings.Count(text, "·")
textCount -= strings.Count(text, "-")
}
if strings.HasPrefix(text, "# ") {
textCount -= 2
}
if textCount != codeCount {
fmt.Println("❌ 汉字个数 != 拼音个数:", line)
}
}
// +---------------------------------------------------------------
// | 其他检查
// +---------------------------------------------------------------
// 需要注音但没有注音的字
if dictPath == TencentPath {
if !strings.Contains(text, "什么") { // 不处理「什么」
for _, word := range polyphoneWords.ToSlice() {
if strings.Contains(text, word) {
fmt.Println("❌ 需要注音:", line)
}
}
}
}
// 检查拼写错误如「赞zan」写成了zna顺便检查是否存在字表中没有注音的字
if dictPath != HanziPath && (_type == 2 || _type == 3) && !hanPinyinFilter.Contains(text) {
// 把汉字和拼音弄成一一对应关系,「拼音:pin yin」→「拼:pin」「音:yin」
textWithoutSpecialChars := strings.NewReplacer("·", "", "-", "").Replace(text) // 去掉间隔号和连接号
pinyins := strings.Split(code, " ")
i := 0
for _, zi := range textWithoutSpecialChars {
if !contains(hanPinyin[string(zi)], pinyins[i]) {
fmt.Printf("❌ 注音错误 or 字表未包含的汉字及注音: %s - %s.+%s\n", line, string(zi), pinyins[i])
}
i++
}
}
// 错别字检查,最耗时的检查
if dictPath != HanziPath && !wrongWordsFilter.Contains(text) {
wrongWords.Each(func(wrongWord string) bool {
if strings.HasPrefix(wrongWord, "=") {
wrongWord = strings.TrimLeft(wrongWord, "= ")
if text == wrongWord {
fmt.Printf("❌ 错别字: %s = %s\n", text, wrongWord)
return true
}
} else if strings.Contains(text, wrongWord) {
fmt.Printf("❌ 错别字: %s - %s\n", text, wrongWord)
return true
}
return false
})
}
}

740
others/script/rime/cn_en.go Normal file
View File

@ -0,0 +1,740 @@
package rime
import (
"bufio"
"fmt"
"log"
"os"
"path/filepath"
"regexp"
"strings"
"time"
"unicode"
mapset "github.com/deckarep/golang-set/v2"
)
// 多音字,手动选择注音
var polyphones = map[string]string{
"Eul的神圣法杖 > 的": "de",
"艾AA > 艾": "ai",
"大V > 大": "da",
"QQ音乐 > 乐": "yue",
"QQ会员 > 会": "hui",
"QQ会员 > 员": "yuan",
"阿Q精神 > 阿": "a",
"G胖 > 胖": "pang",
"阿Q > 阿": "a",
"阿Q正传 > 阿": "a",
"阿Q正传 > 传": "zhuan",
"单边z变换 > 单": "dan",
"卡拉OK > 卡": "ka",
"IP地址 > 地": "di",
"IP卡 > 卡": "ka",
"SIM卡 > 卡": "ka",
"UIM卡 > 卡": "ka",
"USIM卡 > 卡": "ka",
"X染色体 > 色": "se",
"Y染色体 > 色": "se",
"蒙奇·D·路飞 > 奇": "qi",
"蒙奇·D·龙 > 奇": "qi",
"马歇尔·D·蒂奇 > 奇": "qi",
"蒙奇·D·卡普 > 奇": "qi",
"蒙奇·D·卡普 > 卡": "ka",
"波特卡斯·D·艾斯 > 卡": "ka",
"波特卡斯·D·艾斯 > 艾": "ai",
"A壳 > 壳": "ke",
"B壳 > 壳": "ke",
"C壳 > 壳": "ke",
"D壳 > 壳": "ke",
"芭比Q了 > 了": "le",
"江南Style > 南": "nan",
"三无Marblue > 无": "wu",
"V字仇杀队 > 仇": "chou",
"Q弹 > 弹": "tan",
"M系列 > 系": "xi",
"阿Sir > 阿": "a",
"MAC地址 > 地": "di",
"OK了 > 了": "le",
"OK了吗 > 了": "le",
"A型血 > 血": "xue",
"A血型 > 血": "xue",
"B型血 > 血": "xue",
"B血型 > 血": "xue",
"AB型血 > 血": "xue",
"AB血型 > 血": "xue",
"O型血 > 血": "xue",
"O血型 > 血": "xue",
"没bug > 没": "mei",
"没有bug > 没": "mei",
"卡bug > 卡": "ka",
"查bug > 查": "cha",
"提bug > 提": "ti",
"CT检查 > 查": "cha",
"N卡 > 卡": "ka",
"A卡 > 卡": "ka",
"A区 > 区": "qu",
"B区 > 区": "qu",
"C区 > 区": "qu",
"D区 > 区": "qu",
"E区 > 区": "qu",
"F区 > 区": "qu",
"IT行业 > 行": "hang",
"TF卡 > 卡": "ka",
"A屏 > 屏": "ping",
"A和B > 和": "he",
"X和Y > 和": "he",
"查IP > 查": "cha",
"VIP卡 > 卡": "ka",
"VIP会员 > 会": "hui",
"VIP会员 > 员": "yuan",
"Chromium系 > 系": "xi",
"Chrome系 > 系": "xi",
"QQ游戏大厅 > 大": "da",
"QQ飞车 > 车": "che",
"2G网络 > 络": "luo",
"3G网络 > 络": "luo",
"4G网络 > 络": "luo",
"5G网络 > 络": "luo",
}
var digitMap = map[string]string{
"0": "零",
"1": "一",
"2": "二",
"3": "三",
"4": "四",
"5": "五",
"6": "六",
"7": "七",
"8": "八",
"9": "九",
}
type schema struct {
name string
desc string
combinationType string
path string
mapping map[string]string
additionalMapping map[string]string
excludingMapping map[string]string
file *os.File
}
var (
doublePinyin schema
doublePinyinFlypy schema
doublePinyinMSPY schema
doublePinyinSogou schema
doublePinyinZiGuang schema
doublePinyinABC schema
)
func initSchemas() {
doublePinyin = schema{
name: "cn_en_double_pinyin",
desc: "自然码双拼",
combinationType: "unique",
path: filepath.Join(RimeDir, "en_dicts/cn_en_double_pinyin.txt"),
mapping: map[string]string{
// 零声母
"-a-": "aa",
"-e-": "ee",
"-o-": "oo",
"-ai-": "ai",
"-ei-": "ei",
"-ou-": "ou",
"-an-": "an",
"-en-": "en",
"-ang-": "ah",
"-eng-": "eg",
"-ao-": "ao",
"-er-": "er",
// zh ch sh
"zh": "v",
"ch": "i",
"sh": "u",
// 韵母
"iu": "q",
"ia": "w",
"ua": "w",
"uan": "r",
"ue": "t",
"ve": "t",
"ing": "y",
"uai": "y",
"uo": "o",
"un": "p",
"iong": "s",
"ong": "s",
"iang": "d",
"uang": "d",
"en": "f",
"eng": "g",
"ang": "h",
"an": "j",
"ao": "k",
"ai": "l",
"ei": "z",
"ie": "x",
"iao": "c",
"ui": "v",
"ou": "b",
"in": "n",
"ian": "m",
},
}
doublePinyinFlypy = schema{
name: "cn_en_flypy",
desc: "小鹤双拼",
combinationType: "unique",
path: filepath.Join(RimeDir, "en_dicts/cn_en_flypy.txt"),
mapping: map[string]string{
// 零声母
"-a-": "aa",
"-e-": "ee",
"-o-": "oo",
"-ai-": "ai",
"-ei-": "ei",
"-ou-": "ou",
"-an-": "an",
"-en-": "en",
"-ang-": "ah",
"-eng-": "eg",
"-ao-": "ao",
"-er-": "er",
// zh ch sh
"zh": "v",
"ch": "i",
"sh": "u",
// 韵母
"iu": "q",
"ei": "w",
"uan": "r",
"ue": "t",
"ve": "t",
"un": "y",
"uo": "o",
"ie": "p",
"iong": "s",
"ong": "s",
"ai": "d",
"en": "f",
"eng": "g",
"ang": "h",
"an": "j",
"ing": "k",
"uai": "k",
"iang": "l",
"uang": "l",
"ou": "z",
"ia": "x",
"ua": "x",
"ao": "c",
"ui": "v",
"in": "b",
"iao": "n",
"ian": "m",
},
}
doublePinyinMSPY = schema{
name: "cn_en_mspy",
desc: "微软双拼",
combinationType: "unique",
path: filepath.Join(RimeDir, "en_dicts/cn_en_mspy.txt"),
mapping: map[string]string{
// 零声母
"-a-": "oa",
"-e-": "oe",
"-o-": "oo",
"-ai-": "ol",
"-ei-": "oz",
"-ou-": "ob",
"-an-": "oj",
"-en-": "of",
"-ang-": "oh",
"-eng-": "og",
"-ao-": "ok",
"-er-": "or",
// zh ch sh
"zh": "v",
"ch": "i",
"sh": "u",
// 韵母
"iu": "q",
"ia": "w",
"ua": "w",
"er": "r",
"uan": "r",
"ue": "t",
"uai": "y",
"uo": "o",
"un": "p",
"iong": "s",
"ong": "s",
"iang": "d",
"uang": "d",
"en": "f",
"eng": "g",
"ang": "h",
"an": "j",
"ao": "k",
"ai": "l",
"ing": ";",
"ei": "z",
"ie": "x",
"iao": "c",
"ui": "v",
"ve": "v",
"ou": "b",
"in": "n",
"ian": "m",
},
}
doublePinyinSogou = schema{
name: "cn_en_sogou",
desc: "搜狗双拼",
combinationType: "unique",
path: filepath.Join(RimeDir, "en_dicts/cn_en_sogou.txt"),
mapping: map[string]string{
// 零声母
"-a-": "oa",
"-e-": "oe",
"-o-": "oo",
"-ai-": "ol",
"-ei-": "oz",
"-ou-": "ob",
"-an-": "oj",
"-en-": "of",
"-ang-": "oh",
"-eng-": "og",
"-ao-": "ok",
"-er-": "or",
// zh ch sh
"zh": "v",
"ch": "i",
"sh": "u",
// 韵母
"iu": "q",
"ia": "w",
"ua": "w",
"er": "r",
"uan": "r",
"ue": "t",
"uai": "y",
"uo": "o",
"un": "p",
"iong": "s",
"ong": "s",
"iang": "d",
"uang": "d",
"en": "f",
"eng": "g",
"ang": "h",
"an": "j",
"ao": "k",
"ai": "l",
"ing": ";",
"ei": "z",
"ie": "x",
"iao": "c",
"ui": "v",
"ve": "t",
"ou": "b",
"in": "n",
"ian": "m",
},
}
doublePinyinZiGuang = schema{
name: "cn_en_ziguang",
desc: "紫光双拼",
combinationType: "unique",
path: filepath.Join(RimeDir, "en_dicts/cn_en_ziguang.txt"),
mapping: map[string]string{
// 零声母
"-a-": "oa",
"-e-": "oe",
"-o-": "oo",
"-ai-": "op",
"-ei-": "ok",
"-ou-": "oz",
"-an-": "or",
"-en-": "ow",
"-ang-": "os",
"-eng-": "ot",
"-ao-": "oq",
"-er-": "oj",
// zh ch sh
"zh": "u",
"ch": "a",
"sh": "i",
// 韵母
"ao": "q",
"en": "w",
"an": "r",
"eng": "t",
"in": "y",
"uai": "y",
"uo": "o",
"ai": "p",
"ang": "s",
"ie": "d",
"ian": "f",
"iang": "g",
"uang": "g",
"iong": "h",
"ong": "h",
"er": "j",
"iu": "j",
"ei": "k",
"uan": "l",
"ing": ";",
"ou": "z",
"ia": "x",
"ua": "x",
"iao": "b",
"ue": "n",
"ui": "n",
"un": "m",
},
}
doublePinyinABC = schema{
name: "cn_en_abc",
desc: "智能 ABC 双拼",
combinationType: "unique",
path: filepath.Join(RimeDir, "en_dicts/cn_en_abc.txt"),
mapping: map[string]string{
// 零声母
"-a-": "oa",
"-e-": "oe",
"-o-": "oo",
"-ai-": "ol",
"-ei-": "oq",
"-ou-": "ob",
"-an-": "oj",
"-en-": "of",
"-ang-": "oh",
"-eng-": "og",
"-ao-": "ok",
"-er-": "or",
// zh ch sh
"zh": "a",
"ch": "e",
"sh": "v",
// 韵母
"ao": "k",
"en": "f",
"an": "j",
"eng": "g",
"in": "c",
"uai": "c",
"uo": "o",
"ai": "l",
"ang": "h",
"ie": "x",
"ian": "w",
"iang": "t",
"uang": "t",
"iong": "s",
"ong": "s",
"er": "r",
"iu": "r",
"ei": "q",
"uan": "p",
"ing": "y",
"ou": "b",
"ia": "d",
"ua": "d",
"iao": "z",
"ue": "m",
"ui": "m",
"un": "n",
},
}
}
// CnEn 从 others/cn_en.txt 生成全拼和各个双拼的中英混输词库
func CnEn() {
// 控制台输出
defer printlnTimeCost("更新中英混输 ", time.Now())
cnEnTXT, err := os.Open(filepath.Join(RimeDir, "others/cn_en.txt"))
if err != nil {
log.Fatalln(err)
}
defer cnEnTXT.Close()
schemas := []schema{
{name: "cn_en", desc: "全拼", combinationType: "unique", path: filepath.Join(RimeDir, "en_dicts/cn_en.txt")},
doublePinyin,
doublePinyinFlypy,
doublePinyinMSPY,
doublePinyinSogou,
doublePinyinZiGuang,
doublePinyinABC,
}
// 写入前缀内容
for i := range schemas {
schemas[i].file, err = os.OpenFile(schemas[i].path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
log.Fatalln(err)
}
writePrefix(schemas[i])
}
// 转换注音并写入,顺便查重
uniq := mapset.NewSet[string]()
sc := bufio.NewScanner(cnEnTXT)
for sc.Scan() {
line := sc.Text()
if line == "" || strings.HasPrefix(line, "#") {
continue
}
if strings.TrimSpace(line) != line {
fmt.Println("❌ 前后有空格", line)
}
if uniq.Contains(line) {
fmt.Println("❌ 重复", line)
continue
}
uniq.Add(line)
for _, schema := range schemas {
if schema.combinationType != "multi" {
code := textToPinyin(line, schema)
_, err := schema.file.WriteString(line + "\t" + code + "\n")
if err != nil {
log.Fatalln(err)
}
lowerCode := strings.ToLower(code)
if code != lowerCode {
_, err := schema.file.WriteString(line + "\t" + lowerCode + "\n")
if err != nil {
log.Fatalln(err)
}
}
} else {
codes := textToPinyinMulti(line, schema)
for _, code := range codes {
_, err := schema.file.WriteString(line + "\t" + code + "\n")
if err != nil {
log.Fatalln(err)
}
lowerCode := strings.ToLower(code)
if code != lowerCode {
_, err := schema.file.WriteString(line + "\t" + lowerCode + "\n")
if err != nil {
log.Fatalln(err)
}
}
}
}
}
}
for i := range schemas {
schemas[i].file.Close()
}
}
// 写入前缀内容
func writePrefix(s schema) {
content := fmt.Sprintf(`# Rime table
# coding: utf-8
#@/db_name %s.txt
#@/db_type tabledb
#
# https://github.com/iDvel/rime-ice
# ------- 中英混输词库 for %s -------
# others/cn_en.txt 自动生成
#
# 此行之后不能写注释
`, s.name, s.desc)
_, err := s.file.WriteString(content)
if err != nil {
log.Fatalln(err)
}
}
// 生成编码,返回原大小写
func textToPinyin(text string, s schema) string {
var code string
parts := splitMixedWords(text)
for _, part := range parts {
if digit, ok := digitMap[part]; ok { // 数字
if s.desc == "全拼" {
code += hanPinyin[digit][0]
} else {
code += convertToDoublePinyin(hanPinyin[digit][0], s)
}
} else if len(hanPinyin[part]) == 0 { // 不在字典的就是英文,返回原大小写
code += part
} else if len(hanPinyin[part]) > 1 { // 多音字,按字典指定的读音
if value, ok := polyphones[text+" > "+part]; ok {
if s.desc == "全拼" {
code += value
} else {
code += convertToDoublePinyin(value, s)
}
} else {
log.Fatalln("❌ 多音字未指定读音", text, part)
}
} else { // 其他,按唯一的读音
if s.desc == "全拼" {
code += hanPinyin[part][0]
} else {
code += convertToDoublePinyin(hanPinyin[part][0], s)
}
}
}
return code
}
func textToPinyinMulti(text string, s schema) []string {
parts := splitMixedWords(text)
map4DoublePinyins := make(map[int][]string)
for index, part := range parts {
if digit, ok := digitMap[part]; ok { // 数字
map4DoublePinyins[index] = convertToDoublePinyinMulti(hanPinyin[digit][0], s)
} else if len(hanPinyin[part]) > 1 { // 多音字,按字典指定的读音
if value, ok := polyphones[text+" > "+part]; ok {
map4DoublePinyins[index] = convertToDoublePinyinMulti(value, s)
} else {
log.Fatalln("❌ 多音字未指定读音", text, part)
}
} else if len(hanPinyin[part]) == 1 {
// 非多音字汉字,按唯一的读音
map4DoublePinyins[index] = convertToDoublePinyinMulti(hanPinyin[part][0], s)
}
}
var result = make([]string, 0)
return stepFurther(parts, 0, "", map4DoublePinyins, result)
}
func stepFurther(parts []string, index int, arranged string, map4DoublePinyins map[int][]string, result []string) []string {
if index >= len(parts) {
result = append(result, arranged)
return result
}
if combinations, ok := map4DoublePinyins[index]; ok {
// 数字或汉字
for _, combination := range combinations {
result = stepFurther(parts, index+1, arranged+combination, map4DoublePinyins, result)
}
} else {
// 英文字母
result = stepFurther(parts, index+1, arranged+parts[index], map4DoublePinyins, result)
}
return result
}
// 中英文分割,去掉间隔号、句点和横杠
// "哆啦A梦" → ["哆", "啦", "A", "梦"]
// "QQ号" → ["QQ", "号"]
// "Wi-Fi密码" → ["WiFi", "密", "码"]
// "乔治·R.R.马丁" → ["乔", "治", "RR", "马", "丁"]
// "A4纸" → ["A", "4", "纸"]
func splitMixedWords(input string) []string {
var result []string
word := ""
for _, r := range input {
if string(r) == "·" || string(r) == "-" || string(r) == "." {
continue
} else if unicode.Is(unicode.Latin, r) {
word += string(r)
} else {
if word != "" {
result = append(result, word)
word = ""
}
result = append(result, string(r))
}
}
if word != "" {
result = append(result, word)
}
return result
}
// 将全拼 code 转为双拼 code
func convertToDoublePinyin(code string, s schema) string {
// 零声母
if contains([]string{"a", "e", "o", "ai", "ei", "ou", "an", "en", "ang", "eng", "ao", "er"}, code) {
return s.mapping["-"+code+"-"]
}
// 分割为声母和韵母
consonantRegexp := regexp.MustCompile(`^(b|p|m|f|d|t|n|l|g|k|h|j|q|x|zh|ch|sh|r|z|c|s|y|w)`)
initial := consonantRegexp.FindString(code)
final := consonantRegexp.ReplaceAllString(code, "")
// 声母转换
if initial == "zh" || initial == "ch" || initial == "sh" {
initial = s.mapping[initial]
}
// 韵母转换
if len(final) > 1 {
final = s.mapping[final]
}
// 其余单个的声母和韵母不转换
return initial + final
}
func convertToDoublePinyinMulti(code string, s schema) []string {
// 零声母
i := []string{"a", "e", "o", "ai", "ei", "ou", "an", "en", "ang", "eng", "ao", "er"}
if contains(i, code) {
return []string{s.mapping["-"+code+"-"]}
}
// 分割为声母和韵母
consonantRegexp := regexp.MustCompile(`^(b|p|m|f|d|t|n|l|g|k|h|j|q|x|zh|ch|sh|r|z|c|s|y|w)`)
initial := consonantRegexp.FindString(code)
final := consonantRegexp.ReplaceAllString(code, "")
// 声母转换
isRetroflex := initial == "zh" || initial == "ch" || initial == "sh"
if isRetroflex {
initial = s.mapping[initial]
}
// 韵母转换
if len(final) > 1 {
final = s.mapping[final]
}
var result []string
if isRetroflex || len(final) > 1 {
leadings := strings.Split(initial, ",")
followings := strings.Split(final, ",")
for _, leading := range leadings {
for _, following := range followings {
if exclusion, ok := s.excludingMapping[code]; ok {
if exclusion == (leading + following) {
continue
}
}
result = append(result, leading+following)
}
}
} else {
// 其余单个的声母和韵母不转换
result = append(result, initial+final)
}
if addition, ok := s.additionalMapping[code]; ok {
result = append(result, addition)
}
return result
}

View File

@ -0,0 +1,18 @@
//go:build linux
// +build linux
package rime
import (
"log"
"os/user"
"path/filepath"
)
func getRimeDirForPlatform() string {
u, err := user.Current()
if err != nil {
log.Fatalln(err)
}
return filepath.Join(u.HomeDir, ".config", "rime")
}

View File

@ -0,0 +1,19 @@
//go:build darwin
// +build darwin
package rime
import (
"log"
"os/user"
"path/filepath"
)
// 获取 macOS Rime 配置目录
func getRimeDirForPlatform() string {
u, err := user.Current()
if err != nil {
log.Fatalln(err)
}
return filepath.Join(u.HomeDir, "Library/Rime")
}

View File

@ -0,0 +1,43 @@
//go:build windows
// +build windows
package rime
import (
"golang.org/x/sys/windows/registry"
"log"
"os"
"path/filepath"
)
// 获取 Windows Rime 配置目录
func getRimeDirForPlatform() string {
keyPath := `Software\Rime\Weasel`
valueName := "RimeUserDir"
// Get from Windows registry
k, err := registry.OpenKey(registry.CURRENT_USER, keyPath, registry.QUERY_VALUE)
if err != nil {
log.Printf("Failed to open registry key: %v\n", err)
// Fallback to default dir
return getDefaultWeaselDir()
}
defer k.Close()
rimeUserDir, _, err := k.GetStringValue(valueName)
if err != nil {
log.Printf("Failed to read registry value: %v\n", err)
// Fallback to default dir
return getDefaultWeaselDir()
}
return rimeUserDir
}
func getDefaultWeaselDir() string {
appData := os.Getenv("APPDATA") // AppData\Roaming
if appData == "" {
log.Fatalln("APPDATA environment variable is not set.")
}
return filepath.Join(appData, "Rime")
}

217
others/script/rime/emoji.go Normal file
View File

@ -0,0 +1,217 @@
package rime
import (
"bufio"
"fmt"
mapset "github.com/deckarep/golang-set/v2"
"log"
"os"
"path/filepath"
"regexp"
"strings"
"time"
"unicode/utf8"
)
// CheckAndGenerateEmoji
// 检查 emoji-map.txt 是否合法,检查中文映射是否存在于 base 词库中
// 生成 Rime 格式的 emoji.txt
// 检查 other.txt 中文映射是否存在于 base 词库中
func CheckAndGenerateEmoji() {
// 控制台输出
defer printlnTimeCost("检查、更新 Emoji", time.Now())
checkEmoji()
generateEmoji()
checkOthersTXT()
}
// 检查 emoji-map.txt 是否合法,检查中文映射是否存在于 base 词库中
func checkEmoji() {
// 打开文件
file, err := os.Open(EmojiMapPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 将 Emoji 加入一个 set为检测差集做准备
emojiSet := mapset.NewSet[string]()
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
// 过滤空行
if line == "" {
continue
}
// 过滤注释
if strings.Contains(line, "#") {
continue
}
// 检查:是否包含 Tab
if strings.Contains(line, "\t") {
fmt.Println("❌ contains Tab", line)
continue
}
// 检查:开头结尾无效的空格
if strings.HasPrefix(line, " ") || strings.HasSuffix(line, " ") {
fmt.Println("❌ unexpected space", line)
continue
}
// 开始分割
parts := strings.Split(line, " ")
if len(parts) < 2 {
fmt.Println("❌ invalid line", line)
continue
}
// 加入 emojiSet顺便用一个 tempSet 查重
tempSet := mapset.NewSet[string]()
for _, text := range parts[1:] {
emojiSet.Add(text)
if tempSet.Contains(text) {
fmt.Println("❌ duplicate mapping", text)
} else {
tempSet.Add(text)
}
}
}
if err := sc.Err(); err != nil {
log.Fatalln(err)
}
// 检查: emoji-map.txt 中的映射是否存在于 base 词库中,有差集即不存在
for _, text := range emojiSet.Difference(BaseSet).ToSlice() {
// 不检查英文
if match, _ := regexp.MatchString(`[a-zA-Z]`, text); match {
continue
}
// 不检查 1 个字的
if utf8.RuneCountInString(text) == 1 {
continue
}
fmt.Println("❌ Emoji 与 base 的差集:", text)
}
}
// 从 emoji-map.txt 生成或更新 emoji.txt
func generateEmoji() {
// 打开文件
file, err := os.Open(EmojiMapPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 模拟有序字典
OmKeys := make([]string, 0)
OmMap := make(map[string][]string)
// 将映射读取到字典里
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
if strings.HasPrefix(line, "#") && !strings.Contains(line, "井号") { // 井号的 Emoji 被判断为以 # 开头了。。。
continue
}
parts := strings.Split(line, " ")
for _, text := range parts[1:] {
if !contains(OmKeys, text) {
OmKeys = append(OmKeys, text)
}
OmMap[text] = append(OmMap[text], parts[0])
}
}
if err := sc.Err(); err != nil {
log.Fatalln(err)
}
// 写入 emoji.txt
file, err = os.OpenFile(EmojiPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
for _, key := range OmKeys {
line := key + "\t" + key + " " + strings.Join(OmMap[key], " ") + "\n"
_, err := file.WriteString(line)
if err != nil {
log.Fatalln(err)
}
}
if err := file.Sync(); err != nil {
log.Fatalln(err)
}
}
// 检查 others.txt 里的中文映射是否存在于 base 词库中
func checkOthersTXT() {
// 打开文件
file, err := os.Open(filepath.Join(RimeDir, "opencc/others.txt"))
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 将 Emoji 加入一个 set为检测差集做准备
set := mapset.NewSet[string]()
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
// 不能有空行
if line == "" {
fmt.Println("❌ empty line")
}
// 过滤注释
if strings.HasPrefix(line, "----------") {
continue
}
text := strings.Split(line, "\t")[0]
if set.Contains(text) {
fmt.Println("❌ duplicate key", text)
} else {
set.Add(text)
}
}
// base+cn_dicts/others.dict.yaml
othersDictYamlSet := mapset.NewSet[string]()
othersDictYaml, err := os.Open(filepath.Join(RimeDir, "cn_dicts/others.dict.yaml"))
if err != nil {
log.Fatalln(err)
}
defer othersDictYaml.Close()
sc = bufio.NewScanner(othersDictYaml)
isMark := false
for sc.Scan() {
line := sc.Text()
if !isMark {
if strings.HasPrefix(line, "##### 叠字") {
isMark = true
}
continue
}
if strings.HasPrefix(line, "#") {
continue
}
text := strings.Split(line, "\t")[0]
othersDictYamlSet.Add(text)
}
// 检查: emoji-map.txt 中的映射是否存在于 base+cn_dicts/others.dict.yaml 词库中,有差集即不存在
dictSet := BaseSet.Union(othersDictYamlSet)
for _, text := range set.Difference(dictSet).ToSlice() {
// 不检查英文
if match, _ := regexp.MatchString(`[a-zA-Z]`, text); match {
continue
}
// 不检查 1 个字的
if utf8.RuneCountInString(text) == 1 {
continue
}
fmt.Println("❌ others.txt 与 base 的差集:", text)
}
}

View File

@ -0,0 +1,147 @@
package rime
import (
"bufio"
"fmt"
mapset "github.com/deckarep/golang-set/v2"
"log"
"os"
"strconv"
"strings"
"unicode/utf8"
)
// 一些临时用的函数
func Temp() {
// GeneratePinyinTest("你的行动力")
// GeneratePinyinTest("都挺长的")
// GeneratePinyinTest("血条长")
// findP(BasePath, "血")
// Pinyin(ExtPath)
// AddWeight(ExtPath, 100)
}
// 列出字表中多音字的状况:是否参与自动注音
func polyphone() {
// open file
file, err := os.Open(HanziPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 将所有读音读入 m
type py struct {
pinyin string
weight int
isAuto bool // 是否参与自动注音
}
m := make(map[string][]py)
sc := bufio.NewScanner(file)
isMark := false
for sc.Scan() {
line := sc.Text()
if !isMark {
if line == "..." {
isMark = true
}
continue
}
if line == "" || strings.HasPrefix(line, "#") {
continue
}
parts := strings.Split(line, "\t")
if len(parts) != 3 {
log.Fatalln("len(parts) != 3", line)
}
hanzi, pinyin := parts[0], parts[1]
weight, _ := strconv.Atoi(parts[2])
m[hanzi] = append(m[hanzi], py{pinyin: pinyin, weight: weight})
}
// 判断是否参与注音
for hanzi, pys := range m {
if len(pys) == 1 {
continue
}
// 找到最大的权重
max := 0
for _, py := range pys {
if py.weight > max {
max = py.weight
}
}
// 计算其他权重相较于 max 的比值,是否大于 0.05
for i, py := range pys {
if py.weight == max {
m[hanzi][i].isAuto = true
} else if float64(py.weight)/float64(max) > 0.05 {
m[hanzi][i].isAuto = true
}
}
// 输出
fmt.Println(hanzi)
for _, py := range pys {
fmt.Println(py.pinyin, py.weight, py.isAuto)
}
}
}
// 在词库中找到此行是否包含同义多音字如果包含且长度大于等于3从文件中删除这行并将所有删除的行写入到 1.txt 中
func findP(dictPath string, ch string) {
// open file
file, err := os.OpenFile(dictPath, os.O_RDWR, 0666)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
outFile, err := os.Create("1.txt")
if err != nil {
log.Fatalln(err)
}
defer outFile.Close()
lines := make([]string, 0)
isMark := false
sc := bufio.NewScanner(file)
set := mapset.NewSet[string]() // 去重用的
for sc.Scan() {
line := sc.Text()
if !isMark {
lines = append(lines, line)
if line == mark {
isMark = true
}
continue
}
if line == "" || strings.HasPrefix(line, "#") {
lines = append(lines, line)
continue
}
parts := strings.Split(line, "\t")
if len(parts) != 3 {
log.Fatalln("len(parts) != 3", line)
}
text := parts[0]
if strings.Contains(text, ch) && utf8.RuneCountInString(text) >= 3 && !set.Contains(text) {
outFile.WriteString(line + "\n")
} else {
set.Add(text)
lines = append(lines, line)
}
}
// 从 lines 重新写入 file
file.Truncate(0)
file.Seek(0, 0)
for _, line := range lines {
file.WriteString(line + "\n")
}
fmt.Println("done")
}

View File

@ -0,0 +1,411 @@
package rime
import (
"bufio"
"fmt"
"log"
"os"
"path"
"strconv"
"strings"
"time"
"unicode"
"unicode/utf8"
"github.com/yanyiwu/gojieba"
)
var jieba = gojieba.NewJieba()
// 汉字-拼音 映射
var hanziPinyin = make(map[string][]string) // 使用 check.go 中的 hanPinyin再经过 onlyOne 替换
// 词组-拼音 映射
var wordPinyin = make(map[string][]string)
// 指定唯一读音
// 1. 同义多音字
// 2. 一般只在特定的词组中发某个音如「浚xun县」的「浚jun」只在这里念 xun已经包含了特定的映射其余的均使用最常见的注音
// 3. 还有一些多音字,一个音是主流常用,一个音基本不会使用,如「奘」的 zhuang/zang只保留 zang
var onlyOne = map[string]string{
// 同义多音字,但是两种读音是通用的(有的是全部通用,有的是部分含义通用),暂时只选取一种读音,由其他脚本完成多种注音的处理
"谁": "shei",
"血": "xue",
"熟": "shu",
"露": "lu",
"掴": "guai",
"棽": "shen",
"爪": "zhua",
"薄": "bo",
"剥": "bo",
"哟": "yo",
"嚼": "jiao",
"密钥": "mi yao",
"公钥": "gong yao",
"私钥": "si yao",
"甲壳": "jia ke",
"掉色": "diao se",
"怎么着": "zen me zhe",
"这么着": "zhe me zhe",
"那么着": "na me zhe",
// 其他多音字,指定唯一读音
"的": "de",
"了": "le",
"核儿": "he er",
"核": "he",
"褪下": "tui xia",
"褪": "tui",
"便便": "bian bian",
"便宜": "pian yi",
"便": "bian",
"尿尿": "niao niao",
"尿": "niao",
"衣裳": "yi shang",
"裳": "shang",
"喳喳": "zha zha",
"喳": "zha",
"脉脉": "mo mo",
"脉": "mai",
"呱呱": "gua gua",
"呱": "gua",
"咀": "ju",
"大王": "da wang",
"大伯": "da bo",
"大": "da",
"摩挲": "mo suo",
"摩": "mo",
"澄清": "cheng qing",
"澄": "cheng",
"出车": "chu che",
"车": "che",
"约一约": "yue yi yue",
"约": "yue",
"绿营": "lv ying",
"绿": "lv",
"圈里": "quan li",
"圈外": "quan wai",
"咱家": "zan jia",
"圈": "quan",
"伯": "bo",
"胖": "pang",
"南": "nan",
"颈": "jing",
"氏": "shi",
"度": "du",
"柜": "gui",
"奘": "zang",
"叶": "ye",
"吭": "keng",
"纶": "lun",
"莎": "sha",
"噌": "ceng",
"解": "jie",
"价": "jia",
"种": "zhong",
"嘚": "de",
"浚": "jun",
"枸": "gou",
"拾": "shi",
"塞": "sai",
"膻": "shan",
"数": "shu",
"媞": "ti",
"哦": "o",
"络": "luo",
"俩": "lia",
"咋": "za",
"否": "fou",
"尾": "wei",
"弄": "nong",
"强": "qiang",
"烙": "lao",
"卜": "bu",
"祭": "ji",
"缉": "ji",
"侥": "jiao",
"驮": "tuo",
"陆": "lu",
"盖": "gai",
"色": "se",
"涌": "yong",
"栅": "zha",
"啜": "chuo",
"涡": "wo",
"券": "quan",
"糜": "mi",
"焯": "chao",
"藉": "ji",
"蚌": "bang",
"沌": "dun",
"殷": "yin",
"翟": "zhai",
"腌": "yan",
"佛": "fo",
"合": "he",
"乘": "cheng",
"溃": "kui",
"牟": "mou",
"疟": "nve",
"雀": "que",
"虹": "hong",
"碌": "lu",
"捋": "lv",
"堡": "bao",
"读": "du",
"蛤": "ha",
"繁": "fan",
"巷": "xiang",
"磅": "bang",
"粘": "zhan",
"见": "jian",
"筠": "yun",
"会": "hui",
"铅": "qian",
"呢": "ne",
"栎": "li",
"咽": "yan",
"殖": "zhi",
"泷": "long",
"迫": "po",
"囤": "tun",
"娜": "na",
"纤": "xian",
"嘘": "xu",
"阿": "a",
"泌": "mi",
"咯": "lo",
"扁": "bian",
"综": "zong",
"哪": "na",
"艾": "ai",
"期": "qi",
"晟": "sheng",
"召": "zhao",
"瀑": "pu",
"棱": "leng",
"区": "qu",
"蔓": "man",
"亟": "ji",
"蔚": "wei",
"莘": "shen",
"石": "shi",
"炮": "pao",
"喋": "die",
"句": "ju",
"杉": "shan",
"臭": "chou",
"禅": "chan",
"埋": "mai",
"仇": "chou",
"和": "he",
"折": "zhe",
"单": "dan",
"臂": "bi",
"提": "ti",
"贾": "jia",
"澹": "dan",
"扛": "kang",
"员": "yuan",
"戌": "xu",
"楷": "kai",
"卒": "zu",
"兹": "zi",
"秘": "mi",
"洞": "dong",
"番": "fan",
"亲": "qin",
"洗": "xi",
"无": "wu",
"缩": "suo",
"尺": "chi",
"差": "cha",
"说": "shuo",
"貉": "hao",
"术": "shu",
"龟": "gui",
"万": "wan",
"没": "mei",
"查": "cha",
"省": "sheng",
"卡": "ka",
"奇": "qi",
"择": "ze",
"峙": "zhi",
"戛": "jia",
"绰": "chuo",
"葚": "shen",
"嘞": "lei",
"凹": "ao",
"给": "gei",
"栖": "qi",
"窨": "yin",
}
func initPinyin() {
// 从 base、ext 准备结巴的词典和词组拼音映射
for _, dictPath := range []string{BasePath, ExtPath} {
file, err := os.Open(dictPath)
if err != nil {
log.Fatalln(err)
}
sc := bufio.NewScanner(file)
isMark := false
for sc.Scan() {
line := sc.Text()
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
if strings.HasPrefix(line, "#") || line == "" {
continue
}
parts := strings.Split(line, "\t")
if len(parts) != 3 || !isAllLower(parts[1]) {
continue
}
text, code := parts[0], parts[1]
weight, err := strconv.Atoi(parts[2])
if err != nil {
log.Fatalln(err, line)
}
jieba.AddWordEx(text, weight, "")
wordPinyin[text] = append(wordPinyin[text], code)
}
file.Close()
}
// 拷贝 hanPinyin 到 hanziPinyin再从 onlyOne 替换掉映射中的注音
for k, v := range hanPinyin {
hanziPinyin[k] = v
}
for text, code := range onlyOne {
if utf8.RuneCountInString(text) == 1 {
hanziPinyin[text] = []string{code}
} else {
wordPinyin[text] = []string{code}
}
}
}
// Pinyin 半自动的注音
// 能准确注音的,注音;拿不准的,留着手动注音
func Pinyin(dictPath string) {
// 控制台输出
defer printlnTimeCost("注音\t"+path.Base(dictPath), time.Now())
// 读取到 lines 数组
file, err := os.ReadFile(dictPath)
if err != nil {
log.Fatalln(err)
}
lines := strings.Split(string(file), "\n")
// 遍历、注音
isMark := false
for i, line := range lines {
if strings.Contains(dictPath, "temp") {
isMark = true
}
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
if line == "" {
continue
}
parts := strings.Split(line, "\t")
text := parts[0]
var code string
// parts[1] 可能是:空、已经注音完成、注音到一半(含有未能自动注音的多音字汉字)
// 注音完成的,不再注音,其余的进行注音
if len(parts) == 1 { // 只有汉字
code = generatePinyin(text)
} else if len(parts) == 2 || len(parts) == 3 {
if isAllLower(parts[1]) { // 全小写,不包含汉字,代表已经注音完成
code = parts[1]
} else { // 注音到一半(含有汉字),重新注音
code = generatePinyin(text)
}
} else {
log.Fatalln("分割错误:", line)
}
lines[i] = text + "\t" + code
}
// 写入
resultString := strings.Join(lines, "\n")
err = os.WriteFile(dictPath, []byte(resultString), 0644)
if err != nil {
log.Fatal(err)
}
}
// 生成拼音
// 多音字的处理:
// 如果 wordPinyin 没有包含多音字的映射, 返回 []string{"gao xing 地 beng qi lai"} 然后手动注音
// 如果 wordPinyin 包含「高兴地 gao xing de」则将 "高兴地蹦起来" 返回 []string{"gao xing de beng qi lai"}
func generatePinyin(s string) string {
var r string
words := jieba.Cut(s, true)
for _, word := range words {
// 单字,且不是多音字
if utf8.RuneCountInString(word) == 1 && len(hanziPinyin[word]) == 1 {
r += hanziPinyin[word][0] + " "
continue
}
// 词组,且映射中没有多种注音
if len(wordPinyin[word]) == 1 {
r += wordPinyin[word][0] + " "
continue
}
// 词组,未能通过映射进行注音,但本身不包含多音字
notPolyphone := false
for _, char := range word {
if len(hanziPinyin[string(char)]) > 1 {
notPolyphone = true
break
}
}
if !notPolyphone {
for _, char := range word {
r += hanziPinyin[string(char)][0] + " "
}
continue
}
// 其他的不处理,直接返回汉字
r += word + " "
}
return strings.TrimSpace(r)
}
// GeneratePinyinTest 临时测试一个
func GeneratePinyinTest(s string) {
words := jieba.Cut(s, true)
r := generatePinyin(s)
fmt.Printf("%s %q\n", words, r)
}
// 判断 code 是否全小写,不判断空格
func isAllLower(s string) bool {
for _, ch := range s {
if ch == ' ' {
continue
}
if !unicode.IsLower(ch) {
return false
}
}
return true
}

View File

@ -0,0 +1,96 @@
package rime
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
// 同义多音字
var polyphonicWords = []string{
"谁",
"血",
"熟",
"掴",
"爪",
"薄",
"剥",
"哟",
"嚼",
"忒", // te 不是tui 和 tei 是
"密钥",
"公钥",
"私钥",
"甲壳",
"掉色",
}
// 不检查的词汇
var polyphonicWordsFilter = []string{
"咀嚼", "倒嚼", "嚼着", "咬文嚼字", "嚼用", "嚼服", "马嚼子", "嚼了", "干嚼", "边嚼边", "嚼舌", "嚼不了", "嚼动", "嚼牙",
"淡薄", "姓薄", "微薄", "绵薄", "缘薄", "薄暮", "薄施", "薄言", "儇薄", "鄙薄", "薄的", "薄雾", "薄被", "浇薄", "薄膜", "德薄任重", "德浅行薄", "恶衣薄食", "片长薄技", "薄纸", "硗薄", "薄产", "浅薄", "薄技", "命薄", "薄利", "瘠薄", "凉薄", "薄待", "削薄", "稀薄", "薄地", "喷薄", "薄薪", "薄海", "薄酒", "薄礼", "刻薄", "薄面", "薄命", "磨薄", "薄情", "薄弱", "薄弱地带", "薄弱学校", "薄弱学校改造", "薄志弱行", "薄批细抹", "薄抹灰", "薄伽丘", "薄伽梵", "薄伽梵歌", "薄砂地", "赢得青楼薄幸名", "薄田", "薄物细故", "薄幸", "薄情", "薄葬", "厌薄", "厚积薄发", "履薄临深", "德薄望轻", "菲薄", "履薄", "孤军薄旅", "薄太后", "薄荷", "薄云", "薄鳅",
"剥离", "剥夺", "剥削", "剥落", "剥除", "吞剥", "撕剥", "剥茧", "剥蚀", "剥取", "剥脱", "剥啄", "剥开", "椎肤剥髓", "椎肤剥体", "剥肤椎髓", "毕剥", "剥肤之痛", "环剥", "盘剥", "生吞活剥", "山地剥",
"熟稔", "黄熟", "谙熟", "熟思", "熟睡", "厮熟", "精熟", "熟虑", "熟字", "熟道", "腐熟", "熟地", "熟手", "熟漆", "熟语", "熟妇", "熟路", "熟识", "熟谙", "熟习", "常熟",
"爪哇", "爪儿", "鳞爪", "棘爪", "握爪", "爪子", "爪牙",
"差忒", "忒弥斯", "忒修斯", "破忒头", "安菲特里忒", "阿塔兰忒", "阿佛洛狄忒", "阿芙忒娜", "忒伊亚", "得墨忒耳", "欧忒耳佩",
}
// CheckPolyphone 检查 base、ext 中同义多音字是否有两种读音
// 例如「谁的」应该同时存在 shei de 与 shui de 两种读音
func CheckPolyphone(dictPath string) {
file, err := os.Open(dictPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 将含有同义多音字的词汇放入key 为词汇value 为注音
// 如果注音数组只有一个,则应该补充其他读音
m := make(map[string][]string)
isMark := false
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
if line == "" || strings.HasPrefix(line, "#") {
continue
}
parts := strings.Split(line, "\t")
if len(parts) != 3 {
continue
}
text, code := parts[0], parts[1]
if containsPolyphonicWordsFilter(text) {
continue
}
for _, word := range polyphonicWords {
if strings.Contains(text, word) {
m[text] = append(m[text], code)
}
}
}
// 遍历 m输出单数读音的词汇
for text, codes := range m {
if len(codes)%2 != 0 {
fmt.Println("⚠️ 同义多音字: " + text)
}
}
}
func containsPolyphonicWordsFilter(text string) bool {
for _, filter := range polyphonicWordsFilter {
if strings.Contains(text, filter) {
return true
}
}
return false
}

175
others/script/rime/rime.go Normal file
View File

@ -0,0 +1,175 @@
package rime
import (
"bufio"
"flag"
"fmt"
mapset "github.com/deckarep/golang-set/v2"
"log"
"os"
"path"
"path/filepath"
"strconv"
"strings"
"time"
)
// 一个词的组成部分
type lemma struct {
text string // 汉字
code string // 编码
weight int // 权重
}
var (
mark = "# +_+" // 词库中的标记符号,表示从这行开始进行检查或排序
RimeDir string
EmojiMapPath string
EmojiPath string
HanziPath string
BasePath string
ExtPath string
TencentPath string
HanziSet mapset.Set[string]
BaseSet mapset.Set[string]
ExtSet mapset.Set[string]
TencentSet mapset.Set[string]
需要注音TXT string
错别字TXT string
汉字拼音映射TXT string
AutoConfirm bool
)
func init() {
// 定义命令行参数
flag.StringVar(&RimeDir, "rime_path", "", "Specify the Rime configuration directory")
flag.BoolVar(&AutoConfirm, "auto_confirm", false, "Automatically confirm the prompt")
flag.Parse()
RimeDir = getRimeDir(RimeDir) // Rime 配置目录
EmojiMapPath = filepath.Join(RimeDir, "others/emoji-map.txt")
EmojiPath = filepath.Join(RimeDir, "opencc/emoji.txt")
HanziPath = filepath.Join(RimeDir, "cn_dicts/8105.dict.yaml")
BasePath = filepath.Join(RimeDir, "cn_dicts/base.dict.yaml")
ExtPath = filepath.Join(RimeDir, "cn_dicts/ext.dict.yaml")
TencentPath = filepath.Join(RimeDir, "cn_dicts/tencent.dict.yaml")
HanziSet = readToSet(HanziPath)
BaseSet = readToSet(BasePath)
ExtSet = readToSet(ExtPath)
TencentSet = readToSet(TencentPath)
需要注音TXT = filepath.Join(RimeDir, "others/script/rime/需要注音.txt")
错别字TXT = filepath.Join(RimeDir, "others/script/rime/错别字.txt")
汉字拼音映射TXT = filepath.Join(RimeDir, "others/script/rime/汉字拼音映射.txt")
initCheck()
initSchemas()
initPinyin()
}
func getRimeDir(rimePath string) string {
if rimePath != "" {
absPath, err := filepath.Abs(rimePath)
if err != nil {
log.Fatalf("Failed to get absolute path: %v", err)
}
// 使用传入的路径
return absPath
}
return getRimeDirForPlatform()
}
// 将所有词库读入 set供检查或排序使用
func readToSet(dictPath string) mapset.Set[string] {
set := mapset.NewSet[string]()
file, err := os.Open(dictPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
sc := bufio.NewScanner(file)
isMark := false
for sc.Scan() {
line := sc.Text()
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
parts := strings.Split(line, "\t")
set.Add(parts[0])
}
return set
}
// 打印耗时时间
func printlnTimeCost(content string, start time.Time) {
// fmt.Printf("%s\t%.2fs\n", content, time.Since(start).Seconds())
printfTimeCost(content, start)
fmt.Println()
}
// 打印耗时时间
func printfTimeCost(content string, start time.Time) {
fmt.Printf("%s\t%.2fs", content, time.Since(start).Seconds())
}
// slice 是否包含 item
func contains(arr []string, item string) bool {
for _, x := range arr {
if item == x {
return true
}
}
return false
}
// AddWeight 为 ext、tencent 没权重的词条加上权重,有权重的改为 weight
func AddWeight(dictPath string, weight int) {
// 控制台输出
printlnTimeCost("加权重\t"+path.Base(dictPath), time.Now())
// 读取到 lines 数组
file, err := os.ReadFile(dictPath)
if err != nil {
log.Fatal(err)
}
lines := strings.Split(string(file), "\n")
isMark := false
for i, line := range lines {
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
// 过滤空行
if line == "" {
continue
}
// 修改权重为传入的 weight没有就加上
parts := strings.Split(line, "\t")
_, err := strconv.Atoi(parts[len(parts)-1])
if err != nil {
lines[i] = line + "\t" + strconv.Itoa(weight)
} else {
lines[i] = strings.Join(parts[:len(parts)-1], "\t") + "\t" + strconv.Itoa(weight)
}
}
// 写入
resultString := strings.Join(lines, "\n")
err = os.WriteFile(dictPath, []byte(resultString), 0644)
if err != nil {
log.Fatal(err)
}
}

301
others/script/rime/sort.go Normal file
View File

@ -0,0 +1,301 @@
package rime
import (
"bufio"
"crypto/sha1"
"encoding/hex"
"fmt"
mapset "github.com/deckarep/golang-set/v2"
"io"
"log"
"os"
"path"
"sort"
"strconv"
"strings"
"time"
)
func Sort(dictPath string, _type int) {
// 控制台输出
defer updateVersion(dictPath, getSha1(dictPath))
defer printfTimeCost("排序 "+path.Base(dictPath), time.Now())
// 打开文件
file, err := os.OpenFile(dictPath, os.O_RDWR, 0644)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 前缀内容切片、词库切片,前者原封不动写入,后者排序后写入
prefixContents := make([]string, 0) // 前置内容
contents := make([]lemma, 0) // 词库
aSet := mapset.NewSet[string]() // 去重用的的 set
isMark := false
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
if !isMark {
// mark 之前的写入 prefixContents
prefixContents = append(prefixContents, line)
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
// 分割为 text code weight
parts := strings.Split(line, "\t")
text, code, weight := parts[0], "", ""
// 检查分割长度
if (_type == 1 || _type == 2 || _type == 3) && len(parts) != _type {
log.Println("分割错误123")
}
if _type == 4 && len(parts) != 2 {
fmt.Println("分割错误4")
}
// 将 base 中注释了但没删除的词汇的权重调为 0
if dictPath == BasePath && strings.HasPrefix(line, "# ") {
parts[2] = "0"
}
// mark 之后的,写入到 contents
// 词库自身有重复内容则直接排除,不重复的写入到 contents
switch _type {
case 1: // 一列 【汉字】
if aSet.Contains(text) {
fmt.Println("重复:", line)
continue
}
aSet.Add(text)
contents = append(contents, lemma{text: text})
case 2: // 两列 【汉字+注音】
text, code = parts[0], parts[1]
if aSet.Contains(text + code) {
fmt.Println("重复:", line)
continue
}
aSet.Add(text + code)
contents = append(contents, lemma{text: text, code: code})
case 3: // 三列 【汉字+注音+权重】
text, code, weight = parts[0], parts[1], parts[2]
if aSet.Contains(text + code) {
fmt.Println("重复:", line)
continue
}
aSet.Add(text + code)
weight, _ := strconv.Atoi(weight)
contents = append(contents, lemma{text: text, code: code, weight: weight})
case 4: // 两列 【汉字+权重】
text, weight = parts[0], parts[1]
if aSet.Contains(text) {
fmt.Println("重复:", line)
continue
}
aSet.Add(text)
weight, _ := strconv.Atoi(weight)
contents = append(contents, lemma{text: text, weight: weight})
}
}
if err := sc.Err(); err != nil {
log.Fatalln(err)
}
// 排序:拼音升序,权重降序,最后直接按 Unicode 编码排序
// 英文排序不区分大小写
if strings.Contains(dictPath, "en.dict.yaml") {
sort.SliceStable(contents, func(i, j int) bool {
textI, textJ := strings.ToLower(contents[i].text), strings.ToLower(contents[j].text)
if strings.HasPrefix(textI, "# ") {
textI = textI[2:]
}
if strings.HasPrefix(textJ, "# ") {
textJ = textJ[2:]
}
if textI != textJ {
return textI < textJ
}
return false
})
} else {
sort.SliceStable(contents, func(i, j int) bool {
if contents[i].code != contents[j].code {
return contents[i].code < contents[j].code
}
if contents[i].weight != contents[j].weight {
return contents[i].weight > contents[j].weight
}
if contents[i].text != contents[j].text {
return contents[i].text < contents[j].text
}
return false
})
}
// 准备写入,清空文件,移动指针到开头
err = file.Truncate(0)
if err != nil {
log.Fatalln(err)
}
_, err = file.Seek(0, 0)
if err != nil {
log.Fatalln(err)
}
// 写入前缀
for _, line := range prefixContents {
_, err := file.WriteString(line + "\n")
if err != nil {
log.Fatalln(err)
}
}
// 字表、base 直接写入,不需要从其他词库去重
if dictPath == HanziPath || dictPath == BasePath {
for _, line := range contents {
_, err := file.WriteString(line.text + "\t" + line.code + "\t" + strconv.Itoa(line.weight) + "\n")
if err != nil {
log.Fatalln(err)
}
}
}
// ext tencent 词库需要从一个或多个词库中去重后再写入
if dictPath == ExtPath || dictPath == TencentPath {
var intersect mapset.Set[string] // 交集,有交集的就是重复的
switch dictPath {
case ExtPath:
intersect = ExtSet.Intersect(BaseSet)
case TencentPath:
intersect = TencentSet.Intersect(BaseSet.Union(ExtSet))
}
for _, line := range contents {
if intersect.Contains(line.text) {
fmt.Printf("%s 重复于其他词库:%s\n", strings.Split(path.Base(dictPath), ".")[0], line.text)
continue
}
var s string
if line.code != "" {
s = line.text + "\t" + line.code + "\t" + strconv.Itoa(line.weight) + "\n"
} else {
s = line.text + "\t" + strconv.Itoa(line.weight) + "\n"
}
_, err := file.WriteString(s)
if err != nil {
log.Fatalln(err)
}
}
}
// 外部词库或临时文件,只排序,不去重
if !contains([]string{HanziPath, BasePath, ExtPath, TencentPath}, dictPath) {
switch _type {
case 1:
for _, line := range contents {
_, err := file.WriteString(line.text + "\n")
if err != nil {
log.Fatalln(err)
}
}
case 2:
for _, line := range contents {
_, err := file.WriteString(line.text + "\t" + line.code + "\n")
if err != nil {
log.Fatalln(err)
}
}
case 3:
for _, line := range contents {
_, err := file.WriteString(line.text + "\t" + line.code + "\t" + strconv.Itoa(line.weight) + "\n")
if err != nil {
log.Fatalln(err)
}
}
case 4:
for _, line := range contents {
_, err := file.WriteString(line.text + "\t" + strconv.Itoa(line.weight) + "\n")
if err != nil {
log.Fatalln(err)
}
}
}
}
if err := file.Sync(); err != nil {
log.Fatalln(err)
}
}
// 获取文件 sha1
func getSha1(dictPath string) string {
f, err := os.Open(dictPath)
if err != nil {
log.Fatal(err)
}
defer f.Close()
sha1Handle := sha1.New()
if _, err := io.Copy(sha1Handle, f); err != nil {
log.Fatal(err)
}
return hex.EncodeToString(sha1Handle.Sum(nil))
}
// 排序后,如果文件有改动,则修改 version 日期,并输出 "...sorted"
func updateVersion(dictPath string, oldSha1 string) {
// 判断文件是否有改变
newSha1 := getSha1(dictPath)
if newSha1 == oldSha1 {
fmt.Println()
return
}
fmt.Println(" ...sorted")
// 打开文件
file, err := os.OpenFile(dictPath, os.O_RDWR, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 修改那一行
arr := make([]string, 0)
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
if strings.HasPrefix(line, "version:") {
s := fmt.Sprintf("version: \"%s\"", time.Now().Format("2006-01-02"))
arr = append(arr, s)
} else {
arr = append(arr, line)
}
}
// 重新写入
err = file.Truncate(0)
if err != nil {
log.Fatal(err)
}
_, err = file.Seek(0, 0)
if err != nil {
log.Fatal(err)
}
for _, line := range arr {
_, err := file.WriteString(line + "\n")
if err != nil {
log.Fatal(err)
}
}
err = file.Sync()
if err != nil {
log.Fatal(err)
}
}

View File

@ -0,0 +1,840 @@
# 汉字拼音映射,用于检查拼音书写是否正确
# 以空格分隔
#
#
### ----------不在字表的注音:----------
珮 pei
塚 zhong
䇲 jia
蒾 mi
荵 ren
鯙 chun
魾 pi
礤 ca
楢 you
鮧 yi
魣 yu
𫚙 pu
𫚪 yu
煐 ying
螉 weng
樋 tong
鳆 fu
𫁡 li
鯮 zong
𧈢 ba
蚖 yuan
䗃 zhan
魟 hong
𮬣 xian
矽 xi
㹴 geng
箝 qian
猼 bo
魮 pi
㞎 ba
䍁 sui
畑 tian
躄 bi
螣 teng
鱎 jiao
蟱 wu
鵖 bi
閦 chu
鳽 jian
獚 huang
爊 ao
鰕 xia
鵙 ju
𫚒 fu
轧 ga
鯥 lu
蜑 dan
鰋 yan
犭 quan
𫚔 hui
鮗 dong
犎 feng
揎 xuan
濬 jun
脝 heng
蠵 xi
鬅 peng
鷃 yan
栱 gong
螲 die
蟷 dang
蟳 xun
鱥 gui
冓 gou
㖏 nie
凪 zhi
栃 li
梶 wei
峠 ka
堀 ku
麿 mo
辻 shi
糸 si
鮨 yi
檵 ji
濛 meng
氽 tun
鯻 la
魠 tuo
脷 li
垅 long
蟌 cong
鱚 xi
鱵 zhen
欻 chua
窾 kuan
稊 ti
粄 ban
拏 na
揾 wen
脢 mei
蚿 xian
𧊕 song
𭎂 zong
### ----------在字表但未被脚本自动纳入的注音:----------
# 嗯 eng # 目前以 en 为主
欸 ei
哟 yo
唷 yo
𰻝 biang
嬢 niang
薙 ti
菈 la
咲 xiao
雫 xia
螓 qin
㨃 dui
𤭢 cei
䞍 qing
跩 zhuai
朊 ruan
鿔 ge
鿭 ni
𫟷 li
鿬 tian
鿫 ao
# -_- ----------这行下面是要过滤掉的词汇,不进行注音检查----------
杭育
氐土貉
道在屎溺
瓦查屎溺
随地便溺
深厉浅揭
神荼郁垒
郁垒神荼
慎馀肉庄
深甽镇
声嘒嘒兮
泥而不滓
蹑蹻担簦
臲卼
蹑景追飞
女红
呕哑嘲哳难为听
毰毸
鬅鬙
夂部
只鸡斗酒定膰吾
枳椇
枳椇子
南枳椇
北枳椇
只恐先春鶗鴂鸣
菓珍
和菓子
姜承録
李汭燦
梁靖崑
比叡
比叡山
曹叡
金叡园
魏明帝曹叡
崔叡娜
林柏叡
逸景佲居
宇髄天元
廻龙村
天廻龙
风吹仙袂飘飖举
飘飖兮
飘飖兮若流风之回雪
绮榭飘飖紫庭客
火齐汤
㺢㹢狓
鵋鶀
榎本温子
榎本武扬
榎木淳弥
榎木孝明
浅浅
约氏獛
瑟氏獛
沙鯭鱼
凵部
陈蕃下榻
砢碜
兰屿大叶螽蟴
肋脦
乐陵
乐陵市
乐陵县
山东省乐陵市
山东乐陵
德州乐陵
乐亭
乐亭大鼓
乐亭市
乐亭县
乐亭镇
唐山乐亭
河北乐亭
派司
郭明錤
奤夿屯
奤夿屯村
虾蟆陵
解州
解州关帝庙
解州镇
韩复榘
汤汤
浩浩汤汤
秏鸡猫儿
浩然与溟涬同科
淈泥扬波
何不淈其泥而扬其波
淈其泥而扬其波
淈其泥扬其波
黑胫侎缘蝽
阿閦鞞佛
阿目佉跋折罗
吠舍佉月
佉卢文
佉卢文字
佉卢字母
佉罗文
佉阳照
僧佉论
僾见忾闻
黯黮章
瞬光斩黯黮
沧源佧佤族自治县
耿马傣族佧佤族自治县
佧佤
佧佤山
佧佤山区
佧佤族
亿萨佧控股
艸部
箣竹
僝僽
剿说
出阝江镇
踧踖不安
等衰
大宛其农场
大宛
宛马
大宛马
宛马至今来
登阵常骑大宛马
宛马总肥春苜蓿
胡马大宛名
大宛国
澳门氹仔
氹仔岛
路氹城
伐木丁丁
梵呗
梵呗圆音
空山梵呗
髣髴兮
髣髴兮若轻云之蔽月
辵部
般若
般若波罗蜜
般若波罗蜜多
般若波罗蜜多心经
般若经
般若库
般若寺
般若心经
般若掌
般若智慧
大般若
大般若经
大梵般若
金刚般若波罗蜜
龙象般若功
摩诃般若波罗蜜
摩诃般若波罗蜜多
螲蟷
闭户螲蟷
蝼螲
台湾螲蟷
螲蟷科
胳肢窝
胳肢窝儿
米泽瑠美
瑠川里菜
醽醁
罗睺
罗睺罗
罗睺罗跋陀罗
罗睺寺
罗睺星
摩睺罗伽
魔祖罗睺
周罗睺
宗罗睺
挼搓
手挼红杏蕊
干将莫邪
呼韩邪单于
呼韩邪
浑邪王
莫邪
上邪
川射干
射干
射干抗病毒注射液
射干利咽口服液
騃儿痴女
痴儿騃女
痴男騃女
峇峇娘惹
峇峇语
峇峇与娘惹
娘惹峇峇
馎饦
大局阢陧
阢陧
阢陧不安
白鼻豿
菶菶萋萋
秘鲁苦蘵
苦蘵
拂士
法家拂士
入则无法家拂士
彩虹锠螺
台湾锠螺
孱头
车善玗
池建玗
卢珉玗
千玗嬉
田峻玗
珣玗琪
朱抮玗
趻踔
陈金釭
陈金釭起义旧址
青釭剑
噌吰
瞠目挢舌
目瞪舌挢
目定舌挢
郕王
城中居民风裂骭
池酒林胾
缏得红罗手帕子
冫部
菠薐菜
狛千代
峬峭
重裀列鼎
列鼎重裀
争逞舞裀歌扇
巛部
粢饭
粢饭糕
粢饭团
踆乌
酂城镇
酂阳乡
大伡
灯灺酒阑
酒阑灯灺
堺利彦
堺雅人
槙原敬之
蛁蟟
蒙蛁蟟蝉
东京喰种
冬温夏凊
夏凊冬温
温凊定省
魀猿
肥醲甘脆
甘脆肥醲
櫜弓卧鼓
卧鼓櫜弓
槁暴
槁项黄馘
黄馘槁项
茖葱
圪饦汤
耿飚
羹藜唅糗
廾部
怀玉被褐
被发拊膺
被发入山
被发文身
被发跣足
被发佯狂
被发阳狂
被发缨冠
被发左衽
被褐怀玉
被褐怀珠
被甲持兵
被甲执兵
被甲执锐
被山带河
执锐被坚
被坚执锐
被甲枕戈
被石兰兮带杜衡
马伊琍
张琍敏
张书旂
崔杋圭
豆䜺儿
都俞吁咈
吁咈都俞
多宝槅
蛾眉螓首
螓首蛾眉
狐埋狐搰
耲耙
阛阓
废太子胤礽
皇太子胤礽
太子胤礽
胤礽
黄泆潼
回雪飘飖转蓬舞
剑首一吷
礓䃰儿
蒋攸铦
官田原三筊埤古水道遗构
阿房
阿房宫
阿房宫赋
秦阿房宫
匚部
放饭流歠
肥䐛䐛
泛驾之马
疯狂的麦咭
丰容盛鬋
撧耳顿足
撧耳挠腮
撧耳揉腮
明里䌷
冒顿
冒顿单于
慕容皝
慕容儁
褦襶
南宫仆射
南蛮鴃舌
囊膪
李搢臣
李搢荣
倪朝搢
陶搢绶
万廷搢
吴玉搢
余搢珊
宏碁集团
宏碁
碁山乡
碁山镇
钱君匋
将进酒
荍坝乡
荍坝镇
幧头
梫星尺蛾
菥蓂
蓂荚
十三味菥蓂丸
湿薪半束抱衾裯
手嶌葵
田嶌纱兰
裋褐
潦水尽而寒潭清
厶部
卡多朿氏魮
丝朿蛤属
司马伷
偲偲
驷玉虬以桀鹥兮
周家硷镇
殢酒淹花
殢雨尤云
殢云尤雨
尤云殢雨
沾云殢雨
转文
右仆射
左仆射
糸部
糸守变电所
糸守高中
糸守湖
糸守镇
四糸乃
鱼丁糸
拂菻国
拂菻坊
罘罳
芣苢
罥烟眉
公乎公乎挂罥于其间
钴鉧潭西小丘记
告朔饩羊
里砦镇
古砦仫佬族乡
冠盖相属
佹得佹失
红嘴鵎鵼
鵎鵼
鵎鵼科
小鵎鵼
胡吹海嗙
胡吹乱嗙
沕沕水
花开荼䕷
开到荼䕷
荼䕷
荼䕷花
蛟龙得雨鬐鬣动
㔾部
卩部
亠部
冂部
六安
六安市
六安县
安徽省六安市
安徽六安
安徽六安市
六合
六合区
南京六合
南京六合区
南京市六合区
穋尔氏朴丽鱼
猸子
艋舺
曚昽
日光曚昽
冖部
宀部
蠛蠓
雅蠛蝶
发奸擿伏
冥行擿埴
擿伏发奸
朙月
朙月拼音
榾柮
嶕峣
楬树蛙
金泘沱
马泘沱
金毛犼
金旼炡
咸恩炡
金鎞刮膜
今日云輧渡鹊桥
蟼掌突蟾
元恶大憝
粔籹
朘削
鵔鸃冠
擖哧
轲峨大艑落帆来
孔传鋕
倥侗
劻勷
啴啴
提携袴中儿
廴部
褎如充耳
轩輶之使
輶轩之使
元气囝仔
侧棱
侧歪
迍邅
邅吾道兮洞庭
张妼晗
李文炤
赵禥
宋度宗赵禥
沼鳝螴
赵昚
宋孝宗赵昚
畇畇
者竜乡
獉狉
杜凯琹
褚小杯大
悃愊无华
嫏嬛
勒掯
䓞草
黎民糠籺窄
睟面盎背
涟洏
连属
亮菛锹甲
林㹭
朴炡禹
柳树酄镇
六硍镇
罗惇曧
马骄偏避幰
霡霂
麦薲草
瞒神諕鬼
铓锣
酕醄大醉
镁蚡
梅瑴成
彭禺厶
埤堄
偏伤周顗情
破斧缺斨
破谜儿
陂陀
尨茸
仆射
千乘万骑
梫木
謦咳
謦咳相闻
庆亲王奕劻
藑茅
跫然
跫音
秋篠宫
篠田步美
篠惠美
黑腄蚃
人面黑腄蚃
蛈蛚
朣朦
已报生擒吐谷浑
吐谷浑
鼧鼥
跅弛不羁
托氏琩螺
刓方为圆
汍澜
玩岁愒日
隐思君兮陫侧
尢部
桜都字幕
桜都字幕组
曱甴
咱家
载云旗之委蛇
虚与委蛇
苲草
众踥蹀而日进兮
钟睒睒
诪张为幻
日居月诸
日朘月削
日削月朘
彡部
石濑兮浅浅
楤木
宋昰昀
蜙蝑
孙昌慜
孙兴慜
索琼茅以筳篿兮
嗒然
嗒然若丧
嗒然若失
嗒然自丧
嗒丧
嗒丧而归
嗒焉若丧
太姥山
天城燐音
团圞
文晸赫
齆鼻儿
齆声齆气
䰀鬌
於靬王
栖栖
栖栖遑遑
傒倖
铣铁
鲜鱼曰脡祭
香色蔚其饛
相濡相呴
相呴相濡
相呴以湿
乡音未改鬓毛衰
晓驾炭车辗冰辙
謏闻浅说
屧粉秋蛩扫
脇野龙
禤靐龘
彐部
掩骼埋胔
严如熤
杨千嬅
乐山乐水
嫛婗
蛡螉
噫吁嚱
櫽栝
远路应悲春晼晚
元気森林
掸邦
掸邦高原
掸邦北部
缅甸掸邦
蟢子
乡音无改鬓毛衰
蠮螉
垣墙皆顿擗
郑克塽
怔忪
中谷有蓷
钟离眜
珠蟞鱼
属辞比事
属望
属意
属意于
属垣有耳
垂緌饮清露
电脑堺
范世錡
青玉案
青玉案元夕
寒螀
三笘薰
曚云之月
杭育杭育
李施嬅
若陀龙王
通什镇
匚匸凵冂
林孝埈
嫑忈嘦姕
兰若
兰若庭
兰若心
兰若寺
琅邪
琅邪王
西山兰若试茶歌
阿兰若
群氓
群氓效应
愚氓
僧是愚氓犹可训
钱松喦
石碁站
石碁镇
欹嵚历落
合原槻羽
大槻响
宍户里帆
三舩美铃
鬼死为聻
鬼死为魙
峇株巴辖
迦叶
迦叶佛
迦叶尊者
大迦叶
摩诃迦叶
优楼频螺迦叶
鲗鱼涌
又双叒叕
钟梓萓
龙行龘龘
前程朤朤
生活䲜䲜
事业燚燚
陈寅恪
陈寅恪先生
蟙䘃
噬嗑
噬嗑卦
火雷噬嗑
天山遯
仚屳屲冚
閟宫有侐
被苫蒙荆
笭箵
笭菁
沟浍皆盈
黄霄雲
蔄山
蔄山镇
暴衣露盖
暴衣露冠
魂不著体
棋输先著
一鞭先著
枝附叶著
宕昌前个木虱
宕昌县
陇南宕昌
宕昌
宕昌山
郦食其
蛣蟟
擸𢶍
蠽蟟
秋山燿平
黄霑
㶉𫛶
朱祐杬
朱载坖
明穆宗朱载坖
金玟庭
金玟哉
李玟娥
李玟真
妺喜
黄晸玟
金昇玟
李玟赫
金玟锡
李玟雨
㵲水
㵲阳河
㵲阳镇
睒电窗
和世㻋
白帢青衫
劈地价来
十夫桡椎
轻裾随风还
耳著明月珰
著我旧时裳
波流弟靡
姓能

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
others/sponsor.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,24 @@
# 双拼补丁示例
目前配置中有个别功能仍然默认使用全拼拼写:
拼字时,全拼需要输入 `uUshuishuishui` 来打出「淼」,小鹤双拼用户更希望使用 `uUuvuvuv` 来打出。
英文派生规则中,全拼输入 `windowsshi` 即得到「Windows 10」小鹤双拼用户更希望使用 `windowsui`
<br>
不能自动适配,需要手动修改一下:
- 英文中部分符号的派生规则:在英文方案文件 `melt_eng.schema.yaml > speller > algebra` 修改为对应的双拼拼写运算
- 部件拆字的拼写规则:在部件拆字方案 `radical_pinyin.schema.yaml > speller > algebra` 修改为对应的双拼拼写运算
<br>
可以参考仓库主页的 README 中使用 plum 一键补丁。
<br>
也可以从此文件夹中直接复制粘贴到配置目录,默认启用的是小鹤的。

View File

@ -0,0 +1,4 @@
# 这是小鹤的补丁,其他双拼将文件名前面那部分改成对应方案 ID 就可以了
patch:
# (按需选择)清空 preedit_format 中的内容,输入时显示双拼编码
translator/preedit_format: []

View File

@ -0,0 +1,10 @@
patch:
# 修改为双拼的拼写派生规则,因为不在同一个文件了,前面要加上文件名
speller/algebra:
# __include: melt_eng.schema.yaml:/algebra_rime_ice # 全拼
# __include: melt_eng.schema.yaml:/algebra_double_pinyin # 自然码双拼
__include: melt_eng.schema.yaml:/algebra_flypy # 小鹤双拼
# __include: melt_eng.schema.yaml:/algebra_mspy # 微软双拼
# __include: melt_eng.schema.yaml:/algebra_sogou # 搜狗双拼
# __include: melt_eng.schema.yaml:/algebra_abc # 智能ABC双拼
# __include: melt_eng.schema.yaml:/algebra_ziguang # 紫光双拼

View File

@ -0,0 +1,10 @@
patch:
# 修改为双拼的拼写派生规则,因为不在同一个文件了,前面要加上文件名
speller/algebra:
# __include: radical_pinyin.schema.yaml:/algebra_pinyin # 全拼
# __include: radical_pinyin.schema.yaml:/algebra_double_pinyin # 自然码双拼
__include: radical_pinyin.schema.yaml:/algebra_flypy # 小鹤双拼
# __include: radical_pinyin.schema.yaml:/algebra_mspy # 微软双拼
# __include: radical_pinyin.schema.yaml:/algebra_sogou # 搜狗双拼
# __include: radical_pinyin.schema.yaml:/algebra_abc # 智能ABC双拼
# __include: radical_pinyin.schema.yaml:/algebra_ziguang # 紫光双拼

64864
radical_pinyin.dict.yaml Normal file

File diff suppressed because it is too large Load Diff

275
radical_pinyin.schema.yaml Normal file
View File

@ -0,0 +1,275 @@
# Rime schema settings
# encoding: utf-8
schema:
schema_id: radical_pinyin
name: "部件拆字 | 全拼双拼"
version: "2.0.0"
author: Mirtle
description: |
用拼音按顺序打出偏旁部件,组合出汉字
码表:开放词典 / henrysting / Mirtle
注音、校对、方案Mirtle
仓库https://github.com/mirtlecn/rime_radical_pinyin
engine:
processors:
- key_binder
- speller
- selector
- navigator
- express_editor
segmentors:
- abc_segmentor
translators:
- echo_translator
- table_translator
filters:
- uniquifier
key_binder:
__include: default:/key_binder?
speller:
alphabet: "abcdefghijklmnopqrstuvwxyz;"
delimiter: " '"
algebra:
# 根据当前所用拼音方案选择 __include 的值
__include: algebra_pinyin # 全拼
# __include: algebra_double_pinyin # 自然码双拼
# __include: algebra_flypy # 小鹤双拼
# __include: algebra_mspy # 微软双拼
# __include: algebra_sogou # 搜狗双拼
# __include: algebra_abc # 智能ABC双拼
# __include: algebra_ziguang # 紫光双拼
translator:
dictionary: radical_pinyin
enable_user_dict: false
algebra_pinyin:
- xform/'//
- derive/^([nl])ue$/$1ve/
- derive/'([nl])ue$/'$1ve/
- derive/^([jqxy])u/$1v/
- derive/'([jqxy])u/'$1v/
algebra_double_pinyin:
- derive/^([jqxy])u(?=^|$|')/$1v/
- derive/'([jqxy])u(?=^|$|')/'$1v/
- derive/^([aoe])([ioun])(?=^|$|')/$1$1$2/
- derive/'([aoe])([ioun])(?=^|$|')/'$1$1$2/
- xform/^([aoe])(ng)?(?=^|$|')/$1$1$2/
- xform/'([aoe])(ng)?(?=^|$|')/'$1$1$2/
- xform/iu(?=^|$|')/<q>/
- xform/[iu]a(?=^|$|')/<w>/
- xform/[uv]an(?=^|$|')/<r>/
- xform/[uv]e(?=^|$|')/<t>/
- xform/ing(?=^|$|')|uai(?=^|$|')/<y>/
- xform/^sh/<u>/
- xform/^ch/<i>/
- xform/^zh/<v>/
- xform/'sh/'<u>/
- xform/'ch/'<i>/
- xform/'zh/'<v>/
- xform/uo(?=^|$|')/<o>/
- xform/[uv]n(?=^|$|')/<p>/
- xform/([a-z>])i?ong(?=^|$|')/$1<s>/
- xform/[iu]ang(?=^|$|')/<d>/
- xform/([a-z>])en(?=^|$|')/$1<f>/
- xform/([a-z>])eng(?=^|$|')/$1<g>/
- xform/([a-z>])ang(?=^|$|')/$1<h>/
- xform/ian(?=^|$|')/<m>/
- xform/([a-z>])an(?=^|$|')/$1<j>/
- xform/iao(?=^|$|')/<c>/
- xform/([a-z>])ao(?=^|$|')/$1<k>/
- xform/([a-z>])ai(?=^|$|')/$1<l>/
- xform/([a-z>])ei(?=^|$|')/$1<z>/
- xform/ie(?=^|$|')/<x>/
- xform/ui(?=^|$|')/<v>/
- xform/([a-z>])ou(?=^|$|')/$1<b>/
- xform/in(?=^|$|')/<n>/
- xform/'|<|>//
algebra_flypy:
- derive/^([jqxy])u(?=^|$|')/$1v/
- derive/'([jqxy])u(?=^|$|')/'$1v/
- derive/^([aoe])([ioun])(?=^|$|')/$1$1$2/
- derive/'([aoe])([ioun])(?=^|$|')/'$1$1$2/
- xform/^([aoe])(ng)?(?=^|$|')/$1$1$2/
- xform/'([aoe])(ng)?(?=^|$|')/'$1$1$2/
- xform/iu(?=^|$|')/<q>/
- xform/(.)ei(?=^|$|')/$1<w>/
- xform/uan(?=^|$|')/<r>/
- xform/[uv]e(?=^|$|')/<t>/
- xform/un(?=^|$|')/<y>/
- xform/^sh/<u>/
- xform/^ch/<i>/
- xform/^zh/<v>/
- xform/'sh/'<u>/
- xform/'ch/'<i>/
- xform/'zh/'<v>/
- xform/uo(?=^|$|')/<o>/
- xform/ie(?=^|$|')/<p>/
- xform/([a-z>])i?ong(?=^|$|')/$1<s>/
- xform/ing(?=^|$|')|uai(?=^|$|')/<k>/
- xform/([a-z>])ai(?=^|$|')/$1<d>/
- xform/([a-z>])en(?=^|$|')/$1<f>/
- xform/([a-z>])eng(?=^|$|')/$1<g>/
- xform/[iu]ang(?=^|$|')/<l>/
- xform/([a-z>])ang(?=^|$|')/$1<h>/
- xform/ian(?=^|$|')/<m>/
- xform/([a-z>])an(?=^|$|')/$1<j>/
- xform/([a-z>])ou(?=^|$|')/$1<z>/
- xform/[iu]a(?=^|$|')/<x>/
- xform/iao(?=^|$|')/<n>/
- xform/([a-z>])ao(?=^|$|')/$1<c>/
- xform/ui(?=^|$|')/<v>/
- xform/in(?=^|$|')/<b>/
- xform/'|<|>//
algebra_mspy:
- derive/^([jqxy])u(?=^|$|')/$1v/
- derive/'([jqxy])u(?=^|$|')/'$1v/
- derive/^([aoe].*)(?=^|$|')/o$1/
- derive/'([aoe].*)(?=^|$|')/'o$1/
- xform/^([ae])(.*)(?=^|$|')/$1$1$2/
- xform/'([ae])(.*)(?=^|$|')/'$1$1$2/
- xform/iu(?=^|$|')/<q>/
- xform/[iu]a(?=^|$|')/<w>/
- xform/er(?=^|$|')|[uv]an(?=^|$|')/<r>/
- xform/[uv]e(?=^|$|')/<t>/
- xform/v(?=^|$|')|uai(?=^|$|')/<y>/
- xform/^sh/<u>/
- xform/^ch/<i>/
- xform/^zh/<v>/
- xform/'sh/'<u>/
- xform/'ch/'<i>/
- xform/'zh/'<v>/
- xform/uo(?=^|$|')/<o>/
- xform/[uv]n(?=^|$|')/<p>/
- xform/([a-z>])i?ong(?=^|$|')/$1<s>/
- xform/[iu]ang(?=^|$|')/<d>/
- xform/([a-z>])en(?=^|$|')/$1<f>/
- xform/([a-z>])eng(?=^|$|')/$1<g>/
- xform/([a-z>])ang(?=^|$|')/$1<h>/
- xform/ian(?=^|$|')/<m>/
- xform/([a-z>])an(?=^|$|')/$1<j>/
- xform/iao(?=^|$|')/<c>/
- xform/([a-z>])ao(?=^|$|')/$1<k>/
- xform/([a-z>])ai(?=^|$|')/$1<l>/
- xform/([a-z>])ei(?=^|$|')/$1<z>/
- xform/ie(?=^|$|')/<x>/
- xform/ui(?=^|$|')/<v>/
- derive/<t>(?=^|$|')/<v>/
- xform/([a-z>])ou(?=^|$|')/$1<b>/
- xform/in(?=^|$|')/<n>/
- xform/ing(?=^|$|')/;/
- xform/'|<|>//
algebra_sogou:
- derive/^([jqxy])u(?=^|$|')/$1v/
- derive/'([jqxy])u(?=^|$|')/'$1v/
- derive/^([aoe].*)(?=^|$|')/o$1/
- derive/'([aoe].*)(?=^|$|')/'o$1/
- xform/^([ae])(.*)(?=^|$|')/$1$1$2/
- xform/'([ae])(.*)(?=^|$|')/'$1$1$2/
- xform/iu(?=^|$|')/<q>/
- xform/[iu]a(?=^|$|')/<w>/
- xform/er(?=^|$|')|[uv]an(?=^|$|')/<r>/
- xform/[uv]e(?=^|$|')/<t>/
- xform/v(?=^|$|')|uai(?=^|$|')/<y>/
- xform/^sh/<u>/
- xform/^ch/<i>/
- xform/^zh/<v>/
- xform/'sh/'<u>/
- xform/'ch/'<i>/
- xform/'zh/'<v>/
- xform/uo(?=^|$|')/<o>/
- xform/[uv]n(?=^|$|')/<p>/
- xform/([a-z>])i?ong(?=^|$|')/$1<s>/
- xform/[iu]ang(?=^|$|')/<d>/
- xform/([a-z>])en(?=^|$|')/$1<f>/
- xform/([a-z>])eng(?=^|$|')/$1<g>/
- xform/([a-z>])ang(?=^|$|')/$1<h>/
- xform/ian(?=^|$|')/<m>/
- xform/([a-z>])an(?=^|$|')/$1<j>/
- xform/iao(?=^|$|')/<c>/
- xform/([a-z>])ao(?=^|$|')/$1<k>/
- xform/([a-z>])ai(?=^|$|')/$1<l>/
- xform/([a-z>])ei(?=^|$|')/$1<z>/
- xform/ie(?=^|$|')/<x>/
- xform/ui(?=^|$|')/<v>/
- xform/([a-z>])ou(?=^|$|')/$1<b>/
- xform/in(?=^|$|')/<n>/
- xform/ing(?=^|$|')/;/
- xform/'|<|>//
algebra_abc:
- xform/^zh/<a>/
- xform/^ch/<e>/
- xform/^sh/<v>/
- xform/'zh/'<a>/
- xform/'ch/'<e>/
- xform/'sh/'<v>/
- xform/^([aoe].*)(?=^|$|')/<o>$1/
- xform/'([aoe].*)(?=^|$|')/'<o>$1/
- xform/ei(?=^|$|')/<q>/
- xform/ian(?=^|$|')/<w>/
- xform/er(?=^|$|')|iu(?=^|$|')/<r>/
- xform/[iu]ang(?=^|$|')/<t>/
- xform/ing(?=^|$|')/<y>/
- xform/uo(?=^|$|')/<o>/
- xform/uan(?=^|$|')/<p>/
- xform/([a-z>])i?ong(?=^|$|')/$1<s>/
- xform/[iu]a(?=^|$|')/<d>/
- xform/en(?=^|$|')/<f>/
- xform/eng(?=^|$|')/<g>/
- xform/ang(?=^|$|')/<h>/
- xform/an(?=^|$|')/<j>/
- xform/iao(?=^|$|')/<z>/
- xform/ao(?=^|$|')/<k>/
- xform/in(?=^|$|')|uai(?=^|$|')/<c>/
- xform/ai(?=^|$|')/<l>/
- xform/ie(?=^|$|')/<x>/
- xform/ou(?=^|$|')/<b>/
- xform/un(?=^|$|')/<n>/
- xform/[uv]e(?=^|$|')|ui(?=^|$|')/<m>/
- xform/'|<|>//
algebra_ziguang:
- derive/^([jqxy])u(?=^|$|')/$1v/
- derive/'([jqxy])u(?=^|$|')/'$1v/
- xform/'([aoe].*)(?=^|$|')/'<o>$1/
- xform/^([aoe].*)(?=^|$|')/<o>$1/
- xform/en(?=^|$|')/<w>/
- xform/eng(?=^|$|')/<t>/
- xform/in(?=^|$|')|uai(?=^|$|')/<y>/
- xform/^zh/<u>/
- xform/^sh/<i>/
- xform/'zh/'<u>/
- xform/'sh/'<i>/
- xform/uo(?=^|$|')/<o>/
- xform/ai(?=^|$|')/<p>/
- xform/^ch/<a>/
- xform/'ch/'<a>/
- xform/[iu]ang(?=^|$|')/<g>/
- xform/ang(?=^|$|')/<s>/
- xform/ie(?=^|$|')/<d>/
- xform/ian(?=^|$|')/<f>/
- xform/([a-z>])i?ong(?=^|$|')/$1<h>/
- xform/er(?=^|$|')|iu(?=^|$|')/<j>/
- xform/ei(?=^|$|')/<k>/
- xform/uan(?=^|$|')/<l>/
- xform/ing(?=^|$|')/;/
- xform/ou(?=^|$|')/<z>/
- xform/[iu]a(?=^|$|')/<x>/
- xform/iao(?=^|$|')/<b>/
- xform/ue(?=^|$|')|ui(?=^|$|')|ve(?=^|$|')/<n>/
- xform/un(?=^|$|')/<m>/
- xform/ao(?=^|$|')/<q>/
- xform/an(?=^|$|')/<r>/
- xform/'|<|>//

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