예제 #1
0
void TestStoryText::removeText()
{
    StoryText story;
    story.insertChars(0, QString("Hallo Welt"));
    story.removeChars(5, 5);
    QCOMPARE(story.text(0, story.length()), QString("Hallo"));
}
예제 #2
0
void PageItem_NoteFrame::insertNote(TextNote *note)
{
	Mark* mrk = note->noteMark();
	if (mrk == NULL)
	{
		mrk = m_Doc->newMark();
		mrk->setType(MARKNoteFrameType);
		QString label = "NoteFrameMark_" + notesStyle()->name();
		if (notesStyle()->range() == NSRsection)
			label += " in section " + m_Doc->getSectionNameForPageIndex(note->masterMark()->OwnPage) + " page " + QString::number(note->masterMark()->OwnPage +1);
		else if (notesStyle()->range() == NSRpage)
			label += " on page " + QString::number(note->masterMark()->OwnPage +1);
		else if (notesStyle()->range() == NSRstory)
			label += " in " + note->masterMark()->getItemPtr()->firstInChain()->itemName();
		else if (notesStyle()->range() == NSRframe)
			label += " in frame " + note->masterMark()->getItemName();
		mrk->label = label + "_" + note->numString();
		mrk->setNotePtr(note);
		getUniqueName(mrk->label, m_Doc->marksLabelsList(MARKNoteFrameType), "_");
		note->setNoteMark(mrk);
	}
	mrk->setItemPtr(this);
	mrk->setString(notesStyle()->prefix() + note->numString() + note->notesStyle()->suffix());

	StoryText story;
	if (!note->saxedText().isEmpty())
		story = desaxeString(m_Doc, note->saxedText());
	story.insertMark(mrk, 0);
	story.setDefaultStyle(itemText.defaultStyle());
//	story.applyCharStyle(0, story.length(), itemText.charStyle());
	if (itemText.length() > 0)
		itemText.insertChars(itemText.length(), SpecialChars::PARSEP);
	itemText.insert(itemText.length(), story);
}
예제 #3
0
void TestStoryText::initST()
{
    StoryText story;
    QCOMPARE(story.length(), 0);
    story.insertChars(0, "Hallo Welt");
    QCOMPARE(story.nrOfParagraphs(), 1u);
    QCOMPARE(story.nrOfRuns(), 1u);
}
예제 #4
0
void TestStoryText::insertPar()
{
    StoryText story;
    story.insertChars(0, QString("Hallo") + SpecialChars::PARSEP + QString("Welt"));
    QCOMPARE(story.length(), 10);
    QCOMPARE(story.nrOfParagraphs(), 2u);
    QCOMPARE(story.nrOfRuns(), 2u);
    for (int i =0; i <= story.nrOfParagraphs(); ++i)
        qDebug() << "par" << i << "offset" << story.startOfParagraph(i);
    QCOMPARE(story.text(0,10).length(), 10);
    QCOMPARE(story.text(0, story.length()), QString("Hallo") + SpecialChars::PARSEP + QString("Welt"));
}
예제 #5
0
StoryText desaxeString(ScribusDoc* doc, QString saxedString)
{
	assert(!saxedString.isEmpty());

	Serializer* dig = doc->textSerializer();
	dig->parseMemory(saxedString);

	StoryText* story = dig->result<StoryText>();
	assert (story != NULL);

	StoryText res = *story;
	res.setDoc(doc);

	delete story;
	return res;
}
예제 #6
0
void TestStoryText::addText()
{
    StoryText story;
    story.insertChars(0, QString("Hallo Welt"));
    QCOMPARE(story.length(), 10);
    QCOMPARE(story.text(0, story.length()), QString("Hallo Welt"));
    story.insertChars(5, " schöne neue");
    QCOMPARE(story.text(0, story.length()), QString("Hallo schöne neue Welt"));
}
예제 #7
0
void TestStoryText::removePar()
{
    StoryText story;
    story.insertChars(0, QString("Hallo") + SpecialChars::PARSEP + QString("Welt"));
    story.removeChars(3, 6);
    QCOMPARE(story.length(), 10 - 6);
    QCOMPARE(story.text(0, story.length()), QString("Halt"));
}
예제 #8
0
void TestStoryText::removePars()
{
    StoryText story;
    story.insertChars(0,
                      QString("0123456789") + SpecialChars::PARSEP +
                      QString("abcdefghijklmnopqrstuvwxyz") + SpecialChars::PARSEP +
                      QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
    story.removeChars(5 + 26 + 1,  26 + 1);

    QCOMPARE(story.nrOfParagraphs(), 2u);
    QCOMPARE(story.text(0, story.length()),
             QString("0123456789") + SpecialChars::PARSEP + QString("abcdefghijklmnopqrstuVWXYZ"));
}
예제 #9
0
void TestStoryText::applyCharStyle()
{
    StoryText story;
    story.insertChars(0,
                      QString("0123456789") + SpecialChars::PARSEP +
                      QString("abcdefghijklmnopqrstuvwxyz") + SpecialChars::PARSEP +
                      QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
    QCOMPARE(story.nrOfRuns(), 3u);
    CharStyle cs;
    cs.setFontSize(10);
    story.applyCharStyle(5 + 26 + 1,  26 + 1, cs);
    QCOMPARE(story.nrOfRuns(), 5u);
    QCOMPARE(story.startOfRun(0), 0);
    QCOMPARE(story.endOfRun(0), 11);
    QCOMPARE(story.startOfRun(1), 11);
    QCOMPARE(story.endOfRun(1), 5 + 26 + 1);
    QCOMPARE(story.startOfRun(2), 5 + 26 + 1);
    QCOMPARE(story.endOfRun(2), 11 + 26 + 1);
    QCOMPARE(story.startOfRun(3), 11 + 26 + 1);
    QCOMPARE(story.endOfRun(3), 5 + 26 + 1 + 26 + 1);
    QCOMPARE(story.startOfRun(4), 5 + 26 + 1 + 26 + 1);
    QCOMPARE(story.endOfRun(4), 11 + 26 + 1 + 26);
    QCOMPARE(story.charStyle(5 + 26 + 1).fontSize(), 10.0);
}
예제 #10
0
void gtAction::write(const QString& text, gtStyle *style, bool isNote)
{
	if (isFirstWrite)
	{
		if (!doAppend)
		{
			if (it->nextInChain() != 0)
			{
				PageItem *nextItem = it->nextInChain();
				while (nextItem != 0)
				{
					nextItem->itemText.clear();
					nextItem = nextItem->nextInChain();
				}
			}
			it->itemText.clear();
		}
	}
	int paragraphStyle = -1;
	if (style->target() == "paragraph")
	{
		gtParagraphStyle* pstyle = dynamic_cast<gtParagraphStyle*>(style);
		assert(pstyle != NULL);
		paragraphStyle = applyParagraphStyle(pstyle);
		if (isFirstWrite)
			inPara = true;
	}
	else if (style->target() == "frame")
	{
		gtFrameStyle* fstyle = dynamic_cast<gtFrameStyle*>(style);
		assert(fstyle != NULL);
		applyFrameStyle(fstyle);
	}

	if ((inPara) && (!lastCharWasLineChange) && (text.left(1) != "\n") && (lastParagraphStyle != -1))
		paragraphStyle = lastParagraphStyle;

	if (paragraphStyle == -1)
		paragraphStyle = 0; //::findParagraphStyle(textFrame->doc(), textFrame->doc()->currentStyle);

	const ParagraphStyle& paraStyle = textFrame->doc()->paragraphStyles()[paragraphStyle];

	gtFont* font = style->getFont();
	QString fontName = validateFont(font).scName();
	CharStyle lastStyle, newStyle;
	int lastStyleStart = 0;
	
	if ((inPara) && (!overridePStyleFont))
	{
		if (paraStyle.charStyle().font().isNone())
		{
			gtFont font2(*font);
			font2.setName(paraStyle.charStyle().font().scName());
			QString fontName2 = validateFont(&font2).scName();
			newStyle.setFont((*textFrame->doc()->AllFonts)[fontName2]);
		}
	}
	else
	{
		setCharStyleAttributes(font, newStyle);
	}
	/*newStyle.eraseCharStyle(paraStyle.charStyle());*/

	lastStyle = newStyle;
	lastStyleStart = it->itemText.length();
	StoryText* story = NULL;
	if (isNote)
	{
		if (noteStory == NULL)
		{
			note = it->m_Doc->newNote(it->m_Doc->m_docNotesStylesList.at(0));
			noteStory = new StoryText(it->m_Doc);
		}
		story = noteStory;
	}
	else
		story = &it->itemText;

	QChar ch0(0), ch5(5), ch10(10), ch13(13); 
	for (int a = 0; a < text.length(); ++a)
	{
		if ((text.at(a) == ch0) || (text.at(a) == ch13))
			continue;
		QChar ch = text.at(a);
		if ((ch == ch10) || (ch == ch5))
			ch = ch13;
		
		int pos = story->length();
		if (isNote && ch == SpecialChars::OBJECT)
		{
			NotesStyle* nStyle = note->notesStyle();
			QString label = "NoteMark_" + nStyle->name();
			if (nStyle->range() == NSRsection)
				label += " in section " + it->m_Doc->getSectionNameForPageIndex(it->OwnPage) + " page " + QString::number(it->OwnPage +1);
			else if (nStyle->range() == NSRpage)
				label += " on page " + QString::number(it->OwnPage +1);
			else if (nStyle->range() == NSRstory)
				label += " in " + it->firstInChain()->itemName();
			else if (nStyle->range() == NSRframe)
				label += " in frame" + it->itemName();
			if (it->m_Doc->getMark(label + "_1", MARKNoteMasterType) != NULL)
				getUniqueName(label,it->m_Doc->marksLabelsList(MARKNoteMasterType), "_"); //FIX ME here user should be warned that inserted mark`s label was changed
			else
				label = label + "_1";
			Mark* mrk = it->m_Doc->newMark();
			mrk->label = label;
			mrk->setType(MARKNoteMasterType);
			mrk->setNotePtr(note);
			note->setMasterMark(mrk);
			mrk->setString("");
			mrk->OwnPage = it->OwnPage;
			it->itemText.insertMark(mrk);
			story->applyCharStyle(lastStyleStart, story->length()-lastStyleStart, lastStyle);
			if (paraStyle.hasName())
			{
				ParagraphStyle pStyle;
				pStyle.setParent(paraStyle.name());
				story->applyStyle(qMax(0,story->length()-1), pStyle);
			}
			else
				story->applyStyle(qMax(0,story->length()-1), paraStyle);
			
			lastCharWasLineChange = text.right(1) == "\n";
			inPara = style->target() == "paragraph";
			lastParagraphStyle = paragraphStyle;
			if (isFirstWrite)
				isFirstWrite = false;
			if (story->text(pos -1) == SpecialChars::PARSEP)
				story->removeChars(pos-1, 1);
			note->setSaxedText(saxedText(story));
			note = NULL;
			delete noteStory;
			noteStory = NULL;
			return;
		}
		else
			story->insertChars(pos, QString(ch));
		if (ch == SpecialChars::PARSEP) 
		{
			if (paraStyle.hasName())
			{
				ParagraphStyle pstyle;
				pstyle.setParent(paraStyle.name());
				story->applyStyle(pos, pstyle);
			}
			else
				story->applyStyle(pos, paraStyle);
		}
	}
	story->applyCharStyle(lastStyleStart, story->length()-lastStyleStart, lastStyle);
	if (paraStyle.hasName())
	{
		ParagraphStyle pStyle;
		pStyle.setParent(paraStyle.name());
		story->applyStyle(qMax(0,story->length()-1), pStyle);
	}
	else
		story->applyStyle(qMax(0,story->length()-1), paraStyle);
	
	lastCharWasLineChange = text.right(1) == "\n";
	inPara = style->target() == "paragraph";
	lastParagraphStyle = paragraphStyle;
	if (isFirstWrite)
		isFirstWrite = false;
}