├── .gitattributes ├── .github └── workflows │ └── update-dicts.yaml ├── .gitignore ├── LICENSE ├── README.md ├── custom_phrase.txt ├── default.yaml ├── dicts ├── emoji.dict.yaml ├── moegirl.dict.yaml ├── simp-ext.dict.yaml ├── simp.dict.yaml ├── sogou_minecraft.dict.yaml ├── sogou_net.dict.yaml ├── sogou_touhou.dict.yaml ├── thuocl_IT.dict.yaml ├── thuocl_animal.dict.yaml ├── thuocl_caijing.dict.yaml ├── thuocl_food.dict.yaml ├── thuocl_idiom.dict.yaml ├── thuocl_medical.dict.yaml └── thuocl_renmingdiming.dict.yaml ├── extended.dict.yaml ├── lua ├── candidate_sorting │ ├── long_phrase_first.lua │ ├── single_char_first.lua │ └── single_char_only.lua ├── date_translator.lua ├── select_character.lua └── unicode_input.lua ├── lufs_dpy.schema.yaml ├── lufs_flypy.schema.yaml ├── lufs_mspy.schema.yaml ├── lufs_pinyin.schema.yaml ├── lufs_pyjj.schema.yaml ├── lufs_symbols.yaml ├── opencc ├── emoji.json └── emoji_word.txt ├── squirrel.yaml ├── tools ├── emoji2dict.py ├── patch │ └── enable_ascii.yaml ├── recipes │ ├── enable_ascii.recipe.yaml │ ├── install.recipe.yaml │ └── update.recipe.yaml ├── requirements.txt ├── run.py ├── scel2dict.py ├── update.py ├── update_sogou.py └── util.py ├── weasel.yaml └── zh-hans-t-essay-bgw.gram /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.gram binary 3 | -------------------------------------------------------------------------------- /.github/workflows/update-dicts.yaml: -------------------------------------------------------------------------------- 1 | name: Update Dicts 2 | on: 3 | schedule: 4 | - cron: "0 0 * * 1" 5 | workflow_dispatch: 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | if: github.repository == 'LufsX/rime' 11 | 12 | steps: 13 | - uses: actions/checkout@v4 14 | with: 15 | fetch-depth: 1 16 | 17 | - name: Set up Python 18 | uses: actions/setup-python@v4 19 | with: 20 | python-version: "3.12" 21 | cache: "pip" 22 | cache-dependency-path: "tools/requirements.txt" 23 | 24 | - name: Install dependencies 25 | run: pip install -r tools/requirements.txt 26 | 27 | - name: Update Dicts 28 | run: | 29 | python tools/run.py 30 | 31 | - name: Commit and Push 32 | run: | 33 | git config user.name 'github-actions[bot]' 34 | git config user.email 'github-actions[bot]@users.noreply.github.com' 35 | 36 | CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) 37 | echo "Current branch: $CURRENT_BRANCH" 38 | 39 | git add ./dicts/* ./opencc/* 40 | 41 | # Check if there are changes to commit 42 | if git diff --cached --quiet; then 43 | echo "No changes detected in the dictionaries" 44 | exit 0 45 | else 46 | echo "Changes detected, committing" 47 | git commit -m "update: dicts on $(date +'%Y-%m-%d')" 48 | git push origin $CURRENT_BRANCH 49 | fi 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.custom.yaml 3 | .DS_Store 4 | /*.userdb/ 5 | /build/ 6 | /rime.wiki/ 7 | /sync/ 8 | /temp/ 9 | /test/ 10 | __pycache__ 11 | cache* 12 | installation.yaml 13 | sync 14 | user.yaml 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Rime](https://blog.isteed.cc/post/rime-2022/) 2 | 3 | # 预览 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | # 使用 12 | 13 | 安装方法见 [仓库 Wiki](https://github.com/LufsX/rime/wiki/安装输入法方案) 或见 [我的 Rime 配置文件](https://blog.isteed.cc/post/rime-2022/#安装)~ 14 | 15 | # 定制 16 | 17 | 定制方法见 [仓库 Wiki](https://github.com/LufsX/rime/wiki/定制指南) 及 [鼠须管配置使用](https://blog.isteed.cc/post/squirrel-customization-2022/)~ 18 | 19 | # 特性 20 | 21 | - 全拼 + 常见双拼 22 | - 支持常见的模糊音 23 | - 支持 Emoji 输入 24 | - 「朙月拼音」支持按键纠错与容错拼写 25 | - 快捷输入(日期 `date`,星期 `week`,时间 `time`,时间戳 `timestamp` 等) 26 | - 以词定字 27 | - 好看的皮肤~ 28 | - 详见 [仓库 Wiki]() 或 [我的 Rime 配置文件](https://blog.isteed.cc/post/rime-2022/#皮肤)~ 29 | 30 | --- 31 | 32 | - 词库总大小仅 `12MB` 33 | - 极简的 8105 简体字典 34 | - 自带长句模型 35 | - 全简体词库 36 | - THUOCL 词库 37 | - 萌娘百科词库 38 | - 部分搜狗词库 39 | - 支持自定义词典(自造词) 40 | 41 | --- 42 | 43 | - macOS 可使用 `Caps_Lock` 切换系统英文输入法 44 | - Windows 默认 `Shift_R` 切换中英文输入(需按照安装说明取消注释) 45 | - 默认四候选项,便于选词 46 | - 按键绑定 47 | - ;:二选 48 | - ':三选 49 | - Tab / +:下一页 50 | - Shift + Tab / -:上一页 51 | - [:选中词组的第一个字 52 | - ]:选中词组的最后一个字 53 | - 四种候选排序选择 54 | - 详见 [仓库 Wiki](https://github.com/LufsX/rime/wiki/候选排序) 55 | 56 | # 待办 57 | 58 | - [x] 更新搜狗词库(已实现 Github Action 自动更新) 59 | - [x] 添加深色主题 60 | - [x] 添加 Emoji 支持 61 | - [x] ~~添加「[同文输入法](https://github.com/osfans/trime)」支持~~ 62 | - [x] 添加模糊拼音支持 63 | - [x] 更好的适配「小狼毫」(Thanks [@luminosara](https://github.com/LufsX/rime/pull/22)、[@fbewivpjsbsby](https://github.com/LufsX/rime/discussions/29)) 64 | - [x] 更多双拼方案的支持 65 | - [x] ~~更好的适配「同文输入法」~~ [fcitx5-android](https://github.com/fcitx5-android/fcitx5-android) 支持~ 66 | - [x] 脚本自动部署/更新(使用 [东风破 /plum/](https://github.com/rime/plum)) 67 | - [x] 已有主题的深色支持 68 | - [x] fcitx5-rime 支持(发现本来就适配的很完善,不需要改东西) 69 | - [ ] 优化中文单字词库可能的缺字 70 | - [ ] 更好的词库与词频? 71 | - [ ] 反查支持 72 | 73 | 欢迎提 ISSUE/PR/DISCUSSIONS 哈~ 74 | 75 | # 感谢/参考 76 | 77 | - [BlindingDark/rime-lua-select-character](https://github.com/BlindingDark/rime-lua-select-character) 78 | - [KyleBing/rime-wubi86-jidian](https://github.com/KyleBing/rime-wubi86-jidian/) 79 | - [iDvel/rime-ice](https://github.com/iDvel/rime-ice) 80 | - [lotem/luna_pinyin.custom.yaml](https://gist.github.com/lotem/2320943) 81 | - [placeless/squirrel_config](https://github.com/placeless/squirrel_config) 82 | - [rime/plum](https://github.com/rime/plum/issues/4) 83 | - [rime/rime-prelude](https://github.com/rime/rime-prelude) 84 | - [rime/squirrel](https://github.com/rime/squirrel) 85 | - [rime/weasel](https://github.com/rime/weasel) 86 | - [thunlp/THUOCL](https://github.com/thunlp/THUOCL) 87 | - [搜狗词库](https://pinyin.sogou.com/dict/) 88 | -------------------------------------------------------------------------------- /custom_phrase.txt: -------------------------------------------------------------------------------- 1 | # Rime table 2 | # coding: utf-8 3 | # 4 | # 请将该文件以UTF-8编码保存为 5 | # Rime用户文件夹/custom_phrase.txt 6 | # 7 | # 码表各字段以制表符(Tab)分隔 8 | # 顺序为:文字、编码、权重(决定重码的次序、可选) 9 | # 10 | # 虽然文本码表编辑较为方便,但不适合导入大量条目 11 | 12 | 中州韵输入法引擎 rime 2 13 | https://rime.im/ rime 1 14 | Rime rime 3 15 | ⌘ cmd 16 | ⌘ command 17 | ⌃ ctl 18 | ⌃ control 19 | ⌥ opt 20 | ⌥ option 21 | ⇧ shift 22 | 23 | Android android 24 | Apple apple 25 | Apple ID appleid 26 | Clash clash 27 | Cloudflare cloudflare 28 | Cloudflare Workers cloudflareworkers 29 | CSS css 30 | Dropbox dropbox 31 | Docker docker 32 | GBK gbk 33 | GitHub github 34 | Google google 35 | Linux linux 36 | HTML html 37 | iCloud icloud 38 | iMac imac 39 | iOS ios 40 | iPad ipad 41 | iPad ipad 42 | iPhone iphone 43 | iPhone Xʀ iphonexr 44 | iPod ipod 45 | IPTV iptv 46 | IPv4 ipv 47 | IPv6 ipv 48 | iTunes itunes 49 | Java java 50 | JavaScript javascript 51 | jQuery jquery 52 | Linux linux 53 | Mac mac 54 | Mac App Store mas 55 | MacBook macbook 56 | MacBook Air mba 57 | MacBook Pro mbp 58 | macOS macos 8 59 | macOS Sequoia macos 7 60 | macOS Sonoma macos 6 61 | macOS Ventura macos 5 62 | macOS Monterey macos 4 63 | macOS Catalina macos 3 64 | macOS Mojave macos 2 65 | macOS High Sierra macos 1 66 | Magisk magisk 67 | Minecraft minecraft 68 | MySQL mysql 69 | Objective-C ojbc 70 | OneDrive onedrive 71 | OS X osx 72 | Pixel pixel 73 | Python python 74 | Quantumult quantumult 75 | Ruby ruby 76 | Rust rust 77 | SQL sql 78 | Stash stash 79 | Surge surge 80 | Swift swift 81 | Tailscale tailscale 82 | TypeScript typescript 83 | T恤 txu 84 | UTF-8 utfba 85 | U盘 upj 86 | WeChat wechat 87 | Wi-Fi wifi 88 | Windows win 89 | Windows windows 90 | X-Ray xray 91 | Xbox xbox 92 | Xbox One xboxone 93 | YouTube youtube 94 | ZeroTier zerotier 95 | -------------------------------------------------------------------------------- /default.yaml: -------------------------------------------------------------------------------- 1 | # Rime default settings 2 | # encoding: utf-8 3 | 4 | config_version: "2025-04-25" 5 | 6 | schema_list: 7 | - schema: lufs_flypy # 小鹤双拼 8 | - schema: lufs_pinyin # 朙月拼音 9 | # - schema: lufs_mspy # 微软双拼 10 | # - schema: lufs_dpy # 自然码双拼 11 | # - schema: lufs_pyjj # 拼音加加双拼 12 | 13 | switcher: 14 | caption: "[方案菜单]" 15 | hotkeys: 16 | - F2 17 | save_options: 18 | - full_shape 19 | - ascii_punct 20 | - traditionalization 21 | - emoji_suggestion 22 | fold_options: true 23 | abbreviate_options: true 24 | option_list_separator: "/" 25 | 26 | menu: 27 | page_size: 4 28 | # alternative_select_labels: [ 壹, 貳, 叄, 肆, 伍, 陸, 柒, 捌, 玖, 拾 ] # 候选项序号 29 | 30 | recognizer: 31 | patterns: 32 | # 禁止部分输入的自动上屏 33 | camel: "[a-z]+[A-Z].*$" # 驼峰命名 34 | email: "^[A-Za-z][-_.0-9A-Za-z]*@.*$" # email 地址 35 | html: "^<[a-z]+>$" # HTML TAG 36 | uppercase: "[A-Z][-_+.'0-9A-Za-z]*$" # 大写开头 37 | 38 | ## URL 捕获,和逗号句号翻页有冲突 39 | url: "^(www[.]|https?:|ftp[.:]|mailto:|file:).*$|^[a-z]+[.].+$" # URL 输入 40 | url_plus: "^[a-z]+[.:].*$" # URL 输入加强版(匹配 URL 标准规范 [协议类型]://[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]) 41 | 42 | # 响应功能 43 | punct: "^/([0-9]0?|[A-Za-z]+)$" # 响应 lufs_symbols.yaml 内的输入 44 | unicode: "^U[a-f0-9]+" # 响应 Unicode 45 | 46 | ascii_composer: 47 | good_old_caps_lock: true 48 | switch_key: 49 | Shift_L: noop 50 | Shift_R: commit_code # 若启用了英文输入,可用右 Shift 切换中英输入 51 | Control_L: noop 52 | Control_R: noop # macOS 上此项可能无效(我发现我现在键盘压根没得右 Control 键,能不能用自测哈),Windows 上可自行定义 53 | Caps_Lock: commit_code 54 | Eisu_toggle: clear 55 | 56 | key_binder: 57 | select_first_character: "bracketleft" # lua 选词快捷键,选第一个字,关闭留空或删除本条 58 | select_last_character: "bracketright" # lua 选词快捷键,选最后一个字,关闭留空或删除本条 59 | bindings: 60 | # Tab / Shift + Tab 翻页 61 | - { when: has_menu, accept: Tab, send: Page_Down } # Tab 向下翻页 62 | - { when: has_menu, accept: Shift+Tab, send: Page_Up } # Shift + Tab 向上翻页 63 | 64 | # = / - 翻页 65 | - { when: has_menu, accept: equal, send: Page_Down } # = 向下翻页 66 | - { when: has_menu, accept: minus, send: Page_Up } # - 向上翻页 67 | 68 | # . / , 翻页 69 | # 和 URL 捕获正则可能有一定的冲突,需要手动注释 recognizer/patterns 下的 url 和 url_plus 70 | # - { when: has_menu, accept: period, send: Page_Down } # 句号向下翻页 71 | # - { when: has_menu, accept: comma, send: Page_Up } # 逗号向上翻页 72 | 73 | # ] / [ 翻页 74 | # 失效设置,可通过关闭/更改 lua 选词的快捷键恢复 75 | # 关闭方法,将 key_binder/select_first_character 和 key_binder/select_last_character 留空或删除 76 | # - { when: has_menu, accept: bracketright, send: Page_Down } # 右括号向下翻页 77 | # - { when: has_menu, accept: bracketleft, send: Page_Up } # 左括号向上翻页 78 | 79 | # 候选操作 80 | # ; 二选 ' 三选 81 | - { when: has_menu, accept: semicolon, send: 2 } # 输入时「;」二选 82 | # - { when: has_menu, accept: apostrophe, send: 3 } # 输入时「'」三选 83 | 84 | # Rime key bindings 85 | # numbered mode switch 86 | # - { when: always, accept: Control+Shift+1, select: .next } # 切换下一个方案 87 | # - { when: always, accept: Control+Shift+2, toggle: full_shape } # 切换全角半角 88 | # - { when: always, accept: Control+Shift+3, toggle: ascii_punct } # 切换中英标点 89 | # - { when: always, accept: Control+Shift+4, toggle: traditionalization } # 切换简繁 90 | # - { when: always, accept: Control+Shift+5, toggle: emoji_suggestion } # 切换是否显示 Emoji 91 | 92 | # Rime key bindings 93 | # emacs_editing 94 | # - { when: composing, accept: Control+p, send: Up } 95 | # - { when: composing, accept: Control+n, send: Down } 96 | # - { when: composing, accept: Control+b, send: Left } 97 | # - { when: composing, accept: Control+f, send: Right } 98 | # - { when: composing, accept: Control+a, send: Home } 99 | # - { when: composing, accept: Control+e, send: End } 100 | # - { when: composing, accept: Control+d, send: Delete } 101 | # - { when: composing, accept: Control+k, send: Shift+Delete } 102 | # - { when: composing, accept: Control+h, send: BackSpace } 103 | # - { when: composing, accept: Control+g, send: Escape } 104 | # - { when: composing, accept: Control+bracketleft, send: Escape } 105 | # - { when: composing, accept: Control+y, send: Page_Up } 106 | # - { when: composing, accept: Alt+v, send: Page_Up } 107 | # - { when: composing, accept: Control+v, send: Page_Down } 108 | -------------------------------------------------------------------------------- /dicts/sogou_touhou.dict.yaml: -------------------------------------------------------------------------------- 1 | # Rime dictionary 2 | # encoding: utf-8 3 | # source: https://pinyin.sogou.com/dict/detail/index/50826 4 | 5 | --- 6 | name: touhou 7 | version: "2022-11-23" 8 | sort: by_weight 9 | ... 10 | 11 | 艾丽 ai li 12 | 爱丽丝 ai li si 13 | 爱丽丝玛格特罗伊德 ai li si ma ge te luo yi de 14 | 爱莲 ai lian 15 | 爱塔妮缇拉尔瓦 ai ta ni ti la er wa 16 | 安娜贝拉尔 an na bei la er 17 | 奥莲姬 ao lian ji 18 | 八坂神奈子 ba ban shen nai zi 19 | 八亿 ba yi 20 | 八意健身操 ba yi jian shen cao 21 | 八意永琳 ba yi yong lin 22 | 八云蓝 ba yun lan 23 | 八云紫 ba yun zi 24 | 稗田阿求 bai tian a qiu 25 | 白玉楼 bai yu lou 26 | 坂田合欢 ban tian he huan 27 | 北白河千百合 bei bai he qian bai he 28 | 本居小铃 ben ju xiao ling 29 | 彼岸 bi an 30 | 比那名居天子 bi na ming ju tian zi 31 | 博丽大结界 bo li da jie jie 32 | 博丽灵梦 bo li ling meng 33 | 不可思议之国 bu ke si yi zhi guo 34 | 朝仓理香子 chao cang li xiang zi 35 | 赤蛮奇 chi man qi 36 | 纯狐 chun hu 37 | 春之小径 chun zhi xiao jing 38 | 茨木华扇 ci mu hua shan 39 | 村纱水蜜 cun sha shui mi 40 | 大蛤蟆之池 da ha ma zhi chi 41 | 大空魔术 da kong mo shu 42 | 大小姐 da xiao jie 43 | 大妖精 da yao jing 44 | 弹幕 dan mu 45 | 弹幕天邪鬼 dan mu tian xie gui 46 | 地灵殿 di ling dian 47 | 地狱 di yu 48 | 丁礼田舞 ding li tian wu 49 | 东方茨歌仙 dong fang ci ge xian 50 | 东方萃梦想 dong fang cui meng xiang 51 | 东方地灵殿 dong fang di ling dian 52 | 东方绯想天 dong fang fei xiang tian 53 | 东方非想天则 dong fang fei xiang tian ze 54 | 东方封魔录 dong fang feng mo lu 55 | 东方风神录 dong fang feng shen lu 56 | 东方绀珠传 dong fang gan zhu chuan 57 | 东方刚欲异闻 dong fang gang yu yi wen 58 | 东方怪绮谈 dong fang guai qi tan 59 | 东方鬼形兽 dong fang gui xing shou 60 | 东方虹龙洞 dong fang hong long dong 61 | 东方红魔乡 dong fang hong mo xiang 62 | 东方花映冢 dong fang hua ying zhong 63 | 东方花映塚 dong fang hua ying zhong 64 | 东方幻想乡 dong fang huan xiang xiang 65 | 东方黄粱梦 dong fang huang liang meng 66 | 东方辉针城 dong fang hui zhen cheng 67 | 东方铃奈庵 dong fang ling nai an 68 | 东方灵异传 dong fang ling yi chuan 69 | 东方梦时空 dong fang meng shi kong 70 | 东方儚月抄 dong fang meng yue chao 71 | 东方凭依华 dong fang ping yi hua 72 | 东方求闻口授 dong fang qiu wen kou shou 73 | 东方求闻史纪 dong fang qiu wen shi ji 74 | 东方三月精 dong fang san yue jing 75 | 东方神灵庙 dong fang shen ling miao 76 | 东方深秘录 dong fang shen mi lu 77 | 东方天空璋 dong fang tian kong zhang 78 | 东方文花帖 dong fang wen hua tie 79 | 东方香霖堂 dong fang xiang lin tang 80 | 东方心绮楼 dong fang xin qi lou 81 | 东方星莲船 dong fang xing lian chuan 82 | 东方妖妖梦 dong fang yao yao meng 83 | 东方永夜抄 dong fang yong ye chao 84 | 东方智灵奇传 dong fang zhi ling qi chuan 85 | 东方紫香花 dong fang zi xiang hua 86 | 东方醉蝶华 dong fang zui die hua 87 | 对抗新闻 dui kang xin wen 88 | 多多良小伞 duo duo liang xiao san 89 | 哆来咪苏伊特 duo lai mi su yi te 90 | 二妹 er mei 91 | 二小姐 er xiao jie 92 | 二岩猯藏 er yan tuan cang 93 | 尔子田里乃 er zi tian li nai 94 | 法界 fa jie 95 | 饭纲丸龙 fan gang wan long 96 | 绯想天 fei xiang tian 97 | 废洋馆 fei yang guan 98 | 丰聪耳神子 feng cong er shen zi 99 | 风见幽香 feng jian you xiang 100 | 风神之湖 feng shen zhi hu 101 | 封兽鵺 feng shou ye 102 | 符卡 fu ka 103 | 芙兰朵露 fu lan duo lu 104 | 芙兰朵露斯卡雷特 fu lan duo lu si ka lei te 105 | 冈崎梦美 gang qi meng mei 106 | 高丽野阿吽 gao li ye a hong 107 | 宫古芳香 gong gu fang xiang 108 | 古明地觉 gu ming di jue 109 | 古明地恋 gu ming di lian 110 | 鬼人正邪 gui ren zheng xie 111 | 豪德寺三花 hao de si san hua 112 | 河城荷取 he cheng he qu 113 | 赫恩 he en 114 | 核融合炉 he rong he lu 115 | 黑谷山女 hei gu shan nv 116 | 红美铃 hong mei ling 117 | 红魔馆 hong mo guan 118 | 胡桃 hu tao 119 | 冴月麟 hu yue lin 120 | 幻梦界 huan meng jie 121 | 幻想万华镜 huan xiang wan hua jing 122 | 幻月 huan yue 123 | 黄昏酒场 huang hun jiu chang 124 | 辉夜姬 hui ye ji 125 | 魂魄妖忌 hun po yao ji 126 | 魂魄妖梦 hun po yao meng 127 | 霍青娥 huo qing e 128 | 霍瓦特洛克 huo wa te luo ke 129 | 火焰猫燐 huo yan mao lin 130 | 姬虫百百世 ji chong bai bai shi 131 | 吉吊八千慧 ji diao ba qian hui 132 | 姬海棠羽立 ji hai tang yu li 133 | 菅牧典 jian mu dian 134 | 键山雏 jian shan chu 135 | 间歇泉地下中心 jian xie quan di xia zhong xin 136 | 矜羯罗 jin jie luo 137 | 今泉影狼 jin quan ying lang 138 | 京都 jing du 139 | 旧地狱 jiu di yu 140 | 旧都 jiu du 141 | 九十九八桥 jiu shi jiu ba qiao 142 | 九十九弁弁 jiu shi jiu bian bian 143 | 九天瀑布 jiu tian pu bu 144 | 驹草山如 ju cao shan ru 145 | 菊理 ju li 146 | 卡娜 ka na 147 | 卡娜安娜贝拉尔 ka na an na bei la er 148 | 可能性空间移动船 ke neng xing kong jian yi dong chuan 149 | 堀川雷鼓 ku chuan lei gu 150 | 拉尔瓦 la er wa 151 | 蕾迪 lei di 152 | 蕾迪霍瓦特洛克 lei di huo wa te luo ke 153 | 蕾拉 lei la 154 | 蕾拉普莉兹姆利巴 lei la pu li zi mu li ba 155 | 蕾米莉亚 lei mi li ya 156 | 蕾米莉亚斯卡雷特 lei mi li ya si ka lei te 157 | 莉格露 li ge lu 158 | 莉格露奈特巴格 li ge lu nai te ba ge 159 | 骊驹早鬼 li ju zao gui 160 | 莉莉白 li li bai 161 | 莉莉卡 li li ka 162 | 莉莉卡普莉兹姆利巴 li li ka pu li zi mu li ba 163 | 里香 li xiang 164 | 莲台野夜行 lian tai ye ye xing 165 | 铃瑚 ling hu 166 | 灵魔殿 ling mo dian 167 | 铃奈庵 ling nai an 168 | 灵乌路空 ling wu lu kong 169 | 铃仙 ling xian 170 | 铃仙优昙华院因幡 ling xian you tan hua yuan yin fan 171 | 留琴 liu qin 172 | 露米娅 lu mi ya 173 | 露娜 lu na 174 | 露娜切露德 lu na qie lu de 175 | 露娜萨 lu na sa 176 | 露娜萨普莉兹姆利巴 lu na sa pu li zi mu li ba 177 | 露易兹 lu yi zi 178 | 玛艾露贝莉 ma ai lu bei li 179 | 玛艾露贝莉赫恩 ma ai lu bei li he en 180 | 玛尔其 ma er qi 181 | 玛格特罗伊德 ma ge te luo yi de 182 | 麻将神 ma jiang shen 183 | 卯酉东海道 mao you dong hai dao 184 | 梅蒂欣 mei di xin 185 | 梅蒂欣梅兰克莉 mei di xin mei lan ke li 186 | 梅露兰 mei lu lan 187 | 梅露兰普莉兹姆利巴 mei lu lan pu li zi mu li ba 188 | 魅魔 mei mo 189 | 梦殿大祀庙 meng dian da si miao 190 | 梦幻馆 meng huan guan 191 | 梦违科学世纪 meng wei ke xue shi ji 192 | 梦想夏乡 meng xiang xia xiang 193 | 梦月 meng yue 194 | 咪咪号 mi mi hao 195 | 米斯蒂娅 mi si di ya 196 | 米斯蒂娅萝蕾拉 mi si di ya luo lei la 197 | 迷途之家 mi tu zhi jia 198 | 迷途竹林 mi tu zhu lin 199 | 绵月丰姬 mian yue feng ji 200 | 绵月依姬 mian yue yi ji 201 | 冥界 ming jie 202 | 命莲寺 ming lian si 203 | 明罗 ming luo 204 | 摩多罗隐岐奈 mo duo luo yin qi nai 205 | 魔法森林 mo fa sen lin 206 | 魔界 mo jie 207 | 魔理沙的魔法书 mo li sha de mo fa shu 208 | 木花咲耶姬 mu hua xiao ye ji 209 | 纳兹琳 na zi lin 210 | 鸟船 niao chuan 211 | 鸟船遗迹 niao chuan yi ji 212 | 牛崎润美 niu qi run mei 213 | 诺蕾姬 nuo lei ji 214 | 帕秋莉 pa qiu li 215 | 帕秋莉诺蕾姬 pa qiu li nuo lei ji 216 | 判定点 pan ding dian 217 | 蓬莱 peng lai 218 | 蓬莱人形 peng lai ren xing 219 | 蓬莱山辉夜 peng lai shan hui ye 220 | 普莉兹姆利巴 pu li zi mu li ba 221 | 琪露诺 qi lu nuo 222 | 琪丝美 qi si mei 223 | 秦心 qin xin 224 | 清兰 qing lan 225 | 青蛙子 qing wa zi 226 | 秋静叶 qiu jing ye 227 | 秋穰子 qiu rang zi 228 | 犬走椛 quan zou hua 229 | 人间之里 ren jian zhi li 230 | 戎璎花 rong ying hua 231 | 若鹭姬 ruo lu ji 232 | 萨拉 sa la 233 | 萨丽艾尔 sa li ai er 234 | 三途川 san tu chuan 235 | 桑尼 sang ni 236 | 桑尼米尔克 sang ni mi er ke 237 | 森近霖之助 sen jin lin zhi zhu 238 | 山城高岭 shan cheng gao ling 239 | 上白泽慧音 shang bai ze hui yin 240 | 上海 shang hai 241 | 少名针妙丸 shao ming zhen miao wan 242 | 射命丸文 she ming wan wen 243 | 神绮 shen qi 244 | 神玉 shen yu 245 | 圣白莲 sheng bai lian 246 | 圣命莲 sheng ming lian 247 | 石长姬 shi chang ji 248 | 十六夜咲夜 shi liu ye xiao ye 249 | 矢田寺成美 shi tian si cheng mei 250 | 守矢神社 shou shi shen she 251 | 水江蒲岛子 shui jiang pu dao zi 252 | 水桥帕露西 shui qiao pa lu xi 253 | 四季映姬 si ji ying ji 254 | 四季映姬亚玛撒那度 si ji ying ji ya ma sa na du 255 | 四季映姬夜魔仙那度 si ji ying ji ye mo xian na du 256 | 斯卡雷特 si ka lei te 257 | 斯塔萨菲娅 si ta sa fei ya 258 | 苏格拉底 su ge la di 259 | 苏我屠自古 su wo tu zi gu 260 | 太阳花田 tai yang hua tian 261 | 饕餮尤魔 tao tie you mo 262 | 藤原妹红 teng yuan mei hong 263 | 天弓千亦 tian gong qian yi 264 | 天界 tian jie 265 | 庭渡久侘歌 ting du jiu cha ge 266 | 维纳的废墟 wei na de fei xu 267 | 未知之花魅知之旅 wei zhi zhi hua mei zhi zhi lv 268 | 物部布都 wu bu bu dou 269 | 无名之丘 wu ming zhi qiu 270 | 无缘冢 wu yuan zhong 271 | 雾之湖 wu zhi hu 272 | 西行妖 xi xing yao 273 | 仙界 xian jie 274 | 仙台四郎 xian tai si lang 275 | 香霖堂 xiang lin tang 276 | 小恶魔 xiao e mo 277 | 小兔姬 xiao tu ji 278 | 小野冢小町 xiao ye zhong xiao ding 279 | 洩矢诹访子 xie shi zou fang zi 280 | 星熊勇仪 xing xiong yong yi 281 | 续关 xu guan 282 | 玄武之泽 xuan wu zhi ze 283 | 玄爷 xuan ye 284 | 血湖 xue hu 285 | 岩笠 yan li 286 | 妖怪的树海 yao guai de shu hai 287 | 妖怪狸之森 yao guai li zhi sen 288 | 妖怪之山 yao guai zhi shan 289 | 妖精大战争 yao jing da zhan zheng 290 | 幺乐团的历史 yao yue tuan de li shi 291 | 伊吹萃香 yi chui cui xiang 292 | 一命通关 yi ming tong guan 293 | 伊奘诺物质 yi zang nuo wu zhi 294 | 因幡帝 yin fan di 295 | 寅丸星 yin wan xing 296 | 阴阳玉 yin yang yu 297 | 樱花怪道 ying hua guai dao 298 | 永江衣玖 yong jiang yi jiu 299 | 永远亭 yong yuan ting 300 | 幽谷响子 you gu xiang zi 301 | 游戏 you xi 302 | 幽玄魔眼 you xuan mo yan 303 | 玉造魅须丸 yu zao mei xu wan 304 | 宇佐见堇子 yu zuo jian jin zi 305 | 宇佐见莲子 yu zuo jian lian zi 306 | 远松 yuan song 307 | 月都 yue dou 308 | 月夜见 yue ye jian 309 | 云居一轮 yun ju yi lun 310 | 再思之道 zai si zhi dao 311 | 埴安神袿姬 zhi an shen gui ji 312 | 中有之道 zhong you zhi dao 313 | 朱鹭子 zhu lu zi 314 | 灼热地狱迹 zhuo re di yu ji 315 | 紫妈 zi ma 316 | 诹访大舞 zou fang da wu 317 | -------------------------------------------------------------------------------- /extended.dict.yaml: -------------------------------------------------------------------------------- 1 | # Rime dictionary 2 | # encoding: utf-8 3 | 4 | --- 5 | name: extended 6 | version: "2025-01-11" 7 | 8 | import_tables: 9 | # 覆盖词频 10 | - dicts/simp # 最小拼音词典 11 | 12 | - dicts/thuocl_animal # 动物 13 | - dicts/thuocl_caijing # 财经 14 | - dicts/thuocl_food # 饮食 15 | - dicts/thuocl_idiom # 成语俗语 16 | - dicts/thuocl_IT # IT 17 | - dicts/thuocl_medical # 医学 18 | - dicts/thuocl_renmingdiming # 人名地名 19 | 20 | - dicts/simp-ext # 原字表中除单字外部分 21 | - dicts/sogou_net # 网络流行语 22 | 23 | # 一点点小小的私货,不需要的可以自行关闭~ 24 | - dicts/moegirl # 萌娘百科 25 | - dicts/sogou_touhou # 东方 Project 26 | - dicts/sogou_minecraft # Minecraft 词条 27 | 28 | # emoji 补全词库 29 | - dicts/emoji 30 | ... 31 | -------------------------------------------------------------------------------- /lua/candidate_sorting/long_phrase_first.lua: -------------------------------------------------------------------------------- 1 | --- 过滤器:最长词组和单字在先 2 | local function long_phrase_first(input) 3 | local l = {} 4 | local s = {} 5 | local c = {} 6 | local max = 1 7 | for cand in input:iter() do 8 | if (utf8.len(cand.text) > max) then 9 | max = utf8.len(cand.text) 10 | end 11 | if (utf8.len(cand.text) == 1) then 12 | table.insert(c, cand) 13 | elseif (utf8.len(cand.text) < max) then 14 | table.insert(s, cand) 15 | else 16 | table.insert(l, cand) 17 | end 18 | end 19 | for i, cand in ipairs(l) do 20 | yield(cand) 21 | end 22 | for i, cand in ipairs(c) do 23 | yield(cand) 24 | end 25 | for i, cand in ipairs(s) do 26 | yield(cand) 27 | end 28 | end 29 | 30 | return long_phrase_first 31 | -------------------------------------------------------------------------------- /lua/candidate_sorting/single_char_first.lua: -------------------------------------------------------------------------------- 1 | --- 过滤器:单字在先 2 | local function single_char_first(input) 3 | local l = {} 4 | for cand in input:iter() do 5 | if (utf8.len(cand.text) == 1) then 6 | yield(cand) 7 | else 8 | table.insert(l, cand) 9 | end 10 | end 11 | for i, cand in ipairs(l) do 12 | yield(cand) 13 | end 14 | end 15 | 16 | return single_char_first 17 | -------------------------------------------------------------------------------- /lua/candidate_sorting/single_char_only.lua: -------------------------------------------------------------------------------- 1 | --- 过滤器:只显示单字 2 | local function single_char_only(input) 3 | for cand in input:iter() do 4 | if (utf8.len(cand.text) == 1) then 5 | yield(cand) 6 | end 7 | end 8 | end 9 | 10 | return single_char_only 11 | -------------------------------------------------------------------------------- /lua/date_translator.lua: -------------------------------------------------------------------------------- 1 | -- date_translator: 时间/日期快捷输入 2 | local function date_translator(input, seg) 3 | if (input == "date") then 4 | --- Candidate(type, start, end, text, comment) 5 | yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), "")) 6 | yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), "")) 7 | yield(Candidate("date", seg.start, seg._end, os.date("%Y%m%d"), "")) 8 | yield(Candidate("date", seg.start, seg._end, string.upper(os.date("%d%b%y")), "")) 9 | end 10 | if (input == "time") then 11 | --- Candidate(type, start, end, text, comment) 12 | yield(Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), "")) 13 | yield(Candidate("time", seg.start, seg._end, os.date("%H时%M分%S秒"), "")) 14 | yield(Candidate("time", seg.start, seg._end, os.date("%H%M%S"), "")) 15 | end 16 | if (input == "timestamp") then 17 | --- Candidate(type, start, end, text, comment) 18 | yield(Candidate("time", seg.start, seg._end, os.time(), "")) 19 | end 20 | if (input == "datetime") then 21 | --- Candidate(type, start, end, text, comment) 22 | yield(Candidate("datetime", seg.start, seg._end, os.date("%Y-%m-%d %H:%M:%S"), "")) 23 | yield(Candidate("datetime", seg.start, seg._end, os.date("%Y-%m-%dT%H:%M:%S+08:00"), "")) 24 | yield(Candidate("datetime", seg.start, seg._end, os.date("%Y%m%d%H%M"), "")) 25 | end 26 | 27 | -- 输入星期 28 | -- -- @JiandanDream 29 | -- -- https://github.com/KyleBing/rime-wubi86-jidian/issues/54 30 | if (input == "week") then 31 | local weekTab = {'日', '一', '二', '三', '四', '五', '六', '七'} 32 | yield(Candidate("week", seg.start, seg._end, "周" .. weekTab[tonumber(os.date("%w") + 1)], "")) 33 | yield(Candidate("week", seg.start, seg._end, "星期" .. weekTab[tonumber(os.date("%w") + 1)], "")) 34 | yield(Candidate("week", seg.start, seg._end, os.date("%A"), "")) 35 | yield(Candidate("week", seg.start, seg._end, os.date("%a"), "")) 36 | yield(Candidate("week", seg.start, seg._end, os.date("%W"), "周数")) 37 | end 38 | 39 | -- 输入月份英文 40 | if (input == "month") then 41 | yield(Candidate("month", seg.start, seg._end, os.date("%B"), "")) 42 | yield(Candidate("month", seg.start, seg._end, os.date("%b"), "")) 43 | end 44 | end 45 | 46 | return date_translator 47 | -------------------------------------------------------------------------------- /lua/select_character.lua: -------------------------------------------------------------------------------- 1 | -- select_character: 以词定字 2 | -- 详见: https://github.com/BlindingDark/rime-lua-select-character 3 | -- 2025-04-25: 优化单字提取逻辑,处理无候选的情况 4 | -- 2025-04-27: 修正无法直接输入对应键的符号 5 | local function extract_character(s, is_first) 6 | -- 单字不处理 7 | if utf8.len(s) == 1 then 8 | return s 9 | end 10 | return is_first and s:sub(1, utf8.offset(s, 2) - 1) -- 首字 11 | or s:sub(utf8.offset(s, -1)) -- 尾字 12 | end 13 | 14 | local function select_character(key, env) 15 | local engine = env.engine 16 | local context = engine.context 17 | local config = engine.schema.config 18 | local candidate = context:get_selected_candidate() 19 | 20 | -- 检查是否处于输入状态 21 | if key:release() or (not context:is_composing() and not context:has_menu()) then 22 | return 2 -- kNoop 23 | end 24 | 25 | -- 获取按键 26 | local first_key = config:get_string('key_binder/select_first_character') 27 | local last_key = config:get_string('key_binder/select_last_character') 28 | local key_repr = key:repr() 29 | 30 | -- 检查按键并给予 is_first 标记 31 | local is_first = (key_repr == first_key) 32 | if not (is_first or key_repr == last_key) then 33 | return 2 -- kNoop 34 | end 35 | 36 | -- 如果没有已选的词,直接上屏当前输入 37 | if not candidate then 38 | engine:commit_text(context:get_commit_text()) 39 | context:clear() 40 | return 1 -- kAccepted 41 | end 42 | 43 | -- 提取候选并提交 44 | local selected_char = extract_character(candidate.text, is_first) 45 | context:clear_previous_segment() 46 | engine:commit_text(context:get_commit_text() .. selected_char) 47 | context:clear() 48 | return 1 -- kAccepted 49 | end 50 | 51 | return select_character 52 | -------------------------------------------------------------------------------- /lua/unicode_input.lua: -------------------------------------------------------------------------------- 1 | -- Unicode 输入支持 2 | -- -- @shewer 3 | -- -- https://github.com/shewer/librime-lua-script/blob/main/lua/component/unicode.lua 4 | local MAX_UNICODE = 0x10FFFF -- Unicode 最大编码 5 | local TRIGGER_PREFIX = "U" -- 触发前缀 6 | 7 | local function unicode_input(input, seg, env) 8 | -- 快速检查有效性 9 | if not seg:has_tag("unicode") or input == '' then 10 | return 11 | end 12 | 13 | -- 匹配 Unicode 编码 14 | local ucodestr = input:match(TRIGGER_PREFIX .. "(%x+)") 15 | 16 | -- 转换为数值并检查范围 17 | local code = tonumber(ucodestr, 16) 18 | if not code then 19 | return 20 | end 21 | 22 | if code > MAX_UNICODE then 23 | yield(Candidate("unicode", seg.start, seg._end, "undefined", "超出范围")) 24 | return 25 | end 26 | 27 | -- 生成主候选项 28 | local text = utf8.char(code) 29 | yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x", code))) 30 | 31 | -- 对于较小的编码,生成附加候选项 32 | if code < 0x10000 then 33 | for i = 0, 15 do 34 | local extended_code = code * 16 + i 35 | if extended_code <= MAX_UNICODE then 36 | local extended_text = utf8.char(extended_code) 37 | yield(Candidate("unicode", seg.start, seg._end, extended_text, string.format("U%x~%x", code, i))) 38 | end 39 | end 40 | end 41 | end 42 | 43 | return unicode_input 44 | -------------------------------------------------------------------------------- /lufs_dpy.schema.yaml: -------------------------------------------------------------------------------- 1 | # Rime schema 2 | # encoding: utf-8 3 | 4 | schema: 5 | schema_id: lufs_dpy 6 | name: 自然码双拼 7 | version: "2025-04-25" 8 | author: 9 | - Modified by Lufs_X 10 | description: | 11 | 自然码双拼方案。 12 | 13 | switches: 14 | - name: full_shape 15 | states: [半角, 全角] 16 | - name: ascii_punct 17 | states: [。,, .,] 18 | - name: traditionalization 19 | # reset: 0 # 默认状态: 0 简体 1 繁体 20 | states: [简, 繁] 21 | - name: emoji_suggestion 22 | # reset: 1 # 默认状态: 0 关闭 1 开启 23 | states: [🈚️️, 🈶️] 24 | 25 | engine: 26 | processors: 27 | - recognizer 28 | - lua_processor@*select_character # lua 选词扩展 29 | - key_binder 30 | - speller 31 | - selector 32 | - punctuator 33 | - navigator 34 | - express_editor 35 | segmentors: 36 | - matcher 37 | - abc_segmentor 38 | - punct_segmentor 39 | - fallback_segmentor 40 | translators: 41 | - punct_translator 42 | - lua_translator@*date_translator # 动态日期时间输入 43 | - lua_translator@*unicode_input # Unicode 输入支持 44 | - table_translator@custom_phrase # 用户自定义词典 45 | - script_translator 46 | filters: 47 | - simplifier@emoji_suggestion 48 | - simplifier@traditionalize # 简繁转化 49 | - uniquifier # 去重 50 | # - lua_filter@*candidate_sorting.long_phrase_first # 最长词组和单字在先 51 | # - lua_filter@*candidate_sorting.single_char_first # 单字优先 52 | # - lua_filter@*candidate_sorting.single_char_only # 只显示单字 53 | 54 | traditionalize: 55 | option_name: traditionalization 56 | opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json 57 | tips: none # 转换提示: all 显示 | char 仅单字显示 | none 不显示。 58 | 59 | emoji_suggestion: 60 | opencc_config: emoji.json 61 | option_name: emoji_suggestion 62 | tips: false 63 | 64 | speller: 65 | alphabet: zyxwvutsrqponmlkjihgfedcba/ 66 | delimiter: " '" 67 | algebra: 68 | - erase/^xx$/ 69 | - erase/^hm$/ 70 | - erase/^m$/ 71 | - erase/^n$/ 72 | - erase/^ng$/ 73 | 74 | # 模糊音区域 75 | # 依据个人情况修改注释~ 76 | # 注释格式:键盘的输入码 -> 转化后的输入码 77 | 78 | # 声母部分 79 | # - derive/^([z])h/$1/ # z -> zh 80 | # - derive/^([z])([^h])/$1h$2/ # zh -> z 81 | # - derive/^([c])h/$1/ # c -> ch 82 | # - derive/^([c])([^h])/$1h$2/ # ch -> c 83 | # - derive/^([s])h/$1/ # s -> sh 84 | # - derive/^([s])([^h])/$1h$2/ # sh -> s 85 | # - derive/^l/n/ # n -> l 86 | # - derive/^n/l/ # l -> n 87 | # - derive/^r/l/ # l -> r 88 | # - derive/^r/y/ # y -> r 89 | # - derive/^hu$/fu/ # fu -> hu 90 | # - derive/^fu$/hu/ # hu -> fu 91 | 92 | # 韵母部分 93 | - derive/([^iu])([a])n$/$1$2ng/ # ang -> an 94 | - derive/([^iu])([a])ng$/$1$2n/ # an -> ang 95 | - derive/([e])n$/$1ng/ # eng -> en 96 | - derive/([e])ng$/$1n/ # en -> eng 97 | # - derive/([i])n$/$1ng/ # ing -> in 98 | # - derive/([i])ng$/$1n/ # in -> ing 99 | # - derive/([i])an$/$1ang/ # iang -> ian 100 | # - derive/([i])ang$/$1an/ # ian -> iang 101 | # 由于双拼特性,无需 uang <-> iang 102 | 103 | # 其它模糊音 104 | # - derive/^hui$/fei/ # fei -> hui 105 | # - derive/^fei$/hui/ # hui -> fei 106 | # - derive/^huang$/wang/ # wang -> huang 107 | # - derive/^wang$/huang/ # huang -> wang 108 | # - derive/^([bpmfw])eng$/$1ong/ # bpmfw 后接 ong -> bpmfw 后接 eng 109 | 110 | # 自然码双拼码表 111 | - derive/^([jqxy])u$/$1v/ 112 | - derive/^([aoe])([ioun])$/$1$1$2/ 113 | - xform/^([aoe])(ng)?$/$1$1$2/ 114 | - xform/iu$/Ⓠ/ 115 | - xform/[iu]a$/Ⓦ/ 116 | - xform/[uv]an$/Ⓡ/ 117 | - xform/[uv]e$/Ⓣ/ 118 | - xform/ing$|uai$/Ⓨ/ 119 | - xform/^sh/Ⓤ/ 120 | - xform/^ch/Ⓘ/ 121 | - xform/^zh/Ⓥ/ 122 | - xform/uo$/Ⓞ/ 123 | - xform/[uv]n$/Ⓟ/ 124 | - xform/i?ong$/Ⓢ/ 125 | - xform/[iu]ang$/Ⓓ/ 126 | - xform/(.)en$/$1Ⓕ/ 127 | - xform/(.)eng$/$1Ⓖ/ 128 | - xform/(.)ang$/$1Ⓗ/ 129 | - xform/ian$/Ⓜ/ 130 | - xform/(.)an$/$1Ⓙ/ 131 | - xform/iao$/Ⓒ/ 132 | - xform/(.)ao$/$1Ⓚ/ 133 | - xform/(.)ai$/$1Ⓛ/ 134 | - xform/(.)ei$/$1Ⓩ/ 135 | - xform/ie$/Ⓧ/ 136 | - xform/ui$/Ⓥ/ 137 | - xform/(.)ou$/$1Ⓑ/ 138 | - xform/in$/Ⓝ/ 139 | - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/ 140 | 141 | # 简拼支持 142 | - abbrev/^(.).+$/$1/ 143 | 144 | translator: 145 | dictionary: extended 146 | contextual_suggestions: true 147 | enable_completion: false 148 | max_homophones: 7 149 | 150 | preedit_format: 151 | # - xform/ // # 去掉上屏字符间空格 152 | prism: lufs_dpy 153 | 154 | grammar: 155 | language: zh-hans-t-essay-bgw 156 | 157 | punctuator: 158 | import_preset: lufs_symbols 159 | 160 | key_binder: 161 | import_preset: default 162 | 163 | recognizer: 164 | import_preset: default 165 | 166 | custom_phrase: 167 | dictionary: "" 168 | user_dict: custom_phrase 169 | db_class: stabledb 170 | enable_completion: false 171 | enable_sentence: true 172 | initial_quality: 1 173 | -------------------------------------------------------------------------------- /lufs_flypy.schema.yaml: -------------------------------------------------------------------------------- 1 | # Rime schema 2 | # encoding: utf-8 3 | 4 | schema: 5 | schema_id: lufs_flypy 6 | name: 小鹤双拼 7 | version: "2025-04-25" 8 | author: 9 | - double pinyin layout by 鶴 10 | - Rime schema by 佛振 11 | - Modified by Lufs_X 12 | description: | 13 | 小鹤双拼方案。 14 | 15 | switches: 16 | - name: full_shape 17 | states: [半角, 全角] 18 | - name: ascii_punct 19 | states: [。,, .,] 20 | - name: traditionalization 21 | # reset: 0 # 默认状态: 0 简体 1 繁体 22 | states: [简, 繁] 23 | - name: emoji_suggestion 24 | # reset: 1 # 默认状态: 0 关闭 1 开启 25 | states: [🈚️️, 🈶️] 26 | 27 | engine: 28 | processors: 29 | - recognizer 30 | - lua_processor@*select_character # lua 选词扩展 31 | - key_binder 32 | - speller 33 | - selector 34 | - punctuator 35 | - navigator 36 | - express_editor 37 | segmentors: 38 | - matcher 39 | - abc_segmentor 40 | - punct_segmentor 41 | - fallback_segmentor 42 | translators: 43 | - punct_translator 44 | - lua_translator@*date_translator # 动态日期时间输入 45 | - lua_translator@*unicode_input # Unicode 输入支持 46 | - table_translator@custom_phrase # 用户自定义词典 47 | - script_translator 48 | filters: 49 | - simplifier@emoji_suggestion 50 | - simplifier@traditionalize # 简繁转化 51 | - uniquifier # 去重 52 | # - lua_filter@*candidate_sorting.long_phrase_first # 最长词组和单字在先 53 | # - lua_filter@*candidate_sorting.single_char_first # 单字优先 54 | # - lua_filter@*candidate_sorting.single_char_only # 只显示单字 55 | 56 | traditionalize: 57 | option_name: traditionalization 58 | opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json 59 | tips: none # 转换提示: all 显示 | char 仅单字显示 | none 不显示。 60 | 61 | emoji_suggestion: 62 | opencc_config: emoji.json 63 | option_name: emoji_suggestion 64 | tips: false 65 | 66 | speller: 67 | alphabet: zyxwvutsrqponmlkjihgfedcba/ 68 | delimiter: " '" 69 | algebra: 70 | - erase/^xx$/ 71 | - erase/^hm$/ 72 | - erase/^m$/ 73 | - erase/^n$/ 74 | - erase/^ng$/ 75 | 76 | # 模糊音区域 77 | # 依据个人情况修改注释~ 78 | # 注释格式:键盘的输入码 -> 转化后的输入码 79 | 80 | # 声母部分 81 | # - derive/^([z])h/$1/ # z -> zh 82 | # - derive/^([z])([^h])/$1h$2/ # zh -> z 83 | # - derive/^([c])h/$1/ # c -> ch 84 | # - derive/^([c])([^h])/$1h$2/ # ch -> c 85 | # - derive/^([s])h/$1/ # s -> sh 86 | # - derive/^([s])([^h])/$1h$2/ # sh -> s 87 | # - derive/^l/n/ # n -> l 88 | # - derive/^n/l/ # l -> n 89 | # - derive/^r/l/ # l -> r 90 | # - derive/^r/y/ # y -> r 91 | # - derive/^hu$/fu/ # fu -> hu 92 | # - derive/^fu$/hu/ # hu -> fu 93 | 94 | # 韵母部分 95 | - derive/([^iu])([a])n$/$1$2ng/ # ang -> an 96 | - derive/([^iu])([a])ng$/$1$2n/ # an -> ang 97 | - derive/([e])n$/$1ng/ # eng -> en 98 | - derive/([e])ng$/$1n/ # en -> eng 99 | # - derive/([i])n$/$1ng/ # ing -> in 100 | # - derive/([i])ng$/$1n/ # in -> ing 101 | # - derive/([i])an$/$1ang/ # iang -> ian 102 | # - derive/([i])ang$/$1an/ # ian -> iang 103 | # 由于小鹤双拼特性,无需 uang <-> iang 104 | 105 | # 其它模糊音 106 | # - derive/^hui$/fei/ # fei -> hui 107 | # - derive/^fei$/hui/ # hui -> fei 108 | # - derive/^huang$/wang/ # wang -> huang 109 | # - derive/^wang$/huang/ # huang -> wang 110 | # - derive/^([bpmfw])eng$/$1ong/ # bpmfw 后接 ong -> bpmfw 后接 eng 111 | 112 | # 小鹤双拼码表 113 | - derive/^([jqxy])u$/$1v/ 114 | - derive/^([aoe])([ioun])$/$1$1$2/ 115 | - xform/^([aoe])(ng)?$/$1$1$2/ 116 | - xform/iu$/Ⓠ/ 117 | - xform/(.)ei$/$1Ⓦ/ 118 | - xform/uan$/Ⓡ/ 119 | - xform/[uv]e$/Ⓣ/ 120 | - xform/un$/Ⓨ/ 121 | - xform/^sh/Ⓤ/ 122 | - xform/^ch/Ⓘ/ 123 | - xform/^zh/Ⓥ/ 124 | - xform/uo$/Ⓞ/ 125 | - xform/ie$/Ⓟ/ 126 | - xform/i?ong$/Ⓢ/ 127 | - xform/ing$|uai$/Ⓚ/ 128 | - xform/(.)ai$/$1Ⓓ/ 129 | - xform/(.)en$/$1Ⓕ/ 130 | - xform/(.)eng$/$1Ⓖ/ 131 | - xform/[iu]ang$/Ⓛ/ 132 | - xform/(.)ang$/$1Ⓗ/ 133 | - xform/ian$/Ⓜ/ 134 | - xform/(.)an$/$1Ⓙ/ 135 | - xform/(.)ou$/$1Ⓩ/ 136 | - xform/[iu]a$/Ⓧ/ 137 | - xform/iao$/Ⓝ/ 138 | - xform/(.)ao$/$1Ⓒ/ 139 | - xform/ui$/Ⓥ/ 140 | - xform/in$/Ⓑ/ 141 | - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/ 142 | 143 | # 简拼支持 144 | - abbrev/^(.).+$/$1/ 145 | 146 | translator: 147 | dictionary: extended 148 | contextual_suggestions: true 149 | enable_completion: false 150 | max_homophones: 7 151 | 152 | preedit_format: 153 | # - xform/ // # 去掉上屏字符间空格 154 | prism: lufs_flypy 155 | 156 | grammar: 157 | language: zh-hans-t-essay-bgw 158 | 159 | punctuator: 160 | import_preset: lufs_symbols 161 | 162 | key_binder: 163 | import_preset: default 164 | 165 | recognizer: 166 | import_preset: default 167 | 168 | custom_phrase: 169 | dictionary: "" 170 | user_dict: custom_phrase 171 | db_class: stabledb 172 | enable_completion: false 173 | enable_sentence: true 174 | initial_quality: 1 175 | -------------------------------------------------------------------------------- /lufs_mspy.schema.yaml: -------------------------------------------------------------------------------- 1 | # Rime schema 2 | # encoding: utf-8 3 | 4 | schema: 5 | schema_id: lufs_mspy 6 | name: 微软双拼 7 | version: "2025-04-25" 8 | author: 9 | - Modified by Lufs_X 10 | description: | 11 | 微软双拼方案。 12 | 13 | switches: 14 | - name: full_shape 15 | states: [半角, 全角] 16 | - name: ascii_punct 17 | states: [。,, .,] 18 | - name: traditionalization 19 | # reset: 0 # 默认状态: 0 简体 1 繁体 20 | states: [简, 繁] 21 | - name: emoji_suggestion 22 | # reset: 1 # 默认状态: 0 关闭 1 开启 23 | states: [🈚️️, 🈶️] 24 | 25 | engine: 26 | processors: 27 | - recognizer 28 | - lua_processor@*select_character # lua 选词扩展 29 | - key_binder 30 | - speller 31 | - selector 32 | - punctuator 33 | - navigator 34 | - express_editor 35 | segmentors: 36 | - matcher 37 | - abc_segmentor 38 | - punct_segmentor 39 | - fallback_segmentor 40 | translators: 41 | - punct_translator 42 | - lua_translator@*date_translator # 动态日期时间输入 43 | - lua_translator@*unicode_input # Unicode 输入支持 44 | - table_translator@custom_phrase # 用户自定义词典 45 | - script_translator 46 | filters: 47 | - simplifier@emoji_suggestion 48 | - simplifier@traditionalize # 简繁转化 49 | - uniquifier # 去重 50 | # - lua_filter@*candidate_sorting.long_phrase_first # 最长词组和单字在先 51 | # - lua_filter@*candidate_sorting.single_char_first # 单字优先 52 | # - lua_filter@*candidate_sorting.single_char_only # 只显示单字 53 | 54 | traditionalize: 55 | option_name: traditionalization 56 | opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json 57 | tips: none # 转换提示: all 显示 | char 仅单字显示 | none 不显示。 58 | 59 | emoji_suggestion: 60 | opencc_config: emoji.json 61 | option_name: emoji_suggestion 62 | tips: false 63 | 64 | speller: 65 | alphabet: zyxwvutsrqponmlkjihgfedcba/; 66 | delimiter: " '" 67 | algebra: 68 | - erase/^xx$/ 69 | - erase/^hm$/ 70 | - erase/^m$/ 71 | - erase/^n$/ 72 | - erase/^ng$/ 73 | 74 | # 模糊音区域 75 | # 依据个人情况修改注释~ 76 | # 注释格式:键盘的输入码 -> 转化后的输入码 77 | 78 | # 声母部分 79 | # - derive/^([z])h/$1/ # z -> zh 80 | # - derive/^([z])([^h])/$1h$2/ # zh -> z 81 | # - derive/^([c])h/$1/ # c -> ch 82 | # - derive/^([c])([^h])/$1h$2/ # ch -> c 83 | # - derive/^([s])h/$1/ # s -> sh 84 | # - derive/^([s])([^h])/$1h$2/ # sh -> s 85 | # - derive/^l/n/ # n -> l 86 | # - derive/^n/l/ # l -> n 87 | # - derive/^r/l/ # l -> r 88 | # - derive/^r/y/ # y -> r 89 | # - derive/^hu$/fu/ # fu -> hu 90 | # - derive/^fu$/hu/ # hu -> fu 91 | 92 | # 韵母部分 93 | - derive/([^iu])([a])n$/$1$2ng/ # ang -> an 94 | - derive/([^iu])([a])ng$/$1$2n/ # an -> ang 95 | - derive/([e])n$/$1ng/ # eng -> en 96 | - derive/([e])ng$/$1n/ # en -> eng 97 | # - derive/([i])n$/$1ng/ # ing -> in 98 | # - derive/([i])ng$/$1n/ # in -> ing 99 | # - derive/([i])an$/$1ang/ # iang -> ian 100 | # - derive/([i])ang$/$1an/ # ian -> iang 101 | # 由于双拼特性,无需 uang <-> iang 102 | 103 | # 其它模糊音 104 | # - derive/^hui$/fei/ # fei -> hui 105 | # - derive/^fei$/hui/ # hui -> fei 106 | # - derive/^huang$/wang/ # wang -> huang 107 | # - derive/^wang$/huang/ # huang -> wang 108 | # - derive/^([bpmfw])eng$/$1ong/ # bpmfw 后接 ong -> bpmfw 后接 eng 109 | 110 | # 微软双拼码表 111 | - derive/^([jqxy])u$/$1v/ 112 | - derive/^([aoe])([ioun])$/$1$1$2/ 113 | - xform/^([aoe])(ng)?$/$1$1$2/ 114 | - xform/iu$/Ⓠ/ 115 | - xform/[iu]a$/Ⓦ/ 116 | - xform/er$|[uv]an$/Ⓡ/ 117 | - xform/[uv]e$/Ⓣ/ 118 | - xform/v$|uai$/Ⓨ/ 119 | - xform/^sh/Ⓤ/ 120 | - xform/^ch/Ⓘ/ 121 | - xform/^zh/Ⓥ/ 122 | - xform/uo$/Ⓞ/ 123 | - xform/[uv]n$/Ⓟ/ 124 | - xform/i?ong$/Ⓢ/ 125 | - xform/[iu]ang$/Ⓓ/ 126 | - xform/(.)en$/$1Ⓕ/ 127 | - xform/(.)eng$/$1Ⓖ/ 128 | - xform/(.)ang$/$1Ⓗ/ 129 | - xform/ian$/Ⓜ/ 130 | - xform/(.)an$/$1Ⓙ/ 131 | - xform/iao$/Ⓒ/ 132 | - xform/(.)ao$/$1Ⓚ/ 133 | - xform/(.)ai$/$1Ⓛ/ 134 | - xform/(.)ei$/$1Ⓩ/ 135 | - xform/ie$/Ⓧ/ 136 | - xform/ui$/Ⓥ/ 137 | - derive/T$/Ⓥ/ 138 | - xform/(.)ou$/$1Ⓑ/ 139 | - xform/in$/Ⓝ/ 140 | - xform/ing$/;/ 141 | - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/ 142 | 143 | # 简拼支持 144 | - abbrev/^(.).+$/$1/ 145 | 146 | translator: 147 | dictionary: extended 148 | contextual_suggestions: true 149 | enable_completion: false 150 | max_homophones: 7 151 | 152 | preedit_format: 153 | # - xform/ // # 去掉上屏字符间空格 154 | prism: lufs_mspy 155 | 156 | grammar: 157 | language: zh-hans-t-essay-bgw 158 | 159 | punctuator: 160 | import_preset: lufs_symbols 161 | 162 | key_binder: 163 | import_preset: default 164 | 165 | recognizer: 166 | import_preset: default 167 | 168 | custom_phrase: 169 | dictionary: "" 170 | user_dict: custom_phrase 171 | db_class: stabledb 172 | enable_completion: false 173 | enable_sentence: true 174 | initial_quality: 1 175 | -------------------------------------------------------------------------------- /lufs_pinyin.schema.yaml: -------------------------------------------------------------------------------- 1 | # Rime schema 2 | # encoding: utf-8 3 | 4 | schema: 5 | schema_id: lufs_pinyin 6 | name: 朙月拼音 7 | version: "2025-04-25" 8 | author: 9 | - 佛振 10 | - Modified by Lufs_X 11 | description: | 12 | Rime 预设的拼音输入方案。 13 | 14 | switches: 15 | - name: full_shape 16 | states: [半角, 全角] 17 | - name: ascii_punct 18 | states: [。,, .,] 19 | - name: traditionalization 20 | # reset: 0 # 默认状态: 0 简体 1 繁体 21 | states: [简, 繁] 22 | - name: emoji_suggestion 23 | # reset: 1 # 默认状态: 0 关闭 1 开启 24 | states: [🈚️️, 🈶️] 25 | 26 | engine: 27 | processors: 28 | - recognizer 29 | - lua_processor@*select_character # lua 选词扩展 30 | - key_binder 31 | - speller 32 | - selector 33 | - punctuator 34 | - navigator 35 | - express_editor 36 | segmentors: 37 | - matcher 38 | - abc_segmentor 39 | - punct_segmentor 40 | - fallback_segmentor 41 | translators: 42 | - punct_translator 43 | - lua_translator@*date_translator # 动态日期时间输入 44 | - lua_translator@*unicode_input # Unicode 输入支持 45 | - table_translator@custom_phrase # 用户自定义词典 46 | - script_translator 47 | filters: 48 | - simplifier@emoji_suggestion 49 | - simplifier@traditionalize # 简繁转化 50 | - uniquifier # 去重 51 | # - lua_filter@*candidate_sorting.long_phrase_first # 最长词组和单字在先 52 | # - lua_filter@*candidate_sorting.single_char_first # 单字优先 53 | # - lua_filter@*candidate_sorting.single_char_only # 只显示单字 54 | 55 | traditionalize: 56 | option_name: traditionalization 57 | opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json 58 | tips: none # 转换提示: all 显示 | char 仅单字显示 | none 不显示。 59 | 60 | emoji_suggestion: 61 | opencc_config: emoji.json 62 | option_name: emoji_suggestion 63 | tips: false 64 | 65 | speller: 66 | alphabet: zyxwvutsrqponmlkjihgfedcba/ 67 | delimiter: " '" 68 | algebra: 69 | - erase/^xx$/ 70 | - erase/^hm$/ 71 | - erase/^m$/ 72 | - erase/^n$/ 73 | - erase/^ng$/ 74 | 75 | # 简拼支持 76 | - abbrev/^(.).+$/$1/ 77 | 78 | # 模糊音区域 79 | # 依据个人情况修改注释~ 80 | # 注释格式:键盘的输入码 -> 转化后的输入码 81 | 82 | # 声母部分 83 | # - derive/^([z])h/$1/ # z -> zh 84 | # - derive/^([z])([^h])/$1h$2/ # zh -> z 85 | # - derive/^([c])h/$1/ # c -> ch 86 | # - derive/^([c])([^h])/$1h$2/ # ch -> c 87 | # - derive/^([s])h/$1/ # s -> sh 88 | # - derive/^([s])([^h])/$1h$2/ # sh -> s 89 | # - derive/^l/n/ # n -> l 90 | # - derive/^n/l/ # l -> n 91 | # - derive/^r/l/ # l -> r 92 | # - derive/^r/y/ # y -> r 93 | # - derive/^hu$/fu/ # fu -> hu 94 | # - derive/^fu$/hu/ # hu -> fu 95 | 96 | # 韵母部分 97 | - derive/([^iu])([a])n$/$1$2ng/ # ang -> an 98 | - derive/([^iu])([a])ng$/$1$2n/ # an -> ang 99 | - derive/([e])n$/$1ng/ # eng -> en 100 | - derive/([e])ng$/$1n/ # en -> eng 101 | # - derive/([i])n$/$1ng/ # ing -> in 102 | # - derive/([i])ng$/$1n/ # in -> ing 103 | # - derive/([i])an$/$1ang/ # iang -> ian 104 | # - derive/([i])ang$/$1an/ # ian -> iang 105 | # - derive/([u])an$/$1ang/ # uang -> uan 106 | # - derive/([u])ang$/$1an/ # uan -> uang 107 | 108 | # 其它模糊音 109 | # - derive/^hui$/fei/ # fei -> hui 110 | # - derive/^fei$/hui/ # hui -> fei 111 | # - derive/^huang$/wang/ # wang -> huang 112 | # - derive/^wang$/huang/ # huang -> wang 113 | # - derive/^([bpmfw])eng$/$1ong/ # bpmfw 后接 ong -> bpmfw 后接 eng 114 | 115 | # 容错拼写 116 | - derive/^([nl])ve$/$1ue/ # nue -> nve, lue -> lve 117 | - derive/^([jqxy])u/$1v/ # jv -> ju 118 | # - derive/un$/uen/ # guen -> gun 119 | # - derive/ui$/uei/ # guei -> gui 120 | # - derive/iu$/iou/ # jiou -> jiu 121 | 122 | # 按键纠错 123 | - derive/([aeiou])ng$/$1gn/ # dagn -> dang 124 | - derive/([dtngkhrzcs])o(u|ng)$/$1o/ # zho -> zhong|zhou 125 | - derive/ong$/on/ # zhonguo -> zhong guo 126 | - derive/ao$/oa/ # hoa -> hao 127 | - derive/([iu])a(o|ng?)$/a$1$2/ # tain -> tian 128 | - derive/^([csz])h/h$1/ # hc、hs、hz -> ch、sh、zh 129 | 130 | translator: 131 | dictionary: extended 132 | contextual_suggestions: true 133 | enable_completion: false 134 | max_homophones: 7 135 | 136 | preedit_format: 137 | - xform/([nl])v/$1ü/ 138 | - xform/([nl])ue/$1üe/ 139 | - xform/([jqxy])v/$1u/ 140 | # - xform/ // # 去掉上屏字符间空格 141 | 142 | grammar: 143 | language: zh-hans-t-essay-bgw 144 | 145 | punctuator: 146 | import_preset: lufs_symbols 147 | 148 | key_binder: 149 | import_preset: default 150 | 151 | recognizer: 152 | import_preset: default 153 | 154 | custom_phrase: 155 | dictionary: "" 156 | user_dict: custom_phrase 157 | db_class: stabledb 158 | enable_completion: false 159 | enable_sentence: true 160 | initial_quality: 1 161 | -------------------------------------------------------------------------------- /lufs_pyjj.schema.yaml: -------------------------------------------------------------------------------- 1 | # Rime schema 2 | # encoding: utf-8 3 | 4 | schema: 5 | schema_id: lufs_pyjj 6 | name: 拼音加加双拼 7 | version: "2025-04-25" 8 | author: 9 | - Modified by Lufs_X 10 | description: | 11 | 拼音加加双拼方案。 12 | 13 | switches: 14 | - name: full_shape 15 | states: [半角, 全角] 16 | - name: ascii_punct 17 | states: [。,, .,] 18 | - name: traditionalization 19 | # reset: 0 # 默认状态: 0 简体 1 繁体 20 | states: [简, 繁] 21 | - name: emoji_suggestion 22 | # reset: 1 # 默认状态: 0 关闭 1 开启 23 | states: [🈚️️, 🈶️] 24 | 25 | engine: 26 | processors: 27 | - recognizer 28 | - lua_processor@*select_character # lua 选词扩展 29 | - key_binder 30 | - speller 31 | - selector 32 | - punctuator 33 | - navigator 34 | - express_editor 35 | segmentors: 36 | - matcher 37 | - abc_segmentor 38 | - punct_segmentor 39 | - fallback_segmentor 40 | translators: 41 | - punct_translator 42 | - lua_translator@*date_translator # 动态日期时间输入 43 | - lua_translator@*unicode_input # Unicode 输入支持 44 | - table_translator@custom_phrase # 用户自定义词典 45 | - script_translator 46 | filters: 47 | - simplifier@emoji_suggestion 48 | - simplifier@traditionalize # 简繁转化 49 | - uniquifier # 去重 50 | # - lua_filter@*candidate_sorting.long_phrase_first # 最长词组和单字在先 51 | # - lua_filter@*candidate_sorting.single_char_first # 单字优先 52 | # - lua_filter@*candidate_sorting.single_char_only # 只显示单字 53 | 54 | traditionalize: 55 | option_name: traditionalization 56 | opencc_config: s2t.json # s2t.json | s2hk.json | s2tw.json | s2twp.json 57 | tips: none # 转换提示: all 显示 | char 仅单字显示 | none 不显示。 58 | 59 | emoji_suggestion: 60 | opencc_config: emoji.json 61 | option_name: emoji_suggestion 62 | tips: false 63 | 64 | speller: 65 | alphabet: zyxwvutsrqponmlkjihgfedcba/ 66 | delimiter: " '" 67 | algebra: 68 | - erase/^xx$/ 69 | - erase/^hm$/ 70 | - erase/^m$/ 71 | - erase/^n$/ 72 | - erase/^ng$/ 73 | 74 | # 模糊音区域 75 | # 依据个人情况修改注释~ 76 | # 注释格式:键盘的输入码 -> 转化后的输入码 77 | 78 | # 声母部分 79 | # - derive/^([z])h/$1/ # z -> zh 80 | # - derive/^([z])([^h])/$1h$2/ # zh -> z 81 | # - derive/^([c])h/$1/ # c -> ch 82 | # - derive/^([c])([^h])/$1h$2/ # ch -> c 83 | # - derive/^([s])h/$1/ # s -> sh 84 | # - derive/^([s])([^h])/$1h$2/ # sh -> s 85 | # - derive/^l/n/ # n -> l 86 | # - derive/^n/l/ # l -> n 87 | # - derive/^r/l/ # l -> r 88 | # - derive/^r/y/ # y -> r 89 | # - derive/^hu$/fu/ # fu -> hu 90 | # - derive/^fu$/hu/ # hu -> fu 91 | 92 | # 韵母部分 93 | - derive/([^iu])([a])n$/$1$2ng/ # ang -> an 94 | - derive/([^iu])([a])ng$/$1$2n/ # an -> ang 95 | - derive/([e])n$/$1ng/ # eng -> en 96 | - derive/([e])ng$/$1n/ # en -> eng 97 | # - derive/([i])n$/$1ng/ # ing -> in 98 | # - derive/([i])ng$/$1n/ # in -> ing 99 | # - derive/([i])an$/$1ang/ # iang -> ian 100 | # - derive/([i])ang$/$1an/ # ian -> iang 101 | # 由于双拼特性,无需 uang <-> iang 102 | 103 | # 其它模糊音 104 | # - derive/^hui$/fei/ # fei -> hui 105 | # - derive/^fei$/hui/ # hui -> fei 106 | # - derive/^huang$/wang/ # wang -> huang 107 | # - derive/^wang$/huang/ # huang -> wang 108 | # - derive/^([bpmfw])eng$/$1ong/ # bpmfw 后接 ong -> bpmfw 后接 eng 109 | 110 | # 拼音加加双拼码表 111 | - derive/^([jqxy])u$/$1v/ 112 | - derive/^([aoe])([ioun])$/$1$1$2/ 113 | - xform/^([aoe])(ng)?$/$1$1$2/ 114 | - xform/iu$/Ⓝ/ 115 | - xform/[iu]a$/Ⓑ/ 116 | - xform/er$|ing$/Ⓠ/ 117 | - xform/[uv]an$/Ⓒ/ 118 | - xform/[uv]e$|uai$/Ⓧ/ 119 | - xform/^sh/Ⓘ/ 120 | - xform/^ch/Ⓤ/ 121 | - xform/^zh/Ⓥ/ 122 | - xform/uo$/Ⓞ/ 123 | - xform/[uv]n$/Ⓩ/ 124 | - xform/i?ong$/Ⓨ/ 125 | - xform/[iu]ang$/Ⓗ/ 126 | - xform/(.)en$/$1Ⓡ/ 127 | - xform/(.)eng$/$1Ⓣ/ 128 | - xform/(.)ang$/$1Ⓖ/ 129 | - xform/ian$/Ⓙ/ 130 | - xform/(.)an$/$1Ⓕ/ 131 | - xform/iao$/Ⓚ/ 132 | - xform/(.)ao$/$1Ⓓ/ 133 | - xform/(.)ai$/$1Ⓢ/ 134 | - xform/(.)ei$/$1Ⓦ/ 135 | - xform/ie$/Ⓜ/ 136 | - xform/ui$/Ⓥ/ 137 | - xform/(.)ou$/$1Ⓟ/ 138 | - xform/in$/Ⓛ/ 139 | - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/ 140 | 141 | # 简拼支持 142 | - abbrev/^(.).+$/$1/ 143 | 144 | translator: 145 | dictionary: extended 146 | preedit_format: 147 | # - xform/ // # 去掉上屏字符间空格 148 | prism: lufs_pyjj 149 | contextual_suggestions: true 150 | max_homophones: 7 151 | 152 | grammar: 153 | language: zh-hans-t-essay-bgw 154 | 155 | punctuator: 156 | import_preset: lufs_symbols 157 | 158 | key_binder: 159 | import_preset: default 160 | 161 | recognizer: 162 | import_preset: default 163 | 164 | custom_phrase: 165 | dictionary: "" 166 | user_dict: custom_phrase 167 | db_class: stabledb 168 | enable_completion: false 169 | enable_sentence: true 170 | initial_quality: 1 171 | -------------------------------------------------------------------------------- /lufs_symbols.yaml: -------------------------------------------------------------------------------- 1 | # Rime's punctuation and symbols 2 | # encoding: utf-8 3 | # 4 | # Usage: patch your Rime schema to enable /X symbols 5 | # 修改自: https://github.com/rime/rime-prelude/blob/master/symbols.yaml 6 | # 7 | # COMMIT SHA: 3c602fdb0dcca7825103e281efc50ef7580f99ec 8 | 9 | config_version: "2025-04-25" 10 | 11 | punctuator: 12 | digit_separators: ",.:'" # 自定义数字后转换半角符号,双击即可正常输入,留空可关闭,该功能要求 librime >= 1.13.0 13 | # digit_separator_action: "commit" # 关闭上述功能,要求 librime >= 1.13.1 14 | 15 | full_shape: 16 | " ": { commit: " " } 17 | ",": { commit: , } 18 | ".": { commit: 。 } 19 | "<": [《, 〈, «, ‹, ⟨] 20 | ">": [》, 〉, », ›, ⟩] 21 | "/": [/, ÷] 22 | "?": { commit: ? } 23 | ";": { commit: ; } 24 | ":": { commit: : } 25 | "'": { pair: ["‘", "’"] } 26 | '"': { pair: ["“", "”"] } 27 | '\': [、, \] 28 | "|": [·, |, "§", "¦"] 29 | "`": ` 30 | "~": ~ 31 | "!": { commit: ! } 32 | "@": [@, ☯] 33 | "#": [#, ⌘] 34 | "%": [%, "°", "℃"] 35 | "$": [¥, "$", "€", "£", "¥", "¢", "¤", ₩] 36 | "^": { commit: …… } 37 | "&": & 38 | "*": [*, ·, ・, ×, ※, ❂] 39 | "(": ( 40 | ")": ) 41 | "-": - 42 | "_": —— 43 | "+": + 44 | "=": = 45 | "[": [「, 【, 〔, [, 〚, 〘] 46 | "]": [」, 】, 〕, ], 〛, 〙] 47 | "{": [『, 〖, {] 48 | "}": [』, 〗, }] 49 | half_shape: 50 | ",": { commit: , } 51 | ".": { commit: 。 } 52 | "<": [《, 〈, «, ‹, ⟨, ˂, ˱] 53 | ">": [》, 〉, », ›, ⟩, ˃, ˲] 54 | "/": ["/", /, 、, 、, ÷] 55 | "?": { commit: ? } 56 | ";": { commit: ; } 57 | ":": { commit: : } 58 | "'": { pair: ["‘", "’"] } 59 | '"': { pair: ["“", "”"] } 60 | '\': "、" 61 | "|": [·, ・, "|", |, "§", "¦", "‖", ︴] 62 | "`": "`" 63 | "~": ["~", ~, ˜, ˷, ⸯ, ≈, ≋, ≃, ≅, ≇, ∽, ⋍, ≌, ﹏, ﹋, ﹌, ︴] 64 | "!": { commit: ! } 65 | "@": "@" 66 | "#": "#" 67 | "%": ["%", %, "°", "℃", ‰, ‱, ℉, ℅, ℆, ℀, ℁, ⅍] 68 | "$": [¥, "$", "€", "£", "¥", "¢", "¤", ₩] 69 | "^": { commit: …… } 70 | "&": "&" 71 | "*": ["*", *, ·, ・, ×, ※, ❂, ⁂, ☮, ☯, ☣] 72 | "(": ( 73 | ")": ) 74 | "-": "-" 75 | "_": "——" 76 | "+": "+" 77 | "=": "=" 78 | "[": "「" 79 | "]": "」" 80 | "{": "『" 81 | "}": "』" 82 | symbols: 83 | # 帮助 84 | "/help": [ 符号:/fh, 单位:/dw, 标点:/bd, 数学:/sx, 拼音:/py, 星号:/xh, 方块:/fk, 几何:/jh, 箭头:/jt, 电脑:/dn, 罗马数字:/lm, 大写罗马数字:/lmd, 拉丁:/ld, 上标:/sb, 下标:/xb, 希腊字母:/xl, 大写希腊字母:/xld, 数字:/0到/9, 分数:/fs, いろは順:/iro, 假名:/jm或/pjm或/jmk到/jmo, 假名+圈:/jmq, 假名+半角:/jmbj, 俄语:/ey, 大写俄语:/eyd, 韩文:/hw, 韩文+圈:/hwq, 韩文+弧:/hwh, 结构:/jg, 偏旁:/pp, 康熙(部首):/kx, 笔画:/bh, 注音:/zy, 声调:/sd, 汉字+圈:/hzq, 汉字+弧:/hzh, 数字+圈:/szq, 数字+弧:/szh, 数字+点:/szd, 字母+圈:/zmq, 字母+弧:/zmh, 表情:/bq, 音乐:/yy, 月份:/yf, 日期:/rq, 曜日:/yr, 时间:/sj, 天干:/tg, 地支:/dz, 干支:/gz, 节气:/jq, 象棋:/xq, 麻将:/mj, 色子:/sz, 扑克:/pk, 八卦:/bg, 八卦名:/bgm, 六十四卦:/lssg, 六十四卦名:/lssgm, 太玄经:/txj, 天体:/tt, 星座:/xz, 星座名:/xzm, 十二宫:/seg, 苏州码:/szm ] 85 | # 常用输入 86 | "/tab": " " 87 | "/kg": [ " ","  " ] 88 | "/sm": [ "《", "》", "〈", "〉", "«", "»", "<", ">"] 89 | # 符号、电脑 90 | "/fh": [ ©, ®, ℗, ℠, ™, ℡, ℻, ☇, ☈, ☉, ☊, ☋, ☌, ☍, ☎, ☏, ☐, ☑, ☒, ☓, ☕, ☖, ☗, ⛉, ⛊, ☘, ☙, ☚, ☛, ☜, ☝, ☞, ☟, ☠, ☡, ☢, ☣, ☤, ☥, ☦, ☧, ☨, ☩, ☪, ☫, ☬, ☭, ☮, ☯, ☸, ♨, ♰, ♱, ♲, ♳, ♴, ♵, ♶, ♷, ♸, ♹, ♺, ♻, ♼, ♽, ♾, ♿, ⚆, ⚇, ⚈, ⚉, ⚐, ⚑, ⚒, ⚓, ⚔, ⚕, ⚖, ⚗, ⚘, ⚙, ⚚, ⚛, ⚜, ⚝, ⚞, ⚟, ⚠, ⚡, ⚰, ⚱, ⚲, ⚳, ⚴, ⚵, ⚶, ⚷, ⚸, ⚹, ⚺, ⚻, ⚼, ⚽, ⚾, ⚿, ⛀, ⛁, ⛂, ⛃, ⛋, ⛌, ⛍, ⛎, ⛏, ⛐, ⛑, ⛒, ⛓, ⛔, ⛕, ⛖, ⛗, ⛘, ⛙, ⛚, ⛛, ⛜, ⛝, ⛞, ⛟, ⛠, ⛡, ⛢, ⛣, ⛨, ⛩, ⛪, ⛫, ⛬, ⛭, ⛮, ⛯, ⛰, ⛱, ⛲, ⛳, ⛴, ⛵, ⛶, ⛷, ⛸, ⛹, ⛺, ⛻, ⛼, ⛽, ⛾, ⛿ ] 91 | "/dn": [ , ❖, ⌘, ⌃, ⌥, ⎇, ⇧, ⇪, ␣, ⇥, ⇤, ↩, ⌅, ⌤, ⌫, ⌦, ⌧, ⎋, ⌨, ◁, ⌀, ⌖, ⌗, ⏏, ↖, ↘, ⇞, ⇟, ⌚, ⏰, ⏱, ⏲, ⏳, ⌛, ⌜, ⌝, ⌞, ⌟, ⍑, ⏩, ⏪, ⏫, ⏬, ⏭, ⏮, ⏯ ] 92 | # 象棋、麻将、色子、扑克 93 | "/xq": [ ♔, ♕, ♖, ♗, ♘, ♙, ♚, ♛, ♜, ♝, ♞, ♟ ] 94 | "/mj": [ 🀀, 🀁, 🀂, 🀃, 🀄, 🀅, 🀆, 🀇, 🀈, 🀉, 🀊, 🀋, 🀌, 🀍, 🀎, 🀏, 🀐, 🀑, 🀒, 🀓, 🀔, 🀕, 🀖, 🀗, 🀘, 🀙, 🀚, 🀛, 🀜, 🀝, 🀞, 🀟, 🀠, 🀡, 🀢, 🀣, 🀤, 🀥, 🀦, 🀧, 🀨, 🀩, 🀪, 🀫 ] 95 | "/sz": [ ⚀, ⚁, ⚂, ⚃, ⚄, ⚅ ] 96 | "/pk": [ ♠, ♥, ♣, ♦, ♤, ♡, ♧, ♢ ] 97 | # 表情 98 | "/bq": [ ☻, ☺, ☹ ] 99 | # 天气 100 | "/tq": [ ☀, ☁, ⛅, ⛈, ⛆, ☂, ☔, ☃, ⛄, ⛇ ] 101 | # 音乐 102 | "/yy": [ 𝄞, ♩, ♪, ♫, ♬, ♭, ♮, ♯ ] 103 | # 两性 104 | "/lx": [ ♂, ♀, ⚢, ⚣, ⚤, ⚥, ⚦, ⚧, ⚨, ⚩, ⚪, ⚫, ⚬, ⚭, ⚮, ⚯ ] 105 | # 八卦、八卦名、六十四卦、六十四卦名、太玄经 106 | "/bg": [ ☰, ☱, ☲, ☳, ☴, ☵, ☶, ☷ ] 107 | "/bgm": [ 乾, 兑, 离, 震, 巽, 坎, 艮, 坤 ] 108 | "/lssg": [ ䷀, ䷁, ䷂, ䷃, ䷄, ䷅, ䷆, ䷇, ䷈, ䷉, ䷊, ䷋, ䷌, ䷍, ䷎, ䷏, ䷐, ䷑, ䷒, ䷓, ䷔, ䷕, ䷖, ䷗, ䷘, ䷙, ䷚, ䷛, ䷜, ䷝, ䷞, ䷟, ䷠, ䷡, ䷢, ䷣, ䷤, ䷥, ䷦, ䷧, ䷨, ䷩, ䷪, ䷫, ䷬, ䷭, ䷮, ䷯, ䷰, ䷱, ䷲, ䷳, ䷴, ䷵, ䷶, ䷷, ䷸, ䷹, ䷺, ䷻, ䷼, ䷽, ䷾, ䷿ ] 109 | "/lssgm": [ 乾, 坤, 屯, 蒙, 需, 讼, 师, 比, 小畜, 履, 泰, 否, 同人, 大有, 谦, 豫, 随, 蛊, 临, 观, 噬咳, 贲, 剥, 复, 无妄, 大畜, 颐, 大过, 坎, 离, 咸, 恒, 遁, 大壮, 晋, 明夷, 家人, 睽, 蹇, 解, 损, 益, 夬, 姤, 萃, 升, 困, 井, 革, 鼎, 震, 艮, 渐, 归妹, 丰, 旅, 巽, 兑, 涣, 节, 中孚, 小过, 既济, 未济 ] 110 | "/txj": [ ⚊, ⚋, ⚌, ⚍, ⚎, ⚏, 𝌀, 𝌁, 𝌂, 𝌃, 𝌄, 𝌅, 𝌆, 𝌇, 𝌈, 𝌉, 𝌊, 𝌋, 𝌌, 𝌍, 𝌎, 𝌏, 𝌐, 𝌑, 𝌒, 𝌓, 𝌔, 𝌕, 𝌖, 𝌗, 𝌘, 𝌙, 𝌚, 𝌛, 𝌜, 𝌝, 𝌞, 𝌟, 𝌠, 𝌡, 𝌢, 𝌣, 𝌤, 𝌥, 𝌦, 𝌧, 𝌨, 𝌩, 𝌪, 𝌫, 𝌬, 𝌭, 𝌮, 𝌯, 𝌰, 𝌱, 𝌲, 𝌳, 𝌴, 𝌵, 𝌶, 𝌷, 𝌸, 𝌹, 𝌺, 𝌻, 𝌼, 𝌽, 𝌾, 𝌿, 𝍀, 𝍁, 𝍂, 𝍃, 𝍄, 𝍅, 𝍆, 𝍇, 𝍈, 𝍉, 𝍊, 𝍋, 𝍌, 𝍍, 𝍎, 𝍏, 𝍐, 𝍑, 𝍒, 𝍓, 𝍔, 𝍕, 𝍖 ] 111 | # 天体、星座、星座名、十二宮 112 | "/tt": [ ☄, ☼, ☽, ☾, ☿, ♀, ♁, ♂, ♃, ♄, ♅, ♆, ♇ ] 113 | "/xz": [ ♈, ♉, ♊, ♋, ♌, ♍, ♎, ♏, ♐, ♑, ♒, ♓ ] 114 | "/xzm": [ 白羊座, 金牛座, 双子座, 巨蟹座, 狮子座, 室女座, 天秤座, 天蝎座, 人马座, 摩羯座, 宝瓶座, 双鱼座 ] 115 | "/seg": [ 白羊宫, 金牛宫, 双子宫, 巨蟹宫, 狮子宫, 室女宫, 天秤宫, 天蝎宫, 人马宫, 摩羯宫, 宝瓶宫, 双鱼宫 ] 116 | # 星号 117 | "/xh": [ ★, ☆, ⛤, ⛥, ⛦, ⛧, ✡, ❋, ❊, ❉, ❈, ❇, ❆, ❅, ❄, ❃, ❂, ❁, ❀, ✿, ✾, ✽, ✼, ✻, ✺, ✹, ✸, ✷, ✶, ✵, ✴, ✳, ✲, ✱, ✰, ✯, ✮, ✭, ✬, ✫, ✪, ✩, ✧, ✦, ✥, ✤, ✣, ✢ ] 118 | # 方块 119 | "/fk": [ ▀, ▁, ▂, ▃, ▄, ▅, ▆, ▇, █, ▉, ▊, ▋, ▌, ▍, ▎, ▏, ▐, ░, ▒, ▓, ▔, ▕, ▖, ▗, ▘, ▙, ▚, ▛, ▜, ▝, ▞, ▟ ] 120 | # 几何 121 | "/jh": [ ■, □, ▢, ▣, ▤, ▥, ▦, ▧, ▨, ▩, ▪, ▫, ▬, ▭, ▮, ▯, ▰, ▱, ▲, △, ▴, ▵, ▶, ▷, ▸, ▹, ►, ▻, ▼, ▽, ▾, ▿, ◀, ◁, ◂, ◃, ◄, ◅, ◆, ◇, ◈, ◉, ◊, ○, ◌, ◍, ◎, ●, ◐, ◑, ◒, ◓, ◔, ◕, ◖, ◗, ◘, ◙, ◚, ◛, ◜, ◝, ◞, ◟, ◠, ◡, ◢, ◣, ◤, ◥, ◦, ◧, ◨, ◩, ◪, ◫, ◬, ◭, ◮, ◯, ◰, ◱, ◲, ◳, ◴, ◵, ◶, ◷, ◸, ◹, ◺, ◻, ◼, ◽, ◾, ◿ ] 122 | # 箭头 123 | "/jt": [ ↑, ↓, ←, →, ↕, ↔, ↖, ↗, ↙, ↘, ↚, ↛, ↮, ↜, ↝, ↞, ↟, ↠, ↡, ↢, ↣, ↤, ↥, ↦, ↧, ↨, ↩, ↪, ↫, ↬, ↭, ↯, ↰, ↱, ↲, ↳, ↴, ↵, ↶, ↷, ↸, ↹, ↺, ↻, ↼, ↽, ↾, ↿, ⇀, ⇁, ⇂, ⇃, ⇄, ⇅, ⇆, ⇇, ⇈, ⇉, ⇊, ⇋, ⇌, ⇐, ⇍, ⇑, ⇒, ⇏, ⇓, ⇔, ⇎, ⇕, ⇖, ⇗, ⇘, ⇙, ⇚, ⇛, ⇜, ⇝, ⇞, ⇟, ⇠, ⇡, ⇢, ⇣, ⇤, ⇥, ⇦, ⇧, ⇨, ⇩, ⇪, ⇫, ⇬, ⇭, ⇮, ⇯, ⇰, ⇱, ⇲, ⇳, ⇴, ⇵, ⇶, ⇷, ⇸, ⇹, ⇺, ⇻, ⇼, ⇽, ➔, ➘, ➙, ➚, ➛, ➜, ➝, ➞, ➟, ➠, ➡, ➢, ➣, ➤, ➥, ➦, ➧, ➨, ➩, ➪, ➫, ➬, ➭, ➮, ➱, ➲, ➳, ➴, ➵, ➶, ➷, ➸, ➹, ➺, ➻, ➼, ➽, ➾ ] 124 | # 数学 125 | "/sx": [ ±, ÷, ×, ∈, ∏, ∑, -, +, <, ≮, =, ≠, >, ≯, ∕, √, ∝, ∞, ⟨, ⟩, ∟, ∠, ∥, ∧, ∨, ∩, ∪, ∫, ∮, ∴, ∵, ∷, ∽, ≈, ≌, ≒, ≡, ≤, ≥, ≦, ≧, ⊕, ⊙, ⊥, ⊿, ㏑, ㏒ ] 126 | # 数字+圈/弧/点 127 | "/szq": [ ⓪, ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪, ⑫, ⑬, ⑭, ⑮, ⑯, ⑰, ⑱, ⑲, ⑳, ㉑, ㉒, ㉓, ㉔, ㉕, ㉖, ㉗, ㉘, ㉙, ㉚, ㉛, ㉜, ㉝, ㉞, ㉟, ㊱, ㊲, ㊳, ㊴, ㊵, ㊶, ㊷, ㊸, ㊹, ㊺, ㊻, ㊼, ㊽, ㊾, ㊿, ⓿, ❶, ❷, ❸, ❹, ❺, ❻, ❼, ❽, ❾, ❿, ⓫, ⓬, ⓭, ⓮, ⓯, ⓰, ⓱, ⓲, ⓳, ⓴ ] 128 | "/szh": [ ⑴, ⑵, ⑶, ⑷, ⑸, ⑹, ⑺, ⑻, ⑼, ⑽, ⑾, ⑿, ⒀, ⒁, ⒂, ⒃, ⒄, ⒅, ⒆, ⒇ ] 129 | "/szd": [ ⒈, ⒉, ⒊, ⒋, ⒌, ⒍, ⒎, ⒏, ⒐, ⒑, ⒒, ⒓, ⒔, ⒕, ⒖, ⒗, ⒘, ⒙, ⒚, ⒛ ] 130 | # 字母+圈/弧 131 | "/zmq": [ ⓐ, Ⓐ, ⓑ, Ⓑ, ⓒ, Ⓒ, ⓓ, Ⓓ, ⓔ, Ⓔ, ⓕ, Ⓕ, ⓖ, Ⓖ, ⓗ, Ⓗ, ⓘ, Ⓘ, ⓙ, Ⓙ, ⓚ, Ⓚ, ⓛ, Ⓛ, ⓜ, Ⓜ, ⓝ, Ⓝ, ⓞ, Ⓞ, ⓟ, Ⓟ, ⓠ, Ⓠ, ⓡ, Ⓡ, ⓢ, Ⓢ, ⓣ, Ⓣ, ⓤ, Ⓤ, ⓥ, Ⓥ, ⓦ, Ⓦ, ⓧ, Ⓧ, ⓨ, Ⓨ, ⓩ, Ⓩ ] 132 | "/zmh": [ ⒜, ⒝, ⒞, ⒟, ⒠, ⒡, ⒢, ⒣, ⒤, ⒥, ⒦, ⒧, ⒨, ⒩, ⒪, ⒫, ⒬, ⒭, ⒮, ⒯, ⒰, ⒱, ⒲, ⒳, ⒴, ⒵ ] 133 | # 数字、分数 134 | "/0": [ 〇, 零, ₀, ⁰, ⓪, ⓿ , 0] 135 | "/1": [ 一, 壹, ₁, ¹, Ⅰ, ⅰ, ①, ➀, ❶, ➊, ⓵, ⑴, ⒈, 1, ㊀, ㈠, 弌, 壱, 幺, ㆒ ] 136 | "/2": [ 二, 貳, ₂, ², Ⅱ, ⅱ, ②, ➁, ❷, ➋, ⓶, ⑵, ⒉, 2, ㊁, ㈡, 弍, 弐, 貮, 㒃, 㒳, 兩, 倆, ㆓] 137 | "/3": [ 三, 叄, ₃, ³, Ⅲ, ⅲ, ③, ➂, ❸, ➌, ⓷, ⑶, ⒊, 3, ㊂, ㈢, 參, 参, 叁, 弎, 仨, ㆔] 138 | "/4": [ 四, 肆, ₄, ⁴, Ⅳ, ⅳ, ④, ➃, ❹, ➍, ⓸, ⑷, ⒋, 4, ㊃, ㈣, 亖] 139 | "/5": [ 五, 伍, ₅, ⁵, Ⅴ, ⅴ, ⑤, ➄, ❺, ➎, ⓹, ⑸, ⒌, 5, ㊄, ㈤, 㐅, 㠪, 𠄡 ] 140 | "/6": [ 六, 陸, ₆, ⁶, Ⅵ, ⅵ, ⑥, ➅, ❻, ➏, ⓺, ⑹, ⒍, 6, ㊅, ㈥, ↅ] 141 | "/7": [ 七, 柒, ₇, ⁷, Ⅶ, ⅶ, ⑦, ➆, ❼, ➐, ⓻, ⑺, ⒎, 7, ㊆, ㈦, 漆] 142 | "/8": [ 八, 捌, ₈, ⁸, Ⅷ, ⅷ, ⑧, ➇, ❽, ➑, ⓼, ⑻, ⒏, 8, ㊇, ㈧ ] 143 | "/9": [ 九, 玖, ₉, ⁹, Ⅸ, ⅸ, ⑨, ➈, ❾, ➒, ⓽, ⑼, ⒐, 9, ㊈, ㈨ ] 144 | "/10": [ 十, 拾, ₁₀, ¹⁰, Ⅹ, ⅹ, ⑩, ➉, ❿, ➓, ⓾, ⑽, ⒑, 10, ㊉, ㈩, 什 ] 145 | "/fs": [ ⅟, ½, ↉, ⅓, ⅔, ¼, ¾, ⅕, ⅖, ⅗, ⅘, ⅙, ⅚, ⅐, ⅛, ⅜, ⅝, ⅞, ⅑, ⅒ ] 146 | # 苏州码 147 | "/szm": [ 〡, 〢, 〣, 〤, 〥, 〦, 〧, 〨, 〩, 〸, 〹, 〺 ] 148 | # 罗马数字 149 | "/lm": [ ⅰ, ⅱ, ⅲ, ⅳ, ⅴ, ⅵ, ⅶ, ⅷ, ⅸ, ⅹ, ⅺ, ⅻ, ⅼ, ⅽ, ⅾ, ⅿ ] 150 | "/lmd": [ Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, Ⅼ, Ⅽ, Ⅾ, Ⅿ ] 151 | # 拉丁 152 | "/a": [ā, á, ǎ, à, ȁ, â, ă, ȃ, ȧ, ä, å, ã, ₐ, ᵃ, ª, ⱥ, ꬰ, ả, ą, ạ, ḁ, ẚ, ấ, ầ, ẫ, ẩ, ắ, ằ, ẵ, ẳ, ǡ, ǟ, ǻ, ậ, ặ, ᶏ, ɐ, ᵄ, ɑ, ᵅ, ᶐ, ɒ, ᶛ] 153 | "/A": [Ā, Á, Ǎ, À, Ȁ, Â, Ă, Ȃ, Ȧ, Ä, Å, Ã, ᴀ, ᴬ, Ⱥ, Ả, Ą, Ạ, Ḁ, Ấ, Ầ, Ẫ, Ẩ, Ắ, Ằ, Ẵ, Ẳ, Ǡ, Ǟ, Ǻ, Ậ, Ặ, Ɐ, Ɑ, Ɒ ] 154 | "/b": [ḃ, ḅ, ᵇ, ƀ, ƃ, ḇ, ɓ, ᵬ, ᶀ, ꞗ] 155 | "/B": [Ḃ, Ḅ, ʙ, ᴃ, ᴮ, ᴯ, Ƀ, Ƃ, Ḇ, Ɓ, Ꞗ] 156 | "/c": [ç, ć, č, ĉ, ċ, ᶜ, ȼ, ꞓ, ƈ, ḉ, ꞔ, ɕ, ᶝ, ꜿ] 157 | "/C": [Ç, Ć, Č, Ĉ, Ċ, ᴄ, Ȼ, Ꞓ, Ƈ, Ḉ, Ꜿ] 158 | "/d": [ď, ḋ, ᵈ, đ, ƌ, ᵭ, ḑ, ḓ, ḏ, ḍ, ɖ, ɗ, ᶑ, ᶁ, ð, ᶞ, ꝱ, ʤ, ʣ, ʥ, ȡ, ƍ, dz, dž, ẟ] 159 | "/D": [Ď, Ḋ, ᴅ, ᴆ, ᴰ, Đ, Ƌ, Ḑ, Ḓ, Ḏ, Ḍ, Ɖ, Ɗ, Ð, DZ, Dz, DŽ, Dž ] 160 | "/e": [ē, é, ě, è, ȅ, ê, ĕ, ȇ, ė, ë, ẽ, ₑ, ᵉ, ɇ, ꬳ, ẻ, ȩ, ę, ḙ, ẹ, ḛ, ḗ, ḕ, ế, ề, ễ, ể, ḝ, ệ, ᶒ, ꬴ, ɘ, ə, ɚ, ᶕ, ɛ, ᵋ, ᶓ, ɜ, ᵌ, ᴈ, ᶟ, ɝ, ᶔ, ɞ, ʚ, ǝ, ₔ, ᵊ, ȝ, ⱸ] 161 | "/E": [Ē, É, Ě, È, Ȅ, Ê, Ĕ, Ȇ, Ė, Ë, Ẽ, ᴇ, ᴱ, Ɇ, Ẻ, Ȩ, Ę, Ḙ, Ẹ, Ḛ, Ḗ, Ḕ, Ế, Ề, Ễ, Ể, Ḝ, Ệ, Ə, Ɛ, Ɜ, Ǝ, ⱻ, ᴲ, Ȝ ] 162 | "/f": [ḟ, ᶠ, ƒ, ᵮ, ᶂ, ꞙ ] 163 | "/F": [Ḟ, ꜰ, Ƒ, Ꞙ, ꟻ] 164 | "/g": [ḡ, ǵ, ǧ, ĝ, ğ, ġ, ᵍ, ǥ, ꞡ, ģ, ɠ, ᵷ, ᶃ, ɡ, ꬶ, ᶢ, ɣ, ˠ, ɤ, ᵹ] 165 | "/G": [Ḡ, Ǵ, Ǧ, Ĝ, Ğ, Ġ, ʛ, ᴳ, Ǥ, Ꞡ, Ģ, Ɠ, Ɡ, Ɣ ] 166 | "/h": [ĥ, ȟ, ḣ, ḧ, ͪ, ħ, ɦ, ʱ, ꜧ, ꭜ, ɧ, ḩ, ẖ, ḫ, ḥ, ⱨ, ꞕ, ɥ, ᶣ, ʮ, ʯ, ⱶ] 167 | "/H": [Ĥ, Ȟ, Ḣ, Ḧ, ʜ, ᴴ, Ħ, Ɦ, Ꜧ, Ḩ, Ḫ, Ḥ, Ⱨ, Ɥ, Ⱶ] 168 | "/i": [ī, í, ǐ, ì, ȉ, î, ĭ, ȋ, ï, ĩ, ı, ᵢ, ɨ, ᶤ, ỉ, į, ị, ḭ, ᴉ, ᵎ, ḯ, ᶖ, ɩ, ᶥ, ᵼ] 169 | "/I": [Ī, Í, Ǐ, Ì, Ȉ, Î, Ĭ, Ȋ, Ï, Ĩ, İ, ɪ, ᴵ, ᶦ, Ɨ, ᵻ, ᶧ, Ỉ, Į, Ị, Ḭ, Ḯ, ꟾ, Ɩ ] 170 | "/j": [ĵ, ǰ, ⱼ, ʲ, ɉ, ȷ, ɟ, ᶡ, ʄ, ʝ, ᶨ] 171 | "/J": [Ĵ, ᴊ, ᴶ, Ɉ, Ʝ ] 172 | "/k": [ḱ, ǩ, ₖ, ᵏ, ꝁ, ꝃ, ꞣ, ꝅ, ķ, ḵ, ḳ, ƙ, ᶄ, ⱪ, ʞ, ĸ] 173 | "/K": [Ḱ, Ǩ, ᴋ, ᴷ, Ꝁ, Ꝃ, Ꞣ, Ꝅ, Ķ, Ḵ, Ḳ, Ƙ, Ⱪ, Ʞ ] 174 | "/l": [ĺ, ˡ, ł, ꝉ, ƚ, ⱡ, ɫ, ꭞ, ꬸ, ɬ, ľ, ļ, ḻ, ḽ, ḷ, ŀ, ꝲ, ƛ, ᶅ, ᶪ, ɭ, ᶩ, ḹ, ꬷ, ꭝ, ꬹ, ȴ, ꝇ] 175 | "/L": [Ĺ, ʟ, ᶫ, Ƚ, Ꝉ, Ł, ᴌ, Ⱡ, Ɫ, Ɬ, Ľ, Ļ, Ḻ, Ḽ, Ḷ, Ŀ, Ꝇ] 176 | "/m": [ḿ, ṁ, ᵐ, ₘ, ṃ, ᵯ, ɱ, ᶬ, ꬺ, ᶆ, ꝳ, ɯ, ᵚ, ɰ, ᶭ, ᴟ] 177 | "/M": [Ḿ, Ṁ, ᴍ, ᴹ, Ṃ, Ɱ, Ɯ, ꟽ, ꟿ ] 178 | "/n": [ń, ň, ǹ, ṅ, ñ, ₙ, ⁿ, ɲ, ᶮ, ɳ, ᶯ, ȵ, ƞ, ŋ, ᵑ, ꬻ, ꬼ, ꝴ, ʼn, ꞥ, ņ, ṉ, ṋ, ṇ, ᵰ, ꞑ, ᶇ] 179 | "/N": [Ń, Ň, Ǹ, Ṅ, Ñ, ɴ, ᴺ, ᴻ, ᶰ, Ɲ, Ƞ, Ŋ, Ņ, Ṉ, Ṋ, Ṇ, Ꞑ ] 180 | "/o": [ō, ó, ő, ǒ, ò, ô, ŏ, ȯ, ö, õ, ₒ, ᵒ, º, ɔ, ᵓ, ᶗ, ꬿ, ø, ǫ, ọ, ơ, ɵ, ᶱ, ᴑ, ᴒ, ᴓ, ꝋ, ꝍ, ṓ, ṑ, ố, ồ, ỗ, ổ, ȱ, ȫ, ȭ, ṍ, ṏ, ộ, ǭ, ǿ, ớ, ờ, ỡ, ở, ợ, ɷ, ⱺ, ᴖ, ᵔ, ᴗ, ᵕ] 181 | "/O": [Ō, Ó, Ő, Ǒ, Ò, Ô, Ŏ, Ȯ, Ö, Õ, ᴏ, ᴼ, Ɔ, ᴐ, Ø, Ǫ, Ọ, Ơ, Ɵ, Ꝋ, Ꝍ, Ṓ, Ṑ, Ố, Ồ, Ỗ, Ổ, Ȱ, Ȫ, Ȭ, Ṍ, Ṏ, Ộ, Ǭ, Ǿ, Ớ, Ờ, Ỡ, Ở, Ợ ] 182 | "/p": [ṕ, ṗ, ᵖ, ᵽ, ꝑ, ᵱ, ƥ, ᶈ, ꝓ, ꝕ, ɸ, ᶲ, ⱷ ] 183 | "/P": [Ṕ, Ṗ, ᴘ, ᴾ, Ᵽ, Ꝑ, Ƥ, Ꝓ, Ꝕ, ꟼ] 184 | "/q": [ɋ, ꝗ, ꝙ, ʠ] 185 | "/Q": [Ɋ, Ꝗ, Ꝙ ] 186 | "/r": [ŕ, ř, ȑ, ȓ, ṙ, ᵣ, ɍ, ꞧ, ᵲ, ŗ, ṟ, ṛ, ṝ, ᵳ, ɽ, ᶉ, ꭇ, ꭈ, ꭊ, ꭉ, ꝵ, ꭋ, ꭌ, ɹ, ʴ, ɺ, ɻ, ʵ, ⱹ, ɼ, ʳ, ɾ, ɿ, ꝛ, ꝝ] 187 | "/R": [Ŕ, Ř, Ȑ, Ȓ, Ṙ, ʀ, ᴙ, ᴿ, Ʀ, ꭆ, Ɍ, Ꞧ, Ŗ, Ṟ, Ṛ, Ṝ, Ɽ, ꝶ, ʶ, ʁ, Ꝛ, Ꝝ] 188 | "/s": [ś, ŝ, š, ṡ, ˢ, ʂ, ᶳ, ᵴ, ꞩ, ᶊ, ş, ṣ, ș, ȿ, ṥ, ṧ, ṩ, ʃ, ᶴ, ʆ, ᶘ, ʅ, ƪ, ß, ſ, ẛ, ẜ, ẝ] 189 | "/S": [Ś, Ŝ, Š, Ṡ, ꜱ, Ꞩ, Ş, Ṣ, Ș, Ṥ, Ṧ, Ṩ, Ʃ, ẞ, ] 190 | "/t": [ť, ṫ, ẗ, ᵗ, ₜ, ʈ, þ, ꝥ, ꝧ, ŧ, ⱦ, ţ, ṯ, ṱ, ṭ, ț, ƭ, ᵵ, ƫ, ᶵ, ʇ, ȶ, ꝷ] 191 | "/T": [Ť, Ṫ, ᴛ, ᵀ, Ʈ, Þ, Ꝥ, Ꝧ, Ŧ, Ⱦ, Ţ, Ṯ, Ṱ, Ṭ, Ț, Ƭ, Ʇ ] 192 | "/u": [ū, ú, ű, ǔ, ù, ȕ, û, ŭ, ȗ, ü, ǖ, ǘ, ǚ, ǜ, ů, ũ, ᵤ, ᵘ, ʉ, ᶶ, ủ, ų, ṷ, ụ, ṳ, ṵ, ư, ʊ, ᶷ, ᵿ, ᶙ, ṻ, ṹ, ứ, ừ, ữ, ử, ự, ꭒ, ꭟ, ꝸ, ꭎ, ꭏ, ᴝ, ᵙ, ᴞ] 193 | "/U": [Ū, Ú, Ű, Ǔ, Ù, Ȕ, Û, Ŭ, Ȗ, Ü, Ǖ, Ǘ, Ǚ, Ǜ, Ů, Ũ, ᴜ, ᵁ, ᶸ, Ʉ, Ủ, Ų, Ṷ, Ụ, Ṳ, Ṵ, Ư, Ʊ, Ṻ, Ṹ, Ứ, Ừ, Ữ, Ử, Ự ] 194 | "/v": [ü, ǖ, ǘ, ǚ, ǜ, ṽ, ᵛ, ᵥ, ṿ, ꝟ, ʋ, ᶹ, ᶌ, ⱴ, ⱱ, ỽ, ʌ, ᶺ] 195 | "/V": [Ü, Ǖ, Ǘ, Ǚ, Ǜ, Ṽ, ᴠ, ⱽ, Ṿ, Ꝟ, Ʋ, Ỽ, Ʌ ] 196 | "/w": [ẃ, ẁ, ŵ, ẇ, ẅ, ẘ, ʷ, ẉ, ƿ, ʍ, ⱳ] 197 | "/W": [Ẃ, Ẁ, Ŵ, Ẇ, Ẅ, W̊, ᴡ, ᵂ, Ẉ, Ƿ, Ⱳ] 198 | "/x": [ẋ, ẍ, ᶍ, ˣ, ₓ, ꭖ, ꭗ, ꭘ, ꭙ] 199 | "/X": [Ẋ, Ẍ ] 200 | "/y": [ȳ, ý, ỳ, ŷ, ẏ, ÿ, ẙ, ỹ, ʸ, ɏ, ỷ, ỵ, ƴ, ʎ, ỿ, ꭚ] 201 | "/Y": [Ȳ, Ý, Ỳ, Ŷ, Ẏ, Ÿ, Ỹ, ʏ, Ɏ, Ỷ, Ỵ, Ƴ, Ỿ ] 202 | "/z": [ź, ž, ẑ, ż, ᶻ, ʐ, ᶼ, ʑ, ᶽ, ƶ, ẕ, ẓ, ᵶ, ȥ, ⱬ, ᶎ, ʒ, ᶾ, ǯ, ʓ, ƹ, ƺ, ᶚ, θ, ᶿ, ɀ, ꝣ] 203 | "/Z": [Ź, Ž, Ẑ, Ż, ᴢ, Ƶ, Ẕ, Ẓ, Ȥ, Ⱬ, Ʒ, ᴣ, Ǯ, Ƹ, Ɀ, Ꝣ] 204 | "/aa": [ꜳ] 205 | "/AA": [Ꜳ] 206 | "/ae": [æ, ǣ, ǽ, ᵆ, ᴂ] 207 | "/AE": [Æ, Ǣ, Ǽ, ᴭ, ᴁ ] 208 | "/ao": [ꜵ] 209 | "/AO": [Ꜵ] 210 | "/au": [ꜷ] 211 | "/AU": [Ꜷ] 212 | "/av": [ꜹ, ꜻ] 213 | "/AV": [Ꜹ, Ꜻ] 214 | "/ay": [ꜽ] 215 | "/AY": [Ꜽ] 216 | "/db": [ȸ] 217 | "/ff": [ff] 218 | "/ffi": [ffi] 219 | "/ffl": [ffl] 220 | "/fi": [fi] 221 | "/fl": [fl] 222 | "/fn": [ʩ] 223 | "/hv": [ƕ] 224 | "/HV": [Ƕ] 225 | "/ij": [ij] 226 | "/IJ": [IJ] 227 | "/lj": [lj] 228 | "/ll": [ỻ] 229 | "/LL": [Ỻ] 230 | "/ls": [ʪ] 231 | "/lz": [ʫ, ɮ] 232 | "/nj": [nj] 233 | "/Nj": [Nj] 234 | "/NJ": [NJ] 235 | "/oe": [œ, ᴔ] 236 | "/OE": [Œ, ɶ ] 237 | "/oi": [ƣ] 238 | "/OI": [Ƣ] 239 | "/oo": [ꝏ] 240 | "/OO": [Ꝏ] 241 | "/ou": [ȣ ] 242 | "/OU": [Ȣ, ᴽ] 243 | "/qp": [ȹ] 244 | "/Rx": [℞] 245 | "/tc": [ʨ] 246 | "/th": [ᵺ] 247 | "/ts": [ʦ, ʧ] 248 | "/tz": [ꜩ] 249 | "/TZ": [Ꜩ] 250 | "/ue": [ᵫ] 251 | "/vy": [ꝡ] 252 | "/VY": [Ꝡ] 253 | "/ww": [ʬ] 254 | # 上标、下标 255 | "/sb": [ ⁰, ¹, ², ³, ⁴, ⁵, ⁶, ⁷, ⁸, ⁹, ˜, ⁺, ⁻, ⁼, ⁽, ⁾, ᴬ, ᵃ, ᵄ, ᵅ, ᶛ, ᴭ, ᵆ, ᴮ, ᴯ, ᵇ, ᵝ, ᶜ, ᵓ, ᶝ, ᴰ, ᵈ, ᶞ, ᵟ, ᴱ, ᵉ, ᴲ, ᵊ, ᵋ, ᶟ, ᵌ, ᶠ, ᶡ, ᶲ, ᵠ, ᴳ, ᵍ, ᶢ, ˠ, ᵞ, ᴴ, ʰ, ᶣ, ʱ, ᴵ, ⁱ, ᶤ, ᵎ, ᶥ, ᴶ, ʲ, ᶨ, ᴷ, ᵏ, ᴸ, ᶫ, ˡ, ᶩ, ᶪ, ᴹ, ᵐ, ᶬ, ᵚ, ᶭ, ᴺ, ᴻ, ⁿ, ᵑ, ᶮ, ᶯ, ᴼ, ᵒ, ᶱ, ᴽ, ᴾ, ᵖ, ᴿ, ʳ, ʶ, ʴ, ʵ, ˢ, ᶴ, ᶳ, ᵀ, ᵗ, ᶵ, ᶿ, ᵁ, ᵘ, ᶶ, ᶷ, ᵙ, ⱽ, ᵛ, ᶺ, ᶹ, ᵂ, ʷ, ˣ, ᵡ, ʸ, ᶻ, ᶾ, ᶽ, ᶼ ] 256 | "/xb": [ ₀, ₁, ₂, ₃, ₄, ₅, ₆, ₇, ₈, ₉, ₊, ₋, ₌, ₍, ₎, ‸, ᴀ, ₐ, ᴁ, ʙ, ᴃ, ᵦ, ᴄ, ᴐ, ᴒ, ᴅ, ᴆ, ᴇ, ₑ, ₔ, ᵩ, ɢ, ʛ, ᴦ, ᵧ, ʜ, ₕ, ɪ, ᵻ, ᵢ, ᴊ, ⱼ, ᴋ, ₖ, ʟ, ₗ, ᴌ, ᴧ, ᴍ, ₘ, ꟺ, ɴ, ᴎ, ₙ, ᴏ, ₒ, ɶ, ʘ, ᴓ, ᴑ, ᴘ, ₚ, ᴨ, ᴪ, ʀ, ᵣ, ᴙ, ʁ, ᴚ, ᵨ, ₛ, ᴛ, ₜ, ᴜ, ᵤ, ᵾ, ᴠ, ᵥ, ᴡ, ₓ, ᵪ, ʏ, ᴢ, ᴣ ] 257 | # 希腊 258 | "/xl": [ α, β, γ, δ, ε, ζ, η, θ, ι, κ, λ, μ, ν, ξ, ο, π, ρ, σ, ς, τ, υ, φ, χ, ψ, ω ] 259 | "/xld": [ Α, Β, Γ, Δ, Ε, Ζ, Η, Θ, Ι, Κ, Λ, Μ, Ν, Ξ, Ο, Π, Ρ, Σ, Τ, Υ, Φ, Χ, Ψ, Ω ] 260 | # 俄語 261 | "/ey": [ а, б, в, г, д, е, ё, ж, з, и, й, к, л, м, н, о, п, р, с, т, у, ф, х, ц, ч, ш, щ, ъ, ы, ь, э, ю, я ] 262 | "/eyd": [ А, Б, В, Г, Д, Е, Ё, Ж, З, И, Й, К, Л, М, Н, О, П, Р, С, Т, У, Ф, Х, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я ] 263 | # 月份、日期、曜日等 264 | "/yf": [ ㋀, ㋁, ㋂, ㋃, ㋄, ㋅, ㋆, ㋇, ㋈, ㋉, ㋊, ㋋ ] 265 | "/rq": [ ㏠, ㏡, ㏢, ㏣, ㏤, ㏥, ㏦, ㏧, ㏨, ㏩, ㏪, ㏫, ㏬, ㏭, ㏮, ㏯, ㏰, ㏱, ㏲, ㏳, ㏴, ㏵, ㏶, ㏷, ㏸, ㏹, ㏺, ㏻, ㏼, ㏽, ㏾ ] 266 | "/yr": [ 月, 火, 水, 木, 金, 土, 日, ㊊, ㊋, ㊌, ㊍, ㊎, ㊏, ㊐, ㊗, ㊡, ㈪, ㈫, ㈬, ㈭, ㈮, ㈯, ㈰, ㈷, ㉁, ㉀ ] 267 | # 时间 268 | "/sj": [ ㍘, ㍙, ㍚, ㍛, ㍜, ㍝, ㍞, ㍟, ㍠, ㍡, ㍢, ㍣, ㍤, ㍥, ㍦, ㍧, ㍨, ㍩, ㍪, ㍫, ㍬, ㍭, ㍮, ㍯, ㍰ ] 269 | # 天干、地支、干支 270 | "/tg": [ 甲, 乙, 丙, 丁, 戊, 己, 庚, 辛, 壬, 癸 ] 271 | "/dz": [ 子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥 ] 272 | "/gz": [ 甲子, 乙丑, 丙寅, 丁卯, 戊辰, 己巳, 庚午, 辛未, 壬申, 癸酉, 甲戌, 乙亥, 丙子, 丁丑, 戊寅, 己卯, 庚辰, 辛巳, 壬午, 癸未, 甲申, 乙酉, 丙戌, 丁亥, 戊子, 己丑, 庚寅, 辛卯, 壬辰, 癸巳, 甲午, 乙未, 丙申, 丁酉, 戊戌, 己亥, 庚子, 辛丑, 壬寅, 癸卯, 甲辰, 乙巳, 丙午, 丁未, 戊申, 己酉, 庚戌, 辛亥, 壬子, 癸丑, 甲寅, 乙卯, 丙辰, 丁巳, 戊午, 己未, 庚申, 辛酉, 壬戌, 癸亥 ] 273 | #节气 274 | "/jq": [ 立春, 雨水, 惊蛰, 春分, 清明, 谷雨, 立夏, 小满, 芒种, 夏至, 小暑, 大暑, 立秋, 处暑, 白露, 秋分, 寒露, 霜降, 立冬, 小雪, 大雪, 冬至, 小寒, 大寒 ] 275 | # 单位 276 | "/dw": [ Å, ℃, %, ‰, ‱, °, ℉, ㏃, ㏆, ㎈, ㏄, ㏅, ㎝, ㎠, ㎤, ㏈, ㎗, ㎙, ㎓, ㎬, ㏉, ㏊, ㏋, ㎐, ㏌, ㎄, ㎅, ㎉, ㎏, ㎑, ㏍, ㎘, ㎞, ㏎, ㎢, ㎦, ㎪, ㏏, ㎸, ㎾, ㏀, ㏐, ㏓, ㎧, ㎨, ㎡, ㎥, ㎃, ㏔, ㎆, ㎎, ㎒, ㏕, ㎖, ㎜, ㎟, ㎣, ㏖, ㎫, ㎳, ㎷, ㎹, ㎽, ㎿, ㏁, ㎁, ㎋, ㎚, ㎱, ㎵, ㎻, ㏘, ㎩, ㎀, ㎊, ㏗, ㏙, ㏚, ㎰, ㎴, ㎺, ㎭, ㎮, ㎯, ㏛, ㏜, ㎔, ㏝, ㎂, ㎌, ㎍, ㎕, ㎛, ㎲, ㎶, ㎼ ] 277 | # 货币 278 | "/hb": [ ¥, ¥, ¤, ¢, $, $, £, £, ৳, ฿, ₠, ₡, ₢, ₣, ₤, ₥, ₦, ₧, ₨, ₩, ₪, ₫, €, ₭, ₮, ₯, ₰, ₱, ₲, ₳, ₴, ₵, ₶, ₷, ₸, ₹, ₺, ₻, ₼, ₽, ₾, ₿, ⃀, ﷼ ] 279 | # 结构、偏旁、康熙(部首)、笔画、标点 280 | "/jg": [ ⿰, ⿱, ⿲, ⿳, ⿴, ⿵, ⿶, ⿷, ⿸, ⿹, ⿺, ⿻, 〾, ⿼, ⿽, ⿾, ⿿, ㇯ ] 281 | "/pp": [ 乛, 冫, 丷, 龹, ⺌, 龸, 亻, 亼, 亽, 仒, 冖, 冂, 冃, 冄, 宀, 罒, 㓁, 罓, 冈, 凵, 厶, 刂, 勹, 匚, 匸, 卩, 阝, 厂, 丆, 广, 壬, 訁, 讠, 釒, 钅, 飠, 饣, 龺, 攵, 夂, 夊, 尢, 尣, 兂, 旡, 巜, 巛, 彐, 彑, 彡, 彳, 龰, 辶, 廴, 㞢, 忄, 㣺, 扌, 爫, 龵, 廾, 歺, 癶, 氵, 氺, 火, 灬, 爿, 丬, 疒, 牜, ⺶, 犭, 豕, 豸, 虍, 艹, 卝, 龷, 丗, 龶, 芈, 丵, 菐, 黹, 礻, 衤, 糸, 糹, 纟, 龻, 镸, 髟, 襾, 覀, 吅, 㗊, 㠭, 㸚, 叕] 282 | "/kx": [ 一, 丨, 丶, 丿, 乙, 亅, 二, 亠, 人, 儿, 入, 八, 冂, 冖, 冫, 几, 凵, 刀, 力, 勹, 匕, 匚, 匸, 十, 卜, 卩, 厂, 厶, 又, 口, 囗, 土, 士, 夂, 夊, 夕, 大, 女, 子, 宀, 寸, 小, 尢, 尸, 屮, 山, 巛, 工, 己, 巾, 干, 幺, 广, 廴, 廾, 弋, 弓, 彐, 彡, 彳, 心, 戈, 戶, 手, 支, 攴, 文, 斗, 斤, 方, 无, 日, 曰, 月, 木, 欠, 止, 歹, 殳, 毋, 比, 毛, 氏, 气, 水, 火, 爪, 父, 爻, 爿, 片, 牙, 牛, 犬, 玄, 玉, 瓜, 瓦, 甘, 生, 用, 田, 疋, 疒, 癶, 白, 皮, 皿, 目, 矛, 矢, 石, 示, 禸, 禾, 穴, 立, 竹, 米, 糸, 缶, 网, 羊, 羽, 老, 而, 耒, 耳, 聿, 肉, 臣, 自, 至, 臼, 舌, 舛, 舟, 艮, 色, 艸, 虍, 虫, 血, 行, 衣, 襾, 見, 角, 言, 谷, 豆, 豕, 豸, 貝, 赤, 走, 足, 身, 車, 辛, 辰, 辵, 邑, 酉, 釆, 里, 金, 長, 門, 阜, 隶, 隹, 雨, 靑, 非, 面, 革, 韋, 韭, 音, 頁, 風, 飛, 食, 首, 香, 馬, 骨, 高, 髟, 鬥, 鬯, 鬲, 鬼, 魚, 鳥, 鹵, 鹿, 麥, 麻, 黃, 黍, 黑, 黹, 黽, 鼎, 鼓, 鼠, 鼻, 齊, 齒, 龍, 龜, 龠 ] 283 | "/bh": [ ㇀, ㇁, ㇂, ㇃, ㇄, ㇅, ㇆, ㇇, ㇈, ㇉, ㇊, ㇋, ㇌, ㇍, ㇎, ㇏, ㇐, ㇑, ㇒, ㇓, ㇔, ㇕, ㇖, ㇗, ㇘, ㇙, ㇚, ㇛, ㇜, ㇝, ㇞, ㇟, ㇠, ㇡, ㇢, ㇣ ] 284 | "/bd": [ 、, 。, 「, 」, 『, 』, 【, 】, 〈, 〉, 《, 》, ⟨, ⟩, ₋, ⁻, ―, ˗, ˉ, _, ﹍, ﹎, ., ¡, ‼, ⁉, ¿, ؟, ⁈, ⁇, 、, 。, 〃, 〄, 々, 〆, 〇, 〒, 〓, 〔, 〕, 〖, 〗, 〘, 〙, 〚, 〛, 〜, 〝, 〞, 〟, 〠, 〰, 〱, 〲, 〳, 〴, 〵, 〶, 〷, 〻, 〼, 〽 ] 285 | "/bdz": [ ﹅, ﹆, ﹁, ﹂, ﹃, ﹄, ︙, ︱, ︻, ︼, ︗, ︘, ︵, ︶, ︷, ︸, ︹, ︺, ︿, ﹀, ︽, ︾, ︰, ︲, ︳, ︴, ﹉, ﹊, ﹋, ﹌, ﹍, ﹎, ﹏, ﹇, ﹈, ︐, ︑, ︒, ︔, ︕, ︖ ] 286 | # 拼音、注音、声调 287 | "/py": [ ā, á, ǎ, à, ō, ó, ǒ, ò, ê, ê̄, ế, ê̌, ề, ē, é, ě, è, ī, í, ǐ, ì, ū, ú, ǔ, ù, ü, ǖ, ǘ, ǚ, ǜ, ḿ, m̀, ń, ň, ǹ, ẑ, ĉ, ŝ, ŋ ] 288 | "/pyd": [ Ā, Á, Ǎ, À, Ō, Ó, Ǒ, Ò, Ê, Ê̄, Ế, Ê̌, Ề, Ē, É, Ě, È, Ī, Í, Ǐ, Ì, Ū, Ú, Ǔ, Ù, Ü, Ǖ, Ǘ, Ǚ, Ǜ, Ḿ, M̀, Ń, Ň, Ǹ, Ẑ, Ĉ, Ŝ, Ŋ ] 289 | "/zy": [ ㄅ, ㄆ, ㄇ, ㄈ, ㄉ, ㄊ, ㄋ, ㄌ, ㄍ, ㄎ, ㄏ, ㄐ, ㄑ, ㄒ, ㄓ, ㄔ, ㄕ, ㄖ, ㄗ, ㄘ, ㄙ, ㄧ, ㄨ, ㄩ, ㄚ, ㄛ, ㄜ, ㄝ, ㄞ, ㄟ, ㄠ, ㄡ, ㄢ, ㄣ, ㄤ, ㄥ, ㄦ, ㄪ, ㄫ, ㄬ, ㄭ, ㆠ, ㆡ, ㆢ, ㆣ, ㆤ, ㆥ, ㆦ, ㆧ, ㆨ, ㆩ, ㆪ, ㆫ, ㆬ, ㆭ, ㆮ, ㆯ, ㆰ, ㆱ, ㆲ, ㆳ, ㆴ, ㆵ, ㆶ, ㆷ ] 290 | "/sd": [ ˉ, ˊ, ˇ, ˋ, ˆ, ˙, ˜, ˥, ˦, ˧, ˨, ˩, ꜀, ꜁, ꜂, ꜃, ꜄, ꜅, ꜆, ꜇, '〪', '〫', '〬', '〭' ] 291 | # 汉字+圈/弧 292 | "/hzq": [ ㊀, ㊁, ㊂, ㊃, ㊄, ㊅, ㊆, ㊇, ㊈, ㊉, ㊊, ㊋, ㊌, ㊍, ㊎, ㊏, ㊐, ㊑, ㊒, ㊓, ㊔, ㊕, ㊖, ㊗, ㊘, ㊙, ㊚, ㊛, ㊜, ㊝, ㊞, ㊟, ㊠, ㊡, ㊢, ㊣, ㊤, ㊥, ㊦, ㊧, ㊨, ㊩, ㊪, ㊫, ㊬, ㊭, ㊮, ㊯, ㊰, ㉄, ㉅, ㉆, ㉇ ] 293 | "/hzh": [ ㈠, ㈡, ㈢, ㈣, ㈤, ㈥, ㈦, ㈧, ㈨, ㈩, ㈪, ㈫, ㈬, ㈭, ㈮, ㈯, ㈰, ㈱, ㈲, ㈳, ㈴, ㈵, ㈶, ㈷, ㈸, ㈹, ㈺, ㈻, ㈼, ㈽, ㈾, ㈿, ㉀, ㉁, ㉂, ㉃ ] 294 | # いろは順 295 | "/iro": [ い, ろ, は, に, ほ, へ, と, ち, り, ぬ, る, を, わ, か, よ, た, れ, そ, つ, ね, な, ら, む, う, ゐ, の, お, く, や, ま, け, ふ, こ, え, て, あ, さ, き, ゆ, め, み, し, ゑ, ひ, も, せ, す ] 296 | # 假名 297 | "/jm": [ あ, ぁ, い, ぃ, う, ぅ, え, ぇ, お, ぉ, か, ゕ, が, き, ぎ, く, ぐ, け, ゖ, げ, こ, ご, さ, ざ, し, じ, す, ず, せ, ぜ, そ, ぞ, た, だ, ち, ぢ, つ, っ, づ, て, で, と, ど, な, に, ぬ, ね, の, は, ば, ぱ, ひ, び, ぴ, ふ, ぶ, ぷ, へ, べ, ぺ, ほ, ぼ, ぽ, ま, み, む, め, も, や, ゃ, ゆ, ゅ, よ, ょ, ら, り, る, れ, ろ, わ, ゎ, ゐ, ゔ, ゑ, を, ん, ・, ー, ゝ, ゞ, ゟ ] 298 | "/pjm": [ ア, ァ, イ, ィ, ウ, ゥ, エ, ェ, オ, ォ, カ, ヵ, ガ, キ, ギ, ク, グ, ケ, ヶ, ゲ, コ, ゴ, サ, ザ, シ, ジ, ス, ズ, セ, ゼ, ソ, ゾ, タ, ダ, チ, ヂ, ツ, ッ, ヅ, テ, デ, ト, ド, ナ, ニ, ヌ, ネ, ノ, ハ, バ, パ, ヒ, ビ, ピ, フ, ブ, プ, ヘ, ベ, ペ, ホ, ボ, ポ, マ, ミ, ム, メ, モ, ヤ, ャ, ユ, ュ, ヨ, ョ, ラ, リ, ル, レ, ロ, ワ, ヮ, ヰ, ヸ, ヴ, ヱ, ヹ, ヲ, ヺ, ン, ・, ー, ヽ, ヾ, ヿ, ㇰ, ㇱ, ㇲ, ㇳ, ㇴ, ㇵ, ㇶ, ㇷ, ㇸ, ㇹ, ㇺ, ㇻ, ㇼ, ㇽ, ㇾ, ㇿ ] 299 | "/jmk": [ か, ゕ, き, く, け, ゖ, こ, カ, ヵ, キ, ク, ケ, ヶ, コ ] 300 | "/jmg": [ が, ぎ, ぐ, げ, ご, ガ, ギ, グ, ゲ, ゴ ] 301 | "/jms": [ さ, し, す, せ, そ, サ, シ, ス, セ, ソ ] 302 | "/jmz": [ ざ, じ, ず, ぜ, ぞ, ザ, ジ, ズ, ゼ, ゾ ] 303 | "/jmt": [ た, ち, つ, っ, て, と, タ, チ, ツ, ッ, テ, ト ] 304 | "/jmd": [ だ, ぢ, づ, で, ど, ダ, ヂ, ヅ, デ, ド ] 305 | "/jmn": [ な, に, ぬ, ね, の, ん, ナ, ニ, ヌ, ネ, ノ, ン ] 306 | "/jmh": [ は, ひ, ふ, へ, ほ, ハ, ヒ, フ, ヘ, ホ ] 307 | "/jmb": [ ば, び, ぶ, べ, ぼ, バ, ビ, ブ, ベ, ボ ] 308 | "/jmp": [ ぱ, ぴ, ぷ, ぺ, ぽ, パ, ピ, プ, ペ, ポ ] 309 | "/jmm": [ ま, み, む, め, も, マ, ミ, ム, メ, モ ] 310 | "/jmy": [ や, ゃ, ゆ, ゅ, よ, ょ, ヤ, ャ, ユ, ュ, ヨ, ョ ] 311 | "/jmr": [ ら, り, る, れ, ろ, ラ, リ, ル, レ, ロ ] 312 | "/jmw": [ わ, ゐ, ゑ, を, ワ, ヰ, ヱ, ヲ ] 313 | "/jma": [ あ, か, が, さ, ざ, た, だ, な, は, ば, ぱ, ま, や, ら, わ, ア, カ, ガ, サ, ザ, タ, ダ, ナ, ハ, バ, パ, マ, ヤ, ラ, ワ ] 314 | "/jmi": [ い, き, ぎ, し, じ, ち, ぢ, に, ひ, び, ぴ, み, り, ゐ, イ, キ, ギ, シ, ジ, チ, ヂ, ニ, ヒ, ビ, ピ, ミ, リ, ヰ ] 315 | "/jmu": [ う, く, ぐ, す, ず, つ, づ, ぬ, ふ, ぶ, ぷ, む, る, ウ, ク, グ, ス, ズ, ツ, ヅ, ヌ, フ, ブ, プ, ム, ル ] 316 | "/jme": [ え, け, げ, せ, ぜ, て, で, ね, へ, べ, ぺ, め, れ, ゑ, エ, ケ, ゲ, セ, ゼ, テ, デ, ネ, ヘ, ベ, ペ, メ, レ, ヱ ] 317 | "/jmo": [ お, こ, ご, そ, ぞ, と, ど, の, ほ, ぼ, ぽ, も, ろ, を, オ, コ, ゴ, ソ, ゾ, ト, ド, ノ, ホ, ボ, ポ, モ, ロ, ヲ ] 318 | # 假名+圈 319 | "/jmq": [ ㋐, ㋑, ㋒, ㋓, ㋔, ㋕, ㋖, ㋗, ㋘, ㋙, ㋚, ㋛, ㋜, ㋝, ㋞, ㋟, ㋠, ㋡, ㋢, ㋣, ㋤, ㋥, ㋦, ㋧, ㋨, ㋩, ㋪, ㋫, ㋬, ㋭, ㋮, ㋯, ㋰, ㋱, ㋲, ㋳, ㋴, ㋵, ㋶, ㋷, ㋸, ㋹, ㋺, ㋻, ㋼, ㋽, ㋾ ] 320 | # 假名+半角 321 | "/jmbj": [ ア, ァ, イ, ィ, ウ, ゥ, エ, ェ, オ, ォ, カ, キ, ク, ケ, コ, サ, シ, ス, セ, ソ, タ, チ, ツ, ッ, テ, ト, ナ, ニ, ヌ, ネ, ノ, ハ, ヒ, フ, ヘ, ホ, マ, ミ, ム, メ, モ, ヤ, ャ, ユ, ュ, ヨ, ョ, ラ, リ, ル, レ, ロ, ワ, ヲ, ン, ・, ー, ゙, ゚ ] 322 | # 韩文 323 | "/hw": [ ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ ] 324 | # 韩文+圈/弧 325 | "/hwq": [ ㉠, ㉡, ㉢, ㉣, ㉤, ㉥, ㉦, ㉧, ㉨, ㉩, ㉪, ㉫, ㉬, ㉭, ㉮, ㉯, ㉰, ㉱, ㉲, ㉳, ㉴, ㉵, ㉶, ㉷, ㉸, ㉹, ㉺, ㉻, ㉼, ㉽, ㉾, ㉿ ] 326 | "/hwh": [ ㈀, ㈁, ㈂, ㈃, ㈄, ㈅, ㈆, ㈇, ㈈, ㈉, ㈊, ㈋, ㈌, ㈍, ㈎, ㈏, ㈐, ㈑, ㈒, ㈓, ㈔, ㈕, ㈖, ㈗, ㈘, ㈙, ㈚, ㈛, ㈜, ㈝, ㈞ ] 327 | -------------------------------------------------------------------------------- /opencc/emoji.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Chinese to Emoji", 3 | "segmentation": { 4 | "type": "mmseg", 5 | "dict": { 6 | "type": "text", 7 | "file": "emoji_word.txt" 8 | } 9 | }, 10 | "conversion_chain": [ 11 | { 12 | "dict": { 13 | "type": "group", 14 | "dicts": [ 15 | { 16 | "type": "text", 17 | "file": "emoji_word.txt" 18 | } 19 | ] 20 | } 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /squirrel.yaml: -------------------------------------------------------------------------------- 1 | # Squirrel settings 2 | # encoding: utf-8 3 | # 修改自: https://github.com/rime/squirrel/blob/master/data/squirrel.yaml 4 | # 5 | # COMMIT SHA: ea6720a0348a2f047ca0d8d87d82b221ac03be7b 6 | 7 | config_version: "2025-04-24" 8 | 9 | # 可用选项:last | default | _custom_ 10 | # last:上次使用的拉丁字母键盘布局 11 | # default:美国(ABC)键盘布局 12 | # _custom_:键盘布局,例如 'com.apple.keylayout.USExtended' 或简写的 'USExtended' 13 | keyboard_layout: last 14 | 15 | # 给打字贼快的家伙们设置的按键持续时间( 16 | chord_duration: 0.1 # seconds 17 | 18 | # options: always | never | appropriate 19 | show_notifications_when: appropriate 20 | show_notifications_via_notification_center: true 21 | 22 | app_options: {} # 清除应用默认输入法,防止无法输入中文(建议通过 Caps 切换中英文) 23 | 24 | style: 25 | color_scheme: reimu # 主题方案 26 | color_scheme_dark: reimu_dark # 指定深色模式时输入法所使用的主题方案 27 | translucency: true # 背景半透明总开关,不需要关掉即可 28 | 29 | # 是否将选定的候选项作为文本嵌入到输入框中 30 | inline_candidate: false 31 | # 是否将候选栏贴附到屏幕边缘来减少跳动 32 | memorize_size: true 33 | # 是否允许透明颜色之间的堆叠 34 | mutual_exclusive: true 35 | # 启用小箭头来看能否上下翻页 36 | show_paging: false 37 | 38 | # 以下为鼠须管默认设置 39 | candidate_list_layout: linear # stacked | linear 40 | text_orientation: horizontal # horizontal | vertical 41 | inline_preedit: true # 是否内嵌输入码 42 | corner_radius: 7 43 | hilited_corner_radius: 0 44 | border_height: -2 45 | border_width: -2 46 | line_spacing: 5 47 | spacing: 8 48 | # 大于 0 则会在高亮的候选项周围绘制阴影 49 | shadow_size: 0 50 | # 控制非高亮候选背景大小,相对于高亮 51 | surrounding_extra_expansion: 0 52 | # 候选项的格式 53 | candidate_format: "[label]. [candidate] [comment]" 54 | # base_offset: 0 # 竖排文字的基线调整 55 | font_face: "Lucida Grande" 56 | font_point: 16 57 | # label_font_face: 'Lucida Grande' 58 | label_font_point: 12 59 | # comment_font_face: 'Lucida Grande' 60 | comment_font_point: 16 61 | 62 | preset_color_schemes: 63 | # 关于主题中的各个设置项的说明,详见文件末尾 64 | ayaya: 65 | name: "文文/Ayaya" 66 | author: "Lufs X " 67 | 68 | font_face: "LXGWWenKai-Regular, PingFangSC" 69 | font_point: 16.5 70 | label_font_face: "LXGWWenKai-Regular, PingFangSC" 71 | label_font_point: 12 72 | 73 | candidate_format: "[label]\u2005[candidate] [comment]" 74 | candidate_list_layout: linear 75 | text_orientation: horizontal 76 | inline_preedit: true 77 | 78 | corner_radius: 5 79 | hilited_corner_radius: 0 80 | border_height: 0 81 | border_width: 0 82 | alpha: 0.95 83 | shadow_size: 0 84 | 85 | color_space: display_p3 86 | back_color: 0xFFFFFF 87 | border_color: 0xECE4FC 88 | candidate_text_color: 0x121212 89 | comment_text_color: 0x8E8E8E 90 | label_color: 0x888785 91 | hilited_candidate_back_color: 0xECE4FC 92 | hilited_candidate_text_color: 0x7A40EC 93 | hilited_comment_text_color: 0x8E8E8E 94 | hilited_candidate_label_color: 0xB18FF4 95 | text_color: 0x8100EB 96 | hilited_text_color: 0xD8000000 97 | 98 | ayaya_dark: 99 | name: "文文/Ayaya/深色" 100 | author: "Lufs X " 101 | 102 | font_face: "LXGWWenKai-Regular, PingFangSC" 103 | font_point: 16.5 104 | label_font_face: "LXGWWenKai-Regular, PingFangSC" 105 | label_font_point: 12 106 | 107 | candidate_format: "[label]\u2005[candidate] [comment]" 108 | candidate_list_layout: linear 109 | text_orientation: horizontal 110 | inline_preedit: true 111 | 112 | corner_radius: 5 113 | hilited_corner_radius: 0 114 | border_height: 0 115 | border_width: 0 116 | alpha: 0.95 117 | shadow_size: 0 118 | 119 | color_space: display_p3 120 | back_color: 0x000000 121 | border_color: 0xECE4FC 122 | candidate_text_color: 0xD2D2D2 123 | comment_text_color: 0x8E8E8E 124 | label_color: 0x888785 125 | hilited_candidate_back_color: 0x2C1E3C 126 | hilited_candidate_text_color: 0x7036E2 127 | hilited_comment_text_color: 0x8E8E8E 128 | hilited_candidate_label_color: 0x7036E2 129 | text_color: 0x8100EB 130 | hilited_text_color: 0xD8000000 131 | 132 | reimu: 133 | name: "灵梦/Reimu" 134 | author: "Lufs X " 135 | 136 | font_face: "LXGWWenKai-Regular, PingFangSC" 137 | font_point: 17 138 | label_font_face: "LXGWWenKai-Regular, PingFangSC" 139 | label_font_point: 14 140 | 141 | candidate_format: "[label]\u2005[candidate] [comment]" 142 | candidate_list_layout: linear 143 | text_orientation: horizontal 144 | inline_preedit: true 145 | 146 | corner_radius: 7 147 | hilited_corner_radius: 6 148 | border_height: 1 149 | border_width: 1 150 | alpha: 0.95 151 | shadow_size: 2 152 | 153 | color_space: display_p3 154 | back_color: 0xF5FCFD 155 | candidate_text_color: 0x282C32 156 | comment_text_color: 0x717172 157 | label_color: 0x888785 158 | hilited_candidate_back_color: 0xF5FCFD 159 | hilited_candidate_text_color: 0x4F00E5 160 | hilited_comment_text_color: 0x9F9CF2 161 | hilited_candidate_label_color: 0x4F00E5 162 | text_color: 0x6B54E9 163 | hilited_text_color: 0xD8000000 164 | 165 | reimu_dark: 166 | name: "灵梦/Reimu/深色" 167 | author: "Lufs X " 168 | 169 | font_face: "LXGWWenKai-Regular, PingFangSC" 170 | font_point: 17 171 | label_font_face: "LXGWWenKai-Regular, PingFangSC" 172 | label_font_point: 14 173 | 174 | candidate_format: "[label]\u2005[candidate] [comment]" 175 | candidate_list_layout: linear 176 | text_orientation: horizontal 177 | inline_preedit: true 178 | 179 | corner_radius: 7 180 | hilited_corner_radius: 6 181 | border_height: 1 182 | border_width: 1 183 | alpha: 0.95 184 | shadow_size: 2 185 | 186 | color_space: display_p3 187 | back_color: 0x020A00 188 | border_color: 0x020A00 189 | candidate_text_color: 0xC0C0C0 190 | comment_text_color: 0x717172 191 | label_color: 0x717172 192 | hilited_candidate_back_color: 0x0C140A 193 | hilited_candidate_text_color: 0x3100C7 194 | hilited_comment_text_color: 0x7772AF 195 | hilited_candidate_label_color: 0x3100C7 196 | text_color: 0x6B54E9 197 | hilited_text_color: 0xD8000000 198 | 199 | apathy: 200 | name: "冷漠/Apathy" 201 | author: LIANG Hai 202 | 203 | font_face: "PingFangSC-Regular" 204 | font_point: 16 205 | label_font_face: "STHeitiSC-Light" 206 | label_font_point: 12 207 | 208 | candidate_format: "[label]\u2005[candidate] [comment]" 209 | candidate_list_layout: linear 210 | text_orientation: horizontal 211 | inline_preedit: true 212 | 213 | corner_radius: 5 214 | 215 | alpha: 0.95 216 | color_space: srgb 217 | back_color: 0xFFFFFF 218 | candidate_text_color: 0xD8000000 219 | comment_text_color: 0x999999 220 | label_color: 0xE5555555 221 | hilited_candidate_back_color: 0xFFF0E4 222 | hilited_candidate_text_color: 0xEE6E00 223 | hilited_comment_text_color: 0x999999 224 | hilited_candidate_label_color: 0xF4994C 225 | text_color: 0x424242 226 | hilited_text_color: 0xD8000000 227 | 228 | win10: 229 | name: "WIN10" 230 | author: "Lufs X " 231 | 232 | font_face: "LXGWWenKai-Regular, PingFangSC" 233 | font_point: 16.5 234 | label_font_face: "LXGWWenKai-Regular, PingFangSC" 235 | label_font_point: 12 236 | 237 | candidate_list_layout: linear 238 | text_orientation: horizontal 239 | inline_preedit: true 240 | 241 | corner_radius: 0 242 | hilited_corner_radius: -6 243 | border_height: 7 244 | border_width: 6 245 | spacing: 10 246 | 247 | color_space: srgb 248 | back_color: 0xFFFFFF 249 | candidate_text_color: 0x000000 250 | comment_text_color: 0x888888 251 | label_color: 0x888888 252 | hilited_candidate_back_color: 0xCC8F29 253 | hilited_candidate_text_color: 0xFFFFFF 254 | hilited_comment_text_color: 0xFFFFFF 255 | hilited_candidate_label_color: 0xEEDAB8 256 | text_color: 0x000000 257 | hilited_back_color: 0xFFFFFF 258 | hilited_text_color: 0x000000 259 | 260 | win10_ayaya: 261 | name: "WIN10/文文/Ayaya" 262 | author: "Lufs X " 263 | 264 | font_face: "LXGWWenKai-Regular, PingFangSC" 265 | font_point: 16.5 266 | label_font_face: "LXGWWenKai-Regular, PingFangSC" 267 | label_font_point: 12 268 | 269 | candidate_list_layout: linear 270 | text_orientation: horizontal 271 | inline_preedit: true 272 | 273 | corner_radius: 0 274 | hilited_corner_radius: -6 275 | border_height: 7 276 | border_width: 6 277 | spacing: 10 278 | 279 | color_space: display_p3 280 | back_color: 0xFFFFFF 281 | border_color: 0xFFFFFF 282 | candidate_text_color: 0x121212 283 | comment_text_color: 0x8E8E8E 284 | label_color: 0x888785 285 | hilited_candidate_back_color: 0xECE4FC 286 | hilited_candidate_text_color: 0x7A40EC 287 | hilited_comment_text_color: 0x8E8E8E 288 | hilited_candidate_label_color: 0xB18FF4 289 | text_color: 0x8100EB 290 | hilited_text_color: 0xD8000000 291 | 292 | macos12_light: 293 | name: "高仿亮色 macOS" 294 | author: "Lufs X " 295 | 296 | font_face: "PingFangSC-Regular" 297 | font_point: 15 298 | label_font_face: "PingFangSC-Regular" 299 | label_font_point: 12 300 | comment_font_face: "PingFangSC-Regular" 301 | comment_font_point: 13 302 | 303 | candidate_format: "[label]\u2004[candidate] [comment]" 304 | candidate_list_layout: linear 305 | text_orientation: horizontal 306 | inline_preedit: true 307 | 308 | corner_radius: 7 309 | hilited_corner_radius: 6 310 | border_width: 2 311 | line_spacing: 1 312 | 313 | color_space: display_p3 314 | back_color: 0xFFFFFF 315 | border_color: 0xFFFFFF 316 | candidate_text_color: 0xD8000000 317 | comment_text_color: 0x3F000000 318 | label_color: 0x7F7F7F 319 | hilited_candidate_back_color: 0xD05925 320 | hilited_candidate_text_color: 0xFFFFFF 321 | hilited_comment_text_color: 0x808080 322 | hilited_candidate_label_color: 0xFFFFFF 323 | text_color: 0x3F000000 324 | hilited_text_color: 0xD8000000 325 | 326 | macos12_dark: 327 | name: "高仿暗色 macOS" 328 | author: "Lufs X " 329 | 330 | font_face: "PingFangSC-Regular" 331 | font_point: 15 332 | label_font_face: "PingFangSC-Regular" 333 | label_font_point: 12 334 | comment_font_face: "PingFangSC-Regular" 335 | comment_font_point: 13 336 | 337 | candidate_format: "[label]\u2004[candidate] [comment]" 338 | candidate_list_layout: linear 339 | text_orientation: horizontal 340 | inline_preedit: true 341 | 342 | corner_radius: 7 343 | hilited_corner_radius: 6 344 | border_width: 2 345 | line_spacing: 1 346 | 347 | color_space: display_p3 348 | back_color: 0x1E1F24 349 | border_color: 0x1E1F24 350 | candidate_text_color: 0xE8E8E8 351 | comment_text_color: 0x3F000000 352 | label_color: 0x7C7C7C 353 | hilited_candidate_back_color: 0xDA6203 354 | hilited_candidate_text_color: 0xFFFFFF 355 | hilited_comment_text_color: 0x808080 356 | hilited_candidate_label_color: 0xFFE7D6 357 | text_color: 0x3F000000 358 | hilited_text_color: 0xD8000000 359 | 360 | wechat: 361 | name: "高仿微信输入法" 362 | author: "Lufs X " 363 | 364 | font_face: "PingFangSC-Regular" 365 | font_point: 15 366 | label_font_face: "PingFangSC-Regular" 367 | label_font_point: 12 368 | comment_font_face: "PingFangSC-Regular" 369 | comment_font_point: 12 370 | 371 | candidate_format: "[label]\u2005[candidate] [comment]" 372 | candidate_list_layout: linear 373 | text_orientation: horizontal 374 | inline_preedit: true 375 | 376 | corner_radius: 7 377 | hilited_corner_radius: 7 378 | border_height: -2 379 | 380 | color_space: display_p3 381 | back_color: 0xFFFFFF 382 | border_color: 0xFFFFFF 383 | candidate_text_color: 0x444444 384 | comment_text_color: 0x8E8E8E 385 | label_color: 0x888785 386 | hilited_candidate_back_color: 0x7BAE4F 387 | hilited_candidate_text_color: 0xFFFFFF 388 | hilited_comment_text_color: 0xF0F0F0 389 | hilited_candidate_label_color: 0xFFFFFF 390 | text_color: 0xFFFFFF 391 | hilited_text_color: 0xD8000000 392 | 393 | wechat_dark: 394 | name: "高仿暗色微信输入法" 395 | author: "Lufs X " 396 | 397 | font_face: "PingFangSC-Regular" 398 | font_point: 15 399 | label_font_face: "PingFangSC-Regular" 400 | label_font_point: 12 401 | comment_font_face: "PingFangSC-Regular" 402 | comment_font_point: 12 403 | 404 | candidate_format: "[label]\u2005[candidate] [comment]" 405 | candidate_list_layout: linear 406 | text_orientation: horizontal 407 | inline_preedit: true 408 | 409 | corner_radius: 7 410 | hilited_corner_radius: 7 411 | border_height: -2 412 | 413 | color_space: display_p3 414 | back_color: 0x151515 415 | border_color: 0x151515 416 | candidate_text_color: 0xB9B9B9 417 | comment_text_color: 0x8E8E8E 418 | label_color: 0x888785 419 | hilited_candidate_back_color: 0x74A54B 420 | hilited_candidate_text_color: 0xFFFFFF 421 | hilited_comment_text_color: 0xF0F0F0 422 | hilited_candidate_label_color: 0xFFFFFF 423 | text_color: 0xFFFFFF 424 | hilited_text_color: 0x777777 425 | 426 | macos14: 427 | name: "高仿 macOS 14" 428 | author: "Lufs X " 429 | 430 | font_face: "PingFangSC-Regular" 431 | font_point: 16 432 | label_font_face: "PingFangSC-Regular" 433 | label_font_point: 8 434 | comment_font_face: "PingFangSC-Regular" 435 | comment_font_point: 13 436 | 437 | candidate_format: "[label]\u2003\u2003\u2003[candidate] [comment]\u2004\u2001" 438 | candidate_list_layout: linear 439 | text_orientation: horizontal 440 | inline_preedit: true 441 | 442 | corner_radius: 7 443 | hilited_corner_radius: -1 444 | border_height: -4 445 | border_width: 2 446 | 447 | color_space: display_p3 448 | back_color: 0xE7E8EA 449 | border_color: 0xE7E8EA 450 | candidate_text_color: 0x464647 451 | comment_text_color: 0x3F000000 452 | label_color: 0x7F7F7F 453 | hilited_candidate_back_color: 0xD05925 454 | hilited_candidate_text_color: 0xFFFFFF 455 | hilited_comment_text_color: 0xDCDCDC 456 | hilited_candidate_label_color: 0xFFFFFF 457 | text_color: 0x3F000000 458 | hilited_text_color: 0xD8000000 459 | 460 | macos14_dark: 461 | name: "高仿暗色 macOS 14" 462 | author: "Lufs X " 463 | 464 | font_face: "PingFangSC-Regular" 465 | font_point: 16 466 | label_font_face: "PingFangSC-Regular" 467 | label_font_point: 8 468 | comment_font_face: "PingFangSC-Regular" 469 | comment_font_point: 13 470 | 471 | candidate_format: "[label]\u2003\u2003\u2003[candidate] [comment]\u2004\u2001" 472 | candidate_list_layout: linear 473 | text_orientation: horizontal 474 | inline_preedit: true 475 | 476 | corner_radius: 7 477 | hilited_corner_radius: -1 478 | border_height: -4 479 | border_width: 2 480 | 481 | color_space: display_p3 482 | back_color: 0x555557 483 | border_color: 0x0C0C0C 484 | candidate_text_color: 0xEEEEEE 485 | comment_text_color: 0x80FFFFFF 486 | label_color: 0x7C7C7C 487 | hilited_candidate_back_color: 0xCA5824 488 | hilited_candidate_text_color: 0xFFFFFF 489 | hilited_comment_text_color: 0xF0F0F0 490 | hilited_candidate_label_color: 0xFFFFFF 491 | text_color: 0x3F000000 492 | hilited_text_color: 0xD8000000 493 | 494 | # 若都有值,则对应的生效逻辑为 495 | ## .[custom].yaml > style/preset_color_schemes/[配置名] > style 496 | # 497 | # 各个设置项的简要作用说明 498 | # 以下出现的颜色均为 16 进制色值,(A)BGR顺序 499 | ## alpha: 透明度 500 | ## back_color: 候选条背景色 501 | ## base_offset: 候选框与输入框的垂直偏移量 502 | ## border_color: 边框颜色 503 | ## border_color_width: 输入条边框宽度 504 | ## border_height: 窗口上下高度 505 | ## border_width: 窗口左右宽度 506 | ## candidate_format: 候选格式 507 | ## candidate_list_layout: 候选列表布局 508 | ## candidate_spacing: 候选字间隔 509 | ## candidate_text_color: 候选项文字颜色 510 | ## color_space: 色彩空间 511 | ## comment_font_face: 拼音等提示文字字体 512 | ## comment_font_point: 拼音等提示文字字号 513 | ## comment_text_color: 拼音等提示文字颜色 514 | ## corner_radius: 候选条圆角 515 | ## font_face: 文本字体 516 | ## font_point: 文本字体大小 517 | ## hilite_padding: 候选字背景色色块高度 518 | ## hilited_back_color: 选中候选项背景背景色 519 | ## hilited_candidate_back_color: 选中候选项背景色 520 | ## hilited_candidate_label_color: 选中候选项编号颜色 521 | ## hilited_candidate_text_color: 选中候选项文字颜色 522 | ## hilited_comment_text_color: 注解文字高亮颜色 523 | ## hilited_corner_radius: 选中候选项圆角 524 | ## hilited_label_color: 选中候选项编号颜色 525 | ## hilited_text_color: 高亮文本颜色 526 | ## inline_preedit: 输入码是否内嵌显示 527 | ## label_color: 编号颜色 528 | ## label_font_face: 编号字体 529 | ## label_font_point: 编号大小 530 | ## label_format: 编号格式 531 | ## line_spacing: 行间距 532 | ## margin_x: 字左右边距 533 | ## margin_y: 字上下边距 534 | ## min_height: 最小高度 535 | ## min_width: 最小宽度 536 | ## round_corner: 候选字背景色块圆角幅度 537 | ## shadow_size: 阴影大小 538 | ## spacing: 间距 539 | ## text_color: 文本颜色 540 | ## text_orientation: 文本方向 541 | -------------------------------------------------------------------------------- /tools/emoji2dict.py: -------------------------------------------------------------------------------- 1 | import os, sys, re, datetime 2 | from pypinyin import pinyin, Style 3 | 4 | workDir = os.path.abspath(os.path.dirname(sys.path[0])) 5 | pattern = re.compile(r"^[\u4e00-\u9fa5]+$") 6 | 7 | with open( 8 | os.path.join(workDir, "opencc", "emoji_word.txt"), "r", encoding="utf-8" 9 | ) as f: 10 | text = f.read() 11 | 12 | lines = text.split("\n") 13 | 14 | 15 | def generate_dict_content(): 16 | infoStr = f"""# Rime dictionary 17 | # encoding: utf-8 18 | # source: https://github.com/iDvel/rime-ice/blob/main/opencc/emoji.txt 19 | 20 | --- 21 | name: emoji 22 | version: "{datetime.datetime.now().strftime("%Y-%m-%d")}" 23 | sort: by_weight 24 | ... 25 | """ 26 | content = [infoStr] 27 | for line in lines: 28 | if line: 29 | parts = line.split("\t") 30 | name = parts[0].strip().split(" ")[-1] 31 | pinyin_name = " ".join([p[0] for p in pinyin(name, style=Style.NORMAL)]) 32 | if pattern.match(name): 33 | content.append(f"{name}\t{pinyin_name}\n") 34 | return "".join(content) 35 | 36 | 37 | new_content = generate_dict_content() 38 | 39 | # 按拼音排序 40 | lines = new_content.split("\n") 41 | wait_to_write = [] 42 | part_to_sort = [] 43 | 44 | for line in lines: 45 | if line.startswith("#") or line == "\n": 46 | if part_to_sort: 47 | sorted_lines = sorted( 48 | part_to_sort, 49 | key=lambda x: x.split("\t")[1] if len(x.split("\t")) > 1 else "", 50 | ) 51 | wait_to_write += sorted_lines 52 | part_to_sort.clear() 53 | wait_to_write.append(line) 54 | continue 55 | part_to_sort.append(line) 56 | 57 | if part_to_sort: 58 | wait_to_write += sorted( 59 | part_to_sort, 60 | key=lambda x: x.split("\t")[1] if len(x.split("\t")) > 1 else "", 61 | ) 62 | 63 | sorted_content = "\n".join(wait_to_write) + "\n" 64 | 65 | dict_path = os.path.join(workDir, "dicts", "emoji.dict.yaml") 66 | if os.path.exists(dict_path): 67 | with open(dict_path, "r", encoding="utf-8") as existing_file: 68 | existing_content = existing_file.read() 69 | else: 70 | existing_content = "" 71 | 72 | temp_sorted_content = [] 73 | for line in sorted_content.splitlines(): 74 | if not line.startswith("version:"): 75 | temp_sorted_content.append(line) 76 | temp_sorted_content = "\n".join(temp_sorted_content) 77 | 78 | temp_existing_content = [] 79 | for line in existing_content.splitlines(): 80 | if not line.startswith("version:"): 81 | temp_existing_content.append(line) 82 | temp_existing_content = "\n".join(temp_existing_content) 83 | 84 | if temp_sorted_content != temp_existing_content: 85 | with open(dict_path, "w", encoding="utf-8", newline="\n") as outFile: 86 | outFile.write(sorted_content) 87 | print("[Emoji] Emoji to dictionary successfully") 88 | else: 89 | print("[Emoji] No changes detected, version not updated") 90 | -------------------------------------------------------------------------------- /tools/patch/enable_ascii.yaml: -------------------------------------------------------------------------------- 1 | # 英文输入补丁 2 | # 3 | # 使用方法 4 | # 5 | # 将本文件复制到「用户文件夹」根目录中,并重命名为你需要的方案对应的名字(包括后缀名) 6 | # 全拼: lufs_pinyin.custom.yaml 7 | # 小鹤双拼: lufs_flypy.custom.yaml 8 | # 自然码双拼: lufs_dpy.custom.yaml 9 | # 微软双拼: lufs_mspy.custom.yaml 10 | # 拼音加加双拼: lufs_pyjj.custom.yaml 11 | 12 | patch: 13 | engine/processors/@before 0: ascii_composer 14 | engine/segmentors/@before 0: ascii_segmentor 15 | switches/@before 0: 16 | name: ascii_mode 17 | # reset: 0 # 默认状态: 0 中文输入 1 英文输入 18 | states: [中文, 西文] 19 | -------------------------------------------------------------------------------- /tools/recipes/enable_ascii.recipe.yaml: -------------------------------------------------------------------------------- 1 | # tools/recipes/enable_ascii.recipe.yaml 2 | # encoding: utf-8 3 | 4 | --- 5 | recipe: 6 | Rx: tools/recipes/enable_ascii 7 | args: 8 | - schema=lufs_flypy 9 | description: >- 10 | Enable ascii for target schema 11 | 12 | patch_files: 13 | ${schema:-lufs_flypy}.custom.yaml: 14 | patch/+: 15 | engine/processors/@before 0: ascii_composer 16 | engine/segmentors/@before 0: ascii_segmentor 17 | switches/@before 0: 18 | name: ascii_mode 19 | # reset: 0 # 默认状态: 0 中文输入 1 英文输入 20 | states: [中文, 西文] 21 | -------------------------------------------------------------------------------- /tools/recipes/install.recipe.yaml: -------------------------------------------------------------------------------- 1 | # tools/recipes/install.recipe.yaml 2 | # encoding: utf-8 3 | 4 | --- 5 | recipe: 6 | Rx: tools/recipes/install 7 | description: >- 8 | Full install LufsX/rime 9 | install_files: >- 10 | custom_phrase.txt 11 | default.yaml 12 | dicts/*.* 13 | extended.dict.yaml 14 | lua/*.* 15 | lua/*/*.* 16 | lufs*.yaml 17 | opencc/*.* 18 | rime.lua 19 | squirrel.yaml 20 | weasel.yaml 21 | zh-hans-t-essay-bgw.gram 22 | -------------------------------------------------------------------------------- /tools/recipes/update.recipe.yaml: -------------------------------------------------------------------------------- 1 | # tools/recipes/update.recipe.yaml 2 | # encoding: utf-8 3 | 4 | --- 5 | recipe: 6 | Rx: tools/recipes/update 7 | description: >- 8 | Update dicts and opencc only 9 | install_files: >- 10 | dicts/*.* 11 | opencc/*.* 12 | -------------------------------------------------------------------------------- /tools/requirements.txt: -------------------------------------------------------------------------------- 1 | pypinyin 2 | requests 3 | -------------------------------------------------------------------------------- /tools/run.py: -------------------------------------------------------------------------------- 1 | import os, sys 2 | 3 | workDir = os.path.abspath(os.path.dirname(sys.path[0])) 4 | 5 | list = ["update.py", "emoji2dict.py", "update_sogou.py", "util.py"] 6 | 7 | for file in list: 8 | os.system(f"python {os.path.join(workDir,"tools",file)}") 9 | -------------------------------------------------------------------------------- /tools/scel2dict.py: -------------------------------------------------------------------------------- 1 | # Usage: python scel2dict.py -i -o -u 2 | # License: GPL-3.0 3 | # Description: Convert Sogou SCEL dictionary to Rime dictionary format 4 | # Author: 5 | # - LufsX 6 | # Reference Code: 7 | # - https://github.com/studyzy/imewlconverter/blob/master/src/ImeWlConverterCore/IME/SougouPinyinScel.cs 8 | # Thanks to: 9 | # - https://github.com/nopdan 10 | # - https://github.com/studyzy/imewlconverter 11 | # - https://github.com/studyzy/imewlconverter/issues/275#issuecomment-1911748289 12 | 13 | import argparse 14 | import os 15 | import struct 16 | import sys 17 | import tempfile 18 | import time 19 | import urllib 20 | 21 | 22 | class SougouScelReader: 23 | """搜狗细胞词库解析""" 24 | 25 | def __init__(self, path): 26 | self.path = path 27 | self.py_dic = {} 28 | self.words = [] 29 | 30 | def read_scel_info(self): 31 | """读取词库基本信息""" 32 | info = {} 33 | with open(self.path, "rb") as f: 34 | # 读取词条数量 35 | f.seek(0x124) 36 | count_word = struct.unpack("= 0: 63 | return text[:end] 64 | return text 65 | 66 | def read_scel(self): 67 | """读取整个 SCEL 词库文件""" 68 | with open(self.path, "rb") as f: 69 | # 词条数量 70 | f.seek(0x120) 71 | dict_len = struct.unpack("更   新:(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})" 34 | match = re.search(pattern, response.text) 35 | 36 | if match: 37 | return match.group(1) 38 | return None 39 | except Exception as e: 40 | print(f"[Dict](Sogou) Failed to obtain the vocabulary update time: {str(e)}") 41 | return None 42 | 43 | 44 | # 转换为 Rime 词典格式的函数 45 | def convert_to_rime(words, output_file, id, update_date=None, increment=False): 46 | if increment: 47 | # 增量更新处理 48 | existing_words = set() 49 | existing_lines = [] 50 | flag = False 51 | 52 | # 如果文件已存在,读取现有内容 53 | if os.path.exists(output_file): 54 | with open(output_file, "r", encoding="utf-8") as f: 55 | lines = f.readlines() 56 | # 分离词条 57 | for line in lines: 58 | if flag or line == "...\n": 59 | existing_lines.append(line) 60 | flag = True 61 | 62 | with open(output_file, "w", encoding="utf-8") as f: 63 | f.write(f"# Rime dictionary\n") 64 | f.write(f"# encoding: utf-8\n") 65 | f.write(f"# source: https://pinyin.sogou.com/dict/detail/index/{id}\n\n") 66 | f.write( 67 | f"---\nname: {os.path.basename(output_file).replace('.dict.yaml', '').replace('sogou_', '')}\n" 68 | ) 69 | version_date = update_date if update_date else time.strftime("%Y-%m-%d") 70 | f.write(f'version: "{version_date}"\n') 71 | f.write(f"sort: by_weight\n") 72 | 73 | # 写回现有词条 74 | for line in existing_lines: 75 | f.write(line) 76 | 77 | # 添加新词条 78 | new_count = 0 79 | for word_info in words: 80 | word = word_info["word"] 81 | # 过滤词条 82 | if re.search(r"[a-zA-Z]", word): 83 | continue 84 | # 只加新增的词条 85 | if word not in existing_words: 86 | pinyin = " ".join(word_info["pinyin"]) 87 | f.write(f"{word}\t{pinyin}\n") 88 | new_count += 1 89 | existing_words.add(word) 90 | 91 | print( 92 | f"[Dict](Sogou) Incremental update: Added {new_count} new entries to {output_file}" 93 | ) 94 | else: 95 | # 写入 Rime 词典头部 96 | with open(output_file, "w", encoding="utf-8") as f: 97 | f.write(f"# Rime dictionary\n") 98 | f.write(f"# encoding: utf-8\n") 99 | f.write(f"# source: https://pinyin.sogou.com/dict/detail/index/{id}\n\n") 100 | f.write( 101 | f"---\nname: {os.path.basename(output_file).replace('.dict.yaml', '').replace('sogou_', '')}\n" 102 | ) 103 | version_date = update_date if update_date else time.strftime("%Y-%m-%d") 104 | f.write(f'version: "{version_date}"\n') 105 | f.write(f"sort: by_weight\n") 106 | f.write(f"...\n\n") 107 | 108 | # 写入词条 109 | for word_info in words: 110 | word = word_info["word"] 111 | pinyin = " ".join(word_info["pinyin"]) 112 | f.write(f"{word}\t{pinyin}\n") 113 | 114 | print( 115 | f"[Dict](Sogou) Translation completed: {len(words)} entries saved to {output_file}" 116 | ) 117 | 118 | 119 | for key in dict_list: 120 | info = dict_list[key] 121 | dict_id = info["id"] 122 | dict_name = info["name"] 123 | dict_increment = info.get("increment", False) 124 | 125 | print(f"[Dict](Sogou) Processing: {dict_name} (ID: {dict_id})") 126 | 127 | # 获取词库网页内容并提取更新日期 128 | update_date = extract_update_date(dict_id) 129 | if update_date: 130 | print(f"[Dict](Sogou) Dict Update Date: {update_date}") 131 | 132 | # 构建URL 133 | url = f"https://pinyin.sogou.com/d/dict/download_cell.php?id={dict_id}&name={urllib.parse.quote(dict_name)}" 134 | 135 | # 输出路径 136 | output_path = os.path.join(workDir, "dicts", key) 137 | 138 | # 确保输出目录存在 139 | os.makedirs(os.path.dirname(output_path), exist_ok=True) 140 | 141 | try: 142 | # 下载词库 143 | downloader = SougouScelDownloader() 144 | scel_file, temp_flag = downloader.download(url) 145 | 146 | # 读取词库 147 | reader = SougouScelReader(scel_file) 148 | dict_info = reader.read_scel_info() 149 | print(f"[Dict](Sogou) Dict Name: {dict_info.get('Name')}") 150 | print(f"[Dict](Sogou) Count: {dict_info.get('CountWord')}") 151 | 152 | words = reader.read_scel() 153 | print(f"[Dict](Sogou) Actual Count: {len(words)}") 154 | 155 | # 转换为 RIME 词典,传递提取的更新日期 156 | convert_to_rime(words, output_path, dict_id, update_date=update_date, increment=dict_increment) 157 | print(f"[Dict](Sogou) Saved to: {output_path}") 158 | 159 | # 清理临时文件 160 | if temp_flag[0] and os.path.exists(temp_flag[2]): 161 | os.remove(temp_flag[2]) 162 | 163 | except Exception as e: 164 | print(f"[Dict](Sogou) Failed to update dict {dict_name}: {str(e)}") 165 | continue 166 | 167 | print("[Dict](Sogou) All dict update completed!") 168 | -------------------------------------------------------------------------------- /tools/util.py: -------------------------------------------------------------------------------- 1 | def deduplicate(src_file, dest_file): 2 | lines_seen = set() 3 | output_lines = [] 4 | 5 | with open(src_file, "r", encoding="utf-8") as file: 6 | for line in file: 7 | stripped_line = line.strip() 8 | if ( 9 | stripped_line == "" 10 | or stripped_line.startswith("#") 11 | or stripped_line not in lines_seen 12 | ): 13 | output_lines.append(line) 14 | if stripped_line != "": 15 | lines_seen.add(stripped_line) 16 | 17 | with open(dest_file, "w", encoding="utf-8", newline="\n") as file: 18 | file.writelines(output_lines) 19 | 20 | 21 | def get_info(src_file): 22 | with open(src_file, "r", encoding="utf-8") as f: 23 | lines = f.readlines() 24 | 25 | info = [] 26 | flag_continue = False 27 | 28 | for line in lines: 29 | if line == "\n" or line.startswith("#"): 30 | info.append(line) 31 | elif line == "---\n": 32 | info.append(line) 33 | flag_continue = True 34 | elif flag_continue: 35 | info.append(line) 36 | if line == "...\n": 37 | flag_continue = False 38 | else: 39 | break 40 | 41 | return info 42 | 43 | 44 | def sort(src_file, dest_file): 45 | info = get_info(src_file) 46 | 47 | # 跳过处理 THUOCL 词库 48 | if "thuocl" in src_file: 49 | return 50 | 51 | with open(src_file, "r", encoding="utf-8") as f: 52 | lines = f.readlines()[len(info) :] 53 | 54 | format_type = len(lines[0].split("\t")) 55 | 56 | # format_type == 2 时,排序「字 zi」此类,规则是按拼音排序 57 | # format_type == 3 时,排序「字 zi 1」此类,规则是按拼音+字频排序 58 | # 暂时不支持混排 59 | if format_type == 2: 60 | wait_to_write = [] 61 | part_to_sort = [] 62 | 63 | for line in lines: 64 | if line.startswith("#") or line == "\n": 65 | if part_to_sort: 66 | sorted_lines = sorted( 67 | part_to_sort, 68 | key=lambda x: ( 69 | x.split("\t")[1] if len(x.split("\t")) > 1 else "" 70 | ), 71 | ) 72 | wait_to_write += sorted_lines 73 | part_to_sort.clear() 74 | wait_to_write.append(line) 75 | continue 76 | part_to_sort.append(line) 77 | 78 | if part_to_sort: 79 | wait_to_write += sorted( 80 | part_to_sort, 81 | key=lambda x: x.split("\t")[1] if len(x.split("\t")) > 1 else "", 82 | ) 83 | with open(dest_file, "w", encoding="utf-8", newline="\n") as f: 84 | f.writelines(info + wait_to_write) 85 | elif format_type == 3: 86 | wait_to_write = [] 87 | part_to_sort = [] 88 | 89 | for line in lines: 90 | if line.startswith("#") or line == "\n": 91 | if part_to_sort: 92 | sorted_lines = sorted( 93 | part_to_sort, 94 | key=lambda x: ( 95 | x.split("\t")[1] if len(x.split("\t")) > 1 else "", 96 | ( 97 | int(x.split("\t")[2]) 98 | if len(x.split("\t")) > 2 and x.split("\t")[2].isdigit() 99 | else 0 100 | ), 101 | ), 102 | ) 103 | wait_to_write += sorted_lines 104 | part_to_sort.clear() 105 | wait_to_write.append(line) 106 | continue 107 | part_to_sort.append(line) 108 | 109 | if part_to_sort: 110 | wait_to_write += sorted( 111 | part_to_sort, 112 | key=lambda x: ( 113 | x.split("\t")[1] if len(x.split("\t")) > 1 else "", 114 | ( 115 | int(x.split("\t")[2]) 116 | if len(x.split("\t")) > 2 and x.split("\t")[2].isdigit() 117 | else 0 118 | ), 119 | ), 120 | ) 121 | with open(dest_file, "w", encoding="utf-8", newline="\n") as f: 122 | f.writelines(info + wait_to_write) 123 | 124 | 125 | if __name__ == "__main__": 126 | import os 127 | import sys 128 | 129 | dicts_dir = os.path.join(os.path.abspath(os.path.dirname(sys.path[0])), "dicts") 130 | 131 | for root, _, files in os.walk(dicts_dir): 132 | for file in files: 133 | if file.endswith(".yaml"): 134 | file_path = os.path.join(root, file) 135 | print(f"[Dict] Deduplicate and sort {file_path}") 136 | deduplicate(file_path, file_path) 137 | sort(file_path, file_path) 138 | 139 | print("[Dict] All completed") 140 | -------------------------------------------------------------------------------- /weasel.yaml: -------------------------------------------------------------------------------- 1 | # Weasel settings 2 | # encoding: utf-8 3 | # 修改自: https://github.com/rime/weasel/blob/master/output/data/weasel.yaml 4 | # 5 | # COMMIT SHA: 7016a340fdc06b291ed8ca074924eea8c07679b8 6 | 7 | config_version: "2024-06-08" 8 | 9 | app_options: 10 | cmd.exe: 11 | ascii_mode: true 12 | conhost.exe: 13 | ascii_mode: true 14 | firefox.exe: 15 | inline_preedit: true # 解决 Firefox 无法输入的问题 https://github.com/rime/weasel/issues/946 16 | 17 | show_notifications: true 18 | # 通知显示多长时间 19 | show_notifications_time: 1200 20 | # 使用全局 ascii 状态 21 | global_ascii: false 22 | 23 | style: 24 | color_scheme: win11_weasel # 主题方案 25 | color_scheme_dark: win11_weasel_dark # 暗色模式下的主题方案 26 | 27 | # 这里提供三种不同主题预设,自行切换注释即可 28 | # 必须启用其中一种预设! 29 | 30 | # Windows 11 风格预设 31 | # 感谢 luminosara https://github.com/LufsX/rime/pull/22、https://github.com/LufsX/rime/pull/26 32 | __include: win11_preset 33 | 34 | # Windows 10 MDL2 风格预设 35 | # 此项风格建议使用 win10_MDL 为前缀的主题方案 36 | # 感谢 fbewivpjsbsby https://github.com/LufsX/rime/discussions/29 37 | # __include: win10_MDL_preset 38 | 39 | # Windows 10 风格预设 40 | # 感谢 luminosara https://github.com/LufsX/rime/pull/22、https://github.com/LufsX/rime/pull/26 41 | # __include: win10_preset 42 | 43 | # 以下是其它的设置 44 | 45 | antialias_mode: default # 抗锯齿模式 46 | ascii_tip_follow_cursor: false # 切换 ASCII 模式时,提示跟随光标 47 | display_tray_icon: false # 显示系统托盘图标 48 | fullscreen: false # 演示模式(全屏的輸入窗口) 49 | 50 | click_to_capture: false # 点击输入法时捕获截图到剪贴板 51 | hover_type: semi_hilite # 鼠标悬停行为 none(无动作); hilite(选中鼠标下的候选); semi_hilite(高亮鼠标下的候选) 52 | paging_on_scroll: false # 鼠标滚轮翻页候选栏 53 | 54 | inline_preedit: true # 在光标位置显示预编辑文本 55 | preedit_type: composition # 预编辑文本类型 composition(编码); preview(高亮候选); preview_all(全部候选) 56 | candidate_abbreviate_length: 0 # 最长候选长度,多出来的将被…代替,值为 0 或将这行注释禁用此功能 57 | 58 | horizontal: true # 水平排列候选栏 59 | font_face: Segoe UI Emoji:30:39, Noto Color Emoji, Microsoft YaHei # 主要字体 60 | label_font_face: Microsoft YaHei # 标签字体 61 | comment_font_face: Microsoft YaHei # 注释字体 62 | font_point: 14 # 主要字体大小 63 | label_font_point: 14 # 标签字体大小 64 | comment_font_point: 14 # 注释字体大小 65 | mark_text: "" # 高亮标记字符,显示在选中的候选标签前 66 | 67 | vertical_auto_reverse: false # 垂直排列时自动反转顺序 68 | vertical_text: false # 垂直文本显示 69 | vertical_text_left_to_right: false # 垂直文本从左到右显示 70 | vertical_text_with_wrap: false # 垂直文本自动换行 71 | 72 | layout/baseline: 0 # 基线高度百分比,0 即为禁用 73 | layout/linespacing: 0 # 行高百分比,0 即为禁用,该项大于 100 可解决因字体导致的候选栏高度闪烁问题(需要同时设置基线高度 baseline) 74 | 75 | preset_color_schemes: 76 | ayaya: 77 | name: "文文/Ayaya" 78 | author: "Lufs X " 79 | 80 | back_color: 0xF9F9F9 81 | border_color: 0xE7E7E7 82 | candidate_text_color: 0x121212 83 | comment_text_color: 0x8E8E8E 84 | hilited_candidate_back_color: 0xECE4FC 85 | hilited_candidate_label_color: 0xB18FF4 86 | hilited_candidate_text_color: 0x7A40EC 87 | hilited_label_color: 0xA483EC 88 | hilited_mark_color: 0x7A40EC 89 | label_color: 0x888785 90 | text_color: 0x8100EB 91 | 92 | ayaya_dark: 93 | name: "文文/Ayaya/深色" 94 | author: "Lufs X " 95 | 96 | back_color: 0x000000 97 | border_color: 0x000000 98 | candidate_text_color: 0xD2D2D2 99 | comment_text_color: 0x8E8E8E 100 | hilited_candidate_back_color: 0x2C1E3C 101 | hilited_candidate_label_color: 0x7036E2 102 | hilited_candidate_text_color: 0x7036E2 103 | hilited_comment_text_color: 0x8E8E8E 104 | hilited_label_color: 0xA483EC 105 | hilited_mark_color: 0x7A40EC 106 | label_color: 0x888785 107 | 108 | apathy: 109 | name: 冷漠/Apathy 110 | author: LIANG Hai 111 | back_color: 0xFFFFFF 112 | text_color: 0x424242 113 | hilited_candidate_text_color: 0xEE6E00 114 | hilited_candidate_back_color: 0xFFF0E4 115 | comment_text_color: 0x999999 116 | 117 | win10: 118 | candidate_text_color: 0x000000 119 | comment_text_color: 0x888888 120 | text_color: 0x000000 121 | back_color: 0xffffff 122 | hilited_text_color: 0x000000 123 | hilited_back_color: 0xffffff 124 | hilited_candidate_text_color: 0xffffff 125 | hilited_candidate_back_color: 0xcc8f29 126 | hilited_comment_text_color: 0xffffff 127 | hilited_label_color: 0xffffff 128 | label_color: 0x888888 129 | 130 | macos_light: 131 | author: "一方" 132 | back_color: 0xFFFFFF 133 | border_color: 0xFFFFFF 134 | text_color: 0x424242 135 | hilited_back_color: 0xD75A00 136 | hilited_candidate_text_color: 0xFFFFFF 137 | hilited_candidate_label_color: 0xFFFFFF 138 | hilited_comment_text_color: 0x999999 139 | hilited_text_color: 0x999999 140 | candidate_text_color: 0x3c3c3c 141 | comment_text_color: 0x999999 142 | label_color: 0x999999 143 | 144 | macos_dark: 145 | author: "一方" 146 | back_color: 0x252a2e 147 | border_color: 0x050505 148 | text_color: 0x424242 149 | hilited_back_color: 0xD75A00 150 | hilited_candidate_text_color: 0xFFFFFF 151 | hilited_candidate_label_color: 0xFFFFFF 152 | hilited_comment_text_color: 0x999999 153 | hilited_text_color: 0x999999 154 | candidate_text_color: 0xe9e9ea 155 | comment_text_color: 0x999999 156 | label_color: 0x999999 157 | 158 | macos12_light: 159 | name: "高仿亮色 macOS" 160 | author: "Lufs X " 161 | 162 | back_color: 0xFFFFFF 163 | border_color: 0xFFFFFF 164 | candidate_text_color: 0xD8000000 165 | comment_text_color: 0x3F000000 166 | label_color: 0x7F7F7F 167 | hilited_candidate_back_color: 0xD05925 168 | hilited_candidate_text_color: 0xFFFFFF 169 | hilited_comment_text_color: 0x808080 170 | hilited_candidate_label_color: 0xFFFFFF 171 | text_color: 0x3F000000 172 | hilited_text_color: 0xD8000000 173 | 174 | macos12_dark: 175 | name: "高仿暗色 macOS" 176 | author: "Lufs X " 177 | 178 | back_color: 0x1E1F24 179 | border_color: 0x1E1F24 180 | candidate_text_color: 0xE8E8E8 181 | comment_text_color: 0x3F000000 182 | label_color: 0x7C7C7C 183 | hilited_candidate_back_color: 0xDA6203 184 | hilited_candidate_text_color: 0xFFFFFF 185 | hilited_comment_text_color: 0x808080 186 | hilited_candidate_label_color: 0xFFE7D6 187 | text_color: 0x3F000000 188 | hilited_text_color: 0xD8000000 189 | 190 | win10_weasel: 191 | author: "luminosa" 192 | back_color: 0xF3F3F3 # 背景颜色 颜色均取色自 Windows 10 默认 193 | border_color: 0xDBDCDC # 边框颜色 194 | candidate_text_color: 0x000000 # 候选文字颜色 195 | hilited_candidate_back_color: 0xFFD8A6 # 高亮颜色 196 | hilited_label_color: 0x6F6F6F # 高亮序号颜色 197 | hilited_mark_color: 0x00000000 # 此项不生效 198 | label_color: 0x6F6F6F # 候选数字颜色 199 | shadow_color: 0x20000000 # 阴影颜色,新版小狼毫 CI 更改了绘制,若无法看到阴影,请更改为 000000,观察是否能正常绘制阴影 200 | text_color: 0x000000 # 拼音文字颜色 201 | 202 | win11_weasel: 203 | name: "Windows 11 默认" 204 | author: "luminosa" 205 | back_color: 0xF9F9F9 # 背景颜色 颜色均取色自 Windows 11 默认 206 | border_color: 0xE7E7E7 # 边框颜色 207 | candidate_text_color: 0x000000 # 候选文字颜色 208 | hilited_candidate_back_color: 0xF0F0F0 # 高亮颜色 209 | hilited_label_color: 0x727272 # 高亮序号颜色 210 | hilited_mark_color: 0xFFD8A6 # 此项生效,前面那|的颜色,更新到支持的小狼毫 CI 版本才会生效 211 | label_color: 0x727272 # 候选数字颜色 212 | shadow_color: 0x20000000 # 阴影颜色,新版小狼毫 CI 更改了绘制,若无法看到阴影,请更改为 000000,观察是否能正常绘制阴影 213 | text_color: 0x000000 # 拼音文字颜色 214 | 215 | win11_weasel_dark: 216 | name: "Windows 11 默认/深色" 217 | author: "Lufs X " 218 | back_color: 0x2C2C2C # 背景颜色 颜色均取色自 Windows 11 默认 219 | border_color: 0x333333 # 边框颜色 220 | candidate_text_color: 0xFFFFFF # 候选文字颜色 221 | hilited_candidate_back_color: 0x383838 # 高亮颜色 222 | hilited_label_color: 0xCFCFCF # 高亮序号颜色 223 | hilited_mark_color: 0x595959 # 此项生效,前面那|的颜色,更新到支持的小狼毫 CI 版本才会生效 224 | label_color: 0x727272 # 候选数字颜色 225 | shadow_color: 0x20000000 # 阴影颜色,新版小狼毫 CI 更改了绘制,若无法看到阴影,请更改为 000000,观察是否能正常绘制阴影 226 | text_color: 0xFFFFFF # 拼音文字颜色 227 | 228 | win10_MDL_ayaya: 229 | name: "Windows10 文文/Ayaya" 230 | author: "Lufs X " 231 | 232 | back_color: 0xFFFFFF 233 | candidate_text_color: 0x121212 234 | comment_text_color: 0x8E8E8E 235 | hilited_candidate_back_color: 0xECE4FC 236 | hilited_label_color: 0xB18FF4 237 | hilited_candidate_text_color: 0x7A40EC 238 | label_color: 0x888785 239 | text_color: 0x8100EB 240 | 241 | win10_MDL_ayaya_dark: 242 | name: "Windows10 文文/Ayaya/深色" 243 | author: "Lufs X " 244 | 245 | back_color: 0x000000 246 | candidate_text_color: 0xD2D2D2 247 | comment_text_color: 0x8E8E8E 248 | hilited_candidate_back_color: 0x2C1E3C 249 | hilited_label_color: 0xA483EC 250 | hilited_candidate_text_color: 0x7036E2 251 | label_color: 0x888785 252 | text_color: 0x8100EB 253 | 254 | win10_MDL_deepgrey: 255 | name: "Windows10 Deepgrey" 256 | author: fbewivpjsbsby 257 | 258 | text_color: 0x000000 259 | candidate_text_color: 0x000000 260 | back_color: 0xFFFFFF 261 | border_color: 0x7E7969 262 | hilited_text_color: 0xFFFFFF 263 | hilited_back_color: 0x7E7969 264 | hilited_candidate_text_color: 0xFFFFFF 265 | hilited_candidate_back_color: 0x7E7969 266 | hilited_label_color: 0xffffff 267 | comment_text_color: 0x888888 268 | hilited_comment_text_color: 0xffffff 269 | 270 | win10_MDL_blue: 271 | name: "Windows 10 Blue" 272 | author: fbewivpjsbsby 273 | candidate_text_color: 0x000000 274 | comment_text_color: 0x888888 275 | text_color: 0x000000 276 | back_color: 0xffffff 277 | border_color: 0xcc8f29 278 | hilited_text_color: 0x000000 279 | hilited_back_color: 0xffffff 280 | hilited_candidate_text_color: 0xffffff 281 | hilited_candidate_back_color: 0xcc8f29 282 | hilited_comment_text_color: 0xffffff 283 | hilited_label_color: 0xffffff 284 | label_color: 0x888888 285 | 286 | win10_MDL_darkblue: 287 | name: "Windows 10 Dark Blue" 288 | author: fbewivpjsbsby 289 | candidate_text_color: 0xf2f2f2 290 | comment_text_color: 0x888888 291 | text_color: 0xffffff 292 | back_color: 0x1f1f1f 293 | border_color: 0xa37220 294 | hilited_text_color: 0xffffff 295 | hilited_back_color: 0x1f1f1f 296 | hilited_candidate_text_color: 0xf2f2f2 297 | hilited_candidate_back_color: 0xa37220 298 | hilited_comment_text_color: 0xffffff 299 | hilited_label_color: 0xf2f2f2 300 | label_color: 0x888888 301 | 302 | win11_preset: 303 | label_format: "\u2006%s" # 候选栏标签格式 304 | layout: 305 | align_type: center # 布局对齐方式 306 | max_width: 0 # 最大宽度限制 307 | min_width: 80 # 最小宽度限制 308 | min_height: 0 # 最小高度限制 309 | max_height: 0 # 最大高度限制 310 | border_width: 1 # 窗口边框宽度 311 | margin_x: 6 # 窗口左右边距 312 | margin_y: 6 # 窗口上下边距 313 | spacing: 10 # 候选栏间距 314 | hilite_spacing: 10 # 高亮显示间距 315 | shadow_offset_x: 3 # 阴影 X 轴偏移 316 | 317 | candidate_spacing: 10 # 候选栏内部间距 318 | corner_radius: 5 # 候选圆角半径 319 | hilite_padding: 5 # 高亮高度 320 | hilite_padding_x: 2 # 高亮 X 横向方向边距 321 | hilite_padding_y: 2 # 高亮 Y 纵向方向边距 322 | round_corner: 5 # 高亮圆角 323 | shadow_offset_y: 0 # 阴影 Y 轴偏移 324 | shadow_radius: 0 # 阴影半径 325 | 326 | win10_preset: 327 | label_format: "%s" # 候选栏标签格式 328 | layout: 329 | align_type: center # 布局对齐方式 330 | max_width: 0 # 最大宽度限制 331 | min_width: 90 # 最小宽度限制 332 | min_height: 0 # 最小高度限制 333 | max_height: 0 # 最大高度限制 334 | border_width: 2 # 窗口边框宽度 335 | margin_x: 7 # 窗口左右边距 336 | margin_y: 7 # 窗口上下边距 337 | spacing: 10 # 候选栏间距 338 | hilite_spacing: 10 # 高亮显示间距 339 | shadow_offset_x: 7 # 阴影 X 轴偏移 340 | 341 | candidate_spacing: 10 # 候选栏内部间距 342 | corner_radius: 10 # 候选条圆角,不需要圆角设置为 0 343 | hilite_padding: 8 # 高亮高度 344 | hilite_padding_x: 8 # 高亮 x 横向方向边距,可以自行调整 345 | hilite_padding_y: 8 # 高亮 y 纵向方向边距 346 | round_corner: 0 # 高亮圆角,小狼毫天圆地方此项可设置为 0,也可自行调整 347 | shadow_offset_y: 4 # 阴影 Y 轴偏移 348 | shadow_radius: 10 # 阴影半径 349 | 350 | win10_MDL_preset: 351 | label_format: "%s" 352 | font_point: 13 353 | label_font_point: 9 354 | layout: 355 | border_width: 1 356 | margin_x: 7 357 | margin_y: 2 358 | spacing: 10 359 | candidate_spacing: 20 360 | corner_radius: 0 361 | round_corner: 0 362 | hilite_spacing: 5 363 | hilite_padding_x: 15 364 | hilite_padding_y: 6 365 | -------------------------------------------------------------------------------- /zh-hans-t-essay-bgw.gram: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LufsX/rime/a97e213a318ae85f4c866f5ebf3fc5fa5822b966/zh-hans-t-essay-bgw.gram --------------------------------------------------------------------------------