Subversion Repositories Scribus

Rev

Rev 13527 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
10646 cbradney 1
<html>
2
<head>
3
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
4
        <title>Comment &eacute;crire une extension "Importer un texte" pour Scribus</title>
5
</head>
6
<body>
6646 mrdocs 7
<h2>Comment &eacute;crire une extension "Importer un texte" pour Scribus</h2>
8
<h4>Interface d'extension et article &eacute;crits par Riku Leino</h4>
9
<h3>Pr&eacute;face</h3>
10
 
11
<p>La pr&eacute;sente section vous montre comment &eacute;crire une extension "Importer un texte" pour Scribus. Les extensions
12
sont des librairies charg&eacute;es dynamiquement au format "so". Les extensions "Importer un texte" servent &agrave; importer du texte dans un cadre de texte Scribus, quel qu'en soit le format.</p>
13
 
14
<h4>Important</h4>
15
 
24740 craig 16
<p>Attendez! Vous &ecirc;tes peut-&ecirc;tre sur le point de r&eacute;inventer la roue - Joignez la liste de diffusion ou visitez le canal #scribus &agrave; irc.libera.chat. Votre sujet sera mis &agrave; l'&eacute;tude, et vous obtiendrez &eacute;galement du soutien. Il ne s'agit pas de
6646 mrdocs 17
vous emp&ecirc;cher d'&eacute;crire quoi que ce soit, mais bien de vous aider.:)))</p>
18
 
19
<h3>Un exemple d'extension</h3>
20
 
21
<h4>myimporter.h</h4>
22
<blockquote><table width="100%" border="1" bgcolor="#eeeeee"><tr><td border="0">
23
<pre>
24
#ifndef MYIMPORTER_H
25
#define MYIMPORTER_H
26
 
27
#include &lt;scribus.h&gt;
28
#include &lt;gtwriter.h&gt;
29
 
30
extern "C" void GetText(QString nomFichier, QString encodage, bool texteSeul, gtWriter *ecriveur);
31
 
32
extern "C" QString FileFormatName();
33
 
34
extern "C" QStringList FileExtensions();
35
 
36
#endif // MYIMPORTER_H
37
</pre>
38
</td></tr></table></blockquote>
39
<p>D&eacute;crivons maintenant le code source. La d&eacute;claration MYIMPORTER_H est le moyen standard de s'assurer qu'une seule insertion du fichier d'en-t&ecirc;te a eu lieu. Scribus.h est requis pour acc&eacute;der aux objets Scribus. La fonction GetText() est appel&eacute;e lorsqu'un utilisateur d&eacute;cide d'importer un fichier qui poss&egrave;de une extension associ&eacute;e &agrave; l'un des &eacute;l&eacute;ments deQStringList retourn&eacute; par FileExtensions(). FileFormatName() doit retourner le nom du format de fichier trait&eacute; par ce module d'importation, par exemple "Fichier texte" dans le cas d'un format "texte seulement".</p>
40
 
41
<h4>Param&egrave;tre de GetText</h4>
42
<ul>
43
<li><strong>nomFichier</strong> : Chemin vers le fichier que l'utilisateur veut importer</li>
44
<li><strong>encodage</strong> : Encodage des caract&egrave;res s&eacute;lectionn&eacute;s par l'utilisateur dans le dialogue de fichiers</li>
45
<li><strong>texteSeul</strong> : La valeur True signifie qu'un utilisateur veut importer du texte &agrave; partir d'un fichier sans aucun formatage</li>
46
<li><strong>ecriveur</strong> : L'objet gtWriter sollicit&eacute; pour importer le texte</li>
47
</ul>
48
 
49
<h4>Extensions de fichier</h4>
50
<p>Si votre extension est la seule qui existe pour le format de fichier vis&eacute;, le module retourne un QStringList avec les extensions du format de fichier. S'il
51
existe d&eacute;j&agrave; un importateur pour le format vis&eacute;, le module ne retourne pas d'extensions de fichier, mais un QStringList vide. L'extension la plus courante et la plus utilis&eacute;e pour un format de fichier donn&eacute; 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>
52
 
53
<h4>myimporter.cpp</h4>
54
<blockquote><table width="100%" border="1" bgcolor="#eeeeee"><tr><td border="0">
55
<pre>
56
#include "myimporter.h"
57
#include &lt;qstring.h&gt;
58
#include &lt;qstringlist.h&gt;
59
 
60
QString FileFormatName()
61
{
62
    return QObject::tr("Rien &agrave; importer");
63
}
64
 
65
QStringList FileExtensions()
66
{
67
    // QStringList list("htm"); list << "html" << "php"; return list;
68
    return QStringList();
69
}
70
 
71
void GetText(QString filename, QString encoding, bool textOnly, gtWriter *writer)
72
{
73
 
74
}
75
</pre>
76
</td></tr></table></blockquote>
77
 
78
<p><code>importnothingplugin-1.0.tar.bz2</code> de http://docs.scribus.net peut &ecirc;tre utilis&eacute; comme base pour votre extension personnalis&eacute;e "Importer un texte".</p>
79
 
80
<h3>Comment cela fonctionne?</h3>
81
 
82
<p>Le texte peut &ecirc;tre ajout&eacute; &agrave; la fin d'un cadre de texte avec les m&eacute;thodes gtWriter::append(). append(QString text) ajoute le texte format&eacute; avec le style du cadre de texte. append(QString text, gtStyle *style) utilisera le style donn&eacute; en param&egrave;tre.</p>
83
 
84
<p>gtStyle, gtParagraphStyle et gtFrameStyle peuvent &ecirc;tre utilis&eacute;s pour d&eacute;finir le style du texte import&eacute;. La mani&egrave;re la plus simple de d&eacute;buter est d'utiliser la m&eacute;thode getDefaultStyle() de gtWriter pour obtenir le style courant du cadre de texte, puis d'utiliser le gtFrameStyle retourn&eacute; pour cr&eacute;er de nouveaux styles.</p>
85
 
86
<p>gtStyle agit sur les styles de caract&egrave;res et peut &ecirc;tre utilis&eacute; &agrave; l'int&eacute;rieur d'un style de paragraphe. gtParagraphStyle cr&eacute;e un style de paragraphe dans Scribus et peut &ecirc;tre utilis&eacute; pour appliquer un style de paragraphe au texte lors de l'importation. gtFrameStyle offre la possibilit&eacute; de changer le style par d&eacute;faut du cadre de texte. La relation entre ces trois classes est la suivante : gtStyle agit comme classe de base. gtParagraphStyle &eacute;tend gtStyle et gtFrameStyle &eacute;tend gtParagraphStyle. Elles poss&egrave;dent toutes un objet gtFont qui peut &ecirc;tre obtenu avec la m&eacute;thode getFont(). Vous pouvez utiliser l'objet gtFont
87
pour d&eacute;finir certains formatages de polices de caract&egrave;res. Examinez les fichiers d'en-t&ecirc;te gtfont.h, gtstyle.h, gtparagraphstyle.h et gtframestyle.h pour vous faire une meilleure id&eacute;e des interfaces.</p>
88
 
89
<p>Il existe aussi une classe d'appoint gtMeasure avec des m&eacute;thodes statiques qui permet de convertir les unit&eacute;s de longueur en points, c'est-&agrave;-dire l'unit&eacute; par d&eacute;faut de Scribus. Par exemple, pour convertir 25 millim&egrave;tres en points, il est possible d'utiliser la m&eacute;thode de gtMeasure soit i2d() (int to double): gtMeasure::i2d(25, MM). Le second param&egrave;tre indique l'unit&eacute; &agrave; partir de laquelle la conversion en points est effectu&eacute;e. Toutes les unit&eacute;s possibles sont d&eacute;finies sous la forme "enumeration Unit" (voir le fichier gtmeasure.h).</p>
90
 
91
<h3>Exemple simple</h3>
92
 
93
<h4>Texte &agrave; importer</h4>
94
 
95
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>
96
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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.
97
 
98
<h4>Code pour l'importation</h4>
99
 
100
<blockquote><table width="100%" border="1" bgcolor="#eeeeee"><tr><td border="0">
101
<pre>
102
#include &lt;gtparagraphstyle.h&gt;
103
#include &lt;gtframestyle.h&gt;
104
#include &lt;gtmeasure.h&gt;
105
 
106
...
107
 
108
void GetText(QString nomFichier, QString encodage, bool texteSeul, gtWriter *ecriveur)
109
{
110
 
111
/***** Cr&eacute;e les styles de paragraphe *************************************************/
112
    gtFrameStyle* fstyle = writer->getDefaultStyle();
113
 
114
    gtParagraphStyle* firstPara = new gtParagraphStyle(*fstyle);
115
    firstPara->setName("Premier paragraphe");
116
    firstPara->getFont()->setSize(12.0);
117
    firstPara->setLineSpacing(14.4);
118
 
119
    gtParagraphStyle* trailingPara = new gtParagraphStyle(*firstPara);
120
    trailingPara->setName("Dernier paragraphe");
121
    trailingPara->setFirstLineIndent(gtMeasure::i2d(15, MM));
122
 
123
/***** Importer le texte *************************************************************/
124
    writer->append("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ", firstPara);
125
 
126
    QString currentWeight = firstPara->getFont()->getWeight();
127
    firstPara->getFont()->setWeight(BOLD); // de l'enum FontWeight (gtfont.h)
128
    writer->append("Ut a sapien.", firstPara); // importer avec une police en gras
129
 
130
    firstPara->getFont()->setWeight(currentWeight);
131
    writer->append(" Aliquam aliquet purus molestie dolor. Integer quis eros ut "
132
                   "erat posuere dictum. Curabitur dignissim. Integer orci. Fusce "
133
                   "vulputate lacus at ipsum. Quisque in libero nec mi laoreet "
134
                   "volutpat.\n", firstPara);
135
 
136
    // 2&egrave;me paragraphe
137
    writer->append("Aliquam eros pede, scelerisque quis, tristique cursus, placerat "
138
                   "convallis, velit. Nam condimentum. Nulla ut mauris. Curabitur "
139
                   "adipiscing, mauris non dictum aliquam, arcu risus dapibus diam, nec "
140
                   "sollicitudin quam erat quis ligula. Aenean massa nulla, "
141
                   "volutpat eu, accumsan et, fringilla eget, odio. Nulla placerat porta "
142
                   "justo. Nulla vitae turpis. Praesent lacus.", trailingPara);
143
 
144
    delete firstPara;
145
    delete trailingPara;
146
}
147
 
148
...
149
</pre>
150
</td></tr></table></blockquote>
151
 
152
<p>Maintenant, en cliquant avec le bouton droit sur un cadre de texte, choisissez "Importer un texte..." et s&eacute;lectionnez le module que vous venez de cr&eacute;er pour ouvrir un fichier; le cadre contient maintenant le texte &eacute;chantillon, format&eacute; correctement.</p>
153
<table width="100%"><tr><td align="center"><img src="images/result.png" alt="Exemple de cadre"/></td></tr></table>
154
 
24740 craig 155
<p>Si vous avez des questions, envoyez un courriel &agrave; Riku Leino (IRC nick:Tsoots) tsoots &agrave; gmail.com, inscrivez-vous &agrave; la liste de diffusion de Scribus ou joignez-vous au canal irc #scribus &agrave; irc.libera.chat.</p>
10646 cbradney 156
</body>
157
</html>
6646 mrdocs 158