plint

French poetry validator (local mirror of https://gitlab.com/a3nm/plint)
git clone https://a3nm.net/git/plint/
Log | Files | Refs | README

about.html (27597B)


      1 {% extends "page.html" %}
      2 
      3 {% block body %}
      4 {% if lang == 'fr' %}
      5 <p>Bienvenue sur <strong>plint</strong>!</p>
      6 <h2 id="info">De quoi s'agit-il au juste&nbsp;?</h2>
      7 <p>C'est une tentative d'<a href="https://a3nm.net">a3nm</a> pour lutter contre la
      8 poésie de mauvaise qualité (celle qui veut suivre des règles classiques sans y
      9 parvenir). Plint vérifie qu'un poème respecte des contraintes
     10 de métrique, de rime et de genre de rime. Il utilise <a
     11   href="https://a3nm.net/git/frhyme">frhyme</a> pour les rimes (qui utilise
     12 lui-même la base de données <a href="http://lexique.org">Lexique</a>), <a
     13   href="https://a3nm.net/git/haspirater">haspirater</a> pour la détection des
     14 'h' aspirés, et un système écrit à la main avec amour pour la métrique et le
     15 genre. Il est construit avec <a href="http://python.org">Python</a> et <a
     16   href="http://bottlepy.org">Bottle</a>. Vous pouvez récupérer le code sur le <a
     17   href="https://a3nm.net/git/plint">dépôt plint</a> pour le faire tourner
     18 localement.</p>
     19 <p>Publicité gratuite&nbsp;: si vous aimez plint, peut-être serez-vous
     20 intéressé par le dictionnaire de rimes <a
     21   href="https://drime.a3nm.net/">drime</a>.</p>
     22 
     23 <h2 id="help">Comment s'en servir&nbsp;?</h2>
     24 <p>Entrez votre poème dans la zone de texte et choisissez le modèle de poème. Si
     25 aucun des modèles ne vous convient, vous pouvez <a href="#template">écrire le
     26   vôtre</a>.</p>
     27 
     28 <h2 id="whatcheck">Qu'est-ce qui est vérifié par plint&nbsp;?</h2>
     29 <p>Les erreurs suivantes sont signalées par défaut. Des options de configuration
     30 dans le modèle permettent de rendre plint plus tolérant sur la plupart de ces
     31 erreurs&nbsp;: cela est documenté <a href="#template">plus bas</a>.</p>
     32 <dl>
     33   <dt id="whatcheck_syllable">Métrique</dt>
     34   <dd>Le nombre de syllabes par vers est habituellement fixé (12 pour les
     35   alexandrins, par exemple). Les syllabes sont comptées en scandant sans
     36   élision des <em>e</em> muets sauf quand un mot se termine par un <em>e</em>
     37   muet et le mot suivant commence par une voyelle ou un <em>h</em> non aspiré
     38   (ou si c'est le dernier mot du vers). Le nombre de syllabes n'est <em>pas</em>
     39   ce que vous obtenez en lisant le poème comme vous parlez tous les jours.
     40   Certains groupes de voyelles peuvent prendre deux syllabes soit
     41   systématiquement (par exemple "Léon") soit par une <em>diérèse</em> facultative
     42   ou obligatoire ("passion")&nbsp;; plint utilise une approximation permissive
     43   des diérèses effectivement autorisées déduite à partir d'un corpus de textes
     44   classiques.</dd>
     45   <dt id="whatcheck_hemistiche">Hémistiche</dt>
     46   <dd>Les alexandrins classiques sont divisés en deux <em>hémistiches</em> de
     47   6 syllabes. La césure ne doit pas couper un mot et le premier hémistiche ne
     48   doit pas se finir par un son faible (ie. une fin féminine non élidée).</dd>
     49   <dt id="whatcheck_rhyme">Rime</dt>
     50   <dd>La contrainte poétique la plus connue est que les vers doivent rimer. Les
     51   phonèmes communs dans une rime doivent inclure un son vocalique (par exemple
     52   "tâte" et "bête" ne riment pas parce que leur suffixe commun est [t] qui ne
     53   contient pas de son vocalique). Les rimes sont vérifiées par plint avec une
     54   approximation permissive de la prononciation de la fin des vers. Plint confond
     55   [ɛ] et [ɛː] ("mettre" et "maître") et [a] et [ɑ] ("patte" et "pâte") mais pas
     56   [ɛ̃] et [œ̃] ("brin" et "brun") ou [ɔ] et [o] ("cotte" et "côte"). Quand toutes
     57   les règles classiques sont suivies, certaines rimes comme la rime normande ou
     58   la rime avec liaison supposée sont acceptées.</dd>
     59   <dt id="whatcheck_eye">Rime pour l'œil</dt>
     60   <dd>En poésie classique, un degré minimal de rime "pour l'œil" est exigé
     61   (ainsi "-é" et "-er" ne riment pas), avec une certaine tolérance (pour "-é" et
     62   "-ai" notamment).</dd>
     63   <dt id="whatcheck_genre">Genre des rimes.</dt>
     64   <dd>En poésie classique, les rimes doivent être <em>féminines</em> ou
     65   <em>masculines</em>. Une rime est féminine si elle se termine par un "e", "es"
     66   ou "ent" silencieux, et est masculine dans le cas contraire. Les rimes doivent
     67   faire rimer alternativement deux terminaisons féminines et deux terminaisons
     68   masculines. plint vérifie cela, avec une approximation permissive pour
     69   déterminer si une terminaison est féminine ou non.</dd>
     70   <dt id="whatcheck_ambiguous">Motifs ambigus</dt>
     71   <dd>Certains motifs comme "-ies" et "-ées", ou "-ie" ou "-ée" suivis
     72   d'une consonne ou d'un 'h' aspiré, sont interdits en poésie classique.
     73   La raison est que ces motifs sont ambigus car ils pouvaient être prononcés ou
     74   élidés suivant les règles classiques de prosodie à l'époque, ce qui empêchait
     75   de compter correctement les syllabes. Selon la prosodie moderne, ils sont
     76   toujours élidés, mais ils sont toujours interdits suivant les règles
     77   classiques : plint les signale.</dd>
     78   <dt id="whatcheck_hiatus">Hiatus</dt>
     79   <dd>Le hiatus (juxtaposition de sons vocaliques sans 'e' muet intercalaire)
     80   est interdit en poésie classique et signalé. Plus précisément, il y a hiatus
     81   lorsqu'un mot se termine par une voyelle (sauf 'e' muet) et que le mot suivant
     82   commence par une voyelle ou par un <em>h</em> non-aspiré. Les consonnes
     83   muettes en fin de mot évitent l'hiatus, sauf dans le cas particulier du mot
     84   "et" (dont on considère qu'il se termine par un son vocalique).</dd>
     85   <dt id="whatcheck_repeated">Mots répétés</dt>
     86   <dd>On ne doit pas faire rimer un mot avec lui-même (mais on peut faire rimer
     87   un mot avec des homographes de nature grammaticale différente), ainsi, plint
     88   signale une erreur si le nombre d'occurrences d'un mot connu dans un motif de
     89   rimes est plus grand par son nombre de natures grammaticales possibles.</dd>
     90   <dt id="whatcheck_illegal">Caractères interdits</dt>
     91   <dd>Les caractères que plint ne reconnaît pas (notamment les chiffres arabes)
     92   sont signalés comme des erreurs, d'une part parce qu'ils sont sans doute
     93   irréguliers en poésie classique, d'autre part parce que cela signifie sans
     94   doute que plint va mal interpréter le vers.</dd>
     95   <dt id="whatcheck_length">Longueur</dt>
     96   <dd>Pour certains types de poèmes (par exemple les sonnets), le nombre de vers
     97   est fixé, et une erreur est levée si le modèle n'est pas complet ou s'il a été
     98   répété.</dd>
     99 </dl>
    100 
    101 <h2>Qu'est-ce qui n'est pas vérifié par plint&nbsp;?</h2>
    102 
    103 <p>Le comptage des syllabes est effectué par une approximation permissive qui
    104 peut autoriser certaines diérèses ou synérèses non autorisées. Aucune
    105 vérification n'est faite pour s'assurer que la césure à l'hémistiche se fait à
    106 une position grammaticale raisonnable. Les rimes sont calculées par une
    107 approximation permissive, et il en va de même pour les genres. Il est interdit
    108 de faire rimer des mots dérivés l'un de l'autre (par exemple "justice" et
    109 "injustice") mais plint, faute de données, ne peut vérifier pas cette
    110 contrainte. Plint ne vérifie pas que les mots sont correctement orthographiés ou
    111 s'ils existent effectivement en français, ou si le poème a un sens de façon
    112 générale&nbsp;: par exemple, <q>Tatata tatati tatati tatata</q> est reconnu
    113 comme un alexandrin classique parfaitement valide.</p>
    114 
    115 <h2 id="log">Vie privée&nbsp;: Est-ce que des logs sont conservés&nbsp;?</h2>
    116 
    117 <p>Oui, des logs peuvent être conservés, afin de pouvoir identifier, quand le
    118 programme plante, pourquoi le poème d'entrée l'a fait planter. Je conserve donc
    119 des informations sur les requêtes entrantes (poème, adresse IP). Aussi, ne
    120 soumettez pas de données confidentielles ou personnelles ; récupérez le <a
    121 href="https://a3nm.net/git/plint">code source</a> et faites tourner plint
    122 localement pour de tels usages.</p>
    123 
    124 <h2 id="template">Comment faire pour définir ses propres modèles&nbsp;?</h2>
    125 
    126 <p>
    127 Chaque ligne du format correspond à un vers (ie. une ligne non-vide). Une ligne
    128 peut indiquer trois éléments séparés par une espace : la métrique, l'identifiant
    129 de rime et l'identifiant de genre. Le premier est obligatoire, les deux derniers
    130 sont facultatifs.
    131 </p>
    132 <p>
    133 La métrique indique le nombre de syllabes du vers, et la position des
    134 hémistiches éventuelles. Il s'agit de totaux de syllabes, séparés par '/' pour
    135 indiquer les hémistiches. Par exemple, "6/6" est un alexandrin classique, "12"
    136 est un alexandrin non nécessairement pourvu de césure à l'hémistiche.
    137 </p>
    138 <p>
    139 L'identifiant de rime sert à regrouper les vers qui doivent rimer ensemble. Les
    140 vers ayant le même identifiant doivent rimer. Pour préciser le type de rime
    141 attendue, il est possible de terminer l'identifiant par ':' suivie d'une liste
    142 de valeurs séparées par '|'. La première valeur est soit "no" pour désactiver
    143 les contraintes classiques sur la rime (et n'exiger que la rime phonétique),
    144 soit n'importe quoi d'autre pour activer les règles classiques (ce qui est fait
    145 par défaut). La seconde valeur est un nombre minimal de phonèmes communs
    146 nécessaires pour qu'une rime soit acceptée (1 par défaut).
    147 </p>
    148 <p>
    149 L'identifiant de genre de rime sert à regrouper les vers qui doivent avoir une
    150 rime de même genre. Les conventions supplémentaires sont que deux identifiants
    151 de casse inversée (tels que "ex" et "EX") ont des genres opposés
    152 obligatoirement, et que "m" et "f" sont obligatoirement masculin et féminin
    153 respectivement.
    154 </p>
    155 <p>
    156 Si des identifiants ne sont pas spécifiés, alors la contrainte correspondante
    157 n'est pas spécifiée.
    158 </p>
    159 <p>
    160 Une fois le format épuisé, il est lu à nouveau à partir du début, jusqu'à la fin
    161 du poème. Les identifiants de rime et de genre sont réinitialisés (ie. peuvent
    162 prendre n'importe quelle valeur), sauf ceux qui commencent par '!'. Il n'est pas
    163 interdit que le poème et le format ne terminent pas simultanément.
    164 </p>
    165 
    166 <p>Des options globales peuvent être définies sur une ligne commençant par
    167 "!&nbsp;", elles doivent être de la forme clé:valeur et séparées par des espaces, les
    168 options suivantes sont reconnues&nbsp;:</p>
    169 <dl>
    170   <dt>merge</dt>
    171   <dd>La valeur doit être une liste de phonèmes X-SAMPA (avec la conversion
    172   maison de plint pour représenter par un caractère les phonèmes de deux
    173   caractères) à fusionner. Les rimes seront vérifiées à ces fusions près.</dd>
    174   <dt>normande_ok</dt>
    175   <dd>La valeur doit être true ou false pour accepter ou refuser les rimes
    176   normandes. Par défaut, elles sont acceptées.</dd>
    177   <dt>hiatus_ok</dt>
    178   <dd>La valeur doit être true ou false pour accepter ou refuser les hiatus (au
    179   sens classique). Par défaut, ils sont refusés.</dd>
    180   <dt>diaeresis</dt>
    181   <dd>La valeur doit être soit "classical" pour imposer les règles de la
    182   métrique classique (approximées au mieux) ou "permissive" pour des
    183   approximations plus permissives qui accepteront à peu près n'importe quelle
    184   diérèse ou synérèse phonétiquement plausible. La valeur par défaut est
    185   "classical".</dd>
    186   <dt>forbidden_ok</dt>
    187   <dd>La valeur doit être true ou false pour accepter ou refuser les motifs
    188   ambigus comme "ées", "ies". Par défaut, ils sont refusés. Si vous acceptez ces
    189   motifs, vous devriez mettre "diaeresis" à "classical" pour qu'ils aient une
    190   longueur calculée de façon raisonnable.</dd>
    191   <dt>repeat_ok</dt>
    192   <dd>Si cette valeur est false, le modèle ne se répétera pas, un poème plus
    193   long que le modèle provoquera une erreur. Par défaut, la valeur est true.</dd>
    194   <dt>incomplete_ok</dt>
    195   <dd>Si cette valeur est false, le poème devrait avoir exactement la longueur
    196   du modèle (ou un multiple, si repeat_ok est true), ne pas aller jusqu'à la fin
    197   du modèle provoquera une erreur. Par défaut, la valeur est true.</dd>
    198   <dt>phon_supposed_ok</dt>
    199   <dd>Autoriser la liaison supposée pour les rimes (vrai par défaut).</dd>
    200   <dt>eye_supposed_ok</dt>
    201   <dd>Autoriser la liaison supposée pour les rimes pour l'œil (vrai par défaut).</dd>
    202   <dt>eye_tolerance_ok</dt>
    203   <dd>Autoriser les tolérances pour les rimes pour l'œil telles que "-é"/"-ai"
    204   (vrai par défaut).</dd>
    205   <dt>poor_eye_required</dt>
    206   <dd>Imposer des rimes pour l'œil d'au moins 2 caractères dans le cas d'une
    207   rime pauvre (un seul phonème) qui ne comporte pas de mots monosyllabiques
    208   (vrai par défaut, n'a de sens que pour les rimes classiques).</dd>
    209   <dt>poor_eye_supposed_ok</dt>
    210   <dd>Autoriser la liaison supposée pour la rime pour l'œil pour
    211   poor_eye_required (faux par défaut).</dd>
    212   <dt>poor_eye_vocalic_ok</dt>
    213   <dd>Ne pas imposer la rime de poor_eye_required pour des successions de deux
    214   sons vocaliques (par exemple Noé/avoué).</dd>
    215 </dl>
    216 
    217 <p>Désolé si tout cela semble un peu obscur. Vous pouvez regarder les modèles
    218 prédéfinis pour comprendre comment ils fonctionnent&nbsp;:</p>
    219 <ul>
    220   <li><span class="template"><a
    221       href="static/tpl/classical.tpl">classical</a></span></li>
    222   <li><span class="template"><a
    223       href="static/tpl/french_abab.tpl">french_abab</a></span></li>
    224   <li><span class="template"><a
    225       href="static/tpl/french_abba.tpl">french_abba</a></span></li>
    226   <li><span class="template"><a
    227       href="static/tpl/italian_abab.tpl">italian_abab</a></span></li>
    228   <li><span class="template"><a
    229       href="static/tpl/italian_abba.tpl">italian_abba</a></span></li>
    230   <li><span class="template"><a
    231       href="static/tpl/alexandrin.tpl">alexandrin</a></span></li>
    232 </ul>
    233 
    234 <h2>Problèmes fréquents</h2>
    235 <ul>
    236   <li>Les chiffres arabes ne sont pas acceptés. Écrivez toujours les nombres en
    237   toutes lettres.</li>
    238   <li>Si le compte de syllabes dans le vers est correct mais qu'une erreur de
    239   métrique est signalée, vérifiez les hémistiches. Les césures incorrectes (qui
    240   coupent un mot ou se terminent par un son féminin) sont signalées.</li>
    241 </ul>
    242 
    243 <h2 id="pron">Comment la prononciation est-elle indiquée&nbsp;?</h2>
    244 <p>Avec <a href="http://en.wikipedia.org/wiki/X-SAMPA">X-SAMPA</a>. Voyez aussi <a
    245   href="https://fr.wiktionary.org/wiki/Annexe:Prononciation/fran%C3%A7ais">l'annexe
    246   de Wiktionnaire sur la prononciation du français</a>. Notez qu'en raison de
    247 limitations diverses, la prononciation indiquée peut être complètement fausse
    248 pour les premiers phonèmes. Les derniers devraient être bons, cependant.</p>
    249 
    250 <h2>Est-ce qu'il y a une API&nbsp;?</h2>
    251 <p>Pas encore. Si vous voulez faire quelque chose d'original, <a
    252   href="https://a3nm.net/git/plint">allez récupérer une copie du code</a>.</p>
    253 
    254 <h2>Et le nom&nbsp;?</h2>
    255 
    256 <p>C'est "plint" comme "poem lint" (comme l'outil "<a
    257   href="https://en.wikipedia.org/wiki/Lint_(software)">lint</a>" pour les
    258 programmes), mais aussi pour l'homophonie avec "plainte".</p>
    259 
    260 {% else %}
    261 
    262 <p>Welcome to <strong>plint</strong>!</p>
    263 <h2 id="info">Wait, what is this?</h2>
    264 <p>This is <a href="https://a3nm.net">a3nm</a>'s attempt to make a better world
    265 by eradicating that species of bad French poetry that tries to follow classical
    266 constraints but fails. It checks the validity of a poem with
    267 respect to metric, rhyme and rhyme genre constraints. It uses <a
    268   href="https://a3nm.net/git/frhyme">frhyme</a> for rhymes (itself built on the
    269 <a href="http://lexique.org">Lexique</a> database), <a
    270   href="https://a3nm.net/git/haspirater">haspirater</a> for aspirated 'h'
    271 detection, and a carefully handwritten system for metric and genre. It is
    272 powered by <a href="http://python.org">Python</a> and <a
    273   href="http://bottlepy.org">Bottle</a>. You can get the code on the <a
    274   href="https://a3nm.net/git/plint">plint repository</a> to run it locally.</p>
    275 <p>Ad: if you like plint, you might enjoy the French rhyme dictionary <a
    276   href="https://drime.a3nm.net">drime</a>.</p>
    277 
    278 <h2 id="help">How do I use it?</h2>
    279 <p>Enter your poem in the text area and select the poem template. If none of the
    280 predefined templates suit you, you can <a href="#template">write your
    281   own</a>.</p>
    282 
    283 <h2 id="whatcheck">What does plint check?</h2>
    284 <p>Here are some simplified explanations. To know all the details, go read the
    285 source code.</p>
    286 <dl>
    287   <dt id="whatcheck_syllable">Syllable count</dt>
    288   <dd>The number of syllables in each verse is usually fixed (12 in
    289   alexandrines, for instance). Syllables are counted in a reading with no
    290   elision of mute <em>e</em>'s except at the end of a word <em>and</em> when
    291   the following word starts with a vowel or non-aspirated <em>h</em> (or if it
    292   is the last word). The syllable count is <em>not</em> what you get with a
    293   colloquial everyday reading. Some vowels clusters can count for two
    294   syllables either naturally ("Léon") or through <em>diérèse</em> ("passion");
    295   plint uses a tolerant approximation of allowed <em>diérèses</em> trained on a
    296   corpus of classical texts.</dd>
    297   <dt id="whatcheck_hemistiche">Hemistiche</dt>
    298   <dd>For classical alexandrines, the 12 syllables are separated in two groups
    299   of 6 with an intermediate cesura (the <em>hémistiche</em>). The cesura must
    300   not split a word and must not end in a weak sound (essentially, a non-elided
    301   feminine ending).</dd>
    302   <dt id="whatcheck_rhyme">Rhyme.</dt>
    303   <dd>The fact that verses must rhyme is the most well-known poetic constraint.
    304   The rhyming phonemes must include a vowel (eg. "tâte" and "bête" do not rhyme
    305   because their common phoneme suffix is [t] which does not include a vowel
    306   sound). plint enforces rhymes trough a liberal approximation of the
    307   pronunciation of verse endings. Plint merges [ɛ] et [ɛː] ("mettre" and
    308   "maître") and [a] and [ɑ] ("patte" and "pâte") but distinguishes [ɛ̃] and [œ̃]
    309   ("brin" and "brun") and [ɔ] and [o] ("cotte" and "côte"). When all classical
    310   rules are enforced, some rhymes such as <em>rime normande</em> and rhymes for
    311   a <em>liaison supposée</em> are accepted though they do not rhyme
    312   phonetically.</dd>
    313   <dt id="whatcheck_eye">Eye rhyme.</dt>
    314   <dd>Classical rules require a minimal degree of <em>rime pour l'œil</em> (end
    315   letter similarity); thus "-é" and "-er" do not rhyme, although common
    316   tolerances exist, such as allowing "-é" and "-ai".</dd>
    317   <dt id="whatcheck_genre">Rhyme genre.</dt>
    318   <dd>In classical verse, rhymes must be made between feminine verse endings, or
    319   masculine verse endings. A verse ending is feminine if it ends with a silent
    320   "e", "es" or "ent", and masculine otherwise. plint enforces this, with a
    321   liberal approximation to try to guess if an ending is indeed silent. Besides,
    322   feminine and masculine rhymes must alternate.</dd>
    323   <dt id="whatcheck_ambiguous">Ambiguous patterns</dt>
    324   <dd>Some patterns such as "-ées" or "-ies", or "-ée" and "-ie" followed by an
    325   aspirated 'h' or a consonant, are forbidden by classical rules. They are
    326   called "ambiguous" because, according to classical prosody rules at the time,
    327   they could be either pronounced or elided, so it was unclear how to count
    328   syllables. In modern French, they are always elided, but classical poetry
    329   still prohibits them. They are
    330   reported by plint.</dd>
    331   <dt id="whatcheck_hiatus">Hiatus</dt>
    332   <dd>Juxtaposition of vowel sounds in two adjacent words with no mute 'e' in
    333   the middle is forbidden and reported. Specifically, it is forbidden to end a
    334   word with a vowel (except mute 'e') and have the next word start with a vowel
    335   or a non-aspirated <em>h</em>. Mute consonants at the end of the word avoid
    336   hiatus, except in the specific case of the word "et" (which is considered to
    337   end by a vowel sound).</dd>
    338   <dt id="whatcheck_repeated">Repeated words</dt>
    339   <dd>A word may not rhyme with itself, but may rhyme with a homograph of a
    340   different grammatical nature, so plint will report as error any multiple
    341   occurrences of a known word in a rhyme pattern if the number of occurrences is
    342   more than the number of grammatical natures for the word.</dd>
    343   <dt id="whatcheck_illegal">Illegal characters</dt>
    344   <dd>Characters that are not understood by plint, such as arabic numerals, are
    345   reported as errors: on the one hand, they are probably best avoided in
    346   classical poetry; on the second hand plint will probably misinterpret the
    347   verse if it does not understand some of the characters.</dd>
    348   <dt id="whatcheck_length">Poem length</dt>
    349   <dd>For some poetic forms such as the <em>sonnet</em>, the number of verses is
    350   fixed, so an error is raised if the pattern was not completed to the end or
    351   was repeated.</dd>
    352 </dl>
    353 
    354 <h2>What isn't checked by plint?</h2>
    355 
    356 <p>Syllable count is performed by a liberal estimate which may allow some
    357 invalid <em>diérèses</em> and <em>synérèses</em> to make the count match. It is
    358 not checked if <em>hémistiches</em> occur at a sensible grammatical position.
    359 Rhyme is computed by a liberal heuristic, as well as rhyme genre. Rhymes between
    360 words derived from one another, such as <em>justice</em> and <em>injustice</em>,
    361 are usually not allowed,
    362 but this is not checked by plint for lack of adequate data. More importantly,
    363 plint will not check if the words you use exist in French, or are correctly
    364 spelt, and if your poem makes any sense, does not contain spelling mistakes or
    365 has any poetic value; it only enforces formal constraints. For instance,
    366 <q>Tatata tatati tatati tatata</q> is recognized as a perfectly correct
    367 classical alexandrine.</p>
    368 
    369 <h2 id="log">Privacy: Do you keep logs?</h2>
    370 
    371 <p>Yes, I do, because whenever the program chokes on a poem I need to figure out
    372 what happened, and I need the input poem for that, so I keep a trace of incoming
    373 requests (poem, IP address, etc.). Hence, if you want to run plint on confidential or
    374 personal poems, do not submit them to the online version; instead, retrieve the
    375 <a href="https://a3nm.net/git/plint">source code</a> and run plint locally.</p>
    376 
    377 <h2 id="template">How can I define my own templates?</h2>
    378 
    379 <p>Each template line will be checked against a non-blank poem line. When the
    380 template is finished, it starts over from the beginning, and the rhyme and rhyme
    381 genre identifiers (see below) are reinitialized unless they start with a '!'.
    382 Each line contains one to three space-separated fields. The fields will be
    383 interpreted in the following order:</p>
    384 <ol>
    385 <li>The first field is the <strong>metric indication</strong>. It is a list of
    386 syllable counts separated by '/'s to indicate <em>hémistiches</em>. For
    387 instance, "6/6" is a classical alexandrine, "12" is an alexandrine without
    388 <em>hémistiche</em>. For technical reasons, the total number of syllables in a
    389 verse is limited to 16.</li>
    390 <li>The second field is the <strong>rhyme identifier</strong>. Verses with the
    391 same rhyme identifier must rhyme. You can suffix the pattern with ":" followed
    392 by a rhyme constraint. The rhyme constraint is up to two '|'-separated
    393 values. The first value is either "no" to disable classical constraints and only
    394 enforce phonetic rhyming, or anything else (default) to enable classical
    395 constrains. The second value is a number of required common phonemes (default
    396 1).</li>
    397 <li>The third field is the <strong>rhyme genre</strong>. Verses with the same
    398 rhyme genre identifier must have the same rhyme genre. Identifiers with opposite
    399 case (like "ex" and "EX") must represent opposite genres, "m" must represent
    400 masculine, "f" must represent feminine.</li>
    401 </ol>
    402 <p>Global options can be stated in lines starting with "! ", they are of the
    403 form option:value and separated by spaces, with the following possibilities:</p>
    404 <dl>
    405   <dt>merge</dt>
    406   <dd>The value should be a list of X-SAMPA phonemes (with plint's custom
    407   mapping of multi-character to single-character phonemes) to merge (for
    408   instance "oO"). Rhymes will be computed up to these merges.</dd>
    409   <dt>normande_ok</dt>
    410   <dd>The value should be true or false to allow or refuse rimes normandes.
    411   Default is true.</dd>
    412   <dt>hiatus_ok</dt>
    413   <dd>The value should be true or false to allow or refuse hiatus (in the sense
    414   of classical poetry). Default is false.</dd>
    415   <dt>diaeresis</dt>
    416   <dd>The value should be either "classical" to enforce an approximation of the
    417   rules of classical verse or "permissive" to enforce a more permissive
    418   approximations which will allow mostly all phonetically reasonable diérèses
    419   and synérèses. Default is "classical".</dd>
    420   <dt>forbidden_ok</dt>
    421   <dd>The value should be true or false to allow or refuse patterns such as
    422   "ées", "ies". Default is false. If you set this, it may be preferable to set
    423   "diaeresis" to "permissive" so that the ambiguous patterns are counted
    424   reasonably.</dd>
    425   <dt>repeat_ok</dt>
    426   <dd>If the value is false, the template will not repeat, and going beyond its
    427   end will be an error. Default is true.</dd>
    428   <dt>incomplete_ok</dt>
    429   <dd>If the value is false, the poem should match the length of the template
    430   (or a multiple thereof is repeat_ok was set), and not completing a template
    431   run will be an error. Default is true.</dd>
    432   <dt>phon_supposed_ok</dt>
    433   <dd>Allow <em>liaison supposée</em> for rhymes (default is true).</dd>
    434   <dt>eye_supposed_ok</dt>
    435   <dd>Allow <em>liaison supposée</em> for <em>rimes pour l'œil</em> (default is
    436   true).</dd>
    437   <dt>eye_tolerance_ok</dt>
    438   <dd>Allow tolerances for <em>rimes pour l'œil</em> such as "-é"/"-ai" (default
    439   is true).</dd>
    440   <dt>poor_eye_required</dt>
    441   <dd>Require at least 2 characters in <em>rimes pour l'œil</em> when the sound
    442   rhyme is poor (only one phoneme) and there are no monosyllabic words in the
    443   rhyme (default is true, only applies to classical rhymes).</dd>
    444   <dt>poor_eye_supposed_ok</dt>
    445   <dd>Allow <em>liaison supposée</em> for the <em>rime pour l'œil</em> for
    446   poor_eye_required (default is false).</dd>
    447   <dt>poor_eye_vocalic_ok</dt>
    448   <dd>Do not require the rhyme of poor_eye_required for successions of two
    449   vocalic sounds (such as Noé/avoué).</dd>
    450 </dl>
    451 
    452 <p>Sorry if all of this is a bit obscure. You can have a look to the predefined
    453 templates to understand how this works:</p>
    454 <ul>
    455   <li><span class="template"><a
    456       href="static/tpl/classical.tpl">classical</a></span></li>
    457   <li><span class="template"><a
    458       href="static/tpl/french_abab.tpl">french_abab</a></span></li>
    459   <li><span class="template"><a
    460       href="static/tpl/french_abba.tpl">french_abba</a></span></li>
    461   <li><span class="template"><a
    462       href="static/tpl/italian_abab.tpl">italian_abab</a></span></li>
    463   <li><span class="template"><a
    464       href="static/tpl/italian_abba.tpl">italian_abba</a></span></li>
    465   <li><span class="template"><a
    466       href="static/tpl/alexandrin.tpl">alexandrin</a></span></li>
    467 </ul>
    468 
    469 <h2>Common issues</h2>
    470 <ul>
    471   <li>There is no support for arabic numerals. Always spell out numbers in
    472   full.</li>
    473   <li>If the verse total is correct but a metric error is reported, check the
    474   <em>hémistiche</em>. Wrong <em>hémistiches</em> (which cut a word or end in a
    475   feminine sound) are reported.</li>
    476 </ul>
    477 
    478 <h2 id="pron">How is pronunciation written?</h2>
    479 <p>It is <a href="http://en.wikipedia.org/wiki/X-SAMPA">X-SAMPA</a>. Information
    480 about French pronunciation can be found on the <a
    481   href="https://fr.wiktionary.org/wiki/Annexe:Prononciation/fran%C3%A7ais">French
    482   Wiktionary</a>. Be aware that because of various limitations, the leading
    483 phonemes might be completely wrong. The last few ones should match, however.</p>
    484 
    485 <h2>Is there an API?</h2>
    486 <p>Not yet. If you want to do something creative, <a
    487   href="https://a3nm.net/git/plint">grab a copy of the code</a>.</p>
    488 
    489 <h2>What about the name?</h2>
    490 
    491 <p>It's "plint" for "poem lint" (like the "<a
    492   href="https://en.wikipedia.org/wiki/Lint_(software)">lint</a>" tool for
    493 programs), but also because "plint" in French would be read like "plainte",
    494 meaning "complaint".</p>
    495 
    496 {% endif %}
    497 {% endblock %}
    498