Closed maple3142 closed 5 years ago
這邊有一個關鍵的問題點, 如果一個包含 include 和 exclude 條件的結果,到底要顯示還是隱藏
除了空白是 seperator 之外都是合法字元的樣子
同時 include 和 exclude 就丟 error 出來吧
怎麼丟,這絕對會很常發生阿!
而且丟錯誤出來之後是顯示還是不顯示才是最終的使用者體驗,一般人才不在意 console.error
到底發生什麼事
例如:!(fate) && ジャンヌ
我要找的不是 fate 的貞德
卻偏偏有個 tag 是 ジャンヌ・ダルク(Fate)
如果更多條件就會更複雜,例如 <找> && <不找> && <找>
是要依序過濾或是先找 <找> 再剔除 <不找> 等等
若再加上 ||
會更複雜
而且這些符號本身也是問題,因為 pixiv 只有空白是作為 seperator 的非法字元,其他皆是 合法 字元
自定義表達式 !
&&
||
()
有可能造成解析錯誤,這也是為什麼最後我只選擇 regex 實作
我是覺得 tag 應該要改為嚴格比對,而不是用 regex 來 match
像是 abc
不會 match 到 abc・def
,這樣的話就沒有這種問題了
可是這樣我覺得會比現在的難用,像我本命的 tag 就會變成 フランドール・スカーレット
但我現在是打 フラン
就好了
tag
-> tagstr.includes('tag')
!tag
-> !tagstr.includes('tag')
tag1 && !tag2
-> tagstr.includes('tag1')&&!tagstr.includes('tag2')
所以 !(fate) && ジャンヌ
在 match ジャンヌ・ダルク(Fate)
的時候是不包含的
而符號可以用像是 "ジャンヌ・ダルク(Fate)"
來處理,不過不曉得這對一個 user.js 是不是有點複雜
主要是不確定有沒有 tag 是包含 "
/!
(合法字元) 的,有的話還是會有問題
被收進 pixiv 百科的直接 out 了
!!!カオスタイム!!! ~で愛してあげようか ! [[](https://dic.pixiv.net/search?query=[) \^ * \& \: \; (
根據以上符號比較可行的作法是:
空白:seperator 表 "且"
{}:scope 符號,功能同數學的 ()
空白||空白:seperator 表 "或"
prefix +
(可省略):顯示部份搜尋
prefix ++
:顯示準確搜尋
prefix -
:隱藏部份搜尋
prefix --
:隱藏準確搜尋
(A && B) || (!C && !D)
=> {A B} || {-C -D}
!(fate) && ジャンヌ
=> ジャンヌ -fate
我寫好部份了,在 4.2.x/src/lib/tagFilterQuerier.js
測試在 4.2.x/test/tagFilterQueryTestCases.js
目前為了效能,我 tag 都先 cancat 起來了,所以比較難實現 ++
跟 --
(不管是 split('\x00')
或是 match
, 都不太合適。前者是要對極大量的 tag 大量重配記憶體 immutable String → mutable Array;後者是合法字元裡要處理 RegExp 保留字),目前有什麼值得測試的就 pr 到 4.2.x
或直接留言吧
然後我 wiki 開了所有權限,到時可能還要寫個 tag filter 教學 Orz
你自己裝上去的嘛?我沒有在 4.1.x 裝上去喔ww 甚至我 4.2.x 也還在測試階段而已還沒放進去 也就是目前不管哪個版本都還是 RegExp
原來是還沒測試==
不過我覺得 test 可以加入一些特殊字元的 rule 進去測試
例如: -R-18
aaa&bbb
之類的...
嗯嗯 目前也有個限制,{}
不能疊到第二層ww
{A && B} || {C}
-- OK
{{A && B} || C}
-- G_G
目前的實做的 README https://github.com/FlandreDaisuki/Patchouli/wiki/Tag-Filter-Query-Usage
建立在使用者不會下太複雜的 tag filter 的假設下,這樣應該很夠用了
有 operator 的測試加進去了
v4.2.0-alpha.12 Add tagFilterQuerier 剛剛試了下 效果還算不錯 😀
Is your feature request related to a problem? Please describe.
26 談到說可以用
R-18
之類的來指定要顯示 R18 作品,但目前還沒有方法類似!R-18
之類的來排除特定 tagDescribe the solution you'd like
!tag
或是~tag
或其他的方法來排除 tagDescribe alternatives you've considered
把 tag filter 弄成可以吃一些 expression 之類的,例如
tag1 && !tag2 && (tag3 || tag4)
,功能更強大也更複雜Additional context
不曉得有哪些字元是 pixiv tag 的合法字元