Referência de criação do ExpandaEVE
O ExpandaEVE é a forma legível da linguagem EVE. É o que se escreve num ficheiro de filtro .eve. Cada construção aqui é traduzida para CompactaEVE e depois compilada. Esta página documenta cada construção com exemplos reais retirados dos ficheiros de filtro fornecidos.
Para as diretivas ao nível do documento (DEFINE, LET, REALM, as instruções de regra) consulte A linguagem EVE. Esta página é sobre o corpo de uma regra difusa: o próprio padrão.
A forma do corpo de uma regra
O corpo de uma regra difusa tem sempre uma raiz e pode adicionar qualquer número de construções à sua volta. A raiz é a palavra radical sobre a qual a regra é construída. Tudo o resto a refina: sufixos, tratamento de plural, exclusões, contexto, e assim por diante.
HEAR rule
AS
fuck(WHOLE)
suffix(NONE OR er OR ers OR ing OR ed OR s)
FLAG(pf YES)Aqui fuck(WHOLE) é a raiz, suffix(...) adiciona terminações permitidas, e FLAG(pf YES) marca a categoria. As construções podem aparecer em qualquer ordem que se leia naturalmente; o tradutor reconhece cada uma por palavra-chave.
A raiz e os seus marcadores de fronteira
A raiz é a âncora de uma regra. Exatamente um marcador de raiz define quão estritamente a correspondência é delimitada na raiz:
| Marcador | Significado |
|---|---|
(WHOLE) |
A raiz tem de corresponder como palavra inteira. O candidato começa com o radical da raiz e todo o percurso corre até uma fronteira de palavra. Escreve-se [^^] no CompactaEVE. |
(ROOT) |
A raiz é um radical sobre o qual sufixos e grupos se constroem. Não precisa de ser uma palavra inteira por si só. Escreve-se [*^] no CompactaEVE. |
Utilize (WHOLE) quando a palavra nua é ela própria a ofensa:
spic(WHOLE)
PLURALUtilize (ROOT) quando vai anexar terminações ou grupos finais:
ni(ROOT)
suffix(g OR ga OR gga OR gger OR gl LETTER t)
PLURALCada regra difusa precisa de um marcador de raiz
Um corpo de regra sem marcador (WHOLE) ou (ROOT) não pode compilar. O marcador é o que separa o radical da raiz do resto do padrão.
A correspondência difusa é automática
Uma raiz difusa não é um teste de string literal. O correspondente já tolera a evasão comum: as vogais são intercambiáveis através do conjunto de vogais, as letras podem ser esticadas, e as lacunas (consulte GAP) deixam passar caracteres inseridos onde as permite. Não ativa isto; é assim que as regras difusas correspondem. Para apanhar um leque mais amplo de erros ortográficos deliberados, adicione aliases e esqueletos.
suffix: terminações permitidas
suffix(...) lista as terminações que a palavra pode assumir após a raiz. Os braços são separados por OR. Só é necessário um grupo de sufixos, mas pode empilhar vários; cada um adiciona um segmento opcional por ordem.
bitch(WHOLE)
suffix(NONE OR es OR ed OR ing OR y OR ier OR iest OR fest OR fests)NONE significa que a terminação é opcional: a palavra pode terminar logo na raiz. Sem um braço NONE, o sufixo é obrigatório.
Os grupos de sufixos compõem-se da esquerda para a direita, por isso vários seguidos constroem uma cadeia de segmentos opcionais:
fa(ROOT)
suffix(g OR gg OR NONE)
suffix(ggot OR NONE)
suffix(ggie OR NONE)Um braço de sufixo pode ele próprio conter GAP ou LETTER (consulte GAP e LETTER):
suffix(g OR ga OR gga OR gger OR gl LETTER t) suffix(my GAP OR NONE)PLURAL
PLURAL adiciona um conjunto rico de terminações de plural e flexão numa só palavra. Expande-se para a classe incorporada s de terminações, por isso uma regra marcada PLURAL também apanha -s, -z, -es, -ing, -ed, -er, -y e os outros membros declarados na função s.
dyke(WHOLE)
PLURALPLURAL lê a classe chamada s. O filtro inglês fornecido declara-a como:
LET function(s) BE s OR z OR es OR ez OR ies OR iez OR y>ies OR y>iez OR ing OR ings OR ed OR er OR ers OR y OR ysUm braço escrito from>to é uma terminação de reescrita: corresponde a uma palavra que termina em to testando a raiz com a terminação from em vez disso. y>ies apanha uma palavra que termina em ies como se terminasse em y, que é como baby e babies são ambos alcançados a partir de uma raiz. Consulte Sufixos de reescrita para a mecânica.
NEVER: exclusões
NEVER(...) lista frases que não devem aparecer na linha circundante. Se alguma frase listada estiver presente, a regra não dispara, mesmo que o padrão corresponda de outra forma. É assim que uma raiz agressiva é impedida de apanhar palavras inocentes.
wop(WHOLE)
PLURAL
NEVER(doowop OR doo wop OR doowap OR doo wap OR dowap OR do wap OR do wop) gook(WHOLE)
PLURAL
NEVER(600k OR 900k OR 60ok OR 90ok OR 6ook OR 9ook OR 600ks OR 900ks)Uma verificação NEVER é um teste de subcadeia simples contra a linha inteira, em minúsculas. Se a frase estiver algures na mensagem, a regra é vetada.
ALIAS: grafias alternativas
ALIAS(...) adiciona uma grafia alternativa da raiz. Cada alias é uma variante de raiz separada que reutiliza o resto da regra (os seus sufixos, grupos, exclusões). Liste um alias por linha para cobrir erros ortográficos deliberados e trocas de letras.
ALIAS(phuck)
ALIAS(fuk)
ALIAS(fukk)
ALIAS(fucc)
ALIAS(fck)
ALIAS(fk)
fuck(WHOLE)
suffix(NONE OR er OR ers OR ing OR ed OR s)Cada alias aqui corresponde com o mesmo conjunto de sufixos que fuck. Um alias pode carregar o seu próprio marcador (WHOLE) ou (ROOT); sem um, herda a fronteira da raiz.
Um alias pode referenciar uma função, caso em que cada membro dessa função se torna um alias:
ALIAS(function(selfharmverb))
kill(ROOT)Um alias também pode ser uma palavra segmentada ou um fragmento de várias partes; é normalizado da mesma forma que a raiz é.
ALSO: fragmentos aditivos
ALSO(...) adiciona um fragmento que pode aparecer algures após a raiz em vez de em ordem fixa. É utilizado quando uma palavra extra necessária pode flutuar em relação ao radical.
kill(ROOT)
GAP
suffix(yo OR ur OR your OR yor)
suffix(self)
ALSO(wrists OR wrist OR throat)ALSO reduz-se a um grupo flutuante que se anexa em qualquer posição alcançável após a raiz e os grupos normais. Consulte Grupos plus para saber como um grupo flutuante é correspondido.
GAP e LETTER
Estas abreviaturas controlam o que pode ficar entre partes de um padrão.
| Construção | Significado | CompactaEVE |
|---|---|---|
GAP |
Uma sequência opcional de quaisquer caracteres (letras ou não letras), por isso espaços inseridos, pontuação ou enchimento são tolerados. | (#*) |
LETTERS |
Uma sequência opcional apenas de letras. | ($^) |
LETTER |
Exatamente um carácter de material de palavra. | @ |
GAP entre uma raiz e um sufixo deixa uma frase espalhar-se por várias palavras:
moon(ROOT)
GAP
suffix(cricket)
PLURALIsto apanha moon cricket, mooncricket e grafias com enchimento entre as duas partes. LETTER corresponde a um único carácter, útil dentro de um braço de sufixo para permitir uma posição curinga:
suffix(m LETTER GAP OR NONE)LETTERS corresponde a uma sequência apenas de letras, por isso para num espaço:
my(ROOT)
GAP
LETTERS
GAP
suffix(hit)O que conta como letra
Material de palavra é uma letra ASCII ou qualquer byte de um glifo não ASCII, por isso uma sequência de emoji ou símbolo também conta como material de palavra para fronteiras e para o curinga LETTER. O texto ASCII simples não é afetado.
OR e NONE
OR separa alternativas dentro de uma construção como suffix(...), NEVER(...), ALSO(...), BEFORE(...) e AFTER(...), e separa membros de classe numa declaração LET. Tem de ficar como palavra inteira.
NONE é uma alternativa vazia. Num sufixo torna a terminação opcional; numa lista de membros de função deixa a classe contribuir com uma correspondência vazia:
LET function(quantifier) BE NONE OR some OR any OR a OR an OR theBEFORE e AFTER: condicionamento por contexto
Estas condicionam uma regra por texto noutro sítio da linha. São utilizadas para fazer com que um termo de outra forma amplo ou ambíguo dispare apenas num contexto revelador.
| Construção | Significado | CompactaEVE |
|---|---|---|
BEFORE(...) |
Uma verificação prévia. A regra só ativa quando uma das frases listadas aparece na linha circundante. | {pre:...} |
AFTER(...) |
Uma condição posterior. Terminações permitidas que deixam a regra disparar na própria palavra mesmo sem uma frase de verificação prévia presente. | {post:...} |
BEFORE(function(seeking))
cp
AFTER(mega OR pack OR packs OR nz OR db OR dropbox OR folder OR vids OR pics)
(WHOLE)Uma frase BEFORE é uma verificação de subcadeia simples contra a linha inteira, em minúsculas. Quando uma regra tem um condicionamento BEFORE, permanece inerte a menos que uma das frases esteja presente, ou a menos que a palavra satisfaça a condição posterior AFTER por conta própria. AFTER aceita um s plural final nas suas terminações. Consulte Condicionamento para a regra exata.
SWAP: conjunto de substituição inline
SWAP(...) corresponde a qualquer um de vários pequenos fragmentos numa posição, com controlo sobre as fronteiras de palavra. É utilizado onde uma peça curta intercambiável fica dentro de uma frase.
kill(ROOT)
GAP
SWAP(my* OR me*)
suffix(self)Cada braço pode carregar asteriscos que libertam uma fronteira:
- Um
*inicial liberta o início (o braço não precisa de começar numa fronteira de palavra). - Um
*final liberta o fim. - Sem asterisco, ou um duplo
**inicial, ancora ambos os lados a uma fronteira de palavra.
Assim my* corresponde a my com uma fronteira necessária antes mas não necessariamente depois, deixando-o correr para self. Consulte Swaps para as regras de fronteira na íntegra.
SKELETON: grafias exatas
SKELETON(...) lista formas de palavra exatas que a regra também corresponde diretamente, contornando o correspondente difuso. É utilizado para fixar grafias ofuscadas específicas usando listas de escolha inline.
ni(ROOT)
suffix(g OR ga OR gga OR gger OR gl LETTER t)
PLURAL
NEVER(snigger OR sniggers OR sniggered)
SKELETON(n[a,e,i,o,u]gg[a,e,i,o,u]r OR n[a,e,i,o,u]gg[a,e,i,o,u]h)Um esqueleto é expandido no conjunto completo de palavras concretas que pode soletrar, e qualquer candidato igual a uma dessas palavras corresponde imediatamente. A expansão toma o produto cruzado de cada escolha, por isso n[a,e,i,o,u]gg[a,e,i,o,u]r produz naggar, neggar, niggar, e assim por diante para cada par de vogais.
Listas de escolha inline
Dentro de um esqueleto, [a,e,i,o,u] é uma lista de escolha inline: uma posição de carácter que pode ser qualquer um dos membros separados por vírgula. Os membros podem ter mais de um carácter. Os espaços em branco à volta de um membro são retirados. Um esqueleto também pode referenciar uma função com &name, que se expande para os membros dessa função.
SKELETON(r[e,i]t[a,e,i]rd) SKELETON(m[a,e,i,o,u]st[a,e,i,o,u]rb[a,e,i,o,u]t OR m[a,e,i,o,u]st[a,e,i,o,u]rb[a,e,i,o,u]t[a,e,i,o,u])O resultado é em minúsculas. Os esqueletos correspondem à grafia exata, por isso são complementares à raiz difusa, que trata das variantes mais soltas.
FUNCTION: classes nomeadas
Uma função é uma classe nomeada declarada com LET (consulte A linguagem EVE). É referenciada com function(name), e a referência expande-se para os membros da classe. As funções têm vários papéis dependendo de onde aparecem.
Como um grupo inteiro de alternativas num corpo de regra:
groom(ROOT)
suffix(NONE OR ing OR ed)
GAP
MAYBE function(declarative)
GAP
function(vulnerable)Como um alias, onde cada membro se torna uma raiz alternativa:
ALIAS(function(genderword))
internal
GAP
condom(WHOLE)Dentro de uma lista suffix, NEVER, ALSO, BEFORE ou AFTER, onde os membros se juntam às alternativas:
suffix(function(article) OR box of OR a box of OR internal OR function(genderword) OR NONE)Modificadores de função
Uma referência function(...) pode carregar modificadores, unidos com +:
| Modificador | Efeito | CompactaEVE |
|---|---|---|
ADDITIVE |
A referência é uma adição flutuante à correspondência em vez de um requisito de ordem fixa. | envolve como grupo plus [+[...]] |
GAP |
A referência corresponde de forma solta, permitindo uma lacuna depois dela. | acrescenta (#*) |
function(subject + ADDITIVE + GAP)
function(desire + ADDITIVE + GAP)
function(quantifier + ADDITIVE + GAP)
rap(ROOT)
suffix(e OR ist OR ed OR ing OR eable OR able)
PLURALCada função aditiva aqui flutua para dentro da correspondência onde quer que caiba, por isso as palavras de sujeito, desejo e quantificador podem aparecer em ordem variável antes da raiz.
MAYBE FUNCTION: função opcional
MAYBE FUNCTION(name) torna uma referência de função opcional: a correspondência tem êxito quer um dos seus membros esteja presente ou não.
rap(ROOT)
suffix(NONE OR e OR es OR ed OR ing OR eing OR in OR ist OR ists)
GAP
MAYBE function(declarative)
GAP
function(vulnerable)Aqui function(declarative) (palavras como a, the, my) pode ou não aparecer entre o verbo e a palavra de pessoa vulnerável.
FLAG: regras condicionais e etiquetagem de categoria
FLAG(name YES) marca a regra com uma flag declarada. Quando a regra dispara, essa flag é definida, que é como o filtro reporta uma categoria como automutilação ou abuso em vez de um bloqueio comum.
kms(WHOLE)
FLAG(sh YES)O valor pode ser escrito YES, Y ou TRUE para ligado, e qualquer outra coisa para desligado. O nome da flag tem de ser declarado com DEFINE (consulte A linguagem EVE), ou o documento não carrega. Nos bastidores uma flag envolve o padrão num condicionamento condicional; consulte Invólucros de flag.
NOTE: comentários
NOTE(...) anexa um comentário inline. É removido antes da compilação e não afeta a correspondência, por isso é uma forma de anotar um padrão no lugar. Os comentários de linha inteira continuam a utilizar um # inicial.
ALIAS com marcadores WHOLE ou ROOT
Um alias pode terminar em (WHOLE) ou (ROOT) para definir a sua própria fronteira, independente da raiz:
ALIAS(dike)
dyke(WHOLE)Sem um marcador final o alias herda o marcador de fronteira da raiz.
Raízes segmentadas
Uma raiz pode ser escrita como várias peças entre parênteses e nuas para marcar parte dela como flexionável. Quando estão presentes pelo menos duas peças e pelo menos uma está entre parênteses, dobram-se numa única raiz com pontos de entrada alternativos.
re[tard] (WHOLE)
suffix(NONE OR d OR ded OR ted OR t OR der OR ders OR ing OR ed OR s)A peça entre parênteses marca o segmento flexionável. Consulte Raízes segmentadas para saber exatamente que alternativas são geradas.
Juntando tudo
Uma regra realista combina várias construções:
HEAR rule
AS
ALIAS(masterb)
masturb(ROOT)
suffix(ate OR ating OR ation OR ated OR ates OR at)
SKELETON(m[a,e,i,o,u]st[a,e,i,o,u]rb[a,e,i,o,u]t OR m[a,e,i,o,u]st[a,e,i,o,u]rb[a,e,i,o,u]t[a,e,i,o,u])Esta regra tem um alias para um erro ortográfico comum, uma raiz com um conjunto de sufixos fixo e esqueletos para as grafias em leetspeak que o correspondente difuso poderia falhar. Leia CompactaEVE para ver como cada uma destas se reduz e corresponde.