Brazen Framework - Tag Query Engine

Tokenize, merge, and subtract space-separated booru tag queries

Este script não deve ser instalado diretamente. Este script é uma biblioteca de outros scripts para incluir com o diretório meta // @require https://update.greasyfork.org/scripts/583965/1857992/Brazen%20Framework%20-%20Tag%20Query%20Engine.js

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Advertisement:

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

Advertisement:

Autor
brazenvoid
Versão
1.0.0
Criado
22/06/2026
Atualizado
22/06/2026
Tamanho
3,12 KB
Licença
GPL-3.0-only

Brazen Framework — Tag Query Engine (developer guide)

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.


When to use

Idiom Example This module
Single param / path carries full query ?tags=catgirl -gore sort:score:desc Yestokenize / 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.


Class: BrazenTagQueryEngine

Constructor: 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 \

Static: 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 (.

Instance methods

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'

Design notes

  • OR-groups( a ~ b ) is one token; never split on spaces inside balanced parentheses.
  • Single-instance keyswidth and height are typically single-instance per dimension: one user width:>=1000 suppresses default width tokens only, not height defaults.
  • Subtract edge — exact-token match; a user tag identical to a default token is subtracted from display (accepted minor edge).

Adapters supply singleInstanceKeys for each site family (Gelbooru, Shimmie, etc.).


Grants and load order

This module declares no Tampermonkey grants.

@run-at document-end

Next in stack (typical): Gelbooru Family Search Adapter (optional) → Framework core