Subversion Repositories Scribus

Compare Revisions

Ignore whitespace Rev 410 → Rev 411

/trunk/Scribus/configure.in
206,6 → 206,7
AC_CONFIG_FILES([scribus/plugins/gettext/txtim/Makefile])
AC_CONFIG_FILES([scribus/plugins/gettext/csvim/Makefile])
AC_CONFIG_FILES([scribus/plugins/gettext/htmlim/Makefile])
AC_CONFIG_FILES([scribus/plugins/gettext/sxwim/Makefile])
AC_CONFIG_FILES([scribus/profiles/Makefile])
AC_CONFIG_FILES([scribus/dicts/Makefile])
AC_CONFIG_FILES([scribus/po/Makefile])
/trunk/Scribus/ChangeLogCVS
1,5 → 1,15
Changes since 1.2
 
21.09.2004
* feature #1121: Danish Translation
 
20.09.2004
* bug #1084: Docs >Exporting to PDF > PDF and PHP Forms: PHP script doesn't work
* feature # 117: HTML importer
 
17.09.2004
* feature #1088: Please add link to Polish tutorial to community resources
 
14.09.2004
* feature #1064: Polish Translation Update
* feature #1072: Make it possible to change the document templates directory in settings
/trunk/Scribus/scribus/gtaction.cpp
27,6 → 27,7
textFrame = ScApp->doc->ActPage->SelItem.at(0);
it = textFrame;
lastParagraphStyle = -1;
inPara = false;
lastCharWasLineChange = false;
currentFrameStyle = "";
if (!append)
44,6 → 45,7
it->Ptext.clear();
it->CPos = 0;
}
updateParagraphStyles = false;
}
 
void gtAction::setProgressInfo()
51,6 → 53,7
ScApp->FMess->setText(QObject::tr("Importing text"));
ScApp->FProg->reset();
ScApp->FProg->setTotalSteps(0);
ScApp->FProg->setProgress(0,0);
}
 
void gtAction::setProgressInfoDone()
70,9 → 73,9
textFrame->CPos = 0;
}
 
void gtAction::write(QString text, gtStyle *style)
void gtAction::write(const QString& text, gtStyle *style)
{
int paragraphStyle = 0;
int paragraphStyle = -1;
if (style->target() == "paragraph")
{
gtParagraphStyle* pstyle = dynamic_cast<gtParagraphStyle*>(style);
83,6 → 86,14
gtFrameStyle* fstyle = dynamic_cast<gtFrameStyle*>(style);
applyFrameStyle(fstyle);
}
if ((inPara) && (!lastCharWasLineChange) && (text.left(1) != "\n") && (lastParagraphStyle != -1))
paragraphStyle = lastParagraphStyle;
 
 
if (paragraphStyle == -1)
paragraphStyle = ScApp->doc->CurrentABStil;
 
gtFont* font = style->getFont();
QString fontName = validateFont(font);
for (uint a = 0; a < text.length(); ++a)
103,31 → 114,30
hg->cextra = font->getKerning();
hg->cselect = false;
hg->cstyle = font->getEffectsValue();
if ((paragraphStyle == -1) || ((a == 0) && (text.at(0) == '\n')))
{
if (lastParagraphStyle == -1)
hg->cab = ScApp->doc->CurrentABStil;
else
hg->cab = lastParagraphStyle;
}
else
hg->cab = paragraphStyle;
hg->cab = paragraphStyle;
hg->xp = 0;
hg->yp = 0;
hg->PtransX = 0;
hg->PtransY = 0;
it->Ptext.append(hg);
lastParagraphStyle = hg->cab;
}
lastCharWasLineChange = text.right(1) == "\n";
inPara = style->target() == "paragraph";
lastParagraphStyle = paragraphStyle;
}
 
int gtAction::findParagraphStyle(gtParagraphStyle* pstyle)
{
return findParagraphStyle(pstyle->getName());
}
 
int gtAction::findParagraphStyle(const QString& name)
{
int pstyleIndex = -1;
for (uint i = 0; i < ScApp->doc->Vorlagen.size(); ++i)
{
if (ScApp->doc->Vorlagen[i].Vname == pstyle->getName())
{
if (ScApp->doc->Vorlagen[i].Vname == name)
{
pstyleIndex = i;
break;
}
143,7 → 153,10
createParagraphStyle(pstyle);
pstyleIndex = ScApp->doc->Vorlagen.size() - 1;
}
 
else if (updateParagraphStyles)
{
updateParagraphStyle(pstyleIndex, pstyle);
}
return pstyleIndex;
}
 
155,12 → 168,19
textFrame->Shade = fstyle->getBgShade();
textFrame->TabValues = QValueList<double>(*(fstyle->getTabValues()));
gtParagraphStyle* pstyle = new gtParagraphStyle(*fstyle);
int pstyleIndex = findParagraphStyle(pstyle);
if (pstyleIndex == -1)
pstyleIndex = 0;
textFrame->Doc->CurrentABStil = pstyleIndex;
// gtParagraphStyle* pstyle = new gtParagraphStyle(*fstyle);
// int pstyleIndex = findParagraphStyle(pstyle);
// if (pstyleIndex == -1)
// pstyleIndex = 0;
// textFrame->Doc->CurrentABStil = pstyleIndex;
 
double linesp;
if (fstyle->getAutoLineSpacing())
linesp = getLineSpacing(fstyle->getFont()->getSize());
else
linesp = fstyle->getLineSpacing();
textFrame->LineSp = linesp;
 
gtFont* font = fstyle->getFont();
QString fontName = validateFont(font);
textFrame->IFont = fontName;
170,6 → 190,7
textFrame->TxtStroke = font->getStrokeColor();
textFrame->ShTxtStroke = font->getStrokeShade();
textFrame->TxtScale = font->getHscale();
textFrame->ExtraV = font->getKerning();
}
 
void gtAction::getFrameFont(gtFont *font)
218,11 → 239,16
if (textFrame->Doc->Vorlagen[i].Vname == pstyle->getName())
return;
}
}
}
gtFont* font = pstyle->getFont();
struct StVorL vg;
vg.Vname = pstyle->getName();
vg.LineSpa = pstyle->getLineSpacing();
double linesp;
if (pstyle->getAutoLineSpacing())
linesp = getLineSpacing(pstyle->getFont()->getSize());
else
linesp = pstyle->getLineSpacing();
vg.LineSpa = linesp;
vg.Ausri = pstyle->getAlignment();
vg.Indent = pstyle->getIndent();
vg.First = pstyle->getFirstLineIndent();
249,8 → 275,72
ScApp->Mpal->Spal->updateFList();
}
 
void gtAction::removeParagraphStyle(const QString& name)
{
int index = findParagraphStyle(name);
if (index != -1)
removeParagraphStyle(index);
}
 
void gtAction::removeParagraphStyle(int index)
{
QValueList<StVorL>::iterator it = ScApp->doc->Vorlagen.at(index);
ScApp->doc->Vorlagen.remove(it);
}
 
void gtAction::updateParagraphStyle(const QString& pstyleName, gtParagraphStyle* pstyle)
{
int pstyleIndex = findParagraphStyle(pstyle->getName());
if (pstyleIndex != -1)
updateParagraphStyle(pstyleIndex, pstyle);
}
 
void gtAction::updateParagraphStyle(int pstyleIndex, gtParagraphStyle* pstyle)
{
gtFont* font = pstyle->getFont();
struct StVorL vg;
vg.Vname = pstyle->getName();
double linesp;
if (pstyle->getAutoLineSpacing())
linesp = getLineSpacing(pstyle->getFont()->getSize());
else
linesp = pstyle->getLineSpacing();
vg.LineSpa = linesp;
vg.Ausri = pstyle->getAlignment();
vg.Indent = pstyle->getIndent();
vg.First = pstyle->getFirstLineIndent();
vg.Avor = pstyle->getSpaceAbove();
vg.Anach = pstyle->getSpaceBelow();
vg.Font = validateFont(font);
vg.FontSize = font->getSize();
vg.TabValues.clear();
QValueList<double> *tabs = pstyle->getTabValues();
for (uint i = 0; i < tabs->size(); ++i)
{
double tmp = (*tabs)[i];
vg.TabValues.append(tmp);
}
vg.Drop = pstyle->hasDropCap();
vg.DropLin = pstyle->getDropCapHeight();
vg.FontEffect = font->getEffectsValue();
vg.FColor = font->getColor();
vg.FShade = font->getShade();
vg.SColor = font->getStrokeColor();
vg.SShade = font->getStrokeShade();
vg.BaseAdj = pstyle->isAdjToBaseline();
ScApp->doc->Vorlagen[pstyleIndex] = vg;
}
 
QString gtAction::validateFont(gtFont* font)
{
// Dirty hack for family Times New Roman
if (font->getFamily() == "Times New")
{
font->setFamily("Times New Roman");
if (font->getWeight() == "Roman")
font->setWeight("Regular");
}
 
QString useFont = font->getName();
if ((useFont == NULL) || (useFont == ""))
useFont = textFrame->IFont;
257,6 → 347,7
else if (ScApp->Prefs.AvailFonts[font->getName()] == 0)
{
bool found = false;
useFont == NULL;
QString tmpName = findFontName(font);
if (tmpName != NULL)
{
304,6 → 395,7
}
}
}
 
if(!ScApp->doc->UsedFonts.contains(useFont))
ScApp->doc->AddFont(useFont, ScApp->Prefs.AvailFonts[useFont]->Font);
return useFont;
324,6 → 416,11
return ret;
}
 
double gtAction::getLineSpacing(int fontSize)
{
return ((fontSize / 10.0) * static_cast<double>(ScApp->doc->AutoLine) / 100) + (fontSize / 10.0);
}
 
double gtAction::getFrameWidth()
{
return textFrame->Width;
334,6 → 431,16
return QString(textFrame->AnName);
}
 
bool gtAction::getUpdateParagraphStyles()
{
return updateParagraphStyles;
}
 
void gtAction::setUpdateParagraphStyles(bool newUPS)
{
updateParagraphStyles = newUPS;
}
 
void gtAction::finalize()
{
if (ScApp->doc->Trenner->AutoCheck)
/trunk/Scribus/scribus/gtmeasure.cpp
51,6 → 51,16
return value / ratio;
}
 
double gtMeasure::convert2(double value)
{
return value * ratio;
}
 
double gtMeasure::convert2(int value)
{
return value * ratio;
}
 
double gtMeasure::parse(QString value)
{
QString lowerValue = value.lower();
63,41 → 73,55
else if (lowerValue.find("mm") != -1)
{
init(MM);
dbl = lowerValue.remove("pt");
dbl = lowerValue.remove("mm");
}
else if (lowerValue.find("in") != -1)
{
init(IN);
dbl = lowerValue.remove("pt");
dbl = lowerValue.remove("in");
}
else if (lowerValue.find("p") != -1)
{
init(P);
dbl = lowerValue.remove("pt");
dbl = lowerValue.remove("p");
}
else
init(PT);
 
dbl = dbl.stripWhiteSpace();
if (dbl.find(".") == -1)
dbl += ".0";
return dbl.toDouble();
}
 
double gtMeasure::d2d(double value, Unit from)
double gtMeasure::convert(double value, Unit from, Unit to)
{
return d2d(value, from, to);
}
 
double gtMeasure::convert(int value, Unit from, Unit to)
{
return i2d(value, from, to);
}
 
double gtMeasure::d2d(double value, Unit from, Unit to)
{
init(from);
return convert(value);
double tmp = convert(value);
init(to);
return convert2(tmp);
}
 
 
double gtMeasure::i2d(int value, Unit from)
double gtMeasure::i2d(int value, Unit from, Unit to)
{
init(from);
return convert(value);
double tmp = convert(value);
init(to);
return convert2(tmp);
}
 
double gtMeasure::qs2d(QString value)
double gtMeasure::qs2d(QString value, Unit to)
{
return convert(parse(value));
double tmp = convert(parse(value));
init(to);
return convert2(tmp);
}
/trunk/Scribus/scribus/gtwriter.cpp
42,6 → 42,7
void gtWriter::setFrameStyle(gtFrameStyle *fStyle)
{
frameStyle = fStyle;
action->applyFrameStyle(fStyle);
}
 
void gtWriter::setParagraphStyle(gtParagraphStyle *pStyle)
70,8 → 71,18
characterStyle = NULL;
}
 
void gtWriter::append(QString text)
double gtWriter::getPreferredLineSpacing(int fontSize)
{
return action->getLineSpacing(fontSize);
}
 
double gtWriter::getPreferredLineSpacing(double fontSize)
{
return getPreferredLineSpacing(static_cast<int>(fontSize * 10));
}
 
void gtWriter::append(const QString& text)
{
if (text == NULL)
return;
if (text.length() == 0)
100,7 → 111,7
return action->getFrameName();
}
 
void gtWriter::append(QString text, gtStyle *style)
void gtWriter::append(const QString& text, gtStyle *style)
{
if (style == NULL)
{
113,6 → 124,14
currentStyle = NULL;
}
 
void gtWriter::append(const QString& text, gtStyle *style, bool updatePStyle)
{
bool ups = action->getUpdateParagraphStyles();
action->setUpdateParagraphStyles(updatePStyle);
append(text, style);
action->setUpdateParagraphStyles(ups);
}
 
void gtWriter::setDefaultStyle()
{
// @todo Get the style of the text frame we are appending to.
121,6 → 140,16
frameStyle = defaultStyle;
}
 
bool gtWriter::getUpdateParagraphStyles()
{
return action->getUpdateParagraphStyles();
}
 
void gtWriter::setUpdateParagraphStyles(bool newUPS)
{
action->setUpdateParagraphStyles(newUPS);
}
 
gtWriter::~gtWriter()
{
if (!errorSet)
/trunk/Scribus/scribus/scfonts_ttf.cpp
74,6 → 74,17
IsFixedPitch = face->face_flags & 4;
gindex = 0;
charcode = FT_Get_First_Char( face, &gindex );
if (face->num_glyphs < 257)
{
for(int u = 0; u < face->num_charmaps; u++)
{
if (face->charmaps[u]->encoding == FT_ENCODING_ADOBE_CUSTOM)
{
FT_Set_Charmap(face,face->charmaps[u]);
break;
}
}
}
while ( gindex != 0 )
{
error = FT_Load_Glyph( face, gindex, FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP );
/trunk/Scribus/scribus/gtaction.h
32,6 → 32,8
#include "gtparagraphstyle.h"
#include "gtstyle.h"
 
typedef QMap<QString, QString> FontFamilyMap;
 
class gtAction
{
private:
38,13 → 40,17
PageItem *textFrame;
PageItem *it;
int lastParagraphStyle;
bool inPara;
bool lastCharWasLineChange;
bool updateParagraphStyles;
QString currentFrameStyle;
FontFamilyMap families;
int findParagraphStyle(const QString& name);
int findParagraphStyle(gtParagraphStyle* pstyle);
int applyParagraphStyle(gtParagraphStyle* pstyle);
void applyFrameStyle(gtFrameStyle* fstyle);
QString validateFont(gtFont* font);
QString findFontName(gtFont* font);
void updateParagraphStyle(int pstyleIndex, gtParagraphStyle* pstyle);
void finalize();
public:
gtAction(bool append);
53,13 → 59,20
void setProgressInfo();
void setProgressInfoDone();
void setInfo(QString infoText);
double getLineSpacing(int fontSize);
void clearFrame();
void getFrameFont(gtFont *font);
void getFrameStyle(gtFrameStyle *fstyle);
void write(QString text, gtStyle *style);
void write(const QString& text, gtStyle *style);
void applyFrameStyle(gtFrameStyle* fstyle);
void createParagraphStyle(gtParagraphStyle* pstyle);
void updateParagraphStyle(const QString& pstyleName, gtParagraphStyle* pstyle);
void removeParagraphStyle(const QString& name);
void removeParagraphStyle(int index);
double getFrameWidth();
QString getFrameName();
bool getUpdateParagraphStyles();
void setUpdateParagraphStyles(bool newUPS);
};
 
#endif
/trunk/Scribus/scribus/po/scribus.da_DK.ts
2,8 → 2,8
<context>
<name>@@translation</name>
<message>
<source>Project-Id-Version: Scribus 1.2</source>
<translation type="obsolete">Revision-Date: 2004-09-03 09:35:00 CET
<source>Project-Id-Version: Scribus 1.2.1</source>
<translation type="obsolete">Revision-Date: 2004-09-19 16:00:00 CET
Last-Translator: Morten Langlo &lt;mlanglo@mail.dk&gt;</translation>
</message>
</context>
173,6 → 173,10
<source>&amp;Close</source>
<translation>&amp;Luk</translation>
</message>
<message>
<source>Swedish:</source>
<translation>Svensk:</translation>
</message>
</context>
<context>
<name>AdvOptions</name>
6746,6 → 6750,18
<source>Apply &amp;Under Color Removal</source>
<translation>Anvend Reduktion af &amp;underliggende farve</translation>
</message>
<message>
<source>T&amp;emplates:</source>
<translation>S&amp;kabeloner:</translation>
</message>
<message>
<source>Cha&amp;nge...</source>
<translation>Væ&amp;lg...</translation>
</message>
<message>
<source>Additional Directory for Document Templates</source>
<translation>Ekstra mappe for dokument skabeloner</translation>
</message>
</context>
<context>
<name>QColorDialog</name>
7493,6 → 7509,17
<source>CSV_header</source>
<translation>CSV_overskrift</translation>
</message>
<message>
<source>Template: </source>
<translation>Skabelon: </translation>
</message>
<message>
<source>
External Links
</source>
<translation>
Ekstern Lænker</translation>
</message>
</context>
<context>
<name>QTextEdit</name>
8999,6 → 9026,14
<source>&amp;Edit Shape</source>
<translation>&amp;Redigér form</translation>
</message>
<message>
<source>File %1 is not in Scribus format</source>
<translation>Filen %1 er ikke i Scribus format</translation>
</message>
<message>
<source>Afrikaans</source>
<translation>Afrikaans</translation>
</message>
</context>
<context>
<name>ScribusView</name>
/trunk/Scribus/scribus/scribusXml.h
23,7 → 23,7
bool IsScribus(QString fileName);
QString ReadDatei(QString fileName);
void GetItemProps(bool newVersion, QDomElement *obj, struct CLBuf *OB);
void ScriXmlDoc::SetItemProps(QDomElement *ob, PageItem* item);
void SetItemProps(QDomElement *ob, PageItem* item);
QString GetItemText(QDomElement *it, ScribusDoc *doc, preV *Prefs, bool VorLFound, bool impo);
QString AskForFont(SCFonts &avail, QString fStr, preV *Prefs, ScribusDoc *doc);
bool ReadLStyles(QString fileName, QMap<QString,multiLine> *Sty);
41,7 → 41,7
bool WriteDoc(QString fileName, ScribusDoc *docu, ScribusView *viewx, QProgressBar *dia2);
void WritePref(preV *Vor, QString ho);
bool ReadPref(struct preV *Vorein, QString ho);
QColor ScriXmlDoc::SetFarbe(ScribusDoc *doc, QString farbe, int shad);
QColor SetFarbe(ScribusDoc *doc, QString farbe, int shad);
CListe Farben;
QValueList<StVorL> Vorlagen;
struct Linked {
/trunk/Scribus/scribus/qm/scribus.da.qm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/Scribus/scribus/scfonts.cpp
201,12 → 201,15
StdVW = "1";
FontBBox = tmp.setNum(face->bbox.xMin)+" "+tmp2.setNum(face->bbox.yMin)+" "+tmp3.setNum(face->bbox.xMax)+" "+tmp4.setNum(face->bbox.yMax);
IsFixedPitch = face->face_flags & 4;
for(int u = 0; u < face->num_charmaps; u++)
if (face->num_glyphs < 257)
{
if (face->charmaps[u]->encoding == FT_ENCODING_ADOBE_CUSTOM)
for(int u = 0; u < face->num_charmaps; u++)
{
FT_Set_Charmap(face,face->charmaps[u]);
break;
if (face->charmaps[u]->encoding == FT_ENCODING_ADOBE_CUSTOM)
{
FT_Set_Charmap(face,face->charmaps[u]);
break;
}
}
}
gindex = 0;
/trunk/Scribus/scribus/gtwriter.h
42,10 → 42,15
void unsetFrameStyle();
void unsetParagraphStyle();
void unsetCharacterStyle();
void append(QString text); // Use the styles set beforehand
void append(QString text, gtStyle *style); // Use the style provided as a parameter
double getPreferredLineSpacing(int fontSize);
double getPreferredLineSpacing(double fontSize);
void append(const QString& text); // Use the styles set beforehand
void append(const QString& text, gtStyle *style); // Use the style provided as a parameter
void append(const QString& text, gtStyle *style, bool updatePStyle);
double getFrameWidth();
QString getFrameName();
bool getUpdateParagraphStyles();
void setUpdateParagraphStyles(bool newUPS);
private:
gtAction *action;
gtFrameStyle* defaultStyle;
/trunk/Scribus/scribus/gtparagraphstyle.cpp
36,6 → 36,8
dropCap = p.dropCap;
dropCapHeight = p.dropCapHeight;
adjToBaseline = p.adjToBaseline;
autoLineSpacing = p.autoLineSpacing;
isVisible = p.isVisible;
}
 
gtParagraphStyle::gtParagraphStyle(const gtStyle& s) : gtStyle(s)
54,6 → 56,8
dropCap = false;
dropCapHeight = 2;
adjToBaseline = false;
autoLineSpacing = false;
isVisible = true;
}
 
QString gtParagraphStyle::target()
71,6 → 75,16
lineSpacing = newLineSpacing;
}
 
bool gtParagraphStyle::getAutoLineSpacing()
{
return autoLineSpacing;
}
 
void gtParagraphStyle::setAutoLineSpacing(bool newALS)
{
autoLineSpacing = newALS;
}
 
int gtParagraphStyle::getAlignment()
{
return alignment;
/trunk/Scribus/scribus/libabout/about.cpp
56,7 → 56,7
tabLayout1->addWidget( PixmapLabel1 );
BuildID = new QLabel( tab, "BB" );
BuildID->setAlignment(Qt::AlignCenter);
QString bu = tr("%1. %2 %3 ").arg("11").arg("September").arg("2004");
QString bu = tr("%1. %2 %3 ").arg("21").arg("September").arg("2004");
#ifdef HAVE_CMS
bu += "C";
#else
83,8 → 83,9
tabLayout->setSpacing( 6 );
tabLayout->setMargin( 10 );
TextView1 = new QTextView( tab_2, "TextView1" );
TextView1->setText(QString::fromUtf8("<table><tr><td><b>" + tr("Programming:").utf8() + "</b></td><td> </td></tr>" +
TextView1->setText(QString::fromUtf8("<table><tr><td><b>" + tr("Development Team:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Franz Schmid</td><td>Franz.Schmid@altmuehlnet.de</td></tr>" +
"<tr><td>Peter Linnell</td><td>scribusdocs@atlantictechsolutions.com</td></tr>" +
"<tr><td>Paul F. Johnson</td><td>paul@all-the-johnsons.co.uk</td></tr>" +
"<tr><td>Craig Bradney</td><td>cbradney@zip.com.au</td></tr>" +
"<tr><td>Petr Vaněk</td><td>petr@yarpen.cz</td></tr>" +
91,10 → 92,19
"<tr><td>Riku Leino</td><td>tsoots@welho.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Contributions from:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Niyam Busham</td><td></td></tr>" +
"<tr><td>Martin Costabel</td><td></td></tr>" +
"<tr><td>Steve Callcott</td><td>stotte@ntlworld.com</td></tr>" +
"<tr><td>Maciej Hański</td><td>m.hanski@gmx.at</td></tr>" +
"<tr><td>Oleksandr Moskalenko</td><td>malex@tagancha.org</td></tr>" +
"<tr><td>Marti Maria</td><td></td></tr>" +
"<tr><td>Alexandre Prokoudine</td><td>techwriter@land.ru</td></tr>"
"<tr><td>Alessandro Rimoldi</td><td>http://ideale.ch/contact</td></tr>" +
"<tr><td>Craig Ringer</td><td></td></tr>" +
"<tr><td>Alastair Robinson</td><td>blackfive@fakenhamweb.co.uk</td></tr>" +
"<tr><td>Johannes Rüschel</td><td>jo.rueschel@gmx.de</td></tr>" +
"<tr><td>Jean-Jacques Sarton</td><td>jj.sarton@t-online.de</td></tr>" +
"<tr><td>Christian Töpp</td><td>mr-ct@gmx.de</td></tr>" +
"<tr><td>Alastair Robinson</td><td>blackfive@fakenhamweb.co.uk</td></tr>" +
"<tr><td>Christian Töpp</td><td>mr-ct@gmx.de</td></tr>" +
"<tr><td></td><td> </td></tr>" +
#if (_MSC_VER >= 1200)
"<tr><td><b>" + tr("Windows port:").utf8() + "</b></td><td> </td></tr>" +
101,9 → 111,14
"<tr><td>Paul F. Johnson</td><td>paul@all-the-johnsons.co.uk</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
#endif
"<tr><td><b>" + tr("Documentation:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Peter Linnell</td><td>scribusdocs@atlantictechsolutions.com</td></tr>" +
"<tr><td>Yves Ceccone</td><td>yves@yeccoe.org</td></tr>" +
"<tr><td><b>" + tr("Official Documentation:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Peter Linnell</td><td>scribusdocs@atlantictechsolutions.com</td></tr>" +
"<tr><td>Craig Bradney</td><td>cbradney@zip.com.au</td></tr>" +
"<tr><td>Frédéric Dubuy</td><td>effediwhy@gmail.com</td></tr>" +
"<tr><td>Johannes Rüschel</td><td>jo.rueschel@gmx.de</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Other Documentation:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Yves Ceccone</td><td>yves@yeccoe.org</td></tr>" +
"<tr><td>Holger Reibold</td><td>http://www.bomots.de/scribus/</td></tr>" +
"<tr><td>Thomas Zastrow</td><td>webmaster@thomas-zastrow.de</td></tr></table>"));
TextView1->setTextFormat( QTextView::RichText );
114,10 → 129,29
tabLayout_2->setSpacing( 6 );
tabLayout_2->setMargin( 10 );
TextView2 = new QTextView( tab_3, "TextView1_2" );
TextView2->setText(QString::fromUtf8( "<table><tr><td><b>" + tr("German:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Franz Schmid</td><td>Franz.Schmid@altmuehlnet.de</td></tr>" +
"<tr><td>Johannes Rüschel</td><td>jo.rueschel@gmx.de</td></tr>" +
TextView2->setText(QString::fromUtf8( "<table><tr><td><b>" + tr("Basque:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Pablo Saratxaga</td><td>pablo@mandrakesoft.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Brazilian:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Celio Santos</td><td>celio@electronic.srv.br</td></tr>" +
"<tr><td>Cezar de Souza Marson Nido</td><td>cesar@electronic.srv.br</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Bulgarian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Vasko Tomanov</td><td>vasko@web.bg</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Czech:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Petr Vaněk</td><td>petr@yarpen.cz</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Danish:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Morten Langlo</td><td>mlanglo@mail.dk</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("English (British):").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Craig Bradney</td><td>cbradney@zip.com.au</td></tr>" +
"<tr><td>Paul F. Johnson</td><td>paul@all-the-johnsons.co.uk</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Finnish:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Riku Leino</td><td>tsoots@welho.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("French:").utf8() + "</b></td><td> </td>" +
"<tr><td>Michel Briand</td><td>michelbriand@free.fr</td></tr>" +
"<tr><td>Yves Ceccone</td><td>yves@yeccoe.org</td></tr>" +
125,76 → 159,57
"<tr><td>Louis Desjardins</td><td>louis_desjardins@mardigrafe.com</td></tr>" +
"<tr><td>Frédéric Dubuy</td><td>effediwhy@gmail.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Spanish and Catalan:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Josep Febrer</td><td>josep@linuxmail.org</td></tr>" +
"<tr><td><b>" + tr("Galician:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Manuel Anxo Rei</td><td>manxopar@avogaciagalega.org</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("German:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Franz Schmid</td><td>Franz.Schmid@altmuehlnet.de</td></tr>" +
"<tr><td>Johannes Rüschel</td><td>jo.rueschel@gmx.de</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Italian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Pier Luigi Cinquantini</td><td>plcinquantini@katamail.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Hungarian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Giovanni Biczó</td><td>gbiczo@freestart.hu</td></tr>" +
"<tr><td>Bence Nagy</td><td>scribus@tipogral.hu</td></tr>" +
"<tr><td>Zoltán Böszörményi</td><td>zboszor@freemail.hu</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Ukrainian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Oleksandr Moskalenko</td><td>malex@tagancha.org</td></tr>" +
"<tr><td>Sergiy Kudryk</td><td>kudryk@yahoo.com</td></tr>" +
"<tr><td><b>" + tr("Italian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Pier Luigi Cinquantini</td><td>plcinquantini@katamail.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Bulgarian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Vasko Tomanov</td><td>vasko@web.bg</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Galician:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Manuel Anxo Rei</td><td>manxopar@avogaciagalega.org</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Turkish:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Erkan Kaplan</td><td>Selamsana@uni.de</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Lithuanian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Aivaras Kirejevas</td><td>kiras@mail.lt</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Polish:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Maciej Hański</td><td>m.hanski@gmx.at</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Czech:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Petr Vaněk</td><td>petr@yarpen.cz</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Slovak:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Zdenko Podobn&yacute;ý</td><td>zdpo@mailbox.sk</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Danish:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Morten Langlo</td><td>mlanglo@mail.dk</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Norwegian:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Klaus Ade Johnstad</td><td>klaus@astro.uio.no</td></tr>" +
"<tr><td>Axel Bojer</td><td>axelb@skolelinux.no</td></tr>" +
"<tr><td>Johannes Wilm</td><td>j@indymedia.no</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("English:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Paul F. Johnson</td><td>paul@all-the-johnsons.co.uk</td></tr>" +
"<tr><td>Craig Bradney</td><td>cbradney@zip.com.au</td></tr>" +
"<tr><td><b>" + tr("Polish:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Maciej Hański</td><td>m.hanski@gmx.at</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Welsh:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Kevin Donnelly</td><td>kevin@dotmon.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Russian:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Alexandre Prokoudine</td><td>techwriter@land.ru</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Brazilian:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Celio Santos</td><td>celio@electronic.srv.br</td></tr>" +
"<tr><td>Cezar de Souza Marson Nido</td><td>cesar@electronic.srv.br</td></tr>" +
"<tr><td><b>" + tr("Slovak:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Zdenko Podobn&yacute;ý</td><td>zdpo@mailbox.sk</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Finnish:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Riku Leino</td><td>tsoots@welho.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Slovenian:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Boštjan Špetič</td><td>igzebedze@kiberpipa.org</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Basque:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Pablo Saratxaga</td><td>pablo@mandrakesoft.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Spanish and Catalan:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Josep Febrer</td><td>josep@linuxmail.org</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Swedish:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Göran Bondeson</td><td>goran@bondeson.net</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Turkish:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Erkan Kaplan</td><td>Selamsana@uni.de</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Ukrainian:").utf8() + "</b></td><td> </td></tr>" +
"<tr><td>Oleksandr Moskalenko</td><td>malex@tagancha.org</td></tr>" +
"<tr><td>Sergiy Kudryk</td><td>kudryk@yahoo.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"<tr><td><b>" + tr("Welsh:").utf8() + "</b></td><td></td></tr>" +
"<tr><td>Kevin Donnelly</td><td>kevin@dotmon.com</td></tr>" +
"<tr><td> </td><td> </td></tr>" +
"</table>"));
TextView2->setTextFormat( QTextView::RichText );
tabLayout_2->addWidget( TextView2 );
204,12 → 219,14
tab_4 = new QWidget( TabWidget2, "tab_4" );
TextView4 = new QTextView( tab_4, "TextView4" );
TextView4->setText(QString::fromUtf8(
"<table><tr><td><b>" + tr("Homepage and online reference").utf8() + "</b></td><td></td></tr>" +
"<table><tr><td><b>" + tr("Homepage").utf8() + "</b></td><td></td></tr>" +
"<tr><td colspan=\"2\"><p><a href=\"http://www.scribus.net\">http://www.scribus.net</a></p></td></tr>" +
"<tr><td><b>" + tr("Mailing list").utf8() + "</b></td><td></td></tr>" +
"<tr><td><b>" + tr("Online Reference").utf8() + "</b></td><td></td></tr>" +
"<tr><td colspan=\"2\"><p><a href=\"http://docs.scribus.net\">http://docs.scribus.net</a></p></td></tr>" +
"<tr><td><b>" + tr("Bugs and Feature Requests").utf8() + "</b></td><td></td></tr>" +
"<tr><td colspan=\"2\"><p><a href=\"http://bugs.scribus.net\">http://bugs.scribus.net</a></p></td></tr>" +
"<tr><td><b>" + tr("Mailing List").utf8() + "</b></td><td></td></tr>" +
"<tr><td colspan=\"2\"><p><a href=\"http://nashi.altmuehlnet.de/mailman/listinfo/scribus\">http://nashi.altmuehlnet.de/mailman/listinfo/scribus</a></p></td></tr>" +
"<tr><td><b>" + tr("Bugs and feature requests").utf8() + "</b></td><td></td></tr>" +
"<tr><td colspan=\"2\"><p><a href=\"http://bugs.scribus.net\">http://bugs.scribus.net</a></p></td></tr>" +
"</table>"
));
TextView4->setTextFormat( QTextView::RichText );
/trunk/Scribus/scribus/scribus.cpp
3799,122 → 3799,160
 
void ScribusApp::slotFilePrint()
{
QString fna, prn, cmd, scmd, cc, data, SepNam;
int Nr;
bool fil, sep, farbe, PSfile, mirrorH, mirrorV, useICC, DoGCR;
PSfile = false;
//QString fna, prn, cmd, scmd, cc, data, SepNam;
//int Nr;
//bool fil, sep, farbe, PSfile, mirrorH, mirrorV, useICC, DoGCR;
//PSfile = false;
PrintOptions options;
FMess->setText( tr("Printing..."));
if (PrinterUsed)
{
prn = PDef.Pname;
fna = PDef.Dname;
options.printer = PDef.Pname;
options.filename = PDef.Dname;
}
else
{
prn = "";
options.printer = "";
if (!doc->DocName.startsWith( tr("Document")))
{
QFileInfo fi(doc->DocName);
fna = fi.dirPath()+"/"+fi.baseName()+".ps";
options.filename = fi.dirPath()+"/"+fi.baseName()+".ps";
}
else
{
QDir di = QDir();
fna = di.currentDirPath()+"/"+doc->DocName+".ps";
options.filename = di.currentDirPath()+"/"+doc->DocName+".ps";
}
}
scmd = PDef.Command;
Druck *printer = new Druck(this, fna, prn, scmd, Prefs.GCRMode);
Druck *printer = new Druck(this, options.filename, options.printer, PDef.Command, Prefs.GCRMode);
printer->setMinMax(1, view->Pages.count(), doc->ActPage->PageNr+1);
if (printer->exec())
{
std::vector<int> pageNs;
ReOrderText(doc, view);
qApp->setOverrideCursor(QCursor(waitCursor), true);
prn = printer->printerName();
fna = printer->outputFileName();
fil = printer->outputToFile();
options.printer = printer->printerName();
options.filename = printer->outputFileName();
options.toFile = printer->outputToFile();
if (printer->CurrentPage->isChecked())
pageNs.push_back(doc->ActPage->PageNr+1);
options.pageNumbers.push_back(doc->ActPage->PageNr+1);
else
{
if (printer->RadioButton1->isChecked())
parsePagesString("*", &pageNs, doc->PageC);
parsePagesString("*", &options.pageNumbers, doc->PageC);
else
parsePagesString(printer->PageNr->text(), &pageNs, doc->PageC);
parsePagesString(printer->PageNr->text(), &options.pageNumbers, doc->PageC);
}
Nr = printer->numCopies();
sep = printer->outputSeparations();
SepNam = printer->separationName();
farbe = printer->color();
mirrorH = printer->MirrorH;
mirrorV = printer->MirrorV;
useICC = printer->ICCinUse;
DoGCR = printer->DoGCR;
PDef.Pname = prn;
PDef.Dname = fna;
options.copies = printer->numCopies();
options.outputSeparations = printer->outputSeparations();
options.separationName = printer->separationName();
options.useColor = printer->color();
options.mirrorH = printer->MirrorH;
options.mirrorV = printer->MirrorV;
options.useICC = printer->ICCinUse;
options.doGCR = printer->DoGCR;
options.PSLevel = printer->PSLevel;
PDef.Pname = options.printer;
PDef.Dname = options.filename;
if (printer->OtherCom->isChecked())
{
PDef.Command = printer->Command->text();
options.printerCommand = printer->Command->text();
options.useAltPrintCommand = true;
}
else
{
options.useAltPrintCommand = false;
}
#ifdef HAVE_CUPS
options.printerOptions = printer->PrinterOpts;
#endif
#ifndef HAVE_CUPS
options.printerOptions = QString("");
#endif
PrinterUsed = true;
QMap<QString,QFont> ReallyUsed;
ReallyUsed.clear();
GetUsedFonts(&ReallyUsed);
PSLib *dd = getPSDriver(true, Prefs.AvailFonts, ReallyUsed, doc->PageColors, false);
if (dd != NULL)
if (!doPrint(&options))
QMessageBox::warning(this, tr("Warning"), tr("Printing failed!"), tr("OK"));
qApp->setOverrideCursor(QCursor(arrowCursor), true);
}
delete printer;
FMess->setText( tr("Ready"));
}
 
/*!
\fn ScribusApp::doPrint()
\author Franz Schmid
\date
\brief Generate and print PostScript from a doc
\param options PrintOptions struct to control all settings
\sa ScribusApp::slotFilePrint()
\retval True for success
*/
bool ScribusApp::doPrint(PrintOptions *options)
{
bool retw = false;
QMap<QString,QFont> ReallyUsed;
QString filename = options->filename;
ReallyUsed.clear();
GetUsedFonts(&ReallyUsed);
PSLib *dd = getPSDriver(true, Prefs.AvailFonts, ReallyUsed, doc->PageColors, false);
if (dd != NULL)
{
bool PSfile = false;
if (options->toFile)
PSfile = dd->PS_set_file(filename);
else
{
if (fil)
PSfile = dd->PS_set_file(fna);
else
PSfile = dd->PS_set_file(PrefsPfad+"/tmp.ps");
filename = PrefsPfad+"/tmp.ps";
}
if (PSfile)
{
// Write the PS to a file
view->CreatePS(dd, options->pageNumbers, options->outputSeparations, options->separationName,
options->useColor, options->mirrorH, options->mirrorV, options->useICC, options->doGCR);
if (options->PSLevel != 3)
{
PSfile = dd->PS_set_file(PrefsPfad+"/tmp.ps");
fna = PrefsPfad+"/tmp.ps";
// use gs to convert our PS to a lower version
QString tmp;
QString opts = "-dDEVICEWIDTHPOINTS=";
opts += tmp.setNum(doc->PageB);
opts += " -dDEVICEHEIGHTPOINTS=";
opts += tmp.setNum(doc->PageH);
if (options->PSLevel == 1)
system("ps2ps -dLanguageLevel=1 "+opts+" \""+filename+"\" \""+filename+".tmp\"");
else
system("ps2ps "+opts+" \""+filename+"\" \""+filename+".tmp\"");
system("mv \""+filename+".tmp\" \""+filename+"\"");
}
if (PSfile)
if (!options->toFile)
{
view->CreatePS(dd, pageNs, sep, SepNam, farbe, mirrorH, mirrorV, useICC, DoGCR);
if (printer->PSLevel != 3)
// print and delete the PS file
QString cmd;
if (options->useAltPrintCommand)
{
QString tmp;
QString opts = "-dDEVICEWIDTHPOINTS=";
opts += tmp.setNum(doc->PageB);
opts += " -dDEVICEHEIGHTPOINTS=";
opts += tmp.setNum(doc->PageH);
if (printer->PSLevel == 1)
system("ps2ps -dLanguageLevel=1 "+opts+" \""+fna+"\" \""+fna+".tmp\"");
else
system("ps2ps "+opts+" \""+fna+"\" \""+fna+".tmp\"");
system("mv \""+fna+".tmp\" \""+fna+"\"");
cmd = options->printerCommand + " "+filename;
system(cmd);
}
if (!fil)
else
{
if (printer->OtherCom->isChecked())
{
cmd = printer->Command->text()+ " "+fna;
system(cmd);
}
else
{
cmd = "lpr -P" + prn;
if (Nr > 1)
cmd += " -#" + cc.setNum(Nr);
#ifdef HAVE_CUPS
cmd += printer->PrinterOpts;
#endif
cmd += " "+fna;
system(cmd);
}
unlink(fna);
QString cc;
cmd = "lpr -P" + options->printer;
if (options->copies > 1)
cmd += " -#" + cc.setNum(options->copies);
cmd += options->printerOptions;
cmd += " "+filename;
system(cmd);
}
unlink(filename);
}
else
QMessageBox::warning(this, tr("Warning"), tr("Printing failed!"), tr("OK"));
delete dd;
closePSDriver();
qApp->setOverrideCursor(QCursor(arrowCursor), true);
retw = true;
}
else
retw = false;
delete dd;
closePSDriver();
}
delete printer;
FMess->setText( tr("Ready"));
return retw;
}
 
void ScribusApp::slotFileQuit()
/trunk/Scribus/scribus/plugins/scriptplugin/cmddoc.h
24,6 → 24,9
PyObject *scribus_setunit(PyObject *self, PyObject* args);
/** Returns actual unit scale. */
PyObject *scribus_getunit(PyObject *self, PyObject* args);
/** Loads styles from another .sla file (craig r.)*/
PyObject *scribus_loadstylesfromfile(PyObject *self, PyObject *args);
PyObject *scribus_setdoctype(PyObject *self, PyObject* args);
 
#endif
 
/trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.cpp
530,3 → 530,91
return PyInt_FromLong(static_cast<long>(true));
}
 
/*
* Craig Ringer, 2004-09-09
* Apply the named style to the currently selected object.
* pv, 2004-09-13, optionaly param objectName + "check the page" stuff
* FIXME: should handled explicitly passed object name too.
*/
PyObject *scribus_setstyle(PyObject *self, PyObject* args)
{
char *Style = "";
char *name = "";
if (!PyArg_ParseTuple(args, "s|s", &Style, &name))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetStyle(style, [objectName])"));
return NULL;
}
if (!Carrier->HaveDoc)
{
Py_INCREF(Py_None);
return Py_None;
}
PageItem *item = GetUniqueItem(QString(name));
if ((item != NULL) && (item->PType == 4))
{
/*
* First, find the style number associated with the requested style
* by scanning through the styles looking for the name. If
* we can't find it, raise PyExc_Exception.
* FIXME: Should use a more specific exception.
*/
bool found = false;
uint styleid = 0;
// We start at zero here because it's OK to match an internal name
for (uint i=0; i < Carrier->doc->Vorlagen.count(); ++i)
{
if (Carrier->doc->Vorlagen[i].Vname == Style) {
found = true;
styleid = i;
break;
}
}
if (!found) {
// whoops, the user specified an invalid style, complain loudly.
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("Style not found"));
return NULL;
}
// quick hack to always apply on the right frame - pv
Carrier->doc->ActPage = item->OwnPage;
Carrier->doc->ActPage->Deselect(true);
Carrier->doc->ActPage->SelectItemNr(item->ItemNr);
// Now apply the style.
Carrier->setNewAbStyle(styleid);
}
Py_INCREF(Py_None);
return Py_None;
}
 
/*
* Craig Ringer, 2004-09-09
* Enumerate all known paragraph styles
*/
PyObject *scribus_getstylenames(PyObject *self, PyObject* args)
{
PyObject *styleList;
if (!PyArg_ParseTuple(args, ""))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("GetAllStyles()"));
return NULL;
}
if (!Carrier->HaveDoc)
{
Py_INCREF(Py_None);
return Py_None;
}
styleList = PyList_New(0);
/*
* We start at 5 because the lower styles are internal names.
* FIXME: this should be a constant
*/
for (uint i=0; i < Carrier->doc->Vorlagen.count(); ++i)
{
if (PyList_Append(styleList, PyString_FromString(Carrier->doc->Vorlagen[i].Vname)))
{
// An exception will have already been set by PyList_Append apparently.
return NULL;
}
}
return styleList;
}
/trunk/Scribus/scribus/plugins/scriptplugin/cmdpage.cpp
40,7 → 40,7
if (!Carrier->HaveDoc)
return PyInt_FromLong(0L);
bool ret = Carrier->DoSaveAsEps(QString(Name));
// qApp->processEvents();
// qApp->processEvents();
return PyInt_FromLong(static_cast<long>(ret));
}
 
59,7 → 59,7
if ((e < 0) || (e > static_cast<int>(Carrier->view->Pages.count())-1))
return Py_None;
Carrier->DeletePage2(e);
// qApp->processEvents();
// qApp->processEvents();
return Py_None;
}
 
78,7 → 78,7
if ((e < 0) || (e > static_cast<int>(Carrier->view->Pages.count())-1))
return Py_None;
Carrier->view->GotoPage(e);
// qApp->processEvents();
// qApp->processEvents();
return Py_None;
}
 
97,13 → 97,13
if (e < 0)
Carrier->slotNewPageP(Carrier->view->Pages.count(), QString(name));
else
{
{
e--;
if ((e < 0) || (e > static_cast<int>(Carrier->view->Pages.count())-1))
return Py_None;
Carrier->slotNewPageP(e, QString(name));
}
// qApp->processEvents();
}
// qApp->processEvents();
return Py_None;
}
 
133,10 → 133,10
}
PyObject *t;
t = Py_BuildValue(
"(dd)",
PointToValue(Carrier->doc->PageB), // it's just view scale... * Carrier->doc->Scale),
PointToValue(Carrier->doc->PageH) // * Carrier->doc->Scale)
);
"(dd)",
PointToValue(Carrier->doc->PageB), // it's just view scale... * Carrier->doc->Scale),
PointToValue(Carrier->doc->PageH) // * Carrier->doc->Scale)
);
return t;
}
 
154,11 → 154,127
for (uint i = 0; i<Carrier->doc->ActPage->Items.count(); ++i)
{
row = Py_BuildValue((char*)"(sii)",
Carrier->doc->ActPage->Items.at(i)->AnName.ascii(),
Carrier->doc->ActPage->Items.at(i)->PType,
Carrier->doc->ActPage->Items.at(i)->ItemNr
);
Carrier->doc->ActPage->Items.at(i)->AnName.ascii(),
Carrier->doc->ActPage->Items.at(i)->PType,
Carrier->doc->ActPage->Items.at(i)->ItemNr
);
PyList_SetItem(l, i, row);
} // for
return l;
}
 
PyObject *scribus_getHguides(PyObject *self, PyObject* args)
{
if (!PyArg_ParseTuple(args, ""))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("GetHGuides()"));
return NULL;
}
int n;
if (!Carrier->HaveDoc || (n = Carrier->doc->ActPage->YGuides.count()) == 0)
{
Py_INCREF(Py_None);
return Py_None;
}
int i;
double tmp;
PyObject *l, *guide;
l = PyList_New(0);
for (i=0; i<n; i++)
{
tmp = Carrier->doc->ActPage->YGuides[i];
guide = Py_BuildValue("d", PointToValue(tmp));
PyList_Append(l, guide);
}
return l;
}
 
PyObject *scribus_setHguides(PyObject *self, PyObject* args)
{
PyObject *l;
if (!PyArg_ParseTuple(args, "O", &l))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetHGuides(guides)"));
return NULL;
}
if (!PyList_Check(l))
{
PyErr_SetString(PyExc_TypeError, QString("argument is not list: must be list of float values"));
return NULL;
}
Py_INCREF(Py_None);
if (!Carrier->HaveDoc)
return Py_None;
int i, n;
n = PyList_Size(l);
double guide;
Carrier->doc->ActPage->YGuides.clear();
for (i=0; i<n; i++)
{
if (!PyArg_Parse(PyList_GetItem(l, i), "d", &guide))
{
PyErr_SetString(PyExc_TypeError, QString("argument contains no-numeric values: must be list of float values"));
return NULL;
}
Carrier->doc->ActPage->YGuides += ValueToPoint(guide);
}
return Py_None;
}
 
PyObject *scribus_getVguides(PyObject *self, PyObject* args)
{
if (!PyArg_ParseTuple(args, ""))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("GetVGuides()"));
return NULL;
}
int n;
if (!Carrier->HaveDoc || (n = Carrier->doc->ActPage->XGuides.count()) == 0)
{
Py_INCREF(Py_None);
return Py_None;
}
int i;
double tmp;
PyObject *l, *guide;
l = PyList_New(0);
for (i=0; i<n; i++)
{
tmp = Carrier->doc->ActPage->XGuides[i];
guide = Py_BuildValue("d", PointToValue(tmp));
PyList_Append(l, guide);
}
return l;
}
 
PyObject *scribus_setVguides(PyObject *self, PyObject* args)
{
PyObject *l;
if (!PyArg_ParseTuple(args, "O", &l))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetVGuides(guides)"));
return NULL;
}
if (!PyList_Check(l))
{
PyErr_SetString(PyExc_TypeError, QString("argument is not list: must be list of float values"));
return NULL;
}
Py_INCREF(Py_None);
if (!Carrier->HaveDoc)
return Py_None;
int i, n;
n = PyList_Size(l);
double guide;
Carrier->doc->ActPage->XGuides.clear();
for (i=0; i<n; i++)
{
if (!PyArg_Parse(PyList_GetItem(l, i), "d", &guide))
{
PyErr_SetString(PyExc_TypeError, QString("argument contains no-numeric values: must be list of float values"));
return NULL;
}
Carrier->doc->ActPage->XGuides += ValueToPoint(guide);
}
return Py_None;
}
/trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.cpp
666,3 → 666,35
return Py_None;
}
 
/*
* Convert the selected text frame to outlines. TODO: Does not check
* frame type, and should also accept a passed object name.
*
* 2004-09-07 (Craig Ringer)
2004-09-14 pv frame type, optional frame name param
*/
PyObject *scribus_tracetext(PyObject *self, PyObject* args)
{
char *name = "";
if (!PyArg_ParseTuple(args, "|s", &name))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("TraceText([objectName])"));
return NULL;
}
Py_INCREF(Py_None);
if (!Carrier->HaveDoc)
return Py_None;
PageItem *item = GetUniqueItem(QString(name));
if (item != NULL && item->PType == 4)
{
Carrier->doc->ActPage = item->OwnPage;
Carrier->doc->ActPage->Deselect(true);
Carrier->doc->ActPage->SelectItemNr(item->ItemNr);
Carrier->doc->ActPage->TextToPath();
/* FIXME: this won't work. need to know why. maybe later...
item->OwnPage->Deselect(true);
item->OwnPage->SelectItemNr(item->ItemNr);
item->OwnPage->TextToPath(); */
}
return Py_None;
}
/trunk/Scribus/scribus/plugins/scriptplugin/cmddoc.cpp
9,26 → 9,26
int unit, ds, fsl, fNr, ori;
PyObject *p, *m;
if ((!PyArg_ParseTuple(args, "OOiiiii", &p, &m, &ori, &fNr, &unit, &ds, &fsl)) ||
(!PyArg_ParseTuple(p, "dd", &b, &h)) ||
(!PyArg_ParseTuple(m, "dddd", &lr, &rr, &tpr, &btr)))
(!PyArg_ParseTuple(p, "dd", &b, &h)) ||
(!PyArg_ParseTuple(m, "dddd", &lr, &rr, &tpr, &btr)))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("NewDoc(size, margins, orientation, firstPageNumber, unit, FacingPages, FirstSideLeft)"));
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("NewDoc(size,margins,orientation,firstPageNumber,unit,FacingPages,FirstSideLeft)"));
return NULL;
}
b = ValToPts(b, unit);
h = ValToPts(h, unit);
if (ori == 1)
{
{
ebr = b;
b = h;
h = ebr;
}
}
tpr = ValToPts(tpr, unit);
lr = ValToPts(lr, unit);
rr = ValToPts(rr, unit);
btr = ValToPts(btr, unit);
bool ret = Carrier->doFileNew(b, h, tpr, lr, rr, btr, 0, 1, false, ds, unit, fsl, ori, fNr);
// qApp->processEvents();
// qApp->processEvents();
return PyInt_FromLong(static_cast<long>(ret));
}
 
37,7 → 37,7
double lr, tpr, btr, rr;
if (!PyArg_ParseTuple(args, "dddd", &lr, &rr, &tpr, &btr))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetMargins(lr, rr, tr, br)"));
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetMargins(lr,rr,tr,br)"));
return NULL;
}
Py_INCREF(Py_None);
89,7 → 89,7
return NULL;
}
bool ret = Carrier->LadeDoc(QString(Name));
// qApp->processEvents();
// qApp->processEvents();
return PyInt_FromLong(static_cast<long>(ret));
}
 
103,7 → 103,7
if (!Carrier->HaveDoc)
return PyInt_FromLong(0L);
Carrier->slotFileSave();
// qApp->processEvents();
// qApp->processEvents();
return PyInt_FromLong(0L);
}
 
118,7 → 118,7
if (!Carrier->HaveDoc)
return PyInt_FromLong(0L);
bool ret = Carrier->DoFileSave(QString(Name));
// qApp->processEvents();
// qApp->processEvents();
return PyInt_FromLong(static_cast<long>(ret));
}
 
129,7 → 129,7
char *Desc;
if (!PyArg_ParseTuple(args, "zzz", &Author, &Title, &Desc))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetInfo(Author, Info, Description)"));
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetInfo(Author,Info,Description)"));
return NULL;
}
Py_INCREF(Py_None);
169,3 → 169,38
return PyInt_FromLong(static_cast<long>(Carrier->doc->Einheit));
}
 
PyObject *scribus_loadstylesfromfile(PyObject *self, PyObject *args)
{
char *fileName;
if (!PyArg_ParseTuple(args, "s", &fileName))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("LoadStylesFromFile(filename)"));
return NULL;
}
Py_INCREF(Py_None);
if (!Carrier->HaveDoc)
return Py_None;
Carrier->doc->loadStylesFromFile(QString(fileName));
return Py_None;
}
 
PyObject *scribus_setdoctype(PyObject *self, PyObject* args)
{
int fp, fsl;
if (!PyArg_ParseTuple(args, "ii", &fp, &fsl))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetDocType(FacingPages, FirstPageLeft)"));
return NULL;
}
Py_INCREF(Py_None);
if (!Carrier->HaveDoc)
return Py_None;
if (Carrier->doc->PageFP = fp)
Carrier->doc->FirstPageLeft = fsl;
Carrier->view->reformPages();
Carrier->view->GotoPage(Carrier->doc->ActPage->PageNr); // is this needed?
Carrier->view->DrawNew(); // is this needed?
Carrier->Sepal->RebuildPage(); // is this needed?
Carrier->slotDocCh();
return Py_None;
}
/trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.h
47,6 → 47,18
07/11/2004 pv
*/
PyObject *scribus_objectexists(PyObject *self, PyObject* args);
/**
Craig Ringer, 2004-09-09
Apply the named style to the currently selected object.
pv, 2004-09-13, optionaly param objectName + "check the page" stuff
FIXME: should handled explicitly passed object name too.
*/
PyObject *scribus_setstyle(PyObject *self, PyObject* args);
/**
Craig Ringer, 2004-09-09
Enumerate all known paragraph styles
*/
PyObject *scribus_getstylenames(PyObject *self, PyObject* args);
 
#endif
 
/trunk/Scribus/scribus/plugins/scriptplugin/cmdpage.h
10,6 → 10,10
PyObject *scribus_deletepage(PyObject *self, PyObject* args);
PyObject *scribus_gotopage(PyObject *self, PyObject* args);
PyObject *scribus_pagecount(PyObject *self, PyObject* args);
PyObject *scribus_getHguides(PyObject *self, PyObject* args);
PyObject *scribus_setHguides(PyObject *self, PyObject* args);
PyObject *scribus_getVguides(PyObject *self, PyObject* args);
PyObject *scribus_setVguides(PyObject *self, PyObject* args);
/**
returns a tuple with page domensions in used system
e.g. when is the doc in picas returns picas ;)
/trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.h
30,6 → 30,11
*/
PyObject *scribus_linktextframes(PyObject *self, PyObject* args);
PyObject *scribus_unlinktextframes(PyObject * self, PyObject* args);
/**
Trace text frames via Scripter.
2004-09-07 (Craig Ringer)
*/
PyObject *scribus_tracetext(PyObject * self, PyObject* args);
 
#endif
 
/trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
29,6 → 29,7
#include "scriptplugin.moc"
#include "cmdutil.h"
#include "cmdvar.h"
#include "objprinter.h"
#include "guiapp.h"
#include "customfdialog.h"
#include "helpbrowser.h"
389,7 → 390,12
}
 
static PyMethodDef scribus_methods[] = {
// petr's stuff
// 2004/09/13 pv
{"TraceText", scribus_tracetext, METH_VARARGS},
{"LoadStylesFromFile", scribus_loadstylesfromfile, METH_VARARGS},
{"SetStyle", scribus_setstyle, METH_VARARGS},
{"GetAllStyles", scribus_getstylenames, METH_VARARGS},
// before 2004/09/13 pv
{"LockObject", scribus_lockobject, METH_VARARGS},
{"IsLocked", scribus_islocked, METH_VARARGS},
{"ObjectExists", scribus_objectexists, METH_VARARGS},
514,11 → 520,16
{"SentToLayer", scribus_senttolayer, METH_VARARGS},
{"SetLayerVisible", scribus_layervisible, METH_VARARGS},
{"SetLayerPrintable", scribus_layerprint, METH_VARARGS},
{"IsLayerVisible", scribus_glayervisib, METH_VARARGS},
{"IsLayerPrintable", scribus_glayerprint, METH_VARARGS},
{"IsLayerVisible", scribus_glayervisib, METH_VARARGS},
{"IsLayerPrintable", scribus_glayerprint, METH_VARARGS},
{"CreateLayer", scribus_createlayer, METH_VARARGS},
{"DeleteLayer", scribus_removelayer, METH_VARARGS},
{"GetGuiLanguage", scribus_getlanguage, METH_VARARGS},
{"GetHGuides", scribus_getHguides, METH_VARARGS},
{"SetHGuides", scribus_setHguides, METH_VARARGS},
{"GetVGuides", scribus_getVguides, METH_VARARGS},
{"SetVGuides", scribus_setVguides, METH_VARARGS},
{"SetDocType", scribus_setdoctype, METH_VARARGS},
{"retval", scribus_retval, METH_VARARGS},
{"getval", scribus_getval, METH_VARARGS},
{NULL, NULL} /* sentinel */
528,7 → 539,10
{
PyObject *m, *d;
PyImport_AddModule("scribus");
PyType_Ready(&Printer_Type);
m = Py_InitModule("scribus", scribus_methods);
Py_INCREF(&Printer_Type);
PyModule_AddObject(m, "Printer", (PyObject *) &Printer_Type);
d = PyModule_GetDict(m);
PyDict_SetItemString(d, "Points", Py_BuildValue("i", 0));
PyDict_SetItemString(d, "Millimeters", Py_BuildValue("i", 1));
553,22 → 567,22
PyDict_SetItemString(d, "SolidLine", Py_BuildValue("i", Qt::SolidLine));
PyDict_SetItemString(d, "DashLine", Py_BuildValue("i", Qt::DashLine));
PyDict_SetItemString(d, "DotLine", Py_BuildValue("i", Qt::DotLine));
PyDict_SetItemString(d, "DashDotLine", Py_BuildValue("i", Qt::DashDotLine));
PyDict_SetItemString(d, "DashDotDotLine", Py_BuildValue("i", Qt::DashDotDotLine));
PyDict_SetItemString(d, "DashDotLine", Py_BuildValue("i", Qt::DashDotLine));
PyDict_SetItemString(d, "DashDotDotLine", Py_BuildValue("i", Qt::DashDotDotLine));
PyDict_SetItemString(d, "MiterJoin", Py_BuildValue("i", Qt::MiterJoin));
PyDict_SetItemString(d, "BevelJoin", Py_BuildValue("i", Qt::BevelJoin));
PyDict_SetItemString(d, "RoundJoin", Py_BuildValue("i", Qt::RoundJoin));
PyDict_SetItemString(d, "FlatCap", Py_BuildValue("i", Qt::FlatCap));
PyDict_SetItemString(d, "SquareCap", Py_BuildValue("i", Qt::SquareCap));
PyDict_SetItemString(d, "SquareCap", Py_BuildValue("i", Qt::SquareCap));
PyDict_SetItemString(d, "RoundCap", Py_BuildValue("i", Qt::RoundCap));
PyDict_SetItemString(d, "NoButton", Py_BuildValue("i", QMessageBox::NoButton));
PyDict_SetItemString(d, "Ok", Py_BuildValue("i", QMessageBox::Ok));
PyDict_SetItemString(d, "Ok", Py_BuildValue("i", QMessageBox::Ok));
PyDict_SetItemString(d, "Cancel", Py_BuildValue("i", QMessageBox::Cancel));
PyDict_SetItemString(d, "Yes", Py_BuildValue("i", QMessageBox::Yes));
PyDict_SetItemString(d, "Yes", Py_BuildValue("i", QMessageBox::Yes));
PyDict_SetItemString(d, "No", Py_BuildValue("i", QMessageBox::No));
PyDict_SetItemString(d, "Abort", Py_BuildValue("i", QMessageBox::Abort));
PyDict_SetItemString(d, "Retry", Py_BuildValue("i", QMessageBox::Retry));
PyDict_SetItemString(d, "Ignore", Py_BuildValue("i", QMessageBox::Ignore));
PyDict_SetItemString(d, "Ignore", Py_BuildValue("i", QMessageBox::Ignore));
PyDict_SetItemString(d, "NoIcon", Py_BuildValue("i", QMessageBox::NoIcon));
PyDict_SetItemString(d, "Information", Py_BuildValue("i", QMessageBox::Information));
PyDict_SetItemString(d, "Warning", Py_BuildValue("i", QMessageBox::Warning));
595,7 → 609,7
PyDict_SetItemString(d, "Paper_B9", Py_BuildValue("(ff)", 125.0, 178.0));
PyDict_SetItemString(d, "Paper_B10", Py_BuildValue("(ff)", 89.0, 125.0));
PyDict_SetItemString(d, "Paper_C5E", Py_BuildValue("(ff)", 462.0, 649.0));
PyDict_SetItemString(d, "Paper_Comm10E", Py_BuildValue("(ff)", 298.0, 683.0));
PyDict_SetItemString(d, "Paper_Comm10E", Py_BuildValue("(ff)", 298.0, 683.0));
PyDict_SetItemString(d, "Paper_DLE", Py_BuildValue("(ff)", 312.0, 624.0));
PyDict_SetItemString(d, "Paper_Executive", Py_BuildValue("(ff)", 542.0, 720.0));
PyDict_SetItemString(d, "Paper_Folio", Py_BuildValue("(ff)", 595.0, 935.0));
/trunk/Scribus/scribus/plugins/scriptplugin/guiapp.cpp
4,49 → 4,61
#include "cmdvar.h"
#include <qstring.h>
#include <qcursor.h>
//#include <iostream.h>
 
/*
2004/09/15 pv - exceptions added - small fix into 1.2.1
- Py_None possible bugs fixed to be sure Scribus won't raise 11 SIG.
*/
 
PyObject *scribus_messagebartext(PyObject *self, PyObject* args)
{
char *aText;
if (!PyArg_ParseTuple(args, "s", &aText))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("MessagebarText(textstring)"));
return NULL;
}
Carrier->FMess->setText(QString(aText));
Py_INCREF(Py_None);
Carrier->FMess->setText(QString(aText));
return Py_None;
}
 
 
PyObject *scribus_progressreset(PyObject *self, PyObject* args)
{
if (!PyArg_ParseTuple(args, ""))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("ProgressReset()"));
return NULL;
Py_INCREF(Py_None);
}
Carrier->FProg->reset();
qApp->processEvents();
Py_INCREF(Py_None);
return Py_None;
}
 
 
PyObject *scribus_progresssettotalsteps(PyObject *self, PyObject* args)
{
int steps;
if (!PyArg_ParseTuple(args, "i", &steps))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("ProgressTotal(number)"));
return NULL;
Py_INCREF(Py_None);
}
Carrier->FProg->setTotalSteps(steps);
Carrier->FProg->setProgress(0);
qApp->processEvents();
Py_INCREF(Py_None);
return Py_None;
}
 
 
PyObject *scribus_progresssetprogress(PyObject *self, PyObject* args)
{
int position;
if (!PyArg_ParseTuple(args, "i", &position))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("ProgressSet(number)"));
return NULL;
}
Py_INCREF(Py_None);
if (position > Carrier->FProg->totalSteps())
return Py_None;
59,13 → 71,17
PyObject *scribus_setcursor(PyObject *self, PyObject* args)
{
char *aCursor;
qDebug("WARNING! SetCursor() is not stable!");
if (!PyArg_ParseTuple(args, "s", &aCursor))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("SetCusrsor(string)"));
return NULL;
Py_INCREF(Py_None);
}
if (aCursor=="wait")
qApp->setOverrideCursor(Qt::WaitCursor);
else
qApp->restoreOverrideCursor();
Py_INCREF(Py_None);
return Py_None;
}
 
73,7 → 89,10
{
int aValue;
if (!PyArg_ParseTuple(args, "i", &aValue))
{
PyErr_SetString(PyExc_Exception, ERRPARAM + QString("DocChanged(number)"));
return NULL;
}
Py_INCREF(Py_None);
if (!Carrier->HaveDoc)
return Py_None;
/trunk/Scribus/scribus/plugins/scriptplugin/Makefile.am
5,7 → 5,7
INCLUDES = $(LIBFREETYPE_CFLAGS) $(all_includes)
libscriptplugin_la_LDFLAGS = -version-info 0:0:0
libscriptplugin_la_METASOURCES = AUTO
libscriptplugin_la_SOURCES = cmdutil.cpp cmddialog.cpp cmddoc.cpp cmdpage.cpp cmdobj.cpp cmdgetprop.cpp cmdsetprop.cpp cmdtext.cpp cmdmani.cpp cmdcolor.cpp cmdmisc.cpp guiapp.cpp conswin.cpp pconsole.cpp scriptplugin.cpp
EXTRA_DIST = cmdvar.h cmdutil.cpp cmdutil.h cmddialog.cpp cmddialog.h cmddoc.cpp cmddoc.h cmdpage.cpp cmdpage.h cmdobj.cpp cmdobj.h cmdgetprop.cpp cmdgetprop.h cmdsetprop.cpp cmdsetprop.h cmdtext.cpp cmdtext.h cmdmani.cpp cmdmani.h cmdcolor.cpp cmdcolor.h cmdmisc.cpp cmdmisc.h guiapp.cpp guiapp.h scriptplugin.cpp scriptplugin.h pconsole.cpp pconsole.h conswin.cpp conswin.h
libscriptplugin_la_SOURCES = cmdutil.cpp cmddialog.cpp cmddoc.cpp cmdpage.cpp cmdobj.cpp cmdgetprop.cpp cmdsetprop.cpp cmdtext.cpp cmdmani.cpp cmdcolor.cpp cmdmisc.cpp objprinter.cpp guiapp.cpp conswin.cpp pconsole.cpp scriptplugin.cpp
EXTRA_DIST = cmdvar.h cmdutil.cpp cmdutil.h cmddialog.cpp cmddialog.h cmddoc.cpp cmddoc.h cmdpage.cpp cmdpage.h cmdobj.cpp cmdobj.h cmdgetprop.cpp cmdgetprop.h cmdsetprop.cpp cmdsetprop.h cmdtext.cpp cmdtext.h cmdmani.cpp cmdmani.h cmdcolor.cpp cmdcolor.h cmdmisc.cpp cmdmisc.h objprinter.cpp objprinter.h guiapp.cpp guiapp.h scriptplugin.cpp scriptplugin.h pconsole.cpp pconsole.h conswin.cpp conswin.h
KDE_OPTIONS = qtonly
AM_LDFLAGS = -Xlinker -s $(PYTHONLIB) $(LIBPYTHON)
/trunk/Scribus/scribus/plugins/gettext/sxwim/sxwdia.cpp
0,0 → 1,61
#include "sxwdia.h"
 
#ifdef HAVE_XML
 
#include "sxwdia.moc"
#include <qtooltip.h>
 
extern QPixmap loadIcon(QString nam);
 
SxwDialog::SxwDialog(bool update) : QDialog(0, "sxwdia", true, 0)
{
setCaption(tr("OO.o Writer Importer Options"));
setIcon(loadIcon("AppIcon.png"));
 
QBoxLayout* layout = new QVBoxLayout(this);
 
QBoxLayout* hlayout = new QHBoxLayout(0, 5, 5, "hlayout");
updateCheck = new QCheckBox(tr("Update paragraph styles"), this, "updateCheck");
updateCheck->setChecked(update);
QToolTip::add(updateCheck, tr("If there already exists a paragraph style with the same\n"
"name than current OO.o document's paragraph should the style\n"
"in Scribus be edited to match the one being imported\n"
"or left untouched"));
hlayout->addWidget(updateCheck);
layout->addLayout(hlayout);
 
// QBoxLayout* dlayout = new QHBoxLayout(0, 5, 5, "dlayout");
// doNotAskCheck = new QCheckBox(tr("Do not ask again"), this, "doNotAskCheck");
// doNotAskCheck->setChecked(false);
// QToolTip::add(doNotAskCheck, tr("Should the importer always use currently\n"
// "set value when importing OO.o document and\n"
// "never ask your confirmation again"));
// dlayout->addStretch(10);
// dlayout->addWidget(doNotAskCheck);
// layout->addLayout(dlayout);
 
QBoxLayout* blayout = new QHBoxLayout(0, 5, 5, "blayout");
blayout->addStretch(10);
okButton = new QPushButton(tr("OK"), this, "okButton");
blayout->addWidget(okButton);
layout->addLayout(blayout);
 
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
}
 
bool SxwDialog::shouldUpdate()
{
return updateCheck->isChecked();
}
 
bool SxwDialog::askAgain()
{
return !(doNotAskCheck->isChecked());
}
 
SxwDialog::~SxwDialog()
{
 
}
 
#endif // HAVE_XML
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.c
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.c (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.c (revision 411)
@@ -0,0 +1,184 @@
+/* ioapi.c -- IO base function header for compress/uncompress .zip
+ files using zlib + zip or unzip API
+
+ Version 1.01, May 8th, 2004
+
+ Copyright (C) 1998-2004 Gilles Vollant
+*/
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zlib.h"
+#include "ioapi.h"
+
+
+
+/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
+
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+voidpf ZCALLBACK fopen_file_func OF((
+ voidpf opaque,
+ const char* filename,
+ int mode));
+
+uLong ZCALLBACK fread_file_func OF((
+ voidpf opaque,
+ voidpf stream,
+ void* buf,
+ uLong size));
+
+uLong ZCALLBACK fwrite_file_func OF((
+ voidpf opaque,
+ voidpf stream,
+ const void* buf,
+ uLong size));
+
+long ZCALLBACK ftell_file_func OF((
+ voidpf opaque,
+ voidpf stream));
+
+long ZCALLBACK fseek_file_func OF((
+ voidpf opaque,
+ voidpf stream,
+ uLong offset,
+ int origin));
+
+int ZCALLBACK fclose_file_func OF((
+ voidpf opaque,
+ voidpf stream));
+
+int ZCALLBACK ferror_file_func OF((
+ voidpf opaque,
+ voidpf stream));
+
+
+voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
+ voidpf opaque;
+ const char* filename;
+ int mode;
+{
+ FILE* file = NULL;
+ const char* mode_fopen = NULL;
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ mode_fopen = "rb";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ mode_fopen = "r+b";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ mode_fopen = "wb";
+
+ if ((filename!=NULL) && (mode_fopen != NULL))
+ file = fopen(filename, mode_fopen);
+ return file;
+}
+
+
+uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
+ voidpf opaque;
+ voidpf stream;
+ void* buf;
+ uLong size;
+{
+ uLong ret;
+ ret = fread(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+
+uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
+ voidpf opaque;
+ voidpf stream;
+ const void* buf;
+ uLong size;
+{
+ uLong ret;
+ ret = fwrite(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+long ZCALLBACK ftell_file_func (opaque, stream)
+ voidpf opaque;
+ voidpf stream;
+{
+ long ret;
+ ret = ftell((FILE *)stream);
+ return ret;
+}
+
+long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
+ voidpf opaque;
+ voidpf stream;
+ uLong offset;
+ int origin;
+{
+ int fseek_origin=0;
+ long ret;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ fseek_origin = SEEK_CUR;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ fseek_origin = SEEK_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ fseek_origin = SEEK_SET;
+ break;
+ default: return -1;
+ }
+ ret = 0;
+ fseek((FILE *)stream, offset, fseek_origin);
+ return ret;
+}
+
+int ZCALLBACK fclose_file_func (opaque, stream)
+ voidpf opaque;
+ voidpf stream;
+{
+ int ret;
+ ret = fclose((FILE *)stream);
+ return ret;
+}
+
+int ZCALLBACK ferror_file_func (opaque, stream)
+ voidpf opaque;
+ voidpf stream;
+{
+ int ret;
+ ret = ferror((FILE *)stream);
+ return ret;
+}
+
+void fill_fopen_filefunc (pzlib_filefunc_def)
+ zlib_filefunc_def* pzlib_filefunc_def;
+{
+ pzlib_filefunc_def->zopen_file = fopen_file_func;
+ pzlib_filefunc_def->zread_file = fread_file_func;
+ pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+ pzlib_filefunc_def->ztell_file = ftell_file_func;
+ pzlib_filefunc_def->zseek_file = fseek_file_func;
+ pzlib_filefunc_def->zclose_file = fclose_file_func;
+ pzlib_filefunc_def->zerror_file = ferror_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+#endif // HAVE_XML
+
/trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.c
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.h (revision 411)
@@ -0,0 +1,82 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef CONTENTREADER_H
+#define CONTENTREADER_H
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#include <utility>
+#include <vector>
+#include <libxml/SAX2.h>
+#include <qxml.h>
+#include <qmap.h>
+#include <gtstyle.h>
+#include <gtwriter.h>
+#include "stylereader.h"
+
+typedef std::vector<std::pair<QString, QString> > Properties;
+typedef QMap<QString, Properties > TMap;
+
+class ContentReader
+{
+private:
+ static ContentReader *creader;
+ TMap tmap;
+ QString docname;
+ StyleReader* sreader;
+ gtWriter *writer;
+ gtStyle *defaultStyle;
+ gtStyle *currentStyle;
+ gtStyle *lastStyle;
+ gtStyle *pstyle;
+ bool importTextOnly;
+ bool append;
+ bool inList;
+ bool isOrdered;
+ bool inSpan;
+ int listLevel;
+ int listIndex;
+ std::vector<int> listIndex2;
+ std::vector<bool> isOrdered2;
+ bool inT;
+ std::vector<QString> styleNames;
+ QString tName;
+ QString currentList;
+ void write(const QString& text);
+ QString getName();
+ void getStyle();
+public:
+ ContentReader(QString documentName, StyleReader* s, gtWriter *w, bool textOnly);
+ ~ContentReader();
+ static void startElement(void *user_data, const xmlChar *fullname, const xmlChar ** atts);
+ static void endElement(void *user_data, const xmlChar *name);
+ static void characters(void *user_data, const xmlChar *ch, int len);
+ bool startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs);
+ bool endElement(const QString&, const QString&, const QString &name);
+ bool characters(const QString &ch);
+ void parse(QString fileName);
+};
+
+#endif // HAVE_XML
+
+#endif
/trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/sxwdia.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/sxwdia.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/sxwdia.h (revision 411)
@@ -0,0 +1,34 @@
+#ifndef SXWDIA_H
+#define SXWDIA_H
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qdialog.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+class SxwDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ SxwDialog(bool update);
+ ~SxwDialog();
+ bool shouldUpdate();
+ bool askAgain();
+private:
+ QCheckBox* updateCheck;
+ QCheckBox* doNotAskCheck;
+ QPushButton* okButton;
+};
+
+#endif // HAVE_XML
+
+#endif // CSVDIA_H
/trunk/Scribus/scribus/plugins/gettext/sxwim/sxwdia.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.c
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.c (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.c (revision 411)
@@ -0,0 +1,1589 @@
+/* unzip.c -- IO for uncompress .zip files using zlib
+ Version 1.01, May 8th, 2004
+
+ Copyright (C) 1998-2004 Gilles Vollant
+
+ Read unzip.h for more info
+*/
+
+/* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
+compatibility with older software. The following is from the original crypt.c. Code
+woven in by Terry Thorsen 1/2003.
+*/
+/*
+ Copyright (c) 1990-2000 Info-ZIP. All rights reserved.
+
+ See the accompanying file LICENSE, version 2000-Apr-09 or later
+ (the contents of which are also included in zip.h) for terms of use.
+ If, for some reason, all these files are missing, the Info-ZIP license
+ also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+ crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h]
+
+ The encryption/decryption parts of this source code (as opposed to the
+ non-echoing password parts) were originally written in Europe. The
+ whole source package can be freely distributed, including from the USA.
+ (Prior to January 2000, re-export from the US was a violation of US law.)
+ */
+
+/*
+ This encryption code is a direct transcription of the algorithm from
+ Roger Schlafly, described by Phil Katz in the file appnote.txt. This
+ file (appnote.txt) is distributed with the PKZIP program (even in the
+ version without encryption capabilities).
+ */
+
+#include "config.h"
+#ifdef HAVE_XML
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zlib.h"
+#include "unzip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#endif
+
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+
+#ifndef CASESENSITIVITYDEFAULT_NO
+# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
+# define CASESENSITIVITYDEFAULT_NO
+# endif
+#endif
+
+
+#ifndef UNZ_BUFSIZE
+#define UNZ_BUFSIZE (16384)
+#endif
+
+#ifndef UNZ_MAXFILENAMEINZIP
+#define UNZ_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+
+
+
+
+const char unz_copyright[] =
+ " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+/* unz_file_info_interntal contain internal info about a file in zipfile*/
+typedef struct unz_file_info_internal_s
+{
+ uLong offset_curfile;/* relative offset of local header 4 bytes */
+} unz_file_info_internal;
+
+
+/* file_in_zip_read_info_s contain internal information about a file in zipfile,
+ when reading and decompress it */
+typedef struct
+{
+ char *read_buffer; /* internal buffer for compressed data */
+ z_stream stream; /* zLib stream structure for inflate */
+
+ uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/
+ uLong stream_initialised; /* flag set if stream structure is initialised*/
+
+ uLong offset_local_extrafield;/* offset of the local extra field */
+ uInt size_local_extrafield;/* size of the local extra field */
+ uLong pos_local_extrafield; /* position in the local extra field in read*/
+
+ uLong crc32; /* crc32 of all data uncompressed */
+ uLong crc32_wait; /* crc32 we must obtain after decompress all */
+ uLong rest_read_compressed; /* number of byte to be decompressed */
+ uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/
+ zlib_filefunc_def z_filefunc;
+ voidpf filestream; /* io structore of the zipfile */
+ uLong compression_method; /* compression method (0==store) */
+ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+ int raw;
+} file_in_zip_read_info_s;
+
+
+/* unz_s contain internal information about the zipfile
+*/
+typedef struct
+{
+ zlib_filefunc_def z_filefunc;
+ voidpf filestream; /* io structore of the zipfile */
+ unz_global_info gi; /* public global information */
+ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+ uLong num_file; /* number of the current file in the zipfile*/
+ uLong pos_in_central_dir; /* pos of the current file in the central dir*/
+ uLong current_file_ok; /* flag about the usability of the current file*/
+ uLong central_pos; /* position of the beginning of the central dir*/
+
+ uLong size_central_dir; /* size of the central directory */
+ uLong offset_central_dir; /* offset of start of central directory with
+ respect to the starting disk number */
+
+ unz_file_info cur_file_info; /* public info about the current file in zip*/
+ unz_file_info_internal cur_file_info_internal; /* private info about it*/
+ file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current
+ file if we are decompressing it */
+ int encrypted;
+# ifndef NOUNCRYPT
+ unsigned long keys[3]; /* keys defining the pseudo-random sequence */
+ const unsigned long* pcrc_32_tab;
+# endif
+} unz_s;
+
+
+#ifndef NOUNCRYPT
+#include "crypt.h"
+#endif
+
+/* ===========================================================================
+ Read a byte from a gz_stream; update next_in and avail_in. Return EOF
+ for end of file.
+ IN assertion: the stream s has been sucessfully opened for reading.
+*/
+
+
+local int unzlocal_getByte OF((
+ const zlib_filefunc_def* pzlib_filefunc_def,
+ voidpf filestream,
+ int *pi));
+
+local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi)
+ const zlib_filefunc_def* pzlib_filefunc_def;
+ voidpf filestream;
+ int *pi;
+{
+ unsigned char c;
+ int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1);
+ if (err==1)
+ {
+ *pi = (int)c;
+ return UNZ_OK;
+ }
+ else
+ {
+ if (ZERROR(*pzlib_filefunc_def,filestream))
+ return UNZ_ERRNO;
+ else
+ return UNZ_EOF;
+ }
+}
+
+
+/* ===========================================================================
+ Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int unzlocal_getShort OF((
+ const zlib_filefunc_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX)
+ const zlib_filefunc_def* pzlib_filefunc_def;
+ voidpf filestream;
+ uLong *pX;
+{
+ uLong x ;
+ int i;
+ int err;
+
+ err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unzlocal_getLong OF((
+ const zlib_filefunc_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX)
+ const zlib_filefunc_def* pzlib_filefunc_def;
+ voidpf filestream;
+ uLong *pX;
+{
+ uLong x ;
+ int i;
+ int err;
+
+ err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<24;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+
+/* My own strcmpi / strcasecmp */
+local int strcmpcasenosensitive_internal (fileName1,fileName2)
+ const char* fileName1;
+ const char* fileName2;
+{
+ for (;;)
+ {
+ char c1=*(fileName1++);
+ char c2=*(fileName2++);
+ if ((c1>='a') && (c1<='z'))
+ c1 -= 0x20;
+ if ((c2>='a') && (c2<='z'))
+ c2 -= 0x20;
+ if (c1=='\0')
+ return ((c2=='\0') ? 0 : -1);
+ if (c2=='\0')
+ return 1;
+ if (c1<c2)
+ return -1;
+ if (c1>c2)
+ return 1;
+ }
+}
+
+
+#ifdef CASESENSITIVITYDEFAULT_NO
+#define CASESENSITIVITYDEFAULTVALUE 2
+#else
+#define CASESENSITIVITYDEFAULTVALUE 1
+#endif
+
+#ifndef STRCMPCASENOSENTIVEFUNCTION
+#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
+#endif
+
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+
+*/
+extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity)
+ const char* fileName1;
+ const char* fileName2;
+ int iCaseSensitivity;
+{
+ if (iCaseSensitivity==0)
+ iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
+
+ if (iCaseSensitivity==1)
+ return strcmp(fileName1,fileName2);
+
+ return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+
+/*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+*/
+local uLong unzlocal_SearchCentralDir OF((
+ const zlib_filefunc_def* pzlib_filefunc_def,
+ voidpf filestream));
+
+local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream)
+ const zlib_filefunc_def* pzlib_filefunc_def;
+ voidpf filestream;
+{
+ unsigned char* buf;
+ uLong uSizeFile;
+ uLong uBackRead;
+ uLong uMaxBack=0xffff; /* maximum size of global comment */
+ uLong uPosFound=0;
+
+ if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize,uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
+ if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ return uPosFound;
+}
+
+/*
+ Open a Zip file. path contain the full pathname (by example,
+ on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
+ "zlib/zlib114.zip".
+ If the zipfile cannot be opened (file doesn't exist or in not valid), the
+ return value is NULL.
+ Else, the return value is a unzFile Handle, usable with other function
+ of this unzip package.
+*/
+extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
+ const char *path;
+ zlib_filefunc_def* pzlib_filefunc_def;
+{
+ unz_s us;
+ unz_s *s;
+ uLong central_pos,uL;
+
+ uLong number_disk; /* number of the current dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning ZIP, unsupported, always 0*/
+ uLong number_entry_CD; /* total number of entries in
+ the central dir
+ (same than number_entry on nospan) */
+
+ int err=UNZ_OK;
+
+ if (unz_copyright[0]!=' ')
+ return NULL;
+
+ if (pzlib_filefunc_def==NULL)
+ fill_fopen_filefunc(&us.z_filefunc);
+ else
+ us.z_filefunc = *pzlib_filefunc_def;
+
+ us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque,
+ path,
+ ZLIB_FILEFUNC_MODE_READ |
+ ZLIB_FILEFUNC_MODE_EXISTING);
+ if (us.filestream==NULL)
+ return NULL;
+
+ central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream);
+ if (central_pos==0)
+ err=UNZ_ERRNO;
+
+ if (ZSEEK(us.z_filefunc, us.filestream,
+ central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+ /* the signature, already checked */
+ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of this disk */
+ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central dir on this disk */
+ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central dir */
+ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if ((number_entry_CD!=us.gi.number_entry) ||
+ (number_disk_with_CD!=0) ||
+ (number_disk!=0))
+ err=UNZ_BADZIPFILE;
+
+ /* size of the central directory */
+ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* zipfile comment length */
+ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
+ (err==UNZ_OK))
+ err=UNZ_BADZIPFILE;
+
+ if (err!=UNZ_OK)
+ {
+ ZCLOSE(us.z_filefunc, us.filestream);
+ return NULL;
+ }
+
+ us.byte_before_the_zipfile = central_pos -
+ (us.offset_central_dir+us.size_central_dir);
+ us.central_pos = central_pos;
+ us.pfile_in_zip_read = NULL;
+ us.encrypted = 0;
+
+
+ s=(unz_s*)ALLOC(sizeof(unz_s));
+ *s=us;
+ unzGoToFirstFile((unzFile)s);
+ return (unzFile)s;
+}
+
+
+extern unzFile ZEXPORT unzOpen (path)
+ const char *path;
+{
+ return unzOpen2(path, NULL);
+}
+
+/*
+ Close a ZipFile opened with unzipOpen.
+ If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
+ these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
+ return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzClose (file)
+ unzFile file;
+{
+ unz_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+
+ if (s->pfile_in_zip_read!=NULL)
+ unzCloseCurrentFile(file);
+
+ ZCLOSE(s->z_filefunc, s->filestream);
+ TRYFREE(s);
+ return UNZ_OK;
+}
+
+
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info)
+ unzFile file;
+ unz_global_info *pglobal_info;
+{
+ unz_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ *pglobal_info=s->gi;
+ return UNZ_OK;
+}
+
+
+/*
+ Translate date/time from Dos format to tm_unz (readable more easilty)
+*/
+local void unzlocal_DosDateToTmuDate (ulDosDate, ptm)
+ uLong ulDosDate;
+ tm_unz* ptm;
+{
+ uLong uDate;
+ uDate = (uLong)(ulDosDate>>16);
+ ptm->tm_mday = (uInt)(uDate&0x1f) ;
+ ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
+ ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+
+ ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
+ ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
+ ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
+}
+
+/*
+ Get Info about the current file in the zipfile, with internal only info
+*/
+local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file,
+ unz_file_info *pfile_info,
+ unz_file_info_internal
+ *pfile_info_internal,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+
+local int unzlocal_GetCurrentFileInfoInternal (file,
+ pfile_info,
+ pfile_info_internal,
+ szFileName, fileNameBufferSize,
+ extraField, extraFieldBufferSize,
+ szComment, commentBufferSize)
+ unzFile file;
+ unz_file_info *pfile_info;
+ unz_file_info_internal *pfile_info_internal;
+ char *szFileName;
+ uLong fileNameBufferSize;
+ void *extraField;
+ uLong extraFieldBufferSize;
+ char *szComment;
+ uLong commentBufferSize;
+{
+ unz_s* s;
+ unz_file_info file_info;
+ unz_file_info_internal file_info_internal;
+ int err=UNZ_OK;
+ uLong uMagic;
+ long lSeek=0;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ if (ZSEEK(s->z_filefunc, s->filestream,
+ s->pos_in_central_dir+s->byte_before_the_zipfile,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+
+ /* we check the magic */
+ if (err==UNZ_OK)
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if (uMagic!=0x02014b50)
+ err=UNZ_BADZIPFILE;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ lSeek+=file_info.size_filename;
+ if ((err==UNZ_OK) && (szFileName!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_filename<fileNameBufferSize)
+ {
+ *(szFileName+file_info.size_filename)='\0';
+ uSizeRead = file_info.size_filename;
+ }
+ else
+ uSizeRead = fileNameBufferSize;
+
+ if ((file_info.size_filename>0) && (fileNameBufferSize>0))
+ if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek -= uSizeRead;
+ }
+
+
+ if ((err==UNZ_OK) && (extraField!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_file_extra<extraFieldBufferSize)
+ uSizeRead = file_info.size_file_extra;
+ else
+ uSizeRead = extraFieldBufferSize;
+
+ if (lSeek!=0)
+ if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
+ if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek += file_info.size_file_extra - uSizeRead;
+ }
+ else
+ lSeek+=file_info.size_file_extra;
+
+
+ if ((err==UNZ_OK) && (szComment!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_file_comment<commentBufferSize)
+ {
+ *(szComment+file_info.size_file_comment)='\0';
+ uSizeRead = file_info.size_file_comment;
+ }
+ else
+ uSizeRead = commentBufferSize;
+
+ if (lSeek!=0)
+ if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ if ((file_info.size_file_comment>0) && (commentBufferSize>0))
+ if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek+=file_info.size_file_comment - uSizeRead;
+ }
+ else
+ lSeek+=file_info.size_file_comment;
+
+ if ((err==UNZ_OK) && (pfile_info!=NULL))
+ *pfile_info=file_info;
+
+ if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
+ *pfile_info_internal=file_info_internal;
+
+ return err;
+}
+
+
+
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem.
+*/
+extern int ZEXPORT unzGetCurrentFileInfo (file,
+ pfile_info,
+ szFileName, fileNameBufferSize,
+ extraField, extraFieldBufferSize,
+ szComment, commentBufferSize)
+ unzFile file;
+ unz_file_info *pfile_info;
+ char *szFileName;
+ uLong fileNameBufferSize;
+ void *extraField;
+ uLong extraFieldBufferSize;
+ char *szComment;
+ uLong commentBufferSize;
+{
+ return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,
+ szFileName,fileNameBufferSize,
+ extraField,extraFieldBufferSize,
+ szComment,commentBufferSize);
+}
+
+/*
+ Set the current file of the zipfile to the first file.
+ return UNZ_OK if there is no problem
+*/
+extern int ZEXPORT unzGoToFirstFile (file)
+ unzFile file;
+{
+ int err=UNZ_OK;
+ unz_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ s->pos_in_central_dir=s->offset_central_dir;
+ s->num_file=0;
+ err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+/*
+ Set the current file of the zipfile to the next file.
+ return UNZ_OK if there is no problem
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+extern int ZEXPORT unzGoToNextFile (file)
+ unzFile file;
+{
+ unz_s* s;
+ int err;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+ if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */
+ if (s->num_file+1==s->gi.number_entry)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
+ s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
+ s->num_file++;
+ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+
+/*
+ Try locate the file szFileName in the zipfile.
+ For the iCaseSensitivity signification, see unzipStringFileNameCompare
+
+ return value :
+ UNZ_OK if the file is found. It becomes the current file.
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity)
+ unzFile file;
+ const char *szFileName;
+ int iCaseSensitivity;
+{
+ unz_s* s;
+ int err;
+
+ /* We remember the 'current' position in the file so that we can jump
+ * back there if we fail.
+ */
+ unz_file_info cur_file_infoSaved;
+ unz_file_info_internal cur_file_info_internalSaved;
+ uLong num_fileSaved;
+ uLong pos_in_central_dirSaved;
+
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+
+ if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
+ return UNZ_PARAMERROR;
+
+ s=(unz_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ /* Save the current state */
+ num_fileSaved = s->num_file;
+ pos_in_central_dirSaved = s->pos_in_central_dir;
+ cur_file_infoSaved = s->cur_file_info;
+ cur_file_info_internalSaved = s->cur_file_info_internal;
+
+ err = unzGoToFirstFile(file);
+
+ while (err == UNZ_OK)
+ {
+ char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
+ err = unzGetCurrentFileInfo(file,NULL,
+ szCurrentFileName,sizeof(szCurrentFileName)-1,
+ NULL,0,NULL,0);
+ if (err == UNZ_OK)
+ {
+ if (unzStringFileNameCompare(szCurrentFileName,
+ szFileName,iCaseSensitivity)==0)
+ return UNZ_OK;
+ err = unzGoToNextFile(file);
+ }
+ }
+
+ /* We failed, so restore the state of the 'current file' to where we
+ * were.
+ */
+ s->num_file = num_fileSaved ;
+ s->pos_in_central_dir = pos_in_central_dirSaved ;
+ s->cur_file_info = cur_file_infoSaved;
+ s->cur_file_info_internal = cur_file_info_internalSaved;
+ return err;
+}
+
+
+/*
+///////////////////////////////////////////
+// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
+// I need random access
+//
+// Further optimization could be realized by adding an ability
+// to cache the directory in memory. The goal being a single
+// comprehensive file read to put the file I need in a memory.
+*/
+
+/*
+typedef struct unz_file_pos_s
+{
+ uLong pos_in_zip_directory; // offset in file
+ uLong num_of_file; // # of file
+} unz_file_pos;
+*/
+
+extern int ZEXPORT unzGetFilePos(file, file_pos)
+ unzFile file;
+ unz_file_pos* file_pos;
+{
+ unz_s* s;
+
+ if (file==NULL || file_pos==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ file_pos->pos_in_zip_directory = s->pos_in_central_dir;
+ file_pos->num_of_file = s->num_file;
+
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzGoToFilePos(file, file_pos)
+ unzFile file;
+ unz_file_pos* file_pos;
+{
+ unz_s* s;
+ int err;
+
+ if (file==NULL || file_pos==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+
+ /* jump to the right spot */
+ s->pos_in_central_dir = file_pos->pos_in_zip_directory;
+ s->num_file = file_pos->num_of_file;
+
+ /* set the current file */
+ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ /* return results */
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+/*
+// Unzip Helper Functions - should be here?
+///////////////////////////////////////////
+*/
+
+/*
+ Read the local header of the current zipfile
+ Check the coherency of the local header and info in the end of central
+ directory about this file
+ store in *piSizeVar the size of extra info in local header
+ (filename and size of extra field data)
+*/
+local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
+ poffset_local_extrafield,
+ psize_local_extrafield)
+ unz_s* s;
+ uInt* piSizeVar;
+ uLong *poffset_local_extrafield;
+ uInt *psize_local_extrafield;
+{
+ uLong uMagic,uData,uFlags;
+ uLong size_filename;
+ uLong size_extra_field;
+ int err=UNZ_OK;
+
+ *piSizeVar = 0;
+ *poffset_local_extrafield = 0;
+ *psize_local_extrafield = 0;
+
+ if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
+ s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+
+ if (err==UNZ_OK)
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if (uMagic!=0x04034b50)
+ err=UNZ_BADZIPFILE;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+ err=UNZ_ERRNO;
+/*
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
+ err=UNZ_BADZIPFILE;
+*/
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
+ err=UNZ_BADZIPFILE;
+
+ if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
+ (s->cur_file_info.compression_method!=Z_DEFLATED))
+ err=UNZ_BADZIPFILE;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
+ err=UNZ_ERRNO;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
+ ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
+ ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) &&
+ ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
+ err=UNZ_BADZIPFILE;
+
+ *piSizeVar += (uInt)size_filename;
+
+ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
+ err=UNZ_ERRNO;
+ *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
+ SIZEZIPLOCALHEADER + size_filename;
+ *psize_local_extrafield = (uInt)size_extra_field;
+
+ *piSizeVar += (uInt)size_extra_field;
+
+ return err;
+}
+
+/*
+ Open for reading data the current file in the zipfile.
+ If there is no error and the file is opened, the return value is UNZ_OK.
+*/
+extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
+ unzFile file;
+ int* method;
+ int* level;
+ int raw;
+ const char* password;
+{
+ int err=UNZ_OK;
+ uInt iSizeVar;
+ unz_s* s;
+ file_in_zip_read_info_s* pfile_in_zip_read_info;
+ uLong offset_local_extrafield; /* offset of the local extra field */
+ uInt size_local_extrafield; /* size of the local extra field */
+# ifndef NOUNCRYPT
+ char source[12];
+# else
+ if (password != NULL)
+ return UNZ_PARAMERROR;
+# endif
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_PARAMERROR;
+
+ if (s->pfile_in_zip_read != NULL)
+ unzCloseCurrentFile(file);
+
+ if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
+ &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
+ return UNZ_BADZIPFILE;
+
+ pfile_in_zip_read_info = (file_in_zip_read_info_s*)
+ ALLOC(sizeof(file_in_zip_read_info_s));
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_INTERNALERROR;
+
+ pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
+ pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
+ pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
+ pfile_in_zip_read_info->pos_local_extrafield=0;
+ pfile_in_zip_read_info->raw=raw;
+
+ if (pfile_in_zip_read_info->read_buffer==NULL)
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return UNZ_INTERNALERROR;
+ }
+
+ pfile_in_zip_read_info->stream_initialised=0;
+
+ if (method!=NULL)
+ *method = (int)s->cur_file_info.compression_method;
+
+ if (level!=NULL)
+ {
+ *level = 6;
+ switch (s->cur_file_info.flag & 0x06)
+ {
+ case 6 : *level = 1; break;
+ case 4 : *level = 2; break;
+ case 2 : *level = 9; break;
+ }
+ }
+
+ if ((s->cur_file_info.compression_method!=0) &&
+ (s->cur_file_info.compression_method!=Z_DEFLATED))
+ err=UNZ_BADZIPFILE;
+
+ pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
+ pfile_in_zip_read_info->crc32=0;
+ pfile_in_zip_read_info->compression_method =
+ s->cur_file_info.compression_method;
+ pfile_in_zip_read_info->filestream=s->filestream;
+ pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
+ pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
+
+ pfile_in_zip_read_info->stream.total_out = 0;
+
+ if ((s->cur_file_info.compression_method==Z_DEFLATED) &&
+ (!raw))
+ {
+ pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+ pfile_in_zip_read_info->stream.zfree = (free_func)0;
+ pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->stream.next_in = (voidpf)0;
+ pfile_in_zip_read_info->stream.avail_in = 0;
+
+ err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
+ if (err == Z_OK)
+ pfile_in_zip_read_info->stream_initialised=1;
+ else
+ return err;
+ /* windowBits is passed < 0 to tell that there is no zlib header.
+ * Note that in this case inflate *requires* an extra "dummy" byte
+ * after the compressed stream in order to complete decompression and
+ * return Z_STREAM_END.
+ * In unzip, i don't wait absolutely Z_STREAM_END because I known the
+ * size of both compressed and uncompressed data
+ */
+ }
+ pfile_in_zip_read_info->rest_read_compressed =
+ s->cur_file_info.compressed_size ;
+ pfile_in_zip_read_info->rest_read_uncompressed =
+ s->cur_file_info.uncompressed_size ;
+
+
+ pfile_in_zip_read_info->pos_in_zipfile =
+ s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
+ iSizeVar;
+
+ pfile_in_zip_read_info->stream.avail_in = (uInt)0;
+
+ s->pfile_in_zip_read = pfile_in_zip_read_info;
+
+# ifndef NOUNCRYPT
+ if (password != NULL)
+ {
+ int i;
+ s->pcrc_32_tab = get_crc_table();
+ init_keys(password,s->keys,s->pcrc_32_tab);
+ if (ZSEEK(s->z_filefunc, s->filestream,
+ s->pfile_in_zip_read->pos_in_zipfile +
+ s->pfile_in_zip_read->byte_before_the_zipfile,
+ SEEK_SET)!=0)
+ return UNZ_INTERNALERROR;
+ if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12)
+ return UNZ_INTERNALERROR;
+
+ for (i = 0; i<12; i++)
+ zdecode(s->keys,s->pcrc_32_tab,source[i]);
+
+ s->pfile_in_zip_read->pos_in_zipfile+=12;
+ s->encrypted=1;
+ }
+# endif
+
+
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzOpenCurrentFile (file)
+ unzFile file;
+{
+ return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
+}
+
+extern int ZEXPORT unzOpenCurrentFilePassword (file, password)
+ unzFile file;
+ const char* password;
+{
+ return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
+}
+
+extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw)
+ unzFile file;
+ int* method;
+ int* level;
+ int raw;
+{
+ return unzOpenCurrentFile3(file, method, level, raw, NULL);
+}
+
+/*
+ Read bytes from the current file.
+ buf contain buffer where data must be copied
+ len the size of buf.
+
+ return the number of byte copied if somes bytes are copied
+ return 0 if the end of file was reached
+ return <0 with error code if there is an error
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+extern int ZEXPORT unzReadCurrentFile (file, buf, len)
+ unzFile file;
+ voidp buf;
+ unsigned len;
+{
+ int err=UNZ_OK;
+ uInt iRead = 0;
+ unz_s* s;
+ file_in_zip_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+
+ if ((pfile_in_zip_read_info->read_buffer == NULL))
+ return UNZ_END_OF_LIST_OF_FILE;
+ if (len==0)
+ return 0;
+
+ pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
+
+ pfile_in_zip_read_info->stream.avail_out = (uInt)len;
+
+ if (len>pfile_in_zip_read_info->rest_read_uncompressed)
+ pfile_in_zip_read_info->stream.avail_out =
+ (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
+
+ while (pfile_in_zip_read_info->stream.avail_out>0)
+ {
+ if ((pfile_in_zip_read_info->stream.avail_in==0) &&
+ (pfile_in_zip_read_info->rest_read_compressed>0))
+ {
+ uInt uReadThis = UNZ_BUFSIZE;
+ if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
+ uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
+ if (uReadThis == 0)
+ return UNZ_EOF;
+ if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->pos_in_zipfile +
+ pfile_in_zip_read_info->byte_before_the_zipfile,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+ if (ZREAD(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->read_buffer,
+ uReadThis)!=uReadThis)
+ return UNZ_ERRNO;
+
+
+# ifndef NOUNCRYPT
+ if(s->encrypted)
+ {
+ uInt i;
+ for(i=0;i<uReadThis;i++)
+ pfile_in_zip_read_info->read_buffer[i] =
+ zdecode(s->keys,s->pcrc_32_tab,
+ pfile_in_zip_read_info->read_buffer[i]);
+ }
+# endif
+
+
+ pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
+
+ pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
+
+ pfile_in_zip_read_info->stream.next_in =
+ (Bytef*)pfile_in_zip_read_info->read_buffer;
+ pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
+ }
+
+ if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
+ {
+ uInt uDoCopy,i ;
+
+ if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
+ (pfile_in_zip_read_info->rest_read_compressed == 0))
+ return (iRead==0) ? UNZ_EOF : iRead;
+
+ if (pfile_in_zip_read_info->stream.avail_out <
+ pfile_in_zip_read_info->stream.avail_in)
+ uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
+ else
+ uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
+
+ for (i=0;i<uDoCopy;i++)
+ *(pfile_in_zip_read_info->stream.next_out+i) =
+ *(pfile_in_zip_read_info->stream.next_in+i);
+
+ pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
+ pfile_in_zip_read_info->stream.next_out,
+ uDoCopy);
+ pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
+ pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
+ pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
+ pfile_in_zip_read_info->stream.next_out += uDoCopy;
+ pfile_in_zip_read_info->stream.next_in += uDoCopy;
+ pfile_in_zip_read_info->stream.total_out += uDoCopy;
+ iRead += uDoCopy;
+ }
+ else
+ {
+ uLong uTotalOutBefore,uTotalOutAfter;
+ const Bytef *bufBefore;
+ uLong uOutThis;
+ int flush=Z_SYNC_FLUSH;
+
+ uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
+ bufBefore = pfile_in_zip_read_info->stream.next_out;
+
+ /*
+ if ((pfile_in_zip_read_info->rest_read_uncompressed ==
+ pfile_in_zip_read_info->stream.avail_out) &&
+ (pfile_in_zip_read_info->rest_read_compressed == 0))
+ flush = Z_FINISH;
+ */
+ err=inflate(&pfile_in_zip_read_info->stream,flush);
+
+ uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
+ uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+ pfile_in_zip_read_info->crc32 =
+ crc32(pfile_in_zip_read_info->crc32,bufBefore,
+ (uInt)(uOutThis));
+
+ pfile_in_zip_read_info->rest_read_uncompressed -=
+ uOutThis;
+
+ iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+ if (err==Z_STREAM_END)
+ return (iRead==0) ? UNZ_EOF : iRead;
+ if (err!=Z_OK)
+ break;
+ }
+ }
+
+ if (err==Z_OK)
+ return iRead;
+ return err;
+}
+
+
+/*
+ Give the current position in uncompressed data
+*/
+extern z_off_t ZEXPORT unztell (file)
+ unzFile file;
+{
+ unz_s* s;
+ file_in_zip_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ return (z_off_t)pfile_in_zip_read_info->stream.total_out;
+}
+
+
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+extern int ZEXPORT unzeof (file)
+ unzFile file;
+{
+ unz_s* s;
+ file_in_zip_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
+ return 1;
+ else
+ return 0;
+}
+
+
+
+/*
+ Read extra field from the current file (opened by unzOpenCurrentFile)
+ This is the local-header version of the extra field (sometimes, there is
+ more info in the local-header version than in the central-header)
+
+ if buf==NULL, it return the size of the local extra field that can be read
+
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
+ buf.
+ the return value is the number of bytes copied in buf, or (if <0)
+ the error code
+*/
+extern int ZEXPORT unzGetLocalExtrafield (file,buf,len)
+ unzFile file;
+ voidp buf;
+ unsigned len;
+{
+ unz_s* s;
+ file_in_zip_read_info_s* pfile_in_zip_read_info;
+ uInt read_now;
+ uLong size_to_read;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
+ pfile_in_zip_read_info->pos_local_extrafield);
+
+ if (buf==NULL)
+ return (int)size_to_read;
+
+ if (len>size_to_read)
+ read_now = (uInt)size_to_read;
+ else
+ read_now = (uInt)len ;
+
+ if (read_now==0)
+ return 0;
+
+ if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->offset_local_extrafield +
+ pfile_in_zip_read_info->pos_local_extrafield,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+ if (ZREAD(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ buf,read_now)!=read_now)
+ return UNZ_ERRNO;
+
+ return (int)read_now;
+}
+
+/*
+ Close the file in zip opened with unzipOpenCurrentFile
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+extern int ZEXPORT unzCloseCurrentFile (file)
+ unzFile file;
+{
+ int err=UNZ_OK;
+
+ unz_s* s;
+ file_in_zip_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+
+ if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
+ (!pfile_in_zip_read_info->raw))
+ {
+ if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
+ err=UNZ_CRCERROR;
+ }
+
+
+ TRYFREE(pfile_in_zip_read_info->read_buffer);
+ pfile_in_zip_read_info->read_buffer = NULL;
+ if (pfile_in_zip_read_info->stream_initialised)
+ inflateEnd(&pfile_in_zip_read_info->stream);
+
+ pfile_in_zip_read_info->stream_initialised = 0;
+ TRYFREE(pfile_in_zip_read_info);
+
+ s->pfile_in_zip_read=NULL;
+
+ return err;
+}
+
+
+/*
+ Get the global comment string of the ZipFile, in the szComment buffer.
+ uSizeBuf is the size of the szComment buffer.
+ return the number of byte copied or an error code <0
+*/
+extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
+ unzFile file;
+ char *szComment;
+ uLong uSizeBuf;
+{
+ int err=UNZ_OK;
+ unz_s* s;
+ uLong uReadThis ;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+
+ uReadThis = uSizeBuf;
+ if (uReadThis>s->gi.size_comment)
+ uReadThis = s->gi.size_comment;
+
+ if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+ if (uReadThis>0)
+ {
+ *szComment='\0';
+ if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
+ return UNZ_ERRNO;
+ }
+
+ if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
+ *(szComment+s->gi.size_comment)='\0';
+ return (int)uReadThis;
+}
+
+/* Additions by RX '2004 */
+extern uLong ZEXPORT unzGetOffset (file)
+ unzFile file;
+{
+ unz_s* s;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+ if (!s->current_file_ok)
+ return 0;
+ if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)
+ if (s->num_file==s->gi.number_entry)
+ return 0;
+ return s->pos_in_central_dir;
+}
+
+extern int ZEXPORT unzSetOffset (file, pos)
+ unzFile file;
+ uLong pos;
+{
+ unz_s* s;
+ int err;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz_s*)file;
+
+ s->pos_in_central_dir = pos;
+ s->num_file = s->gi.number_entry; /* hack */
+ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+#endif // HAVE_XML
+
/trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.c
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.h (revision 411)
@@ -0,0 +1,80 @@
+/* ioapi.h -- IO base function header for compress/uncompress .zip
+ files using zlib + zip or unzip API
+
+ Version 1.01, May 8th, 2004
+
+ Copyright (C) 1998-2004 Gilles Vollant
+*/
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#ifndef _ZLIBIOAPI_H
+#define _ZLIBIOAPI_H
+
+
+#define ZLIB_FILEFUNC_SEEK_CUR (1)
+#define ZLIB_FILEFUNC_SEEK_END (2)
+#define ZLIB_FILEFUNC_SEEK_SET (0)
+
+#define ZLIB_FILEFUNC_MODE_READ (1)
+#define ZLIB_FILEFUNC_MODE_WRITE (2)
+#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
+
+#define ZLIB_FILEFUNC_MODE_EXISTING (4)
+#define ZLIB_FILEFUNC_MODE_CREATE (8)
+
+
+#ifndef ZCALLBACK
+
+#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
+#define ZCALLBACK CALLBACK
+#else
+#define ZCALLBACK
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
+typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
+typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+
+typedef struct zlib_filefunc_def_s
+{
+ open_file_func zopen_file;
+ read_file_func zread_file;
+ write_file_func zwrite_file;
+ tell_file_func ztell_file;
+ seek_file_func zseek_file;
+ close_file_func zclose_file;
+ testerror_file_func zerror_file;
+ voidpf opaque;
+} zlib_filefunc_def;
+
+
+
+void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+
+#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size))
+#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size))
+#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream))
+#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode))
+#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream))
+#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream))
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif // HAVE_XML
/trunk/Scribus/scribus/plugins/gettext/sxwim/ioapi.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/crypt.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/crypt.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/crypt.h (revision 411)
@@ -0,0 +1,138 @@
+/* crypt.h -- base code for crypt/uncrypt ZIPfile
+
+
+ Version 1.01, May 8th, 2004
+
+ Copyright (C) 1998-2004 Gilles Vollant
+
+ This code is a modified version of crypting code in Infozip distribution
+
+ The encryption/decryption parts of this source code (as opposed to the
+ non-echoing password parts) were originally written in Europe. The
+ whole source package can be freely distributed, including from the USA.
+ (Prior to January 2000, re-export from the US was a violation of US law.)
+
+ This encryption code is a direct transcription of the algorithm from
+ Roger Schlafly, described by Phil Katz in the file appnote.txt. This
+ file (appnote.txt) is distributed with the PKZIP program (even in the
+ version without encryption capabilities).
+
+ If you don't need crypting in your application, just define symbols
+ NOCRYPT and NOUNCRYPT.
+
+ This code support the "Traditional PKWARE Encryption".
+
+ The new AES encryption added on Zip format by Winzip (see the page
+ http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
+ Encryption is not supported.
+*/
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
+
+/***********************************************************************
+ * Return the next byte in the pseudo-random sequence
+ */
+static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)
+{
+ unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
+ * unpredictable manner on 16-bit systems; not a problem
+ * with any known compiler so far, though */
+
+ temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
+ return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+}
+
+/***********************************************************************
+ * Update the encryption keys with the next byte of plain text
+ */
+static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)
+{
+ (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+ (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
+ (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+ {
+ register int keyshift = (int)((*(pkeys+1)) >> 24);
+ (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+ }
+ return c;
+}
+
+
+/***********************************************************************
+ * Initialize the encryption keys and the random header according to
+ * the given password.
+ */
+static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab)
+{
+ *(pkeys+0) = 305419896L;
+ *(pkeys+1) = 591751049L;
+ *(pkeys+2) = 878082192L;
+ while (*passwd != '\0') {
+ update_keys(pkeys,pcrc_32_tab,(int)*passwd);
+ passwd++;
+ }
+}
+
+#define zdecode(pkeys,pcrc_32_tab,c) \
+ (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
+
+#define zencode(pkeys,pcrc_32_tab,c,t) \
+ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+
+#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+
+#define RAND_HEAD_LEN 12
+ /* "last resort" source for second part of crypt seed pattern */
+# ifndef ZCR_SEED2
+# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
+# endif
+
+static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting)
+ const char *passwd; /* password string */
+ unsigned char *buf; /* where to write header */
+ int bufSize;
+ unsigned long* pkeys;
+ const unsigned long* pcrc_32_tab;
+ unsigned long crcForCrypting;
+{
+ int n; /* index in random header */
+ int t; /* temporary */
+ int c; /* random byte */
+ unsigned char header[RAND_HEAD_LEN-2]; /* random header */
+ static unsigned calls = 0; /* ensure different random header each time */
+
+ if (bufSize<RAND_HEAD_LEN)
+ return 0;
+
+ /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+ * output of rand() to get less predictability, since rand() is
+ * often poorly implemented.
+ */
+ if (++calls == 1)
+ {
+ srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+ }
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ c = (rand() >> 7) & 0xff;
+ header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
+ }
+ /* Encrypt random header (last two bytes is high word of crc) */
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
+ }
+ buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
+ buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
+ return n;
+}
+
+#endif
+
+#endif // HAVE_XML
/trunk/Scribus/scribus/plugins/gettext/sxwim/crypt.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.cpp
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.cpp (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.cpp (revision 411)
@@ -0,0 +1,289 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "sxwunzip.h"
+
+#ifdef HAVE_XML
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef unix
+# include <unistd.h>
+# include <utime.h>
+#else
+# include <direct.h>
+# include <io.h>
+#endif
+
+#include <iostream>
+#include "unzip.h"
+#include <qdir.h>
+
+#define CASESENSITIVITY (0)
+#define WRITEBUFFERSIZE (8192)
+#define MAXFILENAME (256)
+
+int do_extract_currentfile(unzFile uf, const int* popt_extract_without_path, int* popt_overwrite, const char* password);
+int do_extract_onefile(unzFile uf, const char* filename, int opt_extract_without_path, int opt_overwrite, const char* password);
+int mymkdir(const char* dirname);
+int makedir (char *newdir);
+void change_file_date(const char* filename, uLong dosdate, tm_unz tmu_date);
+
+SxwUnzip::SxwUnzip(QString zipFilePath)
+{
+ zipFile = zipFilePath;
+}
+
+QString SxwUnzip::getFile(QString name)
+{
+ QString pwd = QDir::currentDirPath();
+ QString outDir = zipFile.left(zipFile.findRev("/") + 1);
+ QFile f(outDir);
+ QFileInfo fi(f);
+ if (!fi.isWritable())
+ outDir = QDir::homeDirPath() + "/.scribus/";
+ QDir::setCurrent(outDir);
+ const char *zipfilename = zipFile.ascii();
+ const char *filename_to_extract = name.ascii();
+ unzFile uf = unzOpen(zipfilename);;
+ int ret = do_extract_onefile(uf,filename_to_extract, 0, 1, NULL);
+ unzCloseCurrentFile(uf);
+ QDir::setCurrent(pwd);
+ if (ret != 0)
+ return NULL;
+ else
+ return outDir + name;
+}
+
+SxwUnzip::~SxwUnzip()
+{
+
+}
+
+
+int do_extract_onefile(unzFile uf, const char* filename, int opt_extract_without_path, int opt_overwrite, const char* password)
+{
+ if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
+ return 2;
+
+ if (do_extract_currentfile(uf,&opt_extract_without_path,
+ &opt_overwrite,
+ password) == UNZ_OK)
+ return 0;
+ else
+ return 1;
+}
+
+int do_extract_currentfile(unzFile uf, const int* popt_extract_without_path, int* popt_overwrite, const char* password)
+{
+ char filename_inzip[256];
+ char* filename_withoutpath;
+ char* p;
+ int err=UNZ_OK;
+ FILE *fout=NULL;
+ void* buf;
+ uInt size_buf;
+
+ unz_file_info file_info;
+// uLong ratio=0;
+ err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
+
+ if (err!=UNZ_OK)
+ return err;
+
+ size_buf = WRITEBUFFERSIZE;
+ buf = (void*)malloc(size_buf);
+ if (buf==NULL)
+ return UNZ_INTERNALERROR;
+
+ p = filename_withoutpath = filename_inzip;
+ while ((*p) != '\0')
+ {
+ if (((*p)=='/') || ((*p)=='\\'))
+ filename_withoutpath = p+1;
+ p++;
+ }
+
+ if ((*filename_withoutpath)=='\0')
+ {
+ if ((*popt_extract_without_path)==0)
+ mymkdir(filename_inzip);
+ }
+ else
+ {
+ char* write_filename;
+ int skip=0;
+
+ if ((*popt_extract_without_path)==0)
+ write_filename = filename_inzip;
+ else
+ write_filename = filename_withoutpath;
+
+ err = unzOpenCurrentFilePassword(uf,password);
+
+ if ((skip==0) && (err==UNZ_OK))
+ {
+ fout=fopen(write_filename,"wb");
+
+ /* some zipfile don't contain directory alone before file */
+ if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
+ (filename_withoutpath!=(char*)filename_inzip))
+ {
+ char c=*(filename_withoutpath-1);
+ *(filename_withoutpath-1)='\0';
+ makedir(write_filename);
+ *(filename_withoutpath-1)=c;
+ fout=fopen(write_filename,"wb");
+ }
+ }
+
+ if (fout!=NULL)
+ {
+
+ do
+ {
+ err = unzReadCurrentFile(uf,buf,size_buf);
+ if (err<0)
+ break;
+ if (err>0)
+ if (fwrite(buf,err,1,fout)!=1)
+ {
+ err=UNZ_ERRNO;
+ break;
+ }
+ }
+ while (err>0);
+ if (fout)
+ fclose(fout);
+
+ if (err==0)
+ change_file_date(write_filename,file_info.dosDate,
+ file_info.tmu_date);
+ }
+
+ if (err==UNZ_OK)
+ err = unzCloseCurrentFile (uf);
+ else
+ unzCloseCurrentFile(uf); /* don't lose the error */
+ }
+
+ free(buf);
+ return err;
+}
+
+int mymkdir(char* dirname)
+{
+ int ret=0;
+#ifdef WIN32
+ ret = mkdir(dirname);
+#else
+#ifdef unix
+ ret = mkdir (dirname,0775);
+#endif
+#endif
+ return ret;
+}
+
+int makedir (const char *newdir)
+{
+ char *buffer ;
+ char *p;
+ int len = (int)strlen(newdir);
+
+ if (len <= 0)
+ return 0;
+
+ buffer = (char*)malloc(len+1);
+ strcpy(buffer,newdir);
+
+ if (buffer[len-1] == '/') {
+ buffer[len-1] = '\0';
+ }
+ if (mymkdir(buffer) == 0)
+ {
+ free(buffer);
+ return 1;
+ }
+
+ p = buffer+1;
+ while (1)
+ {
+ char hold;
+
+ while(*p && *p != '\\' && *p != '/')
+ p++;
+ hold = *p;
+ *p = 0;
+ if ((mymkdir(buffer) == -1) && (errno == ENOENT))
+ {
+ free(buffer);
+ return 0;
+ }
+ if (hold == 0)
+ break;
+ *p++ = hold;
+ }
+ free(buffer);
+ return 1;
+}
+
+/* change_file_date : change the date/time of a file
+ filename : the filename of the file where date/time must be modified
+ dosdate : the new date at the MSDos format (4 bytes)
+ tmu_date : the SAME new date at the tm_unz format */
+void change_file_date(const char* filename, uLong dosdate, tm_unz tmu_date)
+{
+#ifdef WIN32
+ HANDLE hFile;
+ FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;
+
+ hFile = CreateFile(filename,GENERIC_READ | GENERIC_WRITE,
+ 0,NULL,OPEN_EXISTING,0,NULL);
+ GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite);
+ DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);
+ LocalFileTimeToFileTime(&ftLocal,&ftm);
+ SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
+ CloseHandle(hFile);
+#else
+#ifdef unix
+ struct utimbuf ut;
+ struct tm newdate;
+ newdate.tm_sec = tmu_date.tm_sec;
+ newdate.tm_min=tmu_date.tm_min;
+ newdate.tm_hour=tmu_date.tm_hour;
+ newdate.tm_mday=tmu_date.tm_mday;
+ newdate.tm_mon=tmu_date.tm_mon;
+ if (tmu_date.tm_year > 1900)
+ newdate.tm_year=tmu_date.tm_year - 1900;
+ else
+ newdate.tm_year=tmu_date.tm_year ;
+ newdate.tm_isdst=-1;
+
+ ut.actime=ut.modtime=mktime(&newdate);
+ utime(filename,&ut);
+#endif
+#endif
+}
+
+#endif // HAVE_XML
+
/trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.cpp
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.cpp
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.cpp (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.cpp (revision 411)
@@ -0,0 +1,109 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "sxwim.h"
+#include <qstringlist.h>
+
+#ifdef HAVE_XML
+
+// #include <prefscontext.h>
+#include "sxwunzip.h"
+#include "stylereader.h"
+#include "contentreader.h"
+#include "sxwdia.h"
+
+extern ScribusApp* ScApp;
+
+QString FileFormatName()
+{
+ return QObject::tr("OO.o Writer Documents");
+}
+
+QStringList FileExtensions()
+{
+ return QStringList("sxw");
+}
+
+void GetText(QString filename, QString encoding, bool textOnly, gtWriter *writer)
+{
+ SxwIm* sim = new SxwIm(filename, writer, textOnly);
+ delete sim;
+}
+
+/********** Class SxwIm ************************************************************/
+
+SxwIm::SxwIm(QString fileName, gtWriter* w, bool textOnly)
+{
+ bool update = true;
+ if (!textOnly)
+ {
+// PrefsContext* prefs = ScApp->prefs->getPluginContext("SxwIm");
+// update = prefs->getBool("update", false);
+// bool ask = prefs->getBool("askAgain", true);
+// if (ask)
+// {
+ SxwDialog* sxwdia = new SxwDialog(update);
+ sxwdia->exec();
+ update = sxwdia->shouldUpdate();
+// prefs->set("update", update);
+// prefs->set("askAgain", sxwdia->askAgain());
+ delete sxwdia;
+// }
+ }
+ filename = fileName;
+ writer = w;
+ writer->setUpdateParagraphStyles(update);
+ SxwUnzip* sun = new SxwUnzip(fileName);
+ stylePath = sun->getFile(STYLE);
+ contentPath = sun->getFile(CONTENT);
+ delete sun;
+ if ((stylePath != NULL) && (contentPath != NULL))
+ {
+ QString docname = filename.right(filename.length() - filename.findRev("/") - 1);
+ docname = docname.left(docname.findRev("."));
+ StyleReader *sreader = new StyleReader(docname, writer, textOnly);
+ sreader->parse(stylePath);
+ ContentReader *creader = new ContentReader(docname, sreader, writer, textOnly);
+ creader->parse(contentPath);
+ delete sreader;
+ delete creader;
+ QFile f1(stylePath);
+ f1.remove();
+ QFile f2(contentPath);
+ f2.remove();
+ }
+ else if ((stylePath == NULL) && (contentPath != NULL))
+ {
+ QFile f2(contentPath);
+ f2.remove();
+ }
+ else if ((stylePath != NULL) && (contentPath == NULL))
+ {
+ QFile f1(stylePath);
+ f1.remove();
+ }
+}
+
+SxwIm::~SxwIm()
+{
+
+}
+
+#endif
/trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.cpp
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.h (revision 411)
@@ -0,0 +1,358 @@
+/* unzip.h -- IO for uncompress .zip files using zlib
+ Version 1.01, May 8th, 2004
+
+ Copyright (C) 1998-2004 Gilles Vollant
+
+ This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
+ WinZip, InfoZip tools and compatible.
+ Encryption and multi volume ZipFile (span) are not supported.
+ Old compressions used by old PKZip 1.x are not supported
+
+
+ I WAIT FEEDBACK at mail info@winimage.com
+ Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
+
+ Condition of use and distribution are the same than zlib :
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+
+*/
+
+/* for more info about .ZIP format, see
+ http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
+ http://www.info-zip.org/pub/infozip/doc/
+ PkWare has also a specification at :
+ ftp://ftp.pkware.com/probdesc.zip
+*/
+
+#include "config.h"
+#ifdef HAVE_XML
+
+#ifndef _unz_H
+#define _unz_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+ from (void*) without cast */
+typedef struct TagunzFile__ { int unused; } unzFile__;
+typedef unzFile__ *unzFile;
+#else
+typedef voidp unzFile;
+#endif
+
+
+#define UNZ_OK (0)
+#define UNZ_END_OF_LIST_OF_FILE (-100)
+#define UNZ_ERRNO (Z_ERRNO)
+#define UNZ_EOF (0)
+#define UNZ_PARAMERROR (-102)
+#define UNZ_BADZIPFILE (-103)
+#define UNZ_INTERNALERROR (-104)
+#define UNZ_CRCERROR (-105)
+
+/* tm_unz contain date/time info */
+typedef struct tm_unz_s
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt tm_year; /* years - [1980..2044] */
+} tm_unz;
+
+/* unz_global_info structure contain global data about the ZIPfile
+ These data comes from the end of central dir */
+typedef struct unz_global_info_s
+{
+ uLong number_entry; /* total number of entries in
+ the central dir on this disk */
+ uLong size_comment; /* size of the global comment of the zipfile */
+} unz_global_info;
+
+
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_info_s
+{
+ uLong version; /* version made by 2 bytes */
+ uLong version_needed; /* version needed to extract 2 bytes */
+ uLong flag; /* general purpose bit flag 2 bytes */
+ uLong compression_method; /* compression method 2 bytes */
+ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
+ uLong crc; /* crc-32 4 bytes */
+ uLong compressed_size; /* compressed size 4 bytes */
+ uLong uncompressed_size; /* uncompressed size 4 bytes */
+ uLong size_filename; /* filename length 2 bytes */
+ uLong size_file_extra; /* extra field length 2 bytes */
+ uLong size_file_comment; /* file comment length 2 bytes */
+
+ uLong disk_num_start; /* disk number start 2 bytes */
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+
+ tm_unz tmu_date;
+} unz_file_info;
+
+extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
+ const char* fileName2,
+ int iCaseSensitivity));
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+*/
+
+
+extern unzFile ZEXPORT unzOpen OF((const char *path));
+/*
+ Open a Zip file. path contain the full pathname (by example,
+ on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
+ "zlib/zlib113.zip".
+ If the zipfile cannot be opened (file don't exist or in not valid), the
+ return value is NULL.
+ Else, the return value is a unzFile Handle, usable with other function
+ of this unzip package.
+*/
+
+extern unzFile ZEXPORT unzOpen2 OF((const char *path,
+ zlib_filefunc_def* pzlib_filefunc_def));
+/*
+ Open a Zip file, like unzOpen, but provide a set of file low level API
+ for read/write the zip file (see ioapi.h)
+*/
+
+extern int ZEXPORT unzClose OF((unzFile file));
+/*
+ Close a ZipFile opened with unzipOpen.
+ If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+ these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
+ return UNZ_OK if there is no problem. */
+
+extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
+ unz_global_info *pglobal_info));
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem. */
+
+
+extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
+ char *szComment,
+ uLong uSizeBuf));
+/*
+ Get the global comment string of the ZipFile, in the szComment buffer.
+ uSizeBuf is the size of the szComment buffer.
+ return the number of byte copied or an error code <0
+*/
+
+
+/***************************************************************************/
+/* Unzip package allow you browse the directory of the zipfile */
+
+extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
+/*
+ Set the current file of the zipfile to the first file.
+ return UNZ_OK if there is no problem
+*/
+
+extern int ZEXPORT unzGoToNextFile OF((unzFile file));
+/*
+ Set the current file of the zipfile to the next file.
+ return UNZ_OK if there is no problem
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+
+extern int ZEXPORT unzLocateFile OF((unzFile file,
+ const char *szFileName,
+ int iCaseSensitivity));
+/*
+ Try locate the file szFileName in the zipfile.
+ For the iCaseSensitivity signification, see unzStringFileNameCompare
+
+ return value :
+ UNZ_OK if the file is found. It becomes the current file.
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+
+
+/* ****************************************** */
+/* Ryan supplied functions */
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_pos_s
+{
+ uLong pos_in_zip_directory; /* offset in zip file directory */
+ uLong num_of_file; /* # of file */
+} unz_file_pos;
+
+extern int ZEXPORT unzGetFilePos(
+ unzFile file,
+ unz_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos(
+ unzFile file,
+ unz_file_pos* file_pos);
+
+/* ****************************************** */
+
+extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
+ unz_file_info *pfile_info,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+/*
+ Get Info about the current file
+ if pfile_info!=NULL, the *pfile_info structure will contain somes info about
+ the current file
+ if szFileName!=NULL, the filemane string will be copied in szFileName
+ (fileNameBufferSize is the size of the buffer)
+ if extraField!=NULL, the extra field information will be copied in extraField
+ (extraFieldBufferSize is the size of the buffer).
+ This is the Central-header version of the extra field
+ if szComment!=NULL, the comment string of the file will be copied in szComment
+ (commentBufferSize is the size of the buffer)
+*/
+
+/***************************************************************************/
+/* for reading the content of the current zipfile, you can open it, read data
+ from it, and close it (you can close it before reading all the file)
+ */
+
+extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
+/*
+ Open for reading data the current file in the zipfile.
+ If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
+ const char* password));
+/*
+ Open for reading data the current file in the zipfile.
+ password is a crypting password
+ If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
+ int* method,
+ int* level,
+ int raw));
+/*
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+ if raw==1
+ *method will receive method of compression, *level will receive level of
+ compression
+ note : you can set level parameter as NULL (if you did not want known level,
+ but you CANNOT set method parameter as NULL
+*/
+
+extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
+ int* method,
+ int* level,
+ int raw,
+ const char* password));
+/*
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+ if raw==1
+ *method will receive method of compression, *level will receive level of
+ compression
+ note : you can set level parameter as NULL (if you did not want known level,
+ but you CANNOT set method parameter as NULL
+*/
+
+
+extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
+/*
+ Close the file in zip opened with unzOpenCurrentFile
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+
+extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
+ voidp buf,
+ unsigned len));
+/*
+ Read bytes from the current file (opened by unzOpenCurrentFile)
+ buf contain buffer where data must be copied
+ len the size of buf.
+
+ return the number of byte copied if somes bytes are copied
+ return 0 if the end of file was reached
+ return <0 with error code if there is an error
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+
+extern z_off_t ZEXPORT unztell OF((unzFile file));
+/*
+ Give the current position in uncompressed data
+*/
+
+extern int ZEXPORT unzeof OF((unzFile file));
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+
+extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
+ voidp buf,
+ unsigned len));
+/*
+ Read extra field from the current file (opened by unzOpenCurrentFile)
+ This is the local-header version of the extra field (sometimes, there is
+ more info in the local-header version than in the central-header)
+
+ if buf==NULL, it return the size of the local extra field
+
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
+ buf.
+ the return value is the number of bytes copied in buf, or (if <0)
+ the error code
+*/
+
+/***************************************************************************/
+
+/* Get the current file offset */
+extern uLong ZEXPORT unzGetOffset (unzFile file);
+
+/* Set the current file offset */
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _unz_H */
+
+#endif // HAVE_XML
+
/trunk/Scribus/scribus/plugins/gettext/sxwim/unzip.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.h (revision 411)
@@ -0,0 +1,43 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef SXWUNZIP_H
+#define SXWUNZIP_H
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#include <zlib.h>
+#include <qstring.h>
+
+class SxwUnzip
+{
+private:
+ QString zipFile;
+public:
+ SxwUnzip(QString zipFilePath);
+ ~SxwUnzip();
+ QString getFile(QString name);
+};
+
+#endif // HAVE_XML
+
+#endif
/trunk/Scribus/scribus/plugins/gettext/sxwim/sxwunzip.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.h (revision 411)
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef SXWIM_H
+#define SXWIM_H
+
+#include <qstring.h>
+#include <scribus.h>
+#include <gtwriter.h>
+#include "config.h"
+
+extern "C" void GetText(QString filename, QString encoding, bool textOnly, gtWriter *writer);
+
+extern "C" QString FileFormatName();
+
+extern "C" QStringList FileExtensions();
+
+#ifdef HAVE_XML
+
+const QString STYLE = "styles.xml";
+const QString CONTENT = "content.xml";
+
+class SxwIm
+{
+private:
+ gtWriter* writer;
+ QString filename;
+ QString stylePath;
+ QString contentPath;
+ bool decompress();
+public:
+ SxwIm(QString fileName, gtWriter* w, bool textOnly);
+ ~SxwIm();
+};
+
+#endif // HAVE_XML
+
+#endif // SXWIM_H
/trunk/Scribus/scribus/plugins/gettext/sxwim/sxwim.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.cpp
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.cpp (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.cpp (revision 411)
@@ -0,0 +1,724 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "stylereader.h"
+
+#ifdef HAVE_XML
+
+#include <gtmeasure.h>
+#include <gtparagraphstyle.h>
+#include <gtframestyle.h>
+#include <gtfont.h>
+
+StyleReader* StyleReader::sreader = NULL;
+
+extern xmlSAXHandlerPtr sSAXHandler;
+
+StyleReader::StyleReader(QString documentName, gtWriter *w, bool textOnly)
+{
+ sreader = this;
+ docname = documentName;
+ readProperties = false;
+ writer = w;
+ importTextOnly = textOnly;
+ currentStyle = NULL;
+ parentStyle = NULL;
+ inList = false;
+ currentList = "";
+}
+
+bool StyleReader::startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs)
+{
+ if (name == "style:default-style")
+ defaultStyle(attrs);
+ else if (name == "style:properties")
+ styleProperties(attrs);
+ else if (name == "style:style")
+ {
+ styleStyle(attrs);
+ }
+ else if (name == "style:tab-stop")
+ tabStop(attrs);
+ else if (name == "text:list-style")
+ {
+ for (int i = 0; i < attrs.count(); ++i)
+ if (attrs.localName(i) == "style:name")
+ currentList = attrs.value(i);
+ inList = true;
+ }
+ else if (((name == "text:list-level-style-bullet") ||
+ (name == "text:list-level-style-number")) && (inList))
+ {
+ QString level = "";
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "text:level")
+ {
+ gtStyle *plist;
+ if (attrs.value(i) == "1")
+ {
+ plist = listParents[currentList];
+ }
+ else
+ {
+ int level = (attrs.value(i)).toInt();
+ --level;
+ plist = styles[QString(currentList + "_%1").arg(level)];
+ }
+ gtParagraphStyle *pstyle;
+ if (plist == NULL)
+ plist = new gtStyle(*(styles["default-style"]));
+
+ if (plist->target() == "paragraph")
+ {
+ pstyle = dynamic_cast<gtParagraphStyle*>(plist);
+ gtParagraphStyle* tmp = new gtParagraphStyle(*pstyle);
+ currentStyle = tmp;
+ }
+ else
+ {
+ gtParagraphStyle* tmp = new gtParagraphStyle(*plist);
+ currentStyle = tmp;
+ }
+ currentStyle->setName(currentList + "_" + attrs.value(i));
+ }
+ }
+ readProperties = true;
+ }
+ else if ((name == "style:drop-cap") && (readProperties))
+ {
+ if (currentStyle->target() == "paragraph")
+ {
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "style:lines")
+ {
+ bool ok = false;
+ QString sd = attrs.value(i);
+ int dh = sd.toInt(&ok);
+ if (ok)
+ {
+ gtParagraphStyle* s = dynamic_cast<gtParagraphStyle*>(currentStyle);
+ s->setDropCapHeight(dh);
+ s->setDropCap(true);
+ }
+ }
+ }
+ }
+ }
+ else if (name == "style:font-decl")
+ {
+ QString key = "";
+ QString family = "";
+ QString style = "";
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "style:name")
+ key = attrs.value(i);
+ else if (attrs.localName(i) == "fo:font-family")
+ {
+ family = attrs.value(i);
+ family = family.remove("'");
+ }
+ else if (attrs.localName(i) == "style:font-style-name")
+ style += attrs.value(i) + " ";
+ }
+ QString name = family + " " + style;
+ name = name.simplifyWhiteSpace();
+ fonts[key] = name;
+ }
+ return true;
+}
+
+void StyleReader::defaultStyle(const QXmlAttributes& attrs)
+{
+ currentStyle = NULL;
+ for (int i = 0; i < attrs.count(); ++i)
+ if (attrs.localName(i) == "style:family")
+ if (attrs.value(i) == "paragraph")
+ {
+ currentStyle = new gtStyle("default-style");
+ readProperties = true;
+ }
+}
+
+void StyleReader::styleProperties(const QXmlAttributes& attrs)
+{
+ if ((currentStyle == NULL) || (!readProperties))
+ return;
+ gtParagraphStyle* pstyle = NULL;
+ if (currentStyle->target() == "paragraph")
+ pstyle = dynamic_cast<gtParagraphStyle*>(currentStyle);
+ else
+ pstyle = NULL;
+ QString align = NULL;
+ QString force = NULL;
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if ((attrs.localName(i) == "style:font-name") && (!inList))
+ currentStyle->getFont()->setName(getFont(attrs.value(i)));
+ else if (attrs.localName(i) == "fo:font-size")
+ {
+ double size = 0;
+ double psize = 0;
+ if (parentStyle != NULL)
+ psize = static_cast<double>(parentStyle->getFont()->getSize());
+ else if (styles.contains("default-style"))
+ psize = static_cast<double>(styles["default-style"]->getFont()->getSize());
+
+ psize = psize / 10;
+ size = getSize(attrs.value(i), psize);
+ int nsize = static_cast<int>(size * 10);
+ currentStyle->getFont()->setSize(nsize);
+ if ((currentStyle->getName() == "default-style") && (pstyle != NULL))
+ pstyle->setLineSpacing(writer->getPreferredLineSpacing(nsize));
+ }
+ else if ((attrs.localName(i) == "fo:line-height") && (parentStyle != NULL))
+ {
+ gtParagraphStyle* ppstyle;
+ if (parentStyle->target() == "paragraph")
+ {
+ ppstyle = dynamic_cast<gtParagraphStyle*>(parentStyle);
+ pstyle->setLineSpacing(getSize(attrs.value(i), writer->getPreferredLineSpacing(currentStyle->getFont()->getSize())));
+ }
+ }
+ else if ((attrs.localName(i) == "fo:font-weight") && (attrs.value(i) == "bold"))
+ currentStyle->getFont()->setWeight(BOLD);
+ else if ((attrs.localName(i) == "fo:font-style") && (attrs.value(i) == "italic"))
+ currentStyle->getFont()->setSlant(ITALIC);
+ else if ((attrs.localName(i) == "style:text-underline") && (attrs.value(i) != "none"))
+ currentStyle->getFont()->toggleEffect(UNDERLINE);
+ else if ((attrs.localName(i) == "style:text-crossing-out") && (attrs.value(i) != "none"))
+ currentStyle->getFont()->toggleEffect(STRIKETHROUGH);
+ else if ((attrs.localName(i) == "fo:font-variant") && (attrs.value(i) == "small-caps"))
+ currentStyle->getFont()->toggleEffect(SMALL_CAPS);
+ else if ((attrs.localName(i) == "style:text-outline") && (attrs.value(i) == "true"))
+ {
+ currentStyle->getFont()->toggleEffect(OUTLINE);
+ currentStyle->getFont()->setStrokeColor("Black");
+ currentStyle->getFont()->setColor("White");
+ }
+ else if (attrs.localName(i) == "fo:letter-spacing")
+ currentStyle->getFont()->setKerning(getSize(attrs.value(i)));
+ else if (attrs.localName(i) == "style:text-scale")
+ currentStyle->getFont()->setHscale(static_cast<int>(getSize(attrs.value(i), -1.0)));
+ else if ((attrs.localName(i) == "style:text-position") &&
+ (((attrs.value(i)).find("sub") != -1) ||
+ (((attrs.value(i)).left(1) == "-") && ((attrs.value(i)).left(1) != "0"))))
+ currentStyle->getFont()->toggleEffect(SUBSCRIPT);
+ else if ((attrs.localName(i) == "style:text-position") &&
+ (((attrs.value(i)).find("super") != -1) ||
+ (((attrs.value(i)).left(1) != "-") && ((attrs.value(i)).left(1) != "0"))))
+ currentStyle->getFont()->toggleEffect(SUPERSCRIPT);
+ else if ((attrs.localName(i) == "fo:margin-top") && (pstyle != NULL))
+ pstyle->setSpaceAbove(getSize(attrs.value(i)));
+ else if ((attrs.localName(i) == "fo:margin-bottom") && (pstyle != NULL))
+ pstyle->setSpaceBelow(getSize(attrs.value(i)));
+ else if ((attrs.localName(i) == "fo:margin-left") && (pstyle != NULL))
+ {
+ if (inList)
+ pstyle->setIndent(pstyle->getIndent() + getSize(attrs.value(i)));
+ else
+ pstyle->setIndent(getSize(attrs.value(i)));
+ }
+ else if ((attrs.localName(i) == "text:space-before") && (pstyle != NULL))
+ {
+ if (inList)
+ pstyle->setIndent(pstyle->getIndent() + getSize(attrs.value(i)));
+ else
+ pstyle->setIndent(getSize(attrs.value(i)));
+ }
+ else if ((attrs.localName(i) == "fo:text-indent") && (pstyle != NULL))
+ pstyle->setFirstLineIndent(getSize(attrs.value(i)));
+ else if ((attrs.localName(i) == "fo:text-align") && (pstyle != NULL))
+ align = attrs.value(i);
+ else if ((attrs.localName(i) == "style:justify-single-word") && (pstyle != NULL))
+ force = attrs.value(i);
+ }
+ if (align != NULL)
+ {
+ if (align == "end")
+ pstyle->setAlignment(RIGHT);
+ else if (align == "center")
+ pstyle->setAlignment(CENTER);
+ else if (align == "justify")
+ {
+ if (force == "false")
+ pstyle->setAlignment(BLOCK);
+ else
+ pstyle->setAlignment(FORCED);
+ }
+ }
+}
+
+void StyleReader::styleStyle(const QXmlAttributes& attrs)
+{
+ QString name = "";
+ QString listName = NULL;
+ bool isParaStyle = false;
+ bool create = true;
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "style:family")
+ {
+ if (attrs.value(i) == "paragraph")
+ {
+ isParaStyle = true;
+ readProperties = true;
+ }
+ else if (attrs.value(i) == "text")
+ {
+ isParaStyle = false;
+ readProperties = true;
+ }
+ else
+ {
+ readProperties = false;
+ return;
+ }
+ }
+ else if (attrs.localName(i) == "style:name")
+ name = attrs.value(i);
+ else if (attrs.localName(i) == "style:parent-style-name")
+ {
+ if (styles.contains(attrs.value(i)))
+ parentStyle = styles[attrs.value(i)];
+ else
+ parentStyle = NULL;
+ }
+ else if (attrs.localName(i) == "style:list-style-name")
+ listName = attrs.value(i);
+ }
+ if ((parentStyle == NULL) && (styles.contains("default-style")))
+ parentStyle = styles["default-style"];
+
+ if (create)
+ {
+ if (parentStyle == NULL)
+ {
+ parentStyle = new gtStyle("tmp-parent");
+ }
+ if (isParaStyle)
+ {
+ gtParagraphStyle *tmpP;
+ if (parentStyle->target() == "paragraph")
+ {
+ tmpP = dynamic_cast<gtParagraphStyle*>(parentStyle);
+ gtParagraphStyle* tmp = new gtParagraphStyle(*tmpP);
+// tmp->setAutoLineSpacing(true);
+ currentStyle = tmp;
+ }
+ else
+ {
+ gtParagraphStyle* tmp = new gtParagraphStyle(*parentStyle);
+// tmp->setAutoLineSpacing(true);
+ currentStyle = tmp;
+ }
+ if (listName != NULL)
+ {
+ listParents[listName] = currentStyle;
+ }
+ }
+ else
+ currentStyle = new gtStyle(*parentStyle);
+
+ currentStyle->setName(name);
+ }
+ else
+ currentStyle = NULL;
+}
+
+void StyleReader::tabStop(const QXmlAttributes& attrs)
+{
+ if (currentStyle->target() == "paragraph")
+ {
+ gtParagraphStyle* pstyle = dynamic_cast<gtParagraphStyle*>(currentStyle);
+ QString pos = NULL;
+ QString type = NULL;
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "style:position")
+ pos = attrs.value(i);
+ else if (attrs.localName(i) == "style:type")
+ type = attrs.value(i);
+
+ }
+ if (pos != NULL)
+ {
+ if (type == NULL)
+ type = "left";
+ double posd = getSize(pos);
+ if (type == "left")
+ pstyle->setTabValue(posd, LEFT_T);
+ else if (type == "right")
+ pstyle->setTabValue(posd, RIGHT_T);
+ else if (type == "center")
+ pstyle->setTabValue(posd, CENTER_T);
+ else
+ pstyle->setTabValue(posd, CENTER_T);
+ }
+ }
+}
+
+bool StyleReader::endElement(const QString&, const QString&, const QString &name)
+{
+ if ((name == "style:default-style") && (currentStyle != NULL) && (readProperties))
+ {
+ setStyle(currentStyle->getName(), currentStyle);
+ currentStyle = NULL;
+ parentStyle = NULL;
+ readProperties = false;
+ }
+ else if (((name == "style:style") ||
+ (name == "text:list-level-style-bullet") ||
+ (name == "text:list-level-style-number")) && (currentStyle != NULL))
+ {
+ setStyle(currentStyle->getName(), currentStyle);
+ currentStyle = NULL;
+ parentStyle = NULL;
+ readProperties = false;
+ }
+ else if (name == "text:list-style")
+ {
+ inList = false;
+ }
+ return true;
+}
+
+void StyleReader::parse(QString fileName)
+{
+ xmlSAXParseFile(sSAXHandler, fileName.ascii(), XML_PARSE_RECOVER);
+}
+
+gtStyle* StyleReader::getStyle(const QString& name)
+{
+ if (styles.contains(name))
+ {
+ gtStyle* tmp = styles[name];
+ QString tname = tmp->getName();
+ if (tname.find(docname) == -1)
+ tmp->setName(docname + "_" + tname);
+ return tmp;
+ }
+ else
+ return styles["default-style"];
+}
+
+void StyleReader::setStyle(const QString& name, gtStyle* style)
+{
+ gtParagraphStyle *s;
+ QString tname = style->getName();
+ if (style->target() == "paragraph")
+ {
+ s = dynamic_cast<gtParagraphStyle*>(style);
+ QString nameByAttrs = QString("%1-").arg(s->getSpaceAbove());
+ nameByAttrs += QString("%1-").arg(s->getSpaceBelow());
+ nameByAttrs += QString("%1-").arg(s->getLineSpacing());
+ nameByAttrs += QString("%1-").arg(s->getIndent());
+ nameByAttrs += QString("%1-").arg(s->getFirstLineIndent());
+ nameByAttrs += QString("%1-").arg(s->getAlignment());
+ nameByAttrs += QString("%1-").arg(s->hasDropCap());
+ QValueList<double>* tmp = s->getTabValues();
+ for (uint i = 0; i < tmp->count(); ++i)
+ {
+ double td = (*tmp)[i];
+ nameByAttrs += QString("%1-").arg(td);
+ }
+ if (attrsStyles.contains(nameByAttrs))
+ {
+ tname = attrsStyles[nameByAttrs]->getName();
+ ++pstyleCounts[nameByAttrs];
+ style->setName(tname);
+ }
+ else
+ {
+ attrsStyles[nameByAttrs] = style;
+ pstyleCounts[nameByAttrs] = 1;
+ tname = style->getName();
+ }
+ }
+ if (!styles.contains(name))
+ {
+ if (tname.find(docname) == -1)
+ style->setName(docname + "_" + tname);
+ styles[name] = style;
+ }
+}
+
+QString StyleReader::getFont(const QString& key)
+{
+ if (fonts.contains(key))
+ return fonts[key];
+ else
+ return key;
+}
+
+void StyleReader::setupFrameStyle()
+{
+ QString fstyleName = "";
+ int count = 0;
+ CounterMap::Iterator it;
+ for (it = pstyleCounts.begin(); it != pstyleCounts.end(); ++it)
+ {
+ if (it.data() > count)
+ {
+ count = it.data();
+ fstyleName = it.key();
+ }
+ }
+ gtFrameStyle* fstyle;
+ gtParagraphStyle* pstyle = dynamic_cast<gtParagraphStyle*>(attrsStyles[fstyleName]);
+ fstyle = new gtFrameStyle(*pstyle);
+
+ if (!importTextOnly)
+ writer->setFrameStyle(fstyle);
+ delete fstyle;
+}
+
+bool StyleReader::updateStyle(gtStyle* style, gtStyle* parent2Style, const QString& key, const QString& value)
+{
+ gtParagraphStyle* pstyle = NULL;
+ if (style->target() == "paragraph")
+ pstyle = dynamic_cast<gtParagraphStyle*>(style);
+ else
+ pstyle = NULL;
+ QString align = NULL;
+ QString force = NULL;
+
+ if (key == "style:font-name")
+ style->getFont()->setName(getFont(value));
+ else if (key == "fo:font-size")
+ {
+ double size = 0;
+ double psize = 0;
+ if (parent2Style != NULL)
+ psize = static_cast<double>(parent2Style->getFont()->getSize());
+ else if (styles.contains("default-style"))
+ psize = static_cast<double>(styles["default-style"]->getFont()->getSize());
+ psize = psize / 10;
+ size = getSize(value, psize);
+ int nsize = static_cast<int>(size * 10);
+ style->getFont()->setSize(nsize);
+ if ((style->getName() == "default-style") && (pstyle != NULL))
+ pstyle->setLineSpacing(writer->getPreferredLineSpacing(nsize));
+ }
+ else if ((key == "fo:line-height") && (parent2Style != NULL))
+ {
+ gtParagraphStyle* ppstyle;
+ if (parent2Style->target() == "paragraph")
+ {
+ ppstyle = dynamic_cast<gtParagraphStyle*>(parent2Style);
+ pstyle->setLineSpacing(getSize(value, writer->getPreferredLineSpacing(style->getFont()->getSize())));
+ }
+ }
+ else if ((key == "fo:font-weight") && (value == "bold"))
+ style->getFont()->setWeight(BOLD);
+ else if ((key == "fo:font-style") && (value == "italic"))
+ style->getFont()->setSlant(ITALIC);
+ else if ((key == "style:text-underline") && (value != "none"))
+ style->getFont()->toggleEffect(UNDERLINE);
+ else if ((key == "style:text-crossing-out") && (value != "none"))
+ style->getFont()->toggleEffect(STRIKETHROUGH);
+ else if ((key == "fo:font-variant") && (value == "small-caps"))
+ style->getFont()->toggleEffect(SMALL_CAPS);
+ else if ((key == "style:text-outline") && (value == "true"))
+ {
+ style->getFont()->toggleEffect(OUTLINE);
+ style->getFont()->setStrokeColor("Black");
+ style->getFont()->setColor("White");
+ }
+ else if (key == "fo:letter-spacing")
+ style->getFont()->setKerning(getSize(value));
+ else if (key == "style:text-scale")
+ style->getFont()->setHscale(static_cast<int>(getSize(value, -1.0)));
+ else if ((key == "style:text-position") &&
+ (((value).find("sub") != -1) ||
+ (((value).left(1) == "-") && ((value).left(1) != "0"))))
+ style->getFont()->toggleEffect(SUBSCRIPT);
+ else if ((key == "style:text-position") &&
+ (((value).find("super") != -1) ||
+ (((value).left(1) != "-") && ((value).left(1) != "0"))))
+ style->getFont()->toggleEffect(SUPERSCRIPT);
+ else if ((key == "fo:margin-top") && (pstyle != NULL))
+ pstyle->setSpaceAbove(getSize(value));
+ else if ((key == "fo:margin-bottom") && (pstyle != NULL))
+ pstyle->setSpaceBelow(getSize(value));
+ else if ((key == "fo:margin-left") && (pstyle != NULL))
+ {
+ if (inList)
+ pstyle->setIndent(pstyle->getIndent() + getSize(value));
+ else
+ pstyle->setIndent(getSize(value));
+ }
+ else if ((key == "text:space-before") && (pstyle != NULL))
+ {
+ if (inList)
+ pstyle->setIndent(pstyle->getIndent() + getSize(value));
+ else
+ pstyle->setIndent(getSize(value));
+ }
+ else if ((key == "fo:text-indent") && (pstyle != NULL))
+ pstyle->setFirstLineIndent(getSize(value));
+ else if ((key == "fo:text-align") && (pstyle != NULL))
+ align = value;
+ else if ((key == "style:justify-single-word") && (pstyle != NULL))
+ force = value;
+
+ if (align != NULL)
+ {
+ if (align == "end")
+ pstyle->setAlignment(RIGHT);
+ else if (align == "center")
+ pstyle->setAlignment(CENTER);
+ else if (align == "justify")
+ {
+ if (force != "false")
+ pstyle->setAlignment(FORCED);
+ else
+ pstyle->setAlignment(BLOCK);
+ }
+ }
+
+ return true;
+}
+
+double StyleReader::getSize(QString s, double parentSize)
+{
+ QString dbl = "0.0";
+ QString lowerValue = s.lower();
+ double ret = 0.0;
+ if (lowerValue.find("pt") != -1)
+ {
+ dbl = lowerValue.remove("pt");
+ ret = gtMeasure::d2d(dbl.toDouble(), PT);
+ }
+ else if (lowerValue.find("mm") != -1)
+ {
+ dbl = lowerValue.remove("mm");
+ ret = gtMeasure::d2d(dbl.toDouble(), MM);
+ }
+ else if (lowerValue.find("cm") != -1)
+ {
+ dbl = lowerValue.remove("cm");
+ ret = gtMeasure::d2d(dbl.toDouble() * 10, MM);
+ }
+ else if (lowerValue.find("in") != -1)
+ {
+ dbl = lowerValue.remove("inch");
+ dbl = lowerValue.remove("in");
+ ret = gtMeasure::d2d(dbl.toDouble(), IN);
+ }
+ else if (lowerValue.find("pi") != -1)
+ {
+ dbl = lowerValue.remove("pica");
+ dbl = lowerValue.remove("pi");
+ ret = gtMeasure::d2d(dbl.toDouble(), P);
+ }
+ else if (lowerValue.find("%") != -1)
+ {
+ dbl = lowerValue.remove("%");
+ double factor = dbl.toDouble();
+ if (parentSize != -1.0)
+ {
+ factor = factor / 100;
+ ret = factor * parentSize;
+ }
+ else
+ ret = factor;
+ }
+ return ret;
+}
+
+StyleReader::~StyleReader()
+{
+ sreader = NULL;
+ StyleMap::Iterator it;
+ for (it = styles.begin(); it != styles.end(); ++it)
+ {
+ if (it.data())
+ {
+ delete it.data();
+ it.data() = NULL;
+ }
+ }
+}
+
+xmlSAXHandler sSAXHandlerStruct = {
+ NULL, // internalSubset,
+ NULL, // isStandalone,
+ NULL, // hasInternalSubset,
+ NULL, // hasExternalSubset,
+ NULL, // resolveEntity,
+ NULL, // getEntity,
+ NULL, // entityDecl,
+ NULL, // notationDecl,
+ NULL, // attributeDecl,
+ NULL, // elementDecl,
+ NULL, // unparsedEntityDecl,
+ NULL, // setDocumentLocator,
+ NULL, // startDocument,
+ NULL, // endDocument,
+ StyleReader::startElement,
+ StyleReader::endElement,
+ NULL, // reference,
+ NULL, // characters
+ NULL, // ignorableWhitespace,
+ NULL, // processingInstruction,
+ NULL, // comment,
+ NULL, // warning,
+ NULL, // error,
+ NULL, // fatalError,
+ NULL, // getParameterEntity,
+ NULL, // cdata,
+ NULL,
+ 1
+#ifdef HAVE_XML26
+ ,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+#endif
+};
+
+xmlSAXHandlerPtr sSAXHandler = &sSAXHandlerStruct;
+
+void StyleReader::startElement(void *user_data, const xmlChar * fullname, const xmlChar ** atts)
+{
+ QString* name = new QString((const char*) fullname);
+ name = new QString(name->lower());
+ QXmlAttributes* attrs = new QXmlAttributes();
+ if (atts)
+ {
+ for(const xmlChar** cur = atts; cur && *cur; cur += 2)
+ attrs->append(QString((char*)*cur), NULL, QString((char*)*cur), QString((char*)*(cur + 1)));
+ }
+ sreader->startElement(NULL, NULL, *name, *attrs);
+}
+
+void StyleReader::endElement(void *user_data, const xmlChar * name)
+{
+ QString *nname = new QString((const char*) name);
+ nname = new QString(nname->lower());
+ sreader->endElement(NULL, NULL, *nname);
+}
+
+#endif // HAVE_XML
+
/trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.cpp
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.h
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.h (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.h (revision 411)
@@ -0,0 +1,77 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef STYLEREADER_H
+#define STYLEREADER_H
+
+#include "config.h"
+
+#ifdef HAVE_XML
+
+#include <libxml/HTMLparser.h>
+#include <qmap.h>
+#include <qxml.h>
+#include <gtstyle.h>
+#include <gtwriter.h>
+
+typedef QMap<QString, gtStyle*> StyleMap;
+typedef QMap<QString, QString> FontMap;
+typedef QMap<QString, int> CounterMap;
+
+class StyleReader
+{
+private:
+ static StyleReader *sreader;
+ gtWriter *writer;
+ bool importTextOnly;
+ bool readProperties;
+ QString docname;
+ StyleMap styles;
+ StyleMap listParents;
+ StyleMap attrsStyles;
+ CounterMap pstyleCounts;
+ FontMap fonts;
+ gtStyle* currentStyle;
+ gtStyle* parentStyle;
+ bool inList;
+ QString currentList;
+ double getSize(QString s, double parentSize = -1);
+ void styleProperties(const QXmlAttributes& attrs);
+ void defaultStyle(const QXmlAttributes& attrs);
+ void styleStyle(const QXmlAttributes& attrs);
+ void StyleReader::tabStop(const QXmlAttributes& attrs);
+ void setupFrameStyle();
+public:
+ StyleReader(QString documentName, gtWriter *wr, bool textOnly);
+ ~StyleReader();
+ bool updateStyle(gtStyle* style, gtStyle* parent2Style, const QString& key, const QString& value);
+ static void startElement(void *user_data, const xmlChar * fullname, const xmlChar ** atts);
+ static void endElement(void *user_data, const xmlChar * name);
+ bool startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs);
+ bool endElement(const QString&, const QString&, const QString &name);
+ void parse(QString fileName);
+ gtStyle* getStyle(const QString& name);
+ void setStyle(const QString& name, gtStyle* style);
+ QString getFont(const QString& key);
+};
+
+#endif // HAVE_XML
+
+#endif
/trunk/Scribus/scribus/plugins/gettext/sxwim/stylereader.h
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/Makefile.am
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/Makefile.am (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/Makefile.am (revision 411)
@@ -0,0 +1,17 @@
+pluginsdir = $(prefix)/lib/scribus/plugins/gettext
+AM_CPPFLAGS = -I$(top_builddir)/scribus
+
+SUBDIRS =
+
+plugins_LTLIBRARIES = libsxwimplugin.la
+
+INCLUDES = $(LIBFREETYPE_CFLAGS) $(XML_CFLAGS) $(all_includes)
+
+libsxwimplugin_la_LDFLAGS = -version-info 0:0:0
+libsxwimplugin_la_METASOURCES = AUTO
+libsxwimplugin_la_SOURCES = sxwim.cpp sxwunzip.cpp sxwdia.cpp stylereader.cpp contentreader.cpp unzip.c ioapi.c
+
+EXTRA_DIST = sxwim.cpp sxwim.h sxwunzip.cpp sxwunzip.h sxwdia.cpp sxwdia.h stylereader.cpp stylereader.h contentreader.cpp contentreader.h unzip.c unzip.h ioapi.c ioapi.h
+
+KDE_OPTIONS = qtonly
+AM_LDFLAGS = -s $(LIBFREETYPE_LIBS) -s $(XML_LIBS)
/trunk/Scribus/scribus/plugins/gettext/sxwim/Makefile.am
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.cpp
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.cpp (nonexistent)
+++ trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.cpp (revision 411)
@@ -0,0 +1,318 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Riku Leino *
+ * tsoots@welho.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "contentreader.h"
+
+#ifdef HAVE_XML
+
+ContentReader* ContentReader::creader = NULL;
+
+extern xmlSAXHandlerPtr cSAXHandler;
+
+ContentReader::ContentReader(QString documentName, StyleReader *s, gtWriter *w, bool textOnly)
+{
+ creader = this;
+ docname = documentName;
+ sreader = s;
+ writer = w;
+ importTextOnly = textOnly;
+ defaultStyle = NULL;
+ currentStyle = NULL;
+ append = false;
+ inList = false;
+ isOrdered = false;
+ inSpan = false;
+ listIndex = 0;
+ listLevel = 0;
+ currentList = "";
+ inT = false;
+ tName = "";
+}
+
+bool ContentReader::startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs)
+{
+ if ((name == "text:p") || (name == "text:h"))
+ {
+ append = true;
+ if (!inList)
+ {
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "text:style-name")
+ {
+ pstyle = sreader->getStyle(attrs.value(i));
+ currentStyle = pstyle;
+ styleNames.push_back(attrs.value(i));
+ }
+ }
+ }
+ }
+ else if (name == "text:span")
+ {
+ inSpan = true;
+ QString styleName = "";
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "text:style-name")
+ {
+ currentStyle = sreader->getStyle(attrs.value(i));
+ styleName = attrs.value(i);
+ styleNames.push_back(styleName);
+ }
+ }
+ gtStyle *tmp = sreader->getStyle(getName());
+ if ((tmp->getName()).find("default-style") != -1)
+ getStyle();
+ else
+ currentStyle = tmp;
+ }
+ else if ((name == "text:unordered-list") || (name == "text:ordered-list"))
+ {
+ inList = true;
+ ++listLevel;
+ if (static_cast<int>(listIndex2.size()) < listLevel)
+ listIndex2.push_back(0);
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "text:style-name")
+ currentList = attrs.value(i);
+ }
+ currentStyle = sreader->getStyle(QString(currentList + "_%1").arg(listLevel));
+ if (name == "text:ordered-list")
+ {
+ isOrdered = true;
+ isOrdered2.push_back(true);
+ }
+ else
+ {
+ isOrdered = false;
+ isOrdered2.push_back(false);
+ }
+ }
+ else if (name == "text:list-item")
+ {
+ if (isOrdered2[listLevel - 1])
+ {
+ ++listIndex;
+ ++listIndex2[listLevel - 1];
+ if (listLevel == 1)
+ write(QString("%1. ").arg(listIndex2[listLevel - 1]));
+ else
+ write(QString("%1. ").arg(listIndex2[listLevel - 1]));
+ }
+ else
+ write("- ");
+ }
+ else if (name == "style:style")
+ {
+ QString sname = "";
+ bool isTextStyle = false;
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ if (attrs.localName(i) == "style:name")
+ sname = attrs.value(i);
+ else if ((attrs.localName(i) == "style:family") && (attrs.value(i) == "text"));
+ isTextStyle = true;
+ }
+ if (isTextStyle)
+ {
+ tName = sname;
+ inT = true;
+ }
+ }
+ else if ((name == "style:properties") && (inT))
+ {
+ Properties p;
+ for (int i = 0; i < attrs.count(); ++i)
+ {
+ std::pair<QString, QString> pair(attrs.localName(i), attrs.value(i));
+ p.push_back(pair);
+ }
+ tmap[tName] = p;
+ }
+ return true;
+}
+
+bool ContentReader::characters(const QString &ch)
+{
+ QString tmp = ch;
+ tmp = tmp.remove("\n");
+ tmp = tmp.remove(""); // Remove all OO.o hyphenation chars
+ if (append)
+ write(tmp);
+ return true;
+}
+
+bool ContentReader::endElement(const QString&, const QString&, const QString &name)
+{
+ if ((name == "text:p") || (name == "text:h"))
+ {
+ write("\n");
+ append = false;
+ if (styleNames.size() != 0)
+ styleNames.pop_back();
+ }
+ else if (name == "text:span")
+ {
+ inSpan = false;
+ currentStyle = pstyle;
+ if (styleNames.size() != 0)
+ styleNames.pop_back();
+ currentStyle = sreader->getStyle(getName());
+ }
+ else if (name == "text:line-break")
+ write(QChar(28));
+ else if (name == "text:tab-stop")
+ write("\t");
+ else if ((name == "text:unordered-list") || (name == "text:ordered-list"))
+ {
+ --listLevel;
+ if (listLevel == 0)
+ {
+ inList = false;
+ listIndex2.clear();
+ }
+ else
+ currentStyle = sreader->getStyle(QString(currentList + "_%1").arg(listLevel));
+ }
+ else if ((name == "style:style") && (inT))
+ {
+ inT = false;
+ tName = "";
+ }
+ return true;
+}
+
+void ContentReader::write(const QString& text)
+{
+ if (importTextOnly)
+ writer->append(text);
+ else if (inSpan)
+ writer->append(text, currentStyle, false);
+ else
+ writer->append(text, currentStyle);
+ lastStyle = currentStyle;
+}
+
+void ContentReader::parse(QString fileName)
+{
+ sreader->parse(fileName);
+ xmlSAXParseFile(cSAXHandler, fileName.ascii(), XML_PARSE_RECOVER);
+}
+
+xmlSAXHandler cSAXHandlerStruct = {
+ NULL, // internalSubset,
+ NULL, // isStandalone,
+ NULL, // hasInternalSubset,
+ NULL, // hasExternalSubset,
+ NULL, // resolveEntity,
+ NULL, // getEntity,
+ NULL, // entityDecl,
+ NULL, // notationDecl,
+ NULL, // attributeDecl,
+ NULL, // elementDecl,
+ NULL, // unparsedEntityDecl,
+ NULL, // setDocumentLocator,
+ NULL, // startDocument,
+ NULL, // endDocument,
+ ContentReader::startElement,
+ ContentReader::endElement,
+ NULL, // reference,
+ ContentReader::characters,
+ NULL, // ignorableWhitespace,
+ NULL, // processingInstruction,
+ NULL, // comment,
+ NULL, // warning,
+ NULL, // error,
+ NULL, // fatalError,
+ NULL, // getParameterEntity,
+ NULL, // cdata,
+ NULL,
+ 1
+#ifdef HAVE_XML26
+ ,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+#endif
+};
+
+xmlSAXHandlerPtr cSAXHandler = &cSAXHandlerStruct;
+
+void ContentReader::startElement(void *user_data, const xmlChar *fullname, const xmlChar ** atts)
+{
+ QString* name = new QString((const char*) fullname);
+ name = new QString(name->lower());
+ QXmlAttributes* attrs = new QXmlAttributes();
+ if (atts)
+ {
+ for(const xmlChar** cur = atts; cur && *cur; cur += 2)
+ attrs->append(QString((char*)*cur), NULL, QString((char*)*cur), QString((char*)*(cur + 1)));
+ }
+ creader->startElement(NULL, NULL, *name, *attrs);
+}
+
+void ContentReader::characters(void *user_data, const xmlChar *ch, int len)
+{
+ QString chars = QString::fromUtf8((const char*) ch, len);
+ creader->characters(chars);
+}
+
+void ContentReader::endElement(void *user_data, const xmlChar *name)
+{
+ QString *nname = new QString((const char*) name);
+ nname = new QString(nname->lower());
+ creader->endElement(NULL, NULL, *nname);
+}
+
+QString ContentReader::getName()
+{
+ QString s = "";
+ for (uint i = 0; i < styleNames.size(); ++i)
+ s += styleNames[i];
+ return s;
+}
+
+void ContentReader::getStyle()
+{
+ gtParagraphStyle* par = dynamic_cast<gtParagraphStyle*>(sreader->getStyle(styleNames[0]));
+ gtParagraphStyle* tmp = new gtParagraphStyle(*par);
+ for (uint i = 1; i < styleNames.size(); ++i)
+ {
+ Properties& p = tmap[styleNames[i]];
+ for (uint j = 0; j < p.size(); ++j)
+ sreader->updateStyle(tmp, sreader->getStyle(styleNames[i - 1]), p[j].first, p[j].second);
+ }
+// gtParagraphStyle* s = new gtParagraphStyle(*dynamic_cast<gtParagraphStyle*>(lastStyle));
+// s->setAutoLineSpacing(true);
+
+ currentStyle = tmp;
+ sreader->setStyle(getName(), tmp);
+}
+
+ContentReader::~ContentReader()
+{
+ creader = NULL;
+ delete defaultStyle;
+}
+
+#endif // HAVE_XML
+
/trunk/Scribus/scribus/plugins/gettext/sxwim/contentreader.cpp
Property changes:
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
Index: trunk/Scribus/scribus/plugins/gettext/Makefile.am
===================================================================
--- trunk/Scribus/scribus/plugins/gettext/Makefile.am (revision 410)
+++ trunk/Scribus/scribus/plugins/gettext/Makefile.am (revision 411)
@@ -1,5 +1,5 @@
####### kdevelop will overwrite this part!!! (begin)##########
-SUBDIRS = htmlim txtim csvim
+SUBDIRS = htmlim txtim csvim sxwim
####### kdevelop will overwrite this part!!! (end)############
/trunk/Scribus/scribus/plugins/libchar/charselect.cpp
157,12 → 157,15
FT_ULong charcode;
FT_UInt gindex;
face = pl->doc->FFonts[font];
for(int u = 0; u < face->num_charmaps; u++)
if (face->num_glyphs < 257)
{
if (face->charmaps[u]->encoding == FT_ENCODING_ADOBE_CUSTOM)
for(int u = 0; u < face->num_charmaps; u++)
{
FT_Set_Charmap(face,face->charmaps[u]);
break;
if (face->charmaps[u]->encoding == FT_ENCODING_ADOBE_CUSTOM)
{
FT_Set_Charmap(face,face->charmaps[u]);
break;
}
}
}
charcode = FT_Get_First_Char(face, &gindex );
/trunk/Scribus/scribus/scribus.h
67,6 → 67,26
class Mpalette;
class Measurements;
class StoryEditor;
 
struct PrintOptions {
QString printer;
QString filename;
bool toFile;
bool useAltPrintCommand;
QString printerCommand;
int PSLevel;
bool outputSeparations;
QString separationName;
bool useColor;
bool mirrorH;
bool mirrorV;
bool useICC;
bool doGCR;
int copies;
std::vector<int> pageNumbers;
QString printerOptions;
};
 
/**
* This Class is the base class for your application. It sets up the main
* window and providing a menubar, toolbar
254,6 → 274,7
bool slotFileClose();
/** print the actual file */
void slotFilePrint();
bool doPrint(PrintOptions *options);
/** exits the application */
void slotFileQuit();
/** put the marked text/object into the clipboard and remove
584,4 → 605,5
QString Command;
} PDef ;
};
 
#endif
/trunk/Scribus/scribus/gtparagraphstyle.h
56,9 → 56,13
bool dropCap;
int dropCapHeight;
bool adjToBaseline;
bool autoLineSpacing;
bool isVisible;
public:
double getLineSpacing();
void setLineSpacing(double newLineSpacing);
bool getAutoLineSpacing();
void setAutoLineSpacing(bool newALS);
int getAlignment();
void setAlignment(Alignment newAlignment);
void setAlignment(int newAlignment);
/trunk/Scribus/scribus/gtmeasure.h
42,11 → 42,15
static void init(Unit u);
static double convert(double value);
static double convert(int value);
static double convert2(double value);
static double convert2(int value);
static double parse(QString value);
public:
static double d2d(double value, Unit from);
static double i2d(int value, Unit from);
static double qs2d(QString value);
static double convert(double value, Unit from, Unit to = PT);
static double convert(int value, Unit from, Unit to = PT);
static double d2d(double value, Unit from, Unit to = PT);
static double i2d(int value, Unit from, Unit to = PT);
static double qs2d(QString value, Unit to = PT);
};
 
#endif // GTMEASURE_H