2020-09-23 : Article obsolète depuis la sortie du firmware en version 4.24.15672.

Encore un article à propos du projet eBook Reader Dictionaries
Le projet me semble pas mal avancé, je dirai même qu'il est mature (il doit certainement manquer quelques modèles, mais ça viendra quand je tomberai dessus ou si une bonne âme ouvre une issue).

Mais il restait un détail important à corriger : la "signature" du dictionnaire. Je veux parler du nom du dictionnaire qui est affiché en dessous des définitions :

kobo-libra-dicthtml-fr-empire-mauvaise-source.png
« Le Robert Micro © 2013 Dictionnaires Le Robert »

J'ai passé 1 journée entière sur le sujet, dont voici un résumé et, surtout, le hack pour changer cette signature.


La Recherche

Recherches infructueuses :

  1. Chercher (grep) des occurrences de "Robert" et "obert" dans tous les fichiers de la Kobo : aucun résultat.
  2. Activer toutes les catégories de log de la Kobo, lire quelque temps et redémarrer la liseuse plusieurs fois : pas plus de résultat.
  3. Scruter KoboReader.sqlite : aucun résultat.
  4. Vérifier le commentaire du fichier ZIP de référence (le Robert Micro) : aucun résultat. Dommage, ça aurait été une solution intéressante pour Kobo.
  5. Vérifier le contenu du ZIP pour y trouver un quelconque indice : nada.

Note: le fichier BookReader.sqlite étant chiffré, je n'ai rien pu en faire.

La prochaine étape allait donner plus de résultats : analyser le contenu du firmware.
J'ai d'abord commencé par faire un strings récursif sur tous les fichiers, autant ratisser large... Et soudain :

$ strings usr/local/Kobo/libnickel.so.1.0.0 | grep " Robert"
Le Robert Micro 
 2013 Dictionnaires Le Robert
"Why should I avenge Edward Stark? The man was nothing to me. Oh, Robert loved him, to be sure. Loved...

C'est intéressant, et en même temps, ça craignait pour nous car cela voulait dire que la signature est codée en dure. Et pour outrepasser ça, il aurait fallu créer un patch et j'aurai lâché l'affaire car personne d'autre n'aurait pris le temps de faire ça juste pour modifier une signature.

J'ai donc continué à fouiner :

$ strings usr/local/Kobo/libnickel.so.1.0.0 | grep "Dictionary"
DictionaryProvider
DictionaryViewFooter
_ZN21DictionaryFileManager16dictionarySourceERK7QString
_ZN16DictionaryParser13additionalCssEv
_ZN18DictionaryProvider16dictionarySourceEv
_ZN14DictionaryView20dictionarySourceTextEv

(Il y a plus d'informations sur cette issue)

À partir de ce moment, je pars loin : j'ai dans l'idée de trouver un moyen de décompiler le fichier. Ou mieux : retrouver les sources.
Cela m'aurait permis d'essayer de comprendre ce que _ZN16DictionaryParser13additionalCssEv faisait : s'il y a moyen d'ajouter un fichier CSS, alors on pourrait cacher la signature ajoutée automatiquement (il ne s'agit que de HTML, donc il y avait un léger espoir).

Je savais que ça allait être un peu chaud pour moi (je suis un peu rouillé dans le domaine, et sans jamais avoir été un cador non plus), mais ce n'était pas un problème : une fois que c'est fait, tu es tranquille.

Dans mes recherches, je suis tombé sur kobo-mods. Le gars a l'air de bien toucher, j'ai donc zieuté son site web et ses autres projets. J'attéris sur dictutil et là, je me dis que j'avais bien cerné comment la gestion du dictionnaire se fait dans Kobo, c'est cool. Son outil et son analyse sont plus complets, ceci dit. Bref, de fil en aiguille, j'arrive sur cette issue : doctutil#5
Le gars a donc poussé son analyse encore plus loin : il confirme ce que je pensais à propos du CSS et propose même un hack ! Un immense merci :)


Le Hack

Voici le code HTML pour chaque mot (plus d'informations) :

<w>
    <p>
        <a name="mot"/>
        <b>mot</b> prononciation <i>genre</i>
        <br/>
        <br/>
        <ol>
            <li>Définition 1.</li>
            <li>Définition 2.</li>
        </ol>
    </p>
</w>

Le code HTML situé entre les balises w sera extrait tel quel pour être affiché dans le navigateur embarqué de la Kobo.
Ensuite, la Kobo ajoute la signature codée en dur.

Il suffit d'ajouter ces lignes avant la fermeture de la balise w :

    <br/>
    <i>Wiktionnaire (ɔ) 2020</i>
    <span>
        <style>span,span+*{display:none}</style>
    </span>
  1. Ligne 1, ajout d'un saut de ligne.
  2. Ligne 2, il s'agit de la signature du projet, vous pouvez modifier à votre convenance et ajouter le code que vous désirez.
  3. Lignes 3-5, c'est ici que la magie opère : ajout d'un span dans lequel un style est défini. C'est le seul moyen de spécifier du code CSS dans le HTML et qu'il soit interprété par la Kobo. Le code CSS utilise ces sélecteurs :
    • span : toutes les balises "span" ;
    • span + * : l'élement qui suit une balise "span".
    En gros, la balise "span" que l'on vient d'ajouter sera rendue invisible ainsi que tout élément qui suit, c'est-à-dire la signature ajoutée automatiquement par la Kobo.

Et voilà ce que ça donne :

kobo-libra-dicthtml-fr-fondation-bonne-source.png
« Wiktionnaire (ɔ) 2020 »