diff options
Diffstat (limited to 'quanta/src/dtds.h')
-rw-r--r-- | quanta/src/dtds.h | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/quanta/src/dtds.h b/quanta/src/dtds.h new file mode 100644 index 00000000..1e26f712 --- /dev/null +++ b/quanta/src/dtds.h @@ -0,0 +1,238 @@ +/*************************************************************************** + dtds.h - description + ------------------- + begin : 12.02.2004 (extract from quanta_init and others) + + copyright : (C) 2000 by Dmitry Poplavsky & Alexander Yakovlev <pdima@users.sourceforge.net,yshurik@linuxfan.com> + (C) 2001-2003 by Andras Mantia <amantia@kde.org> + (C) 2000, 2003 by Eric Laffoon <sequitur@kde.org> + (C) 2004 by Jens Herden <jhe at epost.de> + ***************************************************************************/ + +/*************************************************************************** + * * + * 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; version 2 of the License. * + * * + ***************************************************************************/ + +#ifndef DTDS_H +#define DTDS_H + +// application specific includes +#include "qtag.h" +#include "qobject.h" +#include "qfile.h" + +//qt includes +#include <qdict.h> + +//kde includes +#include <kdebug.h> + + +class QDomNode; +class QDomDocument; +class QTag; +class QString; +class QStringList; +class KConfig; +struct DTDStruct; + + +/** @short This class manages the DTD's for Quanta. + * + * The constructor only loads the necessary information from the description.rc file. + * The rest is later loaded on demand of the find() function. + */ +class DTDs : public QObject +{ + Q_OBJECT + +public: + + /** + * since this class is a singleton you must use this function to access it + * @return the class pointer + */ + static DTDs* ref(QObject *parent = 0L) + { + static DTDs *m_ref; + if (!m_ref) m_ref = new DTDs(parent); + return m_ref; + } + + + ~DTDs(); + + /** + * searchs a dtd and loads it from disk if not present in memory + * + * @param dtdName name of the dtd, will be converted to lowercase inside + * @return the found dtd structure + */ + const DTDStruct * find (const QString &dtdName) + { +// kdDebug(24000) << "dtds::find " << dtdName << endl; + DTDStruct *dtd = m_dict->find(dtdName.lower()) ; + if (dtd && ! dtd->loaded ) readTagDir2(dtd); + return dtd; + } + /** + * @param nickName nickname of the DTD + * @return the name (identifier) to the nickname. If the DTD is not found you get + * nickName back! + */ + QString getDTDNameFromNickName(const QString& nickName); + /** + * @param name name of the DTD + * @return the nickname to the name. If the DTD is not found you get + * name back! + */ + QString getDTDNickNameFromName(const QString& name) + { + DTDStruct *dtd = m_dict->find(name); + if ( dtd ) + return dtd->nickName; + else + return name; + }; + + /** + * creates a list of all available nicknames + * + * @param topLevelOnly true = only the DTD's which can be the main DTD of a document + * are included + * @return all known nick names + */ + QStringList nickNameList (bool topLevelOnly=false); + + /** + * creates a list of all available names + * + * @param topLevelOnly true = only the DTD's which can be the main DTD of a document + * are included + * @return all known names + */ + QStringList nameList (bool topLevelOnly=false); + /** + * creates a list with the path to the description.rc of all available DTEPs + * + * @param topLevelOnly true = only the DTD's which can be the main DTD of a document + * are included + * @return a list with the name and the path to the description.rc of all available DTEPs in form of + * DTEPName | path to description.rc + */ + QStringList fileNameList (bool topLevelOnly=false); + + + /** finds a dtd for a given url + * + * @param url look for this file + * @return the first DTD for this mimetype or the "empty" DTD if not found + */ + const DTDStruct * DTDforURL(const KURL &url); + + /** + * Checks if a DTD can handle the file or not. + * @param dtd the DTD to check against + * @param url the url pointing to the file + * @return true if it can handle + */ + static bool canHandle(const DTDStruct *dtd, const KURL &url); + +public slots: + + /** Load a DTD and convert to a DTEP */ + void slotLoadDTD(); + + /** Loads a DTEP from a directory + * @param dirName The directory containing the DTEP + * @param askForAutoLoad if true and the user answer with yes to the autoload question + * the DTEP will be copied to the local resource directory and will be autoloaded on + * startup + */ + void slotLoadDTEP(const QString& dirName, bool askForAutoLoad); + + /** + * Loads (replaces) the entities for a DTEP. + */ + void slotLoadEntities(); + +signals: + /** used to hide the splash screen */ + void hideSplash(); + + /** DTD has changed need reparse */ + void forceReparse(); + + /** Enable/disbale the idle timer*/ + void enableIdleTimer(bool); + + void loadToolbarForDTD(const QString&); + +private: + + /** The constructor is privat because we use singleton patter. + * If you need the class use DTDs::ref() for + * construction and reference + */ + DTDs(QObject *parent); + + + /** Reads the tag files and the description.rc from tagDir in order to + * build up the internal DTD and tag structures. + * + * @param dirName folder where dtd definition is located + * @param loadAll true = all information and tags will be loaded now (@ref readTagDir2 will be called) + * @return true = no error + */ + bool readTagDir(const QString &dirName, bool loadAll=true); + + /** Reads the tag files and the description.rc from tagDir in order to + * build up the internal DTD and tag structures. + * + * @param dtd the already preloaded dtd structure + * @return true = no error + */ + bool readTagDir2(DTDStruct *dtd); + + + /** helper for @ref readTagDir2 + * + * @param dtd the already preloaded dtd structure + */ + void resolveInherited (DTDStruct *dtd); + + /** Reads the tags from the tag files. + * + * @param fileName path of the tag file + * @param parentDTD the DTD where the tags belog to + * @param tagList the list where the tags are inserted + * @return the number of read tags. + */ + uint readTagFile(const QString& fileName, DTDStruct* parentDTD, QTagList *tagList); + + /** Parses the dom document and retrieve the tag attributes + * + * @param dom the DOM node containing the tag definition + * @param tag the QTag object that will be initialized by using the information in dom + * @param common will be true, if the tag is a just a list of common group attributes + */ + void setAttributes(QDomNode *dom, QTag* tag, bool &common); + /** removes dtd from dictonary and deletes all components + * + * @param dtd the dtd to delete + */ + void removeDTD(DTDStruct *dtd); + + /** helper to read the tag files */ + QDomDocument *m_doc; + + /** dictonary with references to all DTD's in memory */ + QDict<DTDStruct> *m_dict; +}; + + +#endif |