plint

French poetry validator
git clone https://a3nm.net/git/plint/
Log | Files | Refs | README

about.html (26960B)


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