|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* $Id$
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
#include "linkedtexthandler.h"
|
|
Packit |
1c1d7e |
#include "debug.h"
|
|
Packit |
1c1d7e |
#include <doxmlintf.h>
|
|
Packit |
1c1d7e |
#include "stringimpl.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class LT_Text : public LinkedTextImpl, public ILT_Text
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
LT_Text(const QString &text) : m_text(text) {}
|
|
Packit |
1c1d7e |
virtual ~LT_Text() {}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// ILT_Text
|
|
Packit |
1c1d7e |
virtual const IString *text() const { return &m_text; }
|
|
Packit |
1c1d7e |
virtual Kind kind() const { return LinkedTextImpl::Kind_Text; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
StringImpl m_text;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class LT_Ref : public LinkedTextImpl, public ILT_Ref
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
LT_Ref() {}
|
|
Packit |
1c1d7e |
virtual ~LT_Ref() {}
|
|
Packit |
1c1d7e |
void setRefId(const QString &refId) { m_refId=refId; }
|
|
Packit |
1c1d7e |
void setText(const QString &text) { m_text=text; }
|
|
Packit |
1c1d7e |
void setExtId(const QString &extId) { m_extId=extId; }
|
|
Packit |
1c1d7e |
void setTargetKind(TargetKind k) { m_targetKind=k; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// ILT_Ref
|
|
Packit |
1c1d7e |
virtual const IString *text() const { return &m_text; }
|
|
Packit |
1c1d7e |
virtual const IString * id() const { return &m_refId; }
|
|
Packit |
1c1d7e |
virtual TargetKind targetKind() const { return m_targetKind; }
|
|
Packit |
1c1d7e |
virtual const IString *external() const { return &m_extId; }
|
|
Packit |
1c1d7e |
virtual Kind kind() const { return LinkedTextImpl::Kind_Ref; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
StringImpl m_refId;
|
|
Packit |
1c1d7e |
StringImpl m_extId;
|
|
Packit |
1c1d7e |
StringImpl m_text;
|
|
Packit |
1c1d7e |
TargetKind m_targetKind;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
LinkedTextHandler::LinkedTextHandler(IBaseHandler *parent,
|
|
Packit |
1c1d7e |
QList<LinkedTextImpl> &children
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
: m_parent(parent), m_children(children)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addStartHandler("ref",this,&LinkedTextHandler::startRef);
|
|
Packit |
1c1d7e |
addEndHandler("ref",this,&LinkedTextHandler::endRef);
|
|
Packit |
1c1d7e |
m_children.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
m_ref=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
LinkedTextHandler::~LinkedTextHandler()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void LinkedTextHandler::start(const char *endTag)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addEndHandler(endTag,this,&LinkedTextHandler::end);
|
|
Packit |
1c1d7e |
m_parent->setDelegate(this);
|
|
Packit |
1c1d7e |
m_curString="";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void LinkedTextHandler::end()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_curString.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_children.append(new LT_Text(m_curString));
|
|
Packit |
1c1d7e |
debug(2,"LinkedTextHandler: add text `%s'\n",m_curString.data());
|
|
Packit |
1c1d7e |
m_curString="";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_parent->setDelegate(0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void LinkedTextHandler::startRef(const QXmlAttributes& attrib)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_curString.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_children.append(new LT_Text(m_curString));
|
|
Packit |
1c1d7e |
debug(2,"LinkedTextHandler: add text `%s'\n",m_curString.data());
|
|
Packit |
1c1d7e |
m_curString="";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ASSERT(m_ref==0);
|
|
Packit |
1c1d7e |
m_ref = new LT_Ref;
|
|
Packit |
1c1d7e |
m_ref->setRefId(attrib.value("refid"));
|
|
Packit |
1c1d7e |
m_ref->setExtId(attrib.value("external"));
|
|
Packit |
1c1d7e |
ASSERT(attrib.value("kindref")=="compound" || attrib.value("kindref")=="member");
|
|
Packit |
1c1d7e |
m_ref->setTargetKind(attrib.value("kindref")=="compound" ? ILT_Ref::Compound : ILT_Ref::Member);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void LinkedTextHandler::endRef()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_ref->setText(m_curString);
|
|
Packit |
1c1d7e |
m_children.append(m_ref);
|
|
Packit |
1c1d7e |
debug(2,"LinkedTextHandler: add ref `%s'\n",m_ref->text()->latin1());
|
|
Packit |
1c1d7e |
m_ref=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QString LinkedTextHandler::toString(const QList<LinkedTextImpl> &list)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<LinkedTextImpl> li(list);
|
|
Packit |
1c1d7e |
QString result;
|
|
Packit |
1c1d7e |
LinkedTextImpl *lt;
|
|
Packit |
1c1d7e |
for (li.toFirst();(lt=li.current());++li)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch(lt->kind())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case ILinkedText::Kind_Text:
|
|
Packit |
1c1d7e |
result+=dynamic_cast<ILT_Text*>(lt)->text()->latin1();
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case ILinkedText::Kind_Ref:
|
|
Packit |
1c1d7e |
result+=dynamic_cast<ILT_Ref *>(lt)->text()->latin1();
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|