<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Comment
écrire une extension "Importer un texte" pour Scribus
</title>
</head>
<body>
<h2>Comment
écrire une extension "Importer un texte" pour Scribus
</h2>
<h4>Interface d'extension et article
écrits par Riku Leino
</h4>
<h3>Pr
éface
</h3>
<p>La pr
ésente section vous montre comment
écrire une extension "Importer un texte" pour Scribus. Les extensions
sont des librairies charg
ées dynamiquement au format "so". Les extensions "Importer un texte" servent
à importer du texte dans un cadre de texte Scribus, quel qu'en soit le format.
</p>
<h4>Important
</h4>
<p>Attendez! Vous
êtes peut-
être sur le point de r
éinventer la roue - Joignez la liste de diffusion ou visitez le canal #scribus
à irc.freenode.net. Votre sujet sera mis
à l'
étude, et vous obtiendrez
également du soutien. Il ne s'agit pas de
vous emp
êcher d'
écrire quoi que ce soit, mais bien de vous aider.:)))
</p>
<h3>Un exemple d'extension
</h3>
<h4>myimporter.h
</h4>
<blockquote><table width="100%" border="1" bgcolor="#eeeeee"><tr><td border="0">
<pre>
#ifndef MYIMPORTER_H
#define MYIMPORTER_H
#include
<scribus.h
>
#include
<gtwriter.h
>
extern "C" void GetText(QString nomFichier, QString encodage, bool texteSeul, gtWriter *ecriveur);
extern "C" QString FileFormatName();
extern "C" QStringList FileExtensions();
#endif // MYIMPORTER_H
</pre>
</td></tr></table></blockquote>
<p>D
écrivons maintenant le code source. La d
éclaration MYIMPORTER_H est le moyen standard de s'assurer qu'une seule insertion du fichier d'en-t
ête a eu lieu. Scribus.h est requis pour acc
éder aux objets Scribus. La fonction GetText() est appel
ée lorsqu'un utilisateur d
écide d'importer un fichier qui poss
ède une extension associ
ée
à l'un des
él
éments deQStringList retourn
é par FileExtensions(). FileFormatName() doit retourner le nom du format de fichier trait
é par ce module d'importation, par exemple "Fichier texte" dans le cas d'un format "texte seulement".
</p>
<h4>Param
ètre de GetText
</h4>
<ul>
<li><strong>nomFichier
</strong> : Chemin vers le fichier que l'utilisateur veut importer
</li>
<li><strong>encodage
</strong> : Encodage des caract
ères s
électionn
és par l'utilisateur dans le dialogue de fichiers
</li>
<li><strong>texteSeul
</strong> : La valeur True signifie qu'un utilisateur veut importer du texte
à partir d'un fichier sans aucun formatage
</li>
<li><strong>ecriveur
</strong> : L'objet gtWriter sollicit
é pour importer le texte
</li>
</ul>
<h4>Extensions de fichier
</h4>
<p>Si votre extension est la seule qui existe pour le format de fichier vis
é, le module retourne un QStringList avec les extensions du format de fichier. S'il
existe d
éj
à un importateur pour le format vis
é, le module ne retourne pas d'extensions de fichier, mais un QStringList vide. L'extension la plus courante et la plus utilis
ée pour un format de fichier donn
é doit retourner les extensions. Les cas plus rares ne doivent pas retourner d'extension. Vous pouvez utiliser les extensions en les choisissant dans le dialogue de fichier de "Importer un texte".
</p>
<h4>myimporter.cpp
</h4>
<blockquote><table width="100%" border="1" bgcolor="#eeeeee"><tr><td border="0">
<pre>
#include "myimporter.h"
#include
<qstring.h
>
#include
<qstringlist.h
>
QString FileFormatName()
{
return QObject::tr("Rien
à importer");
}
QStringList FileExtensions()
{
// QStringList list("htm"); list
<< "html" << "php"; return list;
return QStringList();
}
void GetText(QString filename, QString encoding, bool textOnly, gtWriter *writer)
{
}
</pre>
</td></tr></table></blockquote>
<p><code>importnothingplugin-1.0.tar.bz2
</code> de http://docs.scribus.net peut
être utilis
é comme base pour votre extension personnalis
ée "Importer un texte".
</p>
<h3>Comment cela fonctionne?
</h3>
<p>Le texte peut
être ajout
é à la fin d'un cadre de texte avec les m
éthodes gtWriter::append(). append(QString text) ajoute le texte format
é avec le style du cadre de texte. append(QString text, gtStyle *style) utilisera le style donn
é en param
ètre.
</p>
<p>gtStyle, gtParagraphStyle et gtFrameStyle peuvent
être utilis
és pour d
éfinir le style du texte import
é. La mani
ère la plus simple de d
ébuter est d'utiliser la m
éthode getDefaultStyle() de gtWriter pour obtenir le style courant du cadre de texte, puis d'utiliser le gtFrameStyle retourn
é pour cr
éer de nouveaux styles.
</p>
<p>gtStyle agit sur les styles de caract
ères et peut
être utilis
é à l'int
érieur d'un style de paragraphe. gtParagraphStyle cr
ée un style de paragraphe dans Scribus et peut
être utilis
é pour appliquer un style de paragraphe au texte lors de l'importation. gtFrameStyle offre la possibilit
é de changer le style par d
éfaut du cadre de texte. La relation entre ces trois classes est la suivante : gtStyle agit comme classe de base. gtParagraphStyle
étend gtStyle et gtFrameStyle
étend gtParagraphStyle. Elles poss
èdent toutes un objet gtFont qui peut
être obtenu avec la m
éthode getFont(). Vous pouvez utiliser l'objet gtFont
pour d
éfinir certains formatages de polices de caract
ères. Examinez les fichiers d'en-t
ête gtfont.h, gtstyle.h, gtparagraphstyle.h et gtframestyle.h pour vous faire une meilleure id
ée des interfaces.
</p>
<p>Il existe aussi une classe d'appoint gtMeasure avec des m
éthodes statiques qui permet de convertir les unit
és de longueur en points, c'est-
à-dire l'unit
é par d
éfaut de Scribus. Par exemple, pour convertir 25 millim
ètres en points, il est possible d'utiliser la m
éthode de gtMeasure soit i2d() (int to double): gtMeasure::i2d(25, MM). Le second param
ètre indique l'unit
é à partir de laquelle la conversion en points est effectu
ée. Toutes les unit
és possibles sont d
éfinies sous la forme "enumeration Unit" (voir le fichier gtmeasure.h).
</p>
<h3>Exemple simple
</h3>
<h4>Texte
à importer
</h4>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
<strong>Ut a sapien.
</strong> Aliquam aliquet purus molestie dolor. Integer quis eros ut erat posuere dictum. Curabitur dignissim. Integer orci. Fusce vulputate lacus at ipsum. Quisque in libero nec mi laoreet volutpat.
<br>
Aliquam eros pede, scelerisque quis, tristique cursus, placerat convallis, velit. Nam condimentum. Nulla ut mauris. Curabitur adipiscing, mauris non dictum aliquam, arcu risus dapibus diam, nec sollicitudin quam erat quis ligula. Aenean massa nulla, volutpat eu, accumsan et, fringilla eget, odio. Nulla placerat porta justo. Nulla vitae turpis. Praesent lacus.
<h4>Code pour l'importation
</h4>
<blockquote><table width="100%" border="1" bgcolor="#eeeeee"><tr><td border="0">
<pre>
#include
<gtparagraphstyle.h
>
#include
<gtframestyle.h
>
#include
<gtmeasure.h
>
...
void GetText(QString nomFichier, QString encodage, bool texteSeul, gtWriter *ecriveur)
{
/***** Cr
ée les styles de paragraphe *************************************************/
gtFrameStyle* fstyle = writer->getDefaultStyle();
gtParagraphStyle* firstPara = new gtParagraphStyle(*fstyle);
firstPara->setName("Premier paragraphe");
firstPara->getFont()->setSize(12.0);
firstPara->setLineSpacing(14.4);
gtParagraphStyle* trailingPara = new gtParagraphStyle(*firstPara);
trailingPara->setName("Dernier paragraphe");
trailingPara->setFirstLineIndent(gtMeasure::i2d(15, MM));
/***** Importer le texte *************************************************************/
writer->append("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ", firstPara);
QString currentWeight = firstPara->getFont()->getWeight();
firstPara->getFont()->setWeight(BOLD); // de l'enum FontWeight (gtfont.h)
writer->append("Ut a sapien.", firstPara); // importer avec une police en gras
firstPara->getFont()->setWeight(currentWeight);
writer->append(" Aliquam aliquet purus molestie dolor. Integer quis eros ut "
"erat posuere dictum. Curabitur dignissim. Integer orci. Fusce "
"vulputate lacus at ipsum. Quisque in libero nec mi laoreet "
"volutpat.\n", firstPara);
// 2
ème paragraphe
writer->append("Aliquam eros pede, scelerisque quis, tristique cursus, placerat "
"convallis, velit. Nam condimentum. Nulla ut mauris. Curabitur "
"adipiscing, mauris non dictum aliquam, arcu risus dapibus diam, nec "
"sollicitudin quam erat quis ligula. Aenean massa nulla, "
"volutpat eu, accumsan et, fringilla eget, odio. Nulla placerat porta "
"justo. Nulla vitae turpis. Praesent lacus.", trailingPara);
delete firstPara;
delete trailingPara;
}
...
</pre>
</td></tr></table></blockquote>
<p>Maintenant, en cliquant avec le bouton droit sur un cadre de texte, choisissez "Importer un texte..." et s
électionnez le module que vous venez de cr
éer pour ouvrir un fichier; le cadre contient maintenant le texte
échantillon, format
é correctement.
</p>
<table width="100%"><tr><td align="center"><img src="images/result.png" alt="Exemple de cadre"/></td></tr></table>
<p>Si vous avez des questions, envoyez un courriel
à Riku Leino (IRC nick:Tsoots) tsoots
à gmail.com, inscrivez-vous
à la liste de diffusion de Scribus ou joignez-vous au canal irc #scribus
à irc.freenode.net.
</p>
</body>
</html>