Référence de rédaction ExpandaEVE

ExpandaEVE est la forme lisible du langage EVE. C’est ce que vous écrivez dans un fichier de filtre .eve. Chaque construction ici est traduite en CompactaEVE puis compilée. Cette page documente chaque construction avec de vrais exemples tirés des fichiers de filtre livrés.

Pour les directives de niveau document (DEFINE, LET, REALM, les énoncés de règle), voir Le langage EVE. Cette page concerne le corps d’une règle floue : le motif lui-même.

La forme d’un corps de règle

Un corps de règle floue a toujours une racine et peut ajouter un nombre quelconque de constructions autour d’elle. La racine est le mot radical sur lequel la règle est bâtie. Tout le reste l’affine : suffixes, gestion du pluriel, exclusions, contexte, et ainsi de suite.

HEAR rule
AS
  fuck(WHOLE)
  suffix(NONE OR er OR ers OR ing OR ed OR s)
  FLAG(pf YES)

Ici fuck(WHOLE) est la racine, suffix(...) ajoute les terminaisons autorisées, et FLAG(pf YES) étiquette la catégorie. Les constructions peuvent apparaître dans n’importe quel ordre qui se lit naturellement ; le traducteur reconnaît chacune par son mot-clé.

La racine et ses marqueurs de frontière

La racine est l’ancre d’une règle. Un seul marqueur de racine fixe la rigueur avec laquelle la correspondance est délimitée à la racine :

Marqueur Signification
(WHOLE) La racine doit correspondre comme un mot entier. Le candidat commence par le radical de la racine et le parcours entier court jusqu’à une frontière de mot. Écrit [^^] en CompactaEVE.
(ROOT) La racine est un radical sur lequel les suffixes et les groupes s’appuient. Elle n’a pas à être un mot entier à elle seule. Écrit [*^] en CompactaEVE.

Utilisez (WHOLE) lorsque le mot nu est lui-même l’infraction :

  spic(WHOLE)
  PLURAL

Utilisez (ROOT) lorsque vous attacherez des terminaisons ou des groupes de fin :

  ni(ROOT)
  suffix(g OR ga OR gga OR gger OR gl LETTER t)
  PLURAL

Chaque règle floue a besoin d’un marqueur de racine

Un corps de règle sans marqueur (WHOLE) ou (ROOT) ne peut pas se compiler. Le marqueur est ce qui sépare le radical de la racine du reste du motif.

La correspondance floue est automatique

Une racine floue n’est pas un test de chaîne littérale. Le matcheur tolère déjà l’évitement courant : les voyelles sont interchangeables via l’ensemble de voyelles, les lettres peuvent être étirées, et les gaps (voir GAP) laissent passer les caractères insérés là où vous l’autorisez. Vous n’activez pas cela ; c’est ainsi que les règles floues correspondent. Pour attraper un plus large éventail de fautes d’orthographe délibérées, ajoutez des alias et des squelettes.

suffix : terminaisons autorisées

suffix(...) liste les terminaisons que le mot peut prendre après la racine. Les branches sont séparées par OR. Un seul groupe de suffixe est nécessaire, mais vous pouvez en empiler plusieurs ; chacun ajoute un segment facultatif dans l’ordre.

  bitch(WHOLE)
  suffix(NONE OR es OR ed OR ing OR y OR ier OR iest OR fest OR fests)

NONE signifie que la terminaison est facultative : le mot peut se terminer juste à la racine. Sans branche NONE, le suffixe est requis.

Les groupes de suffixe se composent de gauche à droite, de sorte que plusieurs à la suite construisent une chaîne de segments facultatifs :

  fa(ROOT)
  suffix(g OR gg OR NONE)
  suffix(ggot OR NONE)
  suffix(ggie OR NONE)

Une branche de suffixe peut elle-même contenir GAP ou LETTER (voir GAP et LETTER) :

  suffix(g OR ga OR gga OR gger OR gl LETTER t)
  suffix(my GAP OR NONE)

PLURAL

PLURAL ajoute un riche ensemble de terminaisons de pluriel et de flexion en un seul mot. Il s’étend en la classe s intégrée de terminaisons, de sorte qu’une règle étiquetée PLURAL attrape aussi -s, -z, -es, -ing, -ed, -er, -y, et les autres membres déclarés dans la fonction s.

  dyke(WHOLE)
  PLURAL

PLURAL lit la classe nommée s. Le filtre anglais livré la déclare ainsi :

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 ys

Une branche écrite from>to est une terminaison de réécriture : elle correspond à un mot se terminant par to en testant la racine avec la terminaison from à la place. y>ies attrape un mot se terminant par ies comme s’il se terminait par y, ce qui permet d’atteindre baby et babies depuis une seule racine. Voir Suffixes de réécriture pour les mécanismes.

NEVER : exclusions

NEVER(...) liste les phrases qui ne doivent pas apparaître dans la ligne environnante. Si une phrase listée est présente, la règle ne se déclenche pas, même si le motif correspond autrement. C’est ainsi qu’une racine agressive est empêchée d’attraper des mots innocents.

  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)

Une vérification NEVER est un test de sous-chaîne simple contre la ligne entière, en minuscules. Si la phrase est où que ce soit dans le message, la règle fait l’objet d’un veto.

ALIAS : orthographes alternatives

ALIAS(...) ajoute une orthographe alternative de la racine. Chaque alias est une variante de racine distincte qui réutilise le reste de la règle (ses suffixes, groupes, exclusions). Listez un alias par ligne pour couvrir les fautes d’orthographe délibérées et les échanges de lettres.

  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)

Chaque alias ici correspond avec le même ensemble de suffixes que fuck. Un alias peut porter son propre marqueur (WHOLE) ou (ROOT) ; sans, il hérite de la frontière de la racine.

Un alias peut référencer une fonction, auquel cas chaque membre de cette fonction devient un alias :

  ALIAS(function(selfharmverb))
  kill(ROOT)

Un alias peut aussi être un mot segmenté ou un fragment multi-parties ; il est normalisé de la même manière que la racine.

ALSO : fragments additifs

ALSO(...) ajoute un fragment qui peut apparaître n’importe où après la racine plutôt que dans un ordre fixe. Il est utilisé lorsqu’un mot supplémentaire requis peut flotter par rapport au radical.

  kill(ROOT)
  GAP
  suffix(yo OR ur OR your OR yor)
  suffix(self)
  ALSO(wrists OR wrist OR throat)

ALSO s’abaisse en un groupe flottant qui s’attache à toute position atteignable après la racine et les groupes normaux. Voir Groupes plus pour la manière dont un groupe flottant est apparié.

GAP et LETTER

Ces raccourcis contrôlent ce qui peut se placer entre les parties d’un motif.

Construction Signification CompactaEVE
GAP Une suite facultative de caractères quelconques (lettres ou non-lettres), de sorte que les espaces, la ponctuation ou le remplissage insérés sont tolérés. (#*)
LETTERS Une suite facultative de lettres uniquement. ($^)
LETTER Exactement un caractère de matière de mot. @

GAP entre une racine et un suffixe permet à une phrase de s’étaler sur plusieurs mots :

  moon(ROOT)
  GAP
  suffix(cricket)
  PLURAL

Ceci attrape moon cricket, mooncricket, et les orthographes avec du remplissage entre les deux parties. LETTER correspond à un caractère unique, utile à l’intérieur d’une branche de suffixe pour autoriser une position joker :

  suffix(m LETTER GAP OR NONE)

LETTERS correspond à une suite de lettres uniquement, il s’arrête donc à un espace :

  my(ROOT)
  GAP
  LETTERS
  GAP
  suffix(hit)

Ce qui compte comme lettre

La matière de mot est une lettre ASCII ou tout octet d’un glyphe non ASCII, de sorte qu’une suite d’emojis ou de symboles compte aussi comme matière de mot pour les frontières et le joker LETTER. Le texte ASCII brut n’est pas affecté.

OR et NONE

OR sépare les alternatives à l’intérieur d’une construction telle que suffix(...), NEVER(...), ALSO(...), BEFORE(...) et AFTER(...), et il sépare les membres de classe dans une déclaration LET. Il doit se tenir comme un mot entier.

NONE est une alternative vide. Dans un suffixe, il rend la terminaison facultative ; dans une liste de membres de fonction, il permet à la classe de contribuer une correspondance vide :

LET function(quantifier) BE NONE OR some OR any OR a OR an OR the

BEFORE et AFTER : conditionnement contextuel

Ceux-ci conditionnent une règle sur du texte ailleurs dans la ligne. Ils sont utilisés pour faire qu’un terme autrement large ou ambigu ne se déclenche que dans un contexte révélateur.

Construction Signification CompactaEVE
BEFORE(...) Un contrôle en amont. La règle ne s’active que lorsqu’une des phrases listées apparaît dans la ligne environnante. {pre:...}
AFTER(...) Une condition en aval. Des terminaisons autorisées qui permettent à la règle de se déclencher sur le mot lui-même même sans phrase de contrôle en amont présente. {post:...}
  BEFORE(function(seeking))
  cp
  AFTER(mega OR pack OR packs OR nz OR db OR dropbox OR folder OR vids OR pics)
  (WHOLE)

Une phrase BEFORE est une vérification de sous-chaîne simple contre la ligne entière, en minuscules. Lorsqu’une règle a un contrôle en amont BEFORE, elle reste inerte à moins que l’une des phrases ne soit présente, ou que le mot ne satisfasse à lui seul la condition en aval AFTER. AFTER accepte un s pluriel de fin sur ses terminaisons. Voir Conditionnement pour la règle exacte.

SWAP : ensemble de substitution en ligne

SWAP(...) correspond à un fragment parmi plusieurs petits à une position, avec un contrôle des frontières de mot. Il est utilisé là où un court morceau interchangeable se trouve à l’intérieur d’une phrase.

  kill(ROOT)
  GAP
  SWAP(my* OR me*)
  suffix(self)

Chaque branche peut porter des astérisques qui libèrent une frontière :

  • Un * de tête libère le début (la branche n’a pas à commencer à une frontière de mot).
  • Un * de fin libère la fin.
  • Aucun astérisque, ou un double ** de tête, ancre les deux côtés à une frontière de mot.

Ainsi my* correspond à my avec une frontière requise avant lui mais pas nécessairement après, lui permettant de courir jusque dans self. Voir Swaps pour les règles de frontière en entier.

SKELETON : orthographes exactes

SKELETON(...) liste les formes de mots exactes que la règle apparie aussi directement, contournant le matcheur flou. Il est utilisé pour verrouiller des orthographes obfusquées spécifiques à l’aide de listes de choix en ligne.

  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)

Un squelette est étendu en l’ensemble complet de mots concrets qu’il peut épeler, et tout candidat égal à l’un de ces mots correspond immédiatement. L’expansion prend le produit croisé de chaque choix, de sorte que n[a,e,i,o,u]gg[a,e,i,o,u]r produit naggar, neggar, niggar, et ainsi de suite pour chaque paire de voyelles.

Listes de choix en ligne

À l’intérieur d’un squelette, [a,e,i,o,u] est une liste de choix en ligne : une position de caractère qui peut être l’un des membres séparés par une virgule. Les membres peuvent comporter plus d’un caractère. Les espaces autour d’un membre sont supprimés. Un squelette peut aussi référencer une fonction avec &name, qui s’étend en les membres de cette fonction.

  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])

Le résultat est en minuscules. Les squelettes correspondent à l’orthographe exacte, ils sont donc complémentaires à la racine floue, qui gère les variantes plus lâches.

FUNCTION : classes nommées

Une fonction est une classe nommée déclarée avec LET (voir Le langage EVE). Elle est référencée avec function(name), et la référence s’étend en les membres de la classe. Les fonctions ont plusieurs rôles selon l’endroit où elles apparaissent.

Comme groupe entier d’alternatives dans un corps de règle :

  groom(ROOT)
  suffix(NONE OR ing OR ed)
  GAP
  MAYBE function(declarative)
  GAP
  function(vulnerable)

Comme alias, où chaque membre devient une racine alternative :

  ALIAS(function(genderword))
  internal
  GAP
  condom(WHOLE)

À l’intérieur d’une liste suffix, NEVER, ALSO, BEFORE ou AFTER, où les membres rejoignent les alternatives :

  suffix(function(article) OR box of OR a box of OR internal OR function(genderword) OR NONE)

Modificateurs de fonction

Une référence function(...) peut porter des modificateurs, joints par + :

Modificateur Effet CompactaEVE
ADDITIVE La référence est un ajout flottant à la correspondance plutôt qu’une exigence d’ordre fixe. s’enveloppe en un groupe plus [+[...]]
GAP La référence correspond de manière lâche, autorisant un gap après elle. ajoute (#*)
  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)
  PLURAL

Chaque fonction additive ici flotte dans la correspondance là où elle s’ajuste, de sorte que les mots de sujet, de désir et de quantificateur peuvent apparaître dans un ordre variable avant la racine.

MAYBE FUNCTION : fonction facultative

MAYBE FUNCTION(name) rend une référence de fonction facultative : la correspondance réussit qu’un de ses membres soit présent ou non.

  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)

Ici function(declarative) (des mots comme a, the, my) peut apparaître ou non entre le verbe et le mot de personne vulnérable.

FLAG : règles conditionnelles et étiquetage de catégorie

FLAG(name YES) étiquette la règle avec un flag déclaré. Lorsque la règle se déclenche, ce flag est activé, ce qui est la manière dont le filtre rapporte une catégorie telle que l’automutilation ou l’abus plutôt qu’un blocage ordinaire.

  kms(WHOLE)
  FLAG(sh YES)

La valeur peut s’écrire YES, Y ou TRUE pour activé, et n’importe quoi d’autre pour désactivé. Le nom du flag doit être déclaré avec DEFINE (voir Le langage EVE), sinon le document échoue au chargement. En interne, un flag enveloppe le motif dans une porte conditionnelle ; voir Enveloppes de flag.

NOTE : commentaires

NOTE(...) attache un commentaire en ligne. Il est retiré avant la compilation et n’affecte pas la correspondance, c’est donc un moyen d’annoter un motif sur place. Les commentaires de ligne entière utilisent toujours un # de tête.

ALIAS avec marqueurs WHOLE ou ROOT

Un alias peut se terminer par (WHOLE) ou (ROOT) pour fixer sa propre frontière, indépendamment de celle de la racine :

  ALIAS(dike)
  dyke(WHOLE)

Sans marqueur de fin, l’alias hérite du marqueur de frontière de la racine.

Racines segmentées

Une racine peut être écrite comme plusieurs morceaux entre crochets et nus pour marquer une partie comme fléchissable. Lorsqu’au moins deux morceaux sont présents et qu’au moins un est entre crochets, ils se fondent en une seule racine avec des points d’entrée alternatifs.

  re[tard] (WHOLE)
  suffix(NONE OR d OR ded OR ted OR t OR der OR ders OR ing OR ed OR s)

Le morceau entre crochets marque le segment fléchissable. Voir Racines segmentées pour savoir exactement quelles alternatives sont générées.

En les assemblant

Une règle réaliste combine plusieurs constructions :

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])

Cette règle a un alias pour une faute d’orthographe courante, une racine avec un ensemble de suffixes fixe, et des squelettes pour les orthographes leetspeak que le matcheur flou pourrait manquer. Lisez CompactaEVE pour voir comment chacun de ces éléments s’abaisse et correspond.