# Rime schema
# encoding: utf-8
schema:
  schema_id: wanxiang_t9
  name: 万象・九宫格
  version: "LTS"
  author:
    - amzxyz
    - morse
  description: |
    仓输入法:万象拼音九宫格方案
  dependencies:
    - wanxiang_mixedcode    #中英文混合词汇
    - wanxiang_reverse      # 部件拆字，反查及辅码

# 开关
# reset: 默认状态。注释掉后，切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉，仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符，abbrev 可自定义一个字符
switches:
  - name: ascii_mode                    # 中英输入状态
    states: [ 中文, 英文 ]
  - name: ascii_punct                   # 中英标点，可以在中文输入状态输入英文符号
    states: [ 中标, 英标 ]
  - name: full_shape                    #全角、半角字符输出
    states: [ 半角, 全角 ]
  - name: emoji                         #候选出现emoji滤镜，会显示在相应的候选后面，万象侧重于tips提示，避免候选被占用，因此默认为reset: 0，归属opencc emoji滤镜
    states: [表情关, 表情开]
  - name: chinese_english               #候选进入翻译模式滤镜，会显示在相应的候选后面，万象侧重于tips提示，避免候选被占用，归属opencc 翻译滤镜
    states: [ 翻译关, 翻译开 ]
  - name: charset_filter               #字符集过滤，默认开启8105通规显示，即小字集，可通过开关实时开启全字集，快捷键配套ctrl+g,归属：super_filter.lua
    states: [ 大字集, 小字集 ]
    reset: 0
  - options: [ raw_input, tone_display, full_pinyin ]   #开启后在输入编码的位置实时转换为带声调全拼或者不带声调全拼，不开启则采用系统配置原始编码，影响的是preedit_format,归属：super_preedit.lua
    states: [ 原编码, 有声调, 无声调 ]
#    reset: 2     #对于开关组从0开始数，第几个就reset几可设为默认
  - options: [ s2s, s2t, s2hk, s2tw ]   # 简繁转换开关组，可以在一个空选项和多个实际“- simplifier@s2hk”引入的项目之前切换，这是一个开关组，你可以将其中任意一个s2s等设置为toggle快捷键，多次按下将轮询
    states: [ 简体, 通繁, 港繁, 臺繁 ]
  - name: tone_hint                     #开启后在候选的注释里面实时显示全拼声调，不开启则采用系统配置，影响的是comment_format，归属：super_comment.lua
    states: [ 读音关, 读音开 ]
  - name: super_tips                    #开启后在输入编码后面的提示区显示实时的提示数据，受tips数据库影响，表情、翻译、车牌、符号等对应关系数据，并可实现句号上屏，不开启则默认，影响的是segment.prompt参数，归属：super_tips.lua
    states: [ 提示关, 提示开 ]
    reset: 1


# 输入引擎
engine:
  processors:
    - t9_processor                              #元书T9处理器
    - lua_processor@*super_tips                 #超级提示模块：表情、简码、翻译、化学式、等等靠你想象
    - lua_processor@*super_sequence*P           #手动排序，高亮候选 ctrl+j左移动 ctrl+k 右移动 ctrl+l 移除位移  ctrl+p 置顶
    - ascii_composer                            #处理英文模式及中英文切换
    - recognizer                                #与 matcher 搭配，处理符合特定规则的输入码，如网址、反查等 tags
    - key_binder                                #在特定条件下将按键绑定到其他按键，如重定义逗号、句号为候选翻页、开关快捷键等
    - lua_processor@*key_binder                 #绑定按键扩展能力，支持正则扩展将按键生效情景更加细化
    - speller                                   #拼写处理器，接受字符按键，编辑输入
    - punctuator                                #符号处理器，将单个字符按键直接映射为标点符号或文字
    - selector                                  #选字处理器，处理数字选字键〔可以换成别的哦〕、上、下候选定位、换页
    - navigator                                 #处理输入栏内的光标移动
    - express_editor                            #编辑器，处理空格、回车上屏、回退键
  segmentors:
    - ascii_segmentor                           #标识英文段落〔譬如在英文模式下〕字母直接上屛
    - matcher                                   #配合 recognizer 标识符合特定规则的段落，如网址、反查等，加上特定 tag
    - abc_segmentor                             #标识常规的文字段落，加上 abc 这个 tag
    - affix_segmentor@wanxiang_reverse          #反查 tag
    - punct_segmentor                           #标识符号段落〔键入标点符号用〕加上 punct 这个 tag
    - fallback_segmentor                        #标识其他未标识段落，必须放在最后帮助tag模式切换后回退重新处理
  translators:
    - punct_translator                     #配合 punct_segmentor 转换标点符号
    - script_translator                    #脚本翻译器，用于拼音、粤拼等基于音节表的输入方案
    - lua_translator@*version_display      #输入'/wx'，显示万象项目网址和当前版本号
    - lua_translator@*shijian              #农历、日期、节气、节日、时间、周、问候模板等等，触发清单看下文
    - lua_translator@*unicode              #通过输入大写U引导，并输入Unicode编码获得汉字输出
    - lua_translator@*number_translator    #数字、金额大写，通过输入大写R1234获得候选输出
    - lua_translator@*super_calculator     #超级计算器，Lua内查看高级用法
    - table_translator@custom_phrase       #自定义短语 custom_phrase.txt，用于置顶自定义编码候选词
    - table_translator@chengyu             #简码成语词汇表导入
    - table_translator@wanxiang_mixedcode  #中英等混合词汇表导入
    - reverse_lookup_translator@wanxiang_reverse    #挂接部件组字和笔画反查
  filters:
    - lua_filter@*super_lookup                      #字词输入中反查辅助筛选
    - lua_filter@*super_filter                      #功能太多详见Lua文件
    - lua_filter@*super_replacer                    #用来替代OpenCC的处理器
    - lua_filter@*super_sequence*F                  #手动排序，高亮候选 ctrl+j左移动 ctrl+k 右移动 ctrl+0 移除位移
    - uniquifier                                    # 去重

t9:
  isDisplayOriginalPreedit: false

# 字符集过滤lua
# a,通用规范汉字表
# b,GB2312,
# g,GBK,
# T,Big5,(台港澳常用)
# j,简体,OpenCC (t2s)
# f,通用繁体,OpenCC (s2t)
# h,香港繁体, OpenCC (s2hk)
# t,台湾繁体, OpenCC (s2tw)
# u,基本区,U+4E00 - U+9FFF
# A-I,扩展 A-I 区,U+3400 及各扩展区 (支持到 Ext-I)
# c,兼容区汉字
# 你可以通过黑白名单微调你自己每个开关下面的字符集过滤清单，主数据库位于lua/charset.reverse.bin不可编辑
# 你可以按上面提到的规则代号在base处填写上基础集，还可以在每一个开关的开白名单设置微调数据，就像默认添加的字符集过滤在8105基础上新增了一些
# 你可以定义多个开关，多个开启状态的开关求并集，比如charset_filter开着，s2hk也开着，那么就会显示这两个集合的所有汉字
# 优雅的地方在于s2hk开着，charset_filter关着 我们照样能使用 港繁能用到的所有字，是真正的本体，无关字会被过滤，而当都开着则是享受简体转换成繁体的后的结果
# 这个设计真正的兼容了简繁转换与字符集过滤的矛盾，还能满足用户多种自定义需求，你可以在开关增加类别，并在charset下面新增option类去选择按照字区去过滤，等多种组合方式
charset:
  - option: charset_filter
    base: a  #可以填入多个类别如aj
    addlist:
      - "诶濛硷氽尛躝〇冇吔咗囧屌鲶芶咲畑垅𰻝𰻞"
    blacklist: []
  - option: s2t
    base: f
    addlist: []
    blacklist: []
  - option: s2hk
    base: h
    addlist: []
    blacklist: []
  - option: s2tw
    base: t
    addlist: []
    blacklist: []

# Tips 配置项
tips:
  # 禁用的 tips 类型，初始化 tips 数据库的时候会直接忽略相关规则，修改部署后生效
  # 可选项为：偏旁，符号，化学式，时间，符号，组字，翻译，表情，货币，车牌
  disabled_types: []

#在8105基础上你可以通过黑白名单微调你自己的字符集过滤清单，主数据库位于lua/charset.bin不可编辑
charsetlist: []
charsetblacklist: []
#shijian:仅仅作为提示使用，编码已经写死，引导键可以在key_binder下修改前缀
#时间：osj 或者 /sj
#日期：orq 或者 /rq
#农历：onl 或者 /nl
#星期：oxq 或者 /xq
#今年第几周：oww 或者 /ww
#节气：ojq 或者 /jq
#日期+时间：odt 或者 /dt
#时间戳：ott 或者 /tt
#大写N日期：N20250315 或者N0312不带年
#节日：ojr 或者 /jr
#问候模板：/day 或者 oday
# 通用日期时间格式化函数（供 /rq、/sj、/dt、N0101、N20150101 场景复用）
# 支持转义：
#   \X       —— 转义单个字符 X，按字面量输出（如 \Y \m \H 等）
#   [[...]]  —— 区块整体按字面量输出
#
# 约定占位符：
# 【日期】
#   Y  四位年份           0000-9999  例：2025
#   y  两位年份           00-99      例：25
#   m  月（前导零）        01-12      例：02
#   n  月（不带前导零）     1-12       例：2
#   d  日（前导零）        01-31      例：09
#   j  日（不带前导零）     1-31       例：9
#
# 【时间】
#   H  24小时（前导零）   00-23      例：08
#   G  24小时（不带零）   0-23       例：8
#   I  12小时（前导零）   01-12      例：08
#   l  12小时（不带零）   1-12       例：8   （注意是小写 L）
#   M  分钟（前导零）     00-59      例：05
#   S  秒（前导零）       00-59      例：09
#   p  am/pm（小写）     am / pm
#   P  AM/PM（大写）     AM / PM
# 【时区】
#   O  带冒号格式        +08:00、-04:30、+05:45
#   o  不带冒号格式      +0800、-0430、+0545
date_formats:
  - "Y年m月d日"
  - "Y-m-d"
  - "Y/m/d"
  - "Y.m.d"
  - "Ymd"
  - "Y年n月j日"
  - "y年n月j日"
  - "n月j日"
time_formats:
  - "H:M"
  - "H点M分"
  - "H:M:S"
  - "H时M分S秒"
  - "下午I:M"
  - "I:M P"
datetime_formats:
  - "Y-m-d H:M:S"
  - "Y-m-dTH:M:S O"
  - "YmdHMS"
  - "Y年m月d日 H点M分"
  - "y/m/d I:M p"

# Lua 配置：计算器触发关键字
calculator:
  trigger: "V"

# 主翻译器，拼音
translator:
  dictionary: wanxiang         # 挂载主词库
#  packs: user                  #导入根目录下名称为user.dict.yaml的自定义固定词典
  prism: wanxiang_t9             # 多方案共用一个词库时，为避免冲突，需要用 prism 指定一个名字。
  enable_completion: true      # 启用候选词补全
#  user_dict: zrm.userdb       # 用户词典的文件名称
#  db_class: tabledb           #开启后就不会产生wanxiang.userdb这样的文件夹，会直接输出文本wanxiang.txt同时无法使用同步能力，可设 tabledb〔文本〕或 userdb〔二进制〕
  enable_user_dict: true       # 是否开启自动调频，即开启用户词典
  enable_encoder: true         #是否开启自动造词
  enable_sentence: false       #是否开启自动造句
  enable_correction: false     #是否开启自动纠错
  encode_commit_history: true  # 预留历史上屏自动编码成词
  contextual_suggestions: false  #模型预测，假设模型里面有的四个字的词汇 现在智能 而首选组合 现在只能 当你输入 现在 上屏后下一次输入zhi neng就会输出，智能前提是没有权重更高的了，很明显这与你的预期“现在只能”不符。很明显实际上又要预测又要连续句子，放一起是很难优雅的。
  max_homophones: 5
  max_homographs: 5
  core_word_length: 4          # >0 启用，按段学词 + 相邻段拼接
  max_word_length: 7           # >0 启用，过长短语不记整词，只加元素权重
  initial_quality: 3           #初始质量拼音的权重应该比英文大
  spelling_hints: 30           #将注释以词典code字符串形式完全暴露，通过super_comment.lua完全接管，灵活配置。
  always_show_comments: true   # Rime 默认在 preedit 等于 comment 时取消显示 comment，这里强制一直显示，供super_comment.lua做判断用。
  comment_format:
    - xlit/āáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜüńňǹḿm̀/aaaaooooeeeeiiiiuuuuvvvvvnnnmmm/
    - xform/^(.*);.*$/$1/
  #disable_user_dict_for_patterns:  #如果你开启调频，需要一并考虑这个配置是否需要，基本的6码3字不调频，你可以自定义，目前的逻辑是依然记录用户词但满足规则的不输出不被使用
  #  - "^[a-z]{1,6}"

# 自定义短语
custom_phrase:
  dictionary: ""
  user_dict: custom_phrase  #需要手动创建 custom_phrase.txt 文件
  db_class: stabledb         #可设 tabledb〔文本〕或 userdb〔二进制〕
  enable_completion: false  #补全提示
  enable_sentence: false    #禁止造句
  initial_quality: 99       #custom_phrase 的权重应该比 pinyin 和 wanxiang_en 大


# 简码词库导入位于dicts得chengyu.txt文件词库
chengyu:
  dictionary: ""
  user_dict: dicts/chengyu
  db_class: stabledb
  enable_sentence: false
  enable_completion: false
  initial_quality: 1.3

# 中文、英文、数字、符号等混合词汇
wanxiang_mixedcode:
  dictionary: wanxiang_mixedcode
  db_class: stabledb
  enable_completion: true
  enable_sentence: false
  initial_quality: 2
  comment_format:
    - xform/.*//

super_replacer:
    db_name: lua/replacer
    delimiter: "|"
    comment_format: "〔%s〕"
    chain: true   #true表示流水线作业，上一个option产出交给下一个处理，典型的s2t>t2hk=s2hk，false就是并行，直接用text转换
    types:
      # 场景1：输入 '哈哈' -> 变成 '1.哈哈 2.😄'
      - option: emoji           # 开关名称与上面开关名称保持一致
        mode: append            # 新增候选append 替换原候选replace 替换注释comment
        comment_mode: none      # 注释模式: "append"(原候选注释继承), "text"(原候选文本放在注释), "none"(空，默认)
        tags: [abc]             # 生效的tag
        prefix: "_em_"          # 前缀用于区分同一个数据库的不同用途数据
        files:
          - lua/data/emoji.txt
      # 场景2：输入 'hello' -> 显示 'hello 〔你好 | 哈喽〕'
      - option: chinese_english
        mode: append        # <--- 添加注释模式
        comment_mode: none
        tags: [abc]
        prefix: "_en_"
        files:
          - lua/data/english_chinese.txt
          - lua/data/chinese_english.txt
      # 场景3：用于常驻的直接替换 option: true
      - option: true
        mode: append         # <--- 新增候选模式
        comment_mode: none
        tags: [abc]
        prefix: "_ot_"
        files:
          - lua/data/others.txt
      # 场景4：用于简繁转换的直接替换
      - option: [ s2t, s2hk, s2tw ]   #后面依赖这条流水线有一个开关为true这条流水线就能工作
        mode: replace         # <--- 替换原候选模式
        comment_mode: append
        sentence: true        # <--- 句子级别替换
        tags: [abc]
        prefix: "_s2t_"
        files:
          - lua/data/STCharacters.txt
          - lua/data/STPhrases.txt
      - option: s2hk
        mode: replace         # <--- 替换原候选模式
        comment_mode: append
        sentence: true        # <--- 句子级别替换
        tags: [abc]
        prefix: "_s2hk_"
        files:
          - lua/data/HKVariants.txt
          - lua/data/HKVariantsRevPhrases.txt
      - option: s2tw
        mode: replace         # <--- 替换原候选模式
        comment_mode: append
        sentence: true        # <--- 句子级别替换
        tags: [abc]
        prefix: "_s2tw_"
        files:
          - lua/data/TWVariants.txt
          - lua/data/TWVariantsRevPhrases.txt

# 部件拆字反查
wanxiang_reverse:
  tag: wanxiang_reverse
  dictionary: wanxiang_reverse
  prefix: "`"  # 反查前缀（反查时前缀会消失），与 recognizer/patterns/wanxiang_reverse 匹配
  tips: "〔反查：拆分|笔画〕"

wanxiang_lookup: #设置归属于super_lookup.lua
  tags: [ abc ]  # 检索当前tag的候选
  key: "`"       # 输入中反查引导符，要添加到 speller/alphabet
  lookup: [ wanxiang_reverse ] #反查滤镜数据库，万象都合并为一个了
  data_source: [db]  #对于pro版本能从注释中加载词库辅助码，详情见Pro版本，base这里无需修改。

# 处理符合特定规则的输入码，如网址、反查
recognizer:
  import_preset: default  # 从 default.yaml 继承通用的
  patterns:  # 再增加方案专有的：
    punct: "^/([0-9]|10|[A-Za-z]+)$"    # 响应 symbols.yaml 的 symbols
    wanxiang_reverse: "^`[A-Za-z]*$"      # 响应部件拆字与笔画的反查，与 wanxiang_reverse/prefix 匹配
    #add_user_dict: "^ac[A-Za-z/`']*$"   #引导式造词
    unicode: "^U[a-f0-9]+"              # U 作为触发前缀，响应 lua_translator@unicode，输出 Unicode 字符
    number: "^R[0-9]+[.]?[0-9]*"        # R 作为触发前缀, 响应 lua_translator@number_translator，数字金额大写
    yr1: "^N0[1-9]?0?[1-9]?"
    yr2: "^N1[02]?0?[1-9]?"
    yr3: "^N0[1-9]?[1-2]?[1-9]?"
    yr4: "^N1[02]?[1-2]?[1-9]?"
    yr5: "^N0[1-9]?3?[01]?"
    yr6: "^N1[02]?3?[01]?"
    nyr1: "^N19?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?"
    nyr2: "^N20?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?"
    calculator: "^V.*$"                 # V 作为触发前缀，计算器功能引导
    #add_user_dict: "^ac[A-Za-z/`']*$"      #自造词引导方式
    email: "^[A-Za-z][-_.0-9A-Za-z]*@.*$"                            # email @ 之后不上屏
    url: "^(www[.]|https?:|ftp[.:]|mailto:|file:).*$|^[a-z]+[.].+$"  # URL

punctuator:
  digit_separators: ",."  #数字分隔符，系统逻辑是在中文状态下输入数字后继续输入句号按下两次即输入半角状态
  __include: wanxiang_symbols:/symbol_table         # 从 wanxiang_symbols.yaml 导入所有符号配置
  __patch: t9_sym
t9_sym:
  half_shape/+:
    "1": [1, "@", ".", "/", ":", "_", "-", "#"]
    "@": [1, "@", ！, ：, 、, ……, ～]
    "#": [0, "#", "$", "%", "^", "&", "*", "(", ")"]
# 从 default 继承快捷键
key_binder:
  import_preset: default  # 从 default.yaml 继承通用的
  sequence: # Lua 配置：手动排序的快捷键 super_sequence.lua，不要用方向键，各种冲突，一定要避免冲突
    up: "Control+j"    # 上移
    down: "Control+k"  # 下移
    reset: "Control+l" # 重置
    pin: "Control+p"   # 置顶
  # Lua 配置: shijian.lua 的引导符，涉及：日期、时间、节日、节气、生日、问候模板等功能
  shijian_keys: ["/", "o"]
  # Lua 配置: 超级tips上屏按键
  tips_key: "comma"   #修改时候去default找
  # Lua 配置: 以词定字（上屏当前词句的第一个或最后一个字），和中括号翻页有冲突
  select_first_character: "bracketleft"  # 左中括号 [
  select_last_character: "bracketright"  # 右中括号 ]
  bindings:               # 也可以再增加方案专有的
    - { when: has_menu, accept: 1, send: apostrophe }

#当tab第一个字补码正确后，可以使用Ctrl+tab进行上屏并依次补码
    - { when: composing, accept: "Control+Tab", send_sequence: '{Home}{Shift+Right}{1}{Shift+Right}' }
    - { match: "^.*`$", accept: "`", send_sequence: '{BackSpace}{Home}{`}{`}{End}' }

# 拼写设定
speller:
# table_translator翻译器，支持自动上屏。例如 “zmhu”可以自动上屏“怎么回事”
#  auto_select: true
#  auto_select_pattern: ^[a-z]+/|^[a-df-zA-DF-Z]\w{3}|^e\w{4}
  # 如果不想让什么标点直接上屏，可以加在 alphabet，或者编辑标点符号为两个及以上的映射，alphabet就是将字符纳入输入编码的范畴
  alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA9876543210`/\
  initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA9876543210
  delimiter: " '"        # 系统配置，第一位<空格>是拼音之间的分隔符；第二位<'>表示可以手动输入单引号来分割拼音。
  visual_delimiter: " "  # super_preedit.lua配置：是否让分隔符号跟着一起转换，例如nǐ'hǎo 在实际使用中表现出视觉拥挤，我们可以让delimiter平时是'转换为拼音的时候使用空格nǐ hǎo，更符合实际。
  tone_isolate: true     # super_preedit.lua配置：是否将数字声调从转换后拼音中隔离出来（true=隔离， false 直接参与转换）例如：nǐ3
  algebra:
    - xform/^(.*);.*$/$1/
    - xlit/āáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜüńňǹḿm̀/aaaaooooeeeeiiiiuuuuvvvvvnnnmmm/
    - derive/^ng$/eng/
    - xform/^n$/en/
    - xform/^m$/me/
    - derive/^(.*)$/\U$1/
    #- abbrev/^([A-Z]).+$/$1/
    #- abbrev/^([ZCS]H).+$/$1/
    - derive/^([nl])ve$/$1ue/
    - derive/^([NL])VE$/$1UE/
    - derive/^([jqxy])u/$1v/
    - derive/^([JQXY])U/$1V/
    - xlit/ABCDEFGHIJKLMNOPQRSTUVWXYZ/22233344455566677778889999/



grammar:
  language: wanxiang-lts-zh-hans
  collocation_max_length: 7
  collocation_min_length: 2
  collocation_penalty: -10
  non_collocation_penalty: -20
  weak_collocation_penalty: -35
  rear_penalty: -12
