Envie de participer ?
Bandeau

Le langage de modèle de calibre est un langage spécifique à calibre utilisé dans l’ensemble de calibre pour des tâches telles que la spécification des chemins de fichiers, le formatage des valeurs et le calcul de la valeur des colonnes spécifiées par l’utilisateur. Un modèle de base est constitué d’une ou plusieurs expression modèle.

Expressions Modèles

Une expression modèle consiste en du texte et des noms entre crochets ({}) qui sont remplacés par les métadonnées correspondantes du livre en cours de traitement. Les barres obliques ne sont pas des expressions modèle car elles se ne trouvent pas entre les {}. Un tel texte est laissé là où il apparaît.

Une expression modèle peut accéder à toutes les métadonnées disponibles dans calibre, y compris les colonnes personnalisées (colonnes que vous créez vous-même), en utilisant le nom de recherche d’une colonne. Pour trouver le nom de recherche d’une colonne (parfois appelée champs), passez votre souris sur l’en-tête de la colonne dans la liste des livres de calibre. Les noms de recherche pour les colonnes personnalisées commencent toujours par #.

Pour les colonnes de type série, il y a un champ supplémentaire appelé #lookup name_index qui est l’index de la série pour ce livre dans la série. Par exemple, si vous avez une colonne de série personnalisée nommée #messéries, il y aura également une colonne nommée #messéries_index.

Si les métadonnées du champ pour un livre donné ne sont pas définies, le champ dans le modèle est remplacé par la chaîne vide (''). Parfois, vous voulez que du texte n’apparaisse dans la sortie que si un champ n’est pas vide.

Lire aussi: Fusil Darne Calibre 12 : Détails Techniques

Exemple d'Utilisation avec les Séries

Un cas courant est celui de series et series_index où vous voulez soit rien, soit les deux valeurs séparées par un trait d’union. Par exemple, et en utilisant l’exemple de Fondation ci-dessus, supposons que vous voulez que le modèle produise Fondation - 3 - Deuxième Fondation. Cependant, si un livre n’a pas de série, le modèle produira - - le titre, ce qui n’est probablement pas ce que vous voulez. En général, les gens veulent que le résultat soit le titre sans les traits d’union superflus.

Cette expression modèle indique que si champ a la valeur XXXX, le résultat sera prefix_textXXXXXsuffix_text. Si champ est vide (n’a pas de valeur) alors le résultat sera la chaîne vide (rien) car le préfixe et le suffixe sont ignorés. Les traits d’union ne seront inclus que si le livre possède un index de série, ce qui n’est le cas que si le livre possède une série. Vous devez utiliser soit aucun des caractères |, soit les deux.

Il est possible de ne fournir aucun texte pour le préfixe ou le suffixe, comme dans {série:|| - }.

Formatage des Indices de Série

Supposons que vous vouliez que series_index soit formaté en trois chiffres avec des zéros en tête. Si vous utilisez des indices de série avec des valeurs fractionnées, par exemple 1.1, vous pouvez souhaiter que les points décimaux soient alignés. Par exemple, vous pouvez vouloir que les indices 1 et 2.5 apparaissent sous la forme 01.00 et 02.50 afin qu’ils soient triés correctement sur un périphérique qui effectue un tri lexical.

Colonnes Personnalisées et Composites

Une grande partie du formatage du langage de modèle de calibre provient de Python. Les modèles peuvent être utilisés pour afficher des informations qui ne sont pas dans les métadonnées de calibre, ou pour afficher les métadonnées différemment du format normal de calibre. Par exemple, vous pourriez vouloir afficher le ISBN, un champ que calibre n’affiche pas. Pour cela, vous pouvez créer une colonne personnalisée de type Colonne construite à partir d’autres colonnes (appelée ci-après colonnes composites) et fournir un modèle pour générer le texte affiché. La colonne affichera le résultat de l’évaluation du modèle.

Lire aussi: Calibre 16: Le Fusil Nemrod

Par exemple, pour afficher l’ISBN, créez la colonne et entrez « identifiers:select(isbn)} » dans la champ du modèle. Remarque : Vous ne pouvez pas modifier les données affichées dans une colonne composite. Vous devez plutôt modifier les colonnes sources.

Tableaux de Connexions

Les tableaux de connexions sont utilisés pour modifier les métadonnées écrites dans les livres pendant l’envoi à une liseuse et les opérations de sauvegarde sur le disque. Le tableau de connexion vous permet de spécifier pour un modèle de lecteur précis quelles données à insérer dans les métadonnées du livre. Vous pouvez utiliser les tableaux de connexions pour modifier les champs suivants : authors, author_sort, language, publisher, tags, title, title_sort.

Lorsque vous créez un tableau de connexion, vous spécifiez le format et le périphérique pour lequel le tableau de connexion doit être utilisé. Un périphérique spécial est procuré, save_to_disk qui est utilisé lors de la sauvegarde de formats (en opposition à les envoyer vers le périphérique). Une fois que vous avez choisi le format et le périphérique, vous choisissez les champs de métadonnées à modifier, indiquez le modèle à appliquer pour fournir les nouvelles valeurs. Ces modèles sont reliés à leurs champs de destination, d’où le nom de tableau de connexions.

Quand un tableau de connexion doit s’appliquer (Serveur de contenu, sauvegarde sur disque ou envoyer au périphérique), calibre recherche les tableau de connexions définis et celui qui est correct pour le format donné et le périphérique.

Traitement Spécial des Étiquettes et des Auteurs

Les étiquettes et les champs auteur ont un traitement spécial, parce que ces deux champs peuvent contenir plusieurs données. Un livre peut avoir plusieurs étiquettes et plusieurs auteurs. Lorsque vous spécifiez que l’un de ces deux champs doit être modifié, le résultat du modèle est examiné pour voir s’il y a plus d’un élément dedans.

Lire aussi: Caractéristiques Browning Calibre 20

Pour les étiquettes, le résultat est découpé partout où calibre trouve une virgule. Par exemple, si le modèle produit les valeurs Thriller, Horreur, alors ke résultat sera deux étiquettes, Thriller et Horreur. La même chose se produit pour les auteurs, mais en utilisant un caractère différent comme séparateur, le & (esperluette) au lieu d’une virgule. Par exemple, si le modèle produit la valeur Blogs, Joe&Posts, Susan, alors le livre finira avec deux auteurs Blogs, Joe et Posts, Susan.

Les tableaux de connexions affectent les métadonnées écrites dans le livre quand il est sauvegardé sur le disque ou copié sur le périphérique. Les tableaux de connexions n’affecte pas les métadonnées utilisées par Enregistrer sur le disque et Envoyer au périphérique.

Fonctions de Modèle

Supposons que vous vouliez afficher la valeur d’un champ en casse majuscules alors que ce champ est normalement en casse titre. Vous pouvez le faire en utilisant les fonctions de modèle. Par exemple, pour afficher le titre en casse majuscules, utilisez la fonction uppercase, comme dans {title:uppercase()}.

Les fonctions sont placées dans la partie format du modèle, après le : et avant le premier | ou le } de fermeture si aucun préfixe/suffixe n’est utilisé. Si vous avez à la fois une référence de format et de fonction, la fonction vient après un deuxième :.

Les noms de fonctions doivent toujours être suivis de parenthèses ouvrantes et fermantes. Certaines fonctions nécessitent des valeurs supplémentaires (arguments), qui sont placées à l’intérieur des parenthèses. Les arguments sont séparés par des virgules. Les virgules Littérales (les virgules en tant que texte, et non en tant que séparateurs d’arguments) doivent être précédées d’une barre oblique inversée (\) . Les fonctions sont évaluées avant les spécifications de format et le préfixe/suffixe.

Important : Si vous avez de l’expérience en programmation, veuillez noter que la syntaxe du Mode Fonction Unique n’est pas celle à laquelle vous vous attendez. Les chaînes de caractères ne sont pas citées et les espaces sont significatifs. N’utilisez pas les sous-modèles (`{ … }`) comme arguments de fonction.

Lorsque les fonctions sont utilisées en Mode Fonction Unique, le premier paramètre, value, est automatiquement remplacé par le contenu du champ spécifié dans le modèle. Dans la documentation des fonctions, la notation [quelque chose]* signifie que quelque chose peut être répété zéro fois ou plus.

Certaines fonctions utilise des expressions régulières. Les fonctions sont documentées dans Référence des modèles de fonctions. La documentation vous indique les arguments requis par les fonctions et ce qu’elles font.

Exemples de Fonctions

  • affiche les étiquettes d’un livre, s’il y en a.
  • format_duration(value, template, [largest_unit]) - formate la valeur, un nombre de secondes, en une chaîne affichant les semaines, les jours, les heures, les minutes et les secondes.

Formatage des Entiers avec Zéros en Tête

Supposons que vous ayez une colonne personnalisée de nombres entiers, ##myint, que vous voulez afficher avec des zéros en tête, comme dans 003. Une façon de le faire est d’utiliser le format 0>3s. Cependant, par défaut, si un nombre (entier ou flottant) est égal à zéro, la valeur est affichée sous la forme d’une chaîne vide, de sorte que les valeurs nulles produiront la chaîne vide, et non 000. Si vous voulez voir les valeurs 000, vous devez utiliser à la fois la chaîne de format et la fonction ifempty pour transformer la valeur vide en zéro. Notez que vous pouvez également utiliser le préfixe et le suffixe.

Mode Programme Général (MPG)

Le Mode Programme Général (MPG) remplace les expressions modèles par un programme écrit dans le langage modèle. Une top_expression a toujours une valeur. Les chaînes de caractères et les nombres peuvent être utilisés indifféremment.

Opérateurs

  • Opérateurs unaires plus (+) et moins (-). Ces opérateurs et tous les autres opérateurs arithmétiques renvoient des entiers si l’expression donne une partie fractionnaire égale à zéro.
  • Multiplier (*) et diviser (/). Ces opérateurs sont associatifs et s’évaluent de gauche à droite.
  • Additionner (+) et soustraire (-).
  • Comparaisons de nombres et de chaînes de caractères. Ces opérateurs renvoient '1' si la comparaison réussit, sinon la chaîne vide ('').
  • Concaténation de chaînes de caractères (&). L’opérateur & renvoie une chaîne de caractères formée par la concaténation des expressions de gauche et de droite. Exemple : « “aaa” & “bbb”`` renvoie « “aaabbb”``.
  • Unaire non logique (!).
  • L’opérateur logique et (&&). Cet opérateur renvoie “1” si les deux expressions de gauche et de droite sont vraies, ou la chaîne vide '' si l’une ou l’autre est fausse.
  • Logique ou (||). Cet opérateur renvoie '1' si l’expression de gauche ou de droite est vraie, ou '' si les deux sont fausses. Il est associatif, s’évalue de gauche à droite, et fait du court-circuitage.

Références de Champs

Un field_reference est évalué à la valeur du champ de métadonnées nommé par le nom de la consultation qui suit le « $ » ou le « $$ ». L’utilisation de $ équivaut à l’utilisation de la fonction :ref:`ff_field. L’utilisation de $$ équivaut à l’utilisation de la fonction raw_field.

Expressions Conditionnelles (If)

Les expressions If évaluent d’abord la condition. Si la condition est True (une valeur non vide), alors expression_list de la clause then est évaluée. Si elle est False, expression_list de la clause elif ou else est évaluée si elle est présente. Les parties if et else sont facultatives. Les mots if ``, ``then, elif ``, ``else et fi sont réservés ; vous ne pouvez pas les utiliser comme noms d’identifiants. Vous pouvez mettre des retours à la ligne et des espaces partout où cela a un sens.

La condition est une top_expression et non une expression_list ; les points-virgules ne sont pas autorisés. Les expression_list sont des séquences de top_expressions séparées par des points-virgules. Comme dit plus haut, un if produit une valeur.

Expressions Itératives (For)

L’expression for itère sur une liste de valeurs, en les traitant une par une. L’expression list_expression doit être évaluée soit par un nom de champ de métadonnées, par exemple tags ou #genre, soit par une liste de valeurs. Si le résultat est un lookup name valide, alors la valeur du champ est récupérée et le séparateur spécifié pour ce type de champ est utilisé. Si le résultat n’est pas un nom de référence valide, il est supposé être une liste de valeurs.

La liste est supposée être séparée par des virgules, sauf si le mot-clé optionnel separator est fourni, auquel cas les valeurs de la liste doivent être séparées par le résultat de l’évaluation de l’expression separator_expr. Un séparateur ne peut pas être utilisé si la liste est générée par range.

Chaque valeur de la liste est assignée à la variable spécifiée puis la expression_list est évaluée. Si le Genre original est Histoire.Militaire, Science Fiction.Histoire alternative, Lisez-moi, alors le modèle renvoie Militaire, Histoire alternative, Lisez-moi. Note : la dernière ligne du modèle, new_tags, n’est pas strictement nécessaire dans ce cas car for renvoie la valeur de la dernière top_expression de la liste d’expressions.

Return

Retourne la valeur de l”expression. Si est exécutée dans une fonction, retourne la valeur de l’expression à l’appelant.

Fonctions Locales

Si vous avez répète du code dans un modèle, vous pouvez mettre ce code dans une fonction locale. Le mot clé def commence la définition. Il est suivi par le nom de la fonction, la liste des arguments, puis le code de la fonction. Les arguments sont positionnels. Lorsqu’une fonction est appelée, les arguments fournis sont comparés de gauche à droite aux paramètres définis, la valeur de l’argument étant attribuée au paramètre. C’est une erreur de fournir plus d’arguments que de paramètres définis. Les paramètres peuvent avoir des valeurs par défaut, comme « a = 25 ».

Exemple de Calcul de Durée

Exemple : Ce modèle calcule une durée approximative en années, mois et jours à partir d’un nombre de jours. La fonction to_plural() met en forme les valeurs calculées.

Comparaisons de Chaînes de Caractères

Les comparaisons de chaînes de caractères effectuent une comparaison insensible à la casse en utilisant l’ordre lexical. Les opérateurs de comparaison de chaînes pris en charge sont ==, !=, <, <=, >, =, in, inlist et inlist_field. Pour les opérateurs in, inlist et inlist_field, le résultat de l’expression de gauche est interprété comme un motif d’expression régulière. Les opérateurs sont True si la valeur de l’expression régulière de gauche correspond à la valeur de l’expression de droite.

L’opérateur inlist est vrai si l’expression régulière de gauche correspond à l’un des éléments de la liste de droite où les éléments de la liste sont séparés par des virgules. L’opérateur inlist_field est vrai si l’expression régulière de gauche correspond à l’un des éléments du champ (colonne) nommé par l’expression de droite, en utilisant le séparateur défini pour le champ.

NB : l’opérateur inlist_field requiert que l’expression de droite sui est évaluée soit un nom de champ, alors que l’opérateur inlist requiert que l’expression de droite qui est évaluée soit une chaîne de caractères contenant une liste séparée par des virgules.

Opérateurs Numériques

Les opérateurs de comparaison numérique sont ==#, !=#, <#, <=#, >#, >=#.

Exemple : ` program: '^science$' inlist $#genre` retourne `'1' si l’un des genres du livre correspond exactement à l’expression régulière ^science$, par exemple, Science.

tags: #calibre #préférences #format #de #sortie #guide

Post popolari: