Tokenize, merge, and subtract space-separated booru tag queries
Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta
// @require https://update.greasyfork.org/scripts/583965/1857992/Brazen%20Framework%20-%20Tag%20Query%20Engine.js
Optional. Core algorithms for sites where the whole search query is one space-separated string (Gelbooru-style tags=, Shimmie path segments, etc.): tokenize with parenthesis-aware OR-groups, merge default filters idempotently, subtract defaults for display.
Greasy Fork: 583965 · Requires: Utilities · @require after Item Attributes Resolver, before site adapters and Framework core.
Site-specific URL shapes, empty-query sentinels, and atom normalization live in adapters (e.g. Gelbooru Family Search Adapter), not in this module.
| Idiom | Example | This module |
|---|---|---|
| Single param / path carries full query | ?tags=catgirl -gore sort:score:desc |
Yes — tokenize / merge / subtract |
| Distinct form params per filter | e-hentai f_srdd, f_spf |
No — use framework togglable-operation helpers only |
Pair with a search adapter that implements read/write/serialize for your site's wire format. See the workspace search-augmentation and search-defaults-injection pattern specs.
BrazenTagQueryEngineConstructor: new BrazenTagQueryEngine(options?)
| Option | Default | Role |
|---|---|---|
singleInstanceKeys |
new Set() |
Metatag keys that accept at most one token per query; defaults with the same key are skipped when the user already set that key |
metatagKey |
BrazenTagQueryEngine.defaultMetatagKey |
`(token) => string \ |
defaultMetatagKey(token)Returns the substring before the first : for metatag tokens; ignores a leading -. Returns null when the token is a plain tag or starts with (.
| Method | Returns | Description |
|---|---|---|
tokenize(query) |
string[] |
Split on whitespace; keep ( … ) groups as single tokens (paren-depth tracking) |
metatagKey(token) |
`string \ | null` |
merge(userQuery, defaultTokens) |
string[] |
Append defaults after user tokens; skip single-instance key conflicts and exact duplicates. Idempotent — re-merging an already merged query yields the same token list (redirect loop guard) |
subtract(tokens, defaultTokens) |
string[] |
Remove tokens present in defaultTokens (exact match) — for showing user-only tags in the search input |
const engine = new BrazenTagQueryEngine({
singleInstanceKeys: new Set(['sort', 'rating', 'width', 'height']),
})
let user = engine.tokenize('catgirl -gore')
let defaults = ['sort:score:desc', 'rating:explicit']
let merged = engine.merge(user.join(' '), defaults) // ['catgirl', '-gore', 'sort:score:desc', 'rating:explicit']
let display = engine.subtract(merged, defaults).join(' ') // 'catgirl -gore'
( a ~ b ) is one token; never split on spaces inside balanced parentheses.width and height are typically single-instance per dimension: one user width:>=1000 suppresses default width tokens only, not height defaults.Adapters supply singleInstanceKeys for each site family (Gelbooru, Shimmie, etc.).
This module declares no Tampermonkey grants.
@run-at document-end
Next in stack (typical): Gelbooru Family Search Adapter (optional) → Framework core