noteobj.cpp
author insilmaril
Tue Mar 14 14:27:16 2006 +0000 (2006-03-14)
changeset 245 27b71695d690
parent 0 7a96bd401351
child 251 795d0eb5700f
permissions -rw-r--r--
hideLinkInExport for Branches (Floats still missing). Floats are now OrnamentedObj.
insilmaril@0
     1
#include <qfile.h>
insilmaril@0
     2
#include <qtextstream.h>
insilmaril@0
     3
#include <qmessagebox.h>
insilmaril@0
     4
#include <qregexp.h>
insilmaril@0
     5
insilmaril@0
     6
#include "noteobj.h"
insilmaril@0
     7
insilmaril@0
     8
/////////////////////////////////////////////////////////////////
insilmaril@0
     9
// NoteObj
insilmaril@0
    10
/////////////////////////////////////////////////////////////////
insilmaril@0
    11
insilmaril@0
    12
NoteObj::NoteObj()
insilmaril@0
    13
{
insilmaril@0
    14
	clear();
insilmaril@0
    15
}
insilmaril@0
    16
insilmaril@185
    17
NoteObj::NoteObj(const QString &s)
insilmaril@185
    18
{
insilmaril@185
    19
	clear();
insilmaril@185
    20
	note=s;
insilmaril@185
    21
}
insilmaril@185
    22
insilmaril@0
    23
void NoteObj::copy (NoteObj other)
insilmaril@0
    24
{
insilmaril@0
    25
	note=other.note;
insilmaril@0
    26
	fonthint=other.fonthint;
insilmaril@0
    27
	filenamehint="";
insilmaril@0
    28
}
insilmaril@0
    29
insilmaril@0
    30
void NoteObj::clear()
insilmaril@0
    31
{
insilmaril@0
    32
	note="";
insilmaril@0
    33
	fonthint="undef";
insilmaril@0
    34
	filenamehint="";
insilmaril@0
    35
}
insilmaril@0
    36
insilmaril@0
    37
void NoteObj::setNote (const QString &s)
insilmaril@0
    38
{
insilmaril@0
    39
	note=s;
insilmaril@0
    40
}
insilmaril@0
    41
insilmaril@0
    42
QString NoteObj::getNote()
insilmaril@0
    43
{
insilmaril@0
    44
	return note;
insilmaril@0
    45
}
insilmaril@0
    46
insilmaril@185
    47
QString NoteObj::getNoteASCII()
insilmaril@185
    48
{
insilmaril@185
    49
	QString r=note;
insilmaril@185
    50
insilmaril@185
    51
	// convert all "<br*>" to "\n"
insilmaril@185
    52
	QRegExp re("<br.*>");
insilmaril@185
    53
	re.setMinimal(true);
insilmaril@185
    54
	r.replace (re,"\n");
insilmaril@185
    55
insilmaril@185
    56
	// convert all "</p>" to "\n"
insilmaril@185
    57
	re.setPattern ("</p>");
insilmaril@185
    58
	r.replace (re,"\n");
insilmaril@185
    59
	
insilmaril@185
    60
	// remove all remaining tags 
insilmaril@185
    61
	re.setPattern ("<.*>");
insilmaril@185
    62
	r.replace (re,"");
insilmaril@185
    63
insilmaril@185
    64
	// If string starts with \n now, remove it.
insilmaril@185
    65
	// It would be wrong in an OOo export for example
insilmaril@185
    66
	while (r.at(0)=='\n') r.remove (0,1);
insilmaril@185
    67
	
insilmaril@185
    68
	// convert "&", "<" and ">"
insilmaril@185
    69
	re.setPattern ("&gt;");
insilmaril@185
    70
	r.replace (re,">");
insilmaril@185
    71
	re.setPattern ("&lt;");
insilmaril@185
    72
	r.replace (re,"<");
insilmaril@185
    73
	re.setPattern ("&amp;");
insilmaril@185
    74
	r.replace (re,"&");
insilmaril@185
    75
	re.setPattern ("&quot;");
insilmaril@185
    76
	r.replace (re,"\"");
insilmaril@185
    77
insilmaril@185
    78
	return r;
insilmaril@185
    79
}
insilmaril@185
    80
insilmaril@185
    81
QString NoteObj::getNoteOpenDoc()
insilmaril@185
    82
{
insilmaril@185
    83
	// Evil hack to transform QT Richtext into
insilmaril@185
    84
	// something which can be used in OpenDoc format
insilmaril@185
    85
	// 
insilmaril@185
    86
	// TODO create clean XML transformation which also
insilmaril@185
    87
	// considers fonts, colors, ...
insilmaril@185
    88
insilmaril@185
    89
	QString r=note;
insilmaril@185
    90
insilmaril@185
    91
	// convert all "<br*>"
insilmaril@185
    92
	QRegExp re("<br.*>");
insilmaril@185
    93
	re.setMinimal(true);
insilmaril@185
    94
	r.replace (re,"<text:line-break/>");
insilmaril@185
    95
insilmaril@185
    96
	// convert all "<p>" 
insilmaril@185
    97
	re.setPattern ("<p>");
insilmaril@185
    98
	r.replace (re,"<text:line-break/>");
insilmaril@185
    99
	
insilmaril@185
   100
	// Remove all other tags, e.g. paragraphs will be added in 
insilmaril@185
   101
	// templates used during export
insilmaril@185
   102
	re.setPattern ("</?html.*>");
insilmaril@185
   103
	r.replace (re,"");
insilmaril@185
   104
	re.setPattern ("</?head.*>");
insilmaril@185
   105
	r.replace (re,"");
insilmaril@185
   106
	re.setPattern ("</?body.*>");
insilmaril@185
   107
	r.replace (re,"");
insilmaril@185
   108
	re.setPattern ("</?meta.*>");
insilmaril@185
   109
	r.replace (re,"");
insilmaril@185
   110
	re.setPattern ("</?span.*>");
insilmaril@185
   111
	r.replace (re,"");
insilmaril@185
   112
	re.setPattern ("</?p.*>");
insilmaril@185
   113
	r.replace (re,"");
insilmaril@185
   114
insilmaril@185
   115
	r="<text:span text:style-name=\"vym-notestyle\">"+r+"</text:span>";
insilmaril@185
   116
	return r;
insilmaril@185
   117
}
insilmaril@185
   118
insilmaril@0
   119
void NoteObj::setFontHint (const QString &s)
insilmaril@0
   120
{
insilmaril@0
   121
	// only for backward compatibility (pre 1.5 )
insilmaril@0
   122
	fonthint=s;
insilmaril@0
   123
}
insilmaril@0
   124
insilmaril@0
   125
QString NoteObj::getFontHint()
insilmaril@0
   126
{
insilmaril@0
   127
	// only for backward compatibility (pre 1.5 )
insilmaril@0
   128
	return fonthint;
insilmaril@0
   129
}
insilmaril@0
   130
insilmaril@0
   131
void NoteObj::setFilenameHint (const QString &s)
insilmaril@0
   132
{
insilmaril@0
   133
	filenamehint=s;
insilmaril@0
   134
}
insilmaril@0
   135
insilmaril@0
   136
QString NoteObj::getFilenameHint()
insilmaril@0
   137
{
insilmaril@0
   138
	return filenamehint;
insilmaril@0
   139
}
insilmaril@0
   140
insilmaril@0
   141
bool NoteObj::isEmpty ()
insilmaril@0
   142
{
insilmaril@0
   143
	return note.isEmpty();
insilmaril@0
   144
}
insilmaril@0
   145
insilmaril@0
   146
QString NoteObj::saveToDir ()
insilmaril@0
   147
{
insilmaril@0
   148
	// QTextEdit may generate fontnames with unquoted &, like
insilmaril@0
   149
	// in "Lucida B&H". This is invalid in XML and thus would crash
insilmaril@0
   150
	// the XML parser
insilmaril@0
   151
	uint pos=0;
insilmaril@0
   152
	uint pos2;
insilmaril@0
   153
	bool inbracket=false;
insilmaril@0
   154
	bool inquot=false;
insilmaril@0
   155
	while (pos<note.length())
insilmaril@0
   156
	{
insilmaril@0
   157
		if (note.mid(pos,1)=="<") inbracket=true;
insilmaril@0
   158
		if (note.mid(pos,1)==">") inbracket=false;
insilmaril@0
   159
		if (note.mid(pos,1)=="\"" && inbracket)
insilmaril@0
   160
		{
insilmaril@0
   161
			if (!inquot)
insilmaril@0
   162
				inquot=true;
insilmaril@0
   163
			else
insilmaril@0
   164
				inquot=false;
insilmaril@0
   165
		}
insilmaril@0
   166
		if (note.mid(pos,1)=="&" && inquot)
insilmaril@0
   167
		{
insilmaril@0
   168
			// Now we are inside  <  "  "  >
insilmaril@0
   169
			// look for ending "
insilmaril@0
   170
			pos2=pos+1;
insilmaril@0
   171
			while (note.mid(pos2,1)!=";" && note.mid(pos2,1)!="\"")
insilmaril@0
   172
				pos2++;
insilmaril@0
   173
			if (note.mid(pos2,1)=="\"")
insilmaril@0
   174
			{
insilmaril@0
   175
				note.replace(pos,1,"&amp;");
insilmaril@0
   176
				pos=pos2;
insilmaril@0
   177
			}
insilmaril@0
   178
		}
insilmaril@0
   179
		pos++;
insilmaril@0
   180
	}
insilmaril@0
   181
	return beginElement ("htmlnote",attribut("fonthint",fonthint)) + "\n"+ note+ "\n" +endElement ("htmlnote");
insilmaril@0
   182
}
insilmaril@0
   183