24 #include "dublincore.h"
32 #include "statement.h"
33 #include "syndicationinfo.h"
34 #include "textinput.h"
36 #include <documentvisitor.h>
39 #include <QtCore/QList>
40 #include <QtCore/QString>
41 #include <QtCore/QStringList>
42 #include <QtCore/QVector>
44 using namespace boost;
46 namespace Syndication {
49 class Document::Private
52 Private() : itemTitleContainsMarkup(false),
53 itemTitlesGuessed(false),
54 itemDescriptionContainsMarkup(false),
55 itemDescGuessed(false)
57 mutable bool itemTitleContainsMarkup;
58 mutable bool itemTitlesGuessed;
59 mutable bool itemDescriptionContainsMarkup;
60 mutable bool itemDescGuessed;
61 shared_ptr<Model::ModelPrivate> modelPrivate;
64 Document::Document() : Syndication::SpecificDocument(),
68 d->modelPrivate =
resource()->model().d;
75 d->modelPrivate = resource->model().d;
107 return visitor->visitRDFDocument(
this);
118 return normalize(str);
125 return normalize(str);
149 struct LessThanByIndex {
150 bool operator()(
const SortItem& lhs,
const SortItem& rhs)
const {
151 return lhs.index < rhs.index;
155 static QList<Item> sortListToMatchSequence(QList<Item> items,
const QStringList& uriSequence) {
156 QVector<SortItem> toSort;
157 toSort.reserve(items.size());
158 Q_FOREACH(
const Item& i, items) {
161 item.index = uriSequence.indexOf(i.resource()->uri());
164 qSort(toSort.begin(), toSort.end(), LessThanByIndex());
167 Q_FOREACH(
const SortItem& sortItem, toSort) {
168 items[i] = sortItem.item;
180 DocumentPtr doccpy(
new Document(*
this));
181 Q_FOREACH (
const ResourcePtr& i, items)
182 list.append(
Item(i, doccpy));
190 const QList<NodePtr> seqItems = seq->
items();
192 QStringList uriSequence;
193 uriSequence.reserve(seqItems.size());
195 Q_FOREACH(
const NodePtr& i, seqItems)
197 uriSequence.append(static_cast<Resource*>(i.get())->uri());
198 list = sortListToMatchSequence(list, uriSequence);
209 return img ?
Image(img) : Image();
219 void Document::getItemTitleFormatInfo(
bool* containsMarkup)
const
221 if (!d->itemTitlesGuessed)
224 QList<Item> litems =
items();
226 if (litems.isEmpty())
228 d->itemTitlesGuessed =
true;
232 int nmax = litems.size() < 10 ? litems.size() : 10;
235 QList<Item>::ConstIterator it = litems.constBegin();
239 titles += (*it).originalTitle();
244 d->itemTitleContainsMarkup = stringContainsMarkup(titles);
245 d->itemTitlesGuessed =
true;
247 if (containsMarkup != 0L)
248 *containsMarkup = d->itemTitleContainsMarkup;
251 void Document::getItemDescriptionFormatInfo(
bool* containsMarkup)
const
253 if (!d->itemDescGuessed)
256 QList<Item> litems =
items();
259 if (litems.isEmpty())
261 d->itemDescGuessed =
true;
265 int nmax = litems.size() < 10 ? litems.size() : 10;
268 QList<Item>::ConstIterator it = litems.constBegin();
272 desc += (*it).originalDescription();
277 d->itemDescriptionContainsMarkup = stringContainsMarkup(desc);
278 d->itemDescGuessed =
true;
281 if (containsMarkup != 0L)
282 *containsMarkup = d->itemDescriptionContainsMarkup;
288 info += QLatin1String(
"### Document: ###################\n");
289 info += QLatin1String(
"title: #") +
title() + QLatin1String(
"#\n");
290 info += QLatin1String(
"link: #") +
link() + QLatin1String(
"#\n");
291 info += QLatin1String(
"description: #") +
description() + QLatin1String(
"#\n");
301 QList<Item> itlist =
items();
302 QList<Item>::ConstIterator it = itlist.constBegin();
303 QList<Item>::ConstIterator end = itlist.constEnd();
304 for ( ; it != end; ++it)
305 info += (*it).debugInfo();
308 info += QLatin1String(
"### Document end ################\n");