terasum / js-mdict

*.mdx/*.mdd interpreter js implements, support mdict index file
MIT License
154 stars 18 forks source link

Fix KeyCaseSensitive and Stripkey Problem #45

Closed songxiaocheng closed 3 years ago

songxiaocheng commented 3 years ago
  1. 调用者可以强行设置 searchOptions,在不强行设置searchOptions的情况下,遵重词典设置
  2. 在大小写不敏感情况下,如果存在精确匹配,则返回精确匹配的条目

通过了所有test测试,debug也不报错,example还没有实验。

我在使用该库过程中,之前无法匹配大小写不一致的css、js等,该 PR 可以解决我遇到的问题。

参见 #41 的讨论。

其它实现相关:

  1. compareFn this 移除,作为 _reduceWordKeyBlock 和 _binarySearh 的入参。因为 KeyCaseSensitive 为 No 时,先用大小写敏感的 compareFn,查不到再用大小写不敏感的 compareFn
  2. _stripKey 根据 Stripkey 提供 _s 函数,compareFn 根据 KeyCaseSensitive 设置,两者互相独立,因此删去 _stripKey 中的 KeyCaseSensitive 相关的部分。
  3. 修改过程中,为复用共同逻辑,进行了轻微重构。
songxiaocheng commented 3 years ago

提交有点乱了,我整理下

terasum commented 3 years ago

我觉得这个代码还是有两个地方还需要明确一下:

  1. 是否需要 在大小写不敏感情况下,如果存在精确匹配,则返回精确匹配的条目,否则返回不精确匹配? 也就是说 查大写是否要返回小写
  2. css/js 今天我在测试的时候发现的一个问题是解析 keyText 的时候用的 UTF8 解码器可能导致检索不到,现在master分支应该是可以检索的到的

另外 example 可以 用 yarn run example 跑一下的

songxiaocheng commented 3 years ago

我觉得这个代码还是有两个地方还需要明确一下:

  1. 是否需要 在大小写不敏感情况下,如果存在精确匹配,则返回精确匹配的条目,否则返回不精确匹配? 也就是说 查大写是否要返回小写
  2. css/js 今天我在测试的时候发现的一个问题是解析 keyText 的时候用的 UTF8 解码器可能导致检索不到,现在master分支应该是可以检索的到的

另外 example 可以 用 yarn run example 跑一下的

  1. 至少MDD文件是非常需要,对于MDX文件来说,也没什么坏处。
  2. 之前的代码给MDD设置了utf-16的解码器,但是后来的代码给覆盖了,实际上还是用了utf-8,应该用utf-16,这个我也改过来了。

我整理完提交试试example。

songxiaocheng commented 3 years ago

@terasum 已更新,目前可以跑通所有 test 和 jest,debug 和 example 均不报错。

该PR包含了 PR #34 和 PR #38 的内容。