diff options
Diffstat (limited to 'src/util.h')
-rw-r--r-- | src/util.h | 224 |
1 files changed, 95 insertions, 129 deletions
@@ -1,8 +1,6 @@ /****************************************************************************** * - * - * - * Copyright (C) 1997-2015 by Dimitri van Heesch. + * Copyright (C) 1997-2021 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -25,17 +23,16 @@ #include <memory> #include <unordered_map> #include <algorithm> +#include <functional> +#include <fstream> -#include <qlist.h> #include <ctype.h> #include "types.h" -#include "sortdict.h" #include "docparser.h" -#include "classdef.h" -#include "arguments.h" #include "containers.h" -#include "namespacedef.h" #include "outputgen.h" +#include "regex.h" +#include "conceptdef.h" //-------------------------------------------------------------------- @@ -48,19 +45,14 @@ class ArgumentList; class OutputList; class OutputDocInterface; class MemberDef; -class ExampleSDict; class GroupDef; -class NamespaceSDict; struct TagInfo; class PageDef; class SectionInfo; -class QDir; class Definition; class BufStr; -class QFileInfo; -class QStrList; -class FTextStream; -class QFile; +class FileInfo; +class Dir; //-------------------------------------------------------------------- @@ -69,10 +61,10 @@ class TextGeneratorIntf { public: virtual ~TextGeneratorIntf() {} - virtual void writeString(const char *,bool) const = 0; + virtual void writeString(const QCString &,bool) const = 0; virtual void writeBreak(int indent) const = 0; - virtual void writeLink(const char *extRef,const char *file, - const char *anchor,const char *text + virtual void writeLink(const QCString &extRef,const QCString &file, + const QCString &anchor,const QCString &text ) const = 0; }; @@ -82,10 +74,10 @@ class TextGeneratorOLImpl : public TextGeneratorIntf public: virtual ~TextGeneratorOLImpl() {} TextGeneratorOLImpl(OutputDocInterface &od); - void writeString(const char *s,bool keepSpaces) const; + void writeString(const QCString &s,bool keepSpaces) const; void writeBreak(int indent) const; - void writeLink(const char *extRef,const char *file, - const char *anchor,const char *text + void writeLink(const QCString &extRef,const QCString &file, + const QCString &anchor,const QCString &text ) const; private: OutputDocInterface &m_od; @@ -102,20 +94,20 @@ void linkifyText(const TextGeneratorIntf &ol, const Definition *scope, const FileDef *fileScope, const Definition *self, - const char *text, + const QCString &text, bool autoBreak=FALSE, bool external=TRUE, bool keepSpaces=FALSE, int indentLevel=0 ); -QCString fileToString(const char *name,bool filter=FALSE,bool isSourceCode=FALSE); +QCString fileToString(const QCString &name,bool filter=FALSE,bool isSourceCode=FALSE); QCString dateToString(bool); bool getDefs(const QCString &scopeName, const QCString &memberName, - const char *, + const QCString &args, const MemberDef *&md, const ClassDef *&cd, const FileDef *&fd, @@ -126,10 +118,10 @@ bool getDefs(const QCString &scopeName, bool checkCV=FALSE ); -QCString getFileFilter(const char* name,bool isSourceCode); +QCString getFileFilter(const QCString &name,bool isSourceCode); -bool resolveRef(/* in */ const char *scName, - /* in */ const char *name, +bool resolveRef(/* in */ const QCString &scName, + /* in */ const QCString &name, /* in */ bool inSeeBlock, /* out */ const Definition **resContext, /* out */ const MemberDef **resMember, @@ -138,23 +130,20 @@ bool resolveRef(/* in */ const char *scName, /* in */ bool checkScope = FALSE ); -bool resolveLink(/* in */ const char *scName, - /* in */ const char *lr, +bool resolveLink(/* in */ const QCString &scName, + /* in */ const QCString &lr, /* in */ bool inSeeBlock, /* out */ const Definition **resContext, /* out */ QCString &resAnchor ); -//bool generateRef(OutputDocInterface &od,const char *, -// const char *,bool inSeeBlock,const char * =0); - -bool generateLink(OutputDocInterface &od,const char *, - const char *,bool inSeeBlock,const char *); +bool generateLink(OutputDocInterface &od,const QCString &, + const QCString &,bool inSeeBlock,const QCString &); -void generateFileRef(OutputDocInterface &od,const char *, - const char *linkTxt=0); +void generateFileRef(OutputDocInterface &od,const QCString &, + const QCString &linkTxt=QCString()); -void writePageRef(OutputDocInterface &od,const char *cn,const char *mn); +void writePageRef(OutputDocInterface &od,const QCString &cn,const QCString &mn); QCString getCanonicalTemplateSpec(const Definition *d,const FileDef *fs,const QCString& spec); @@ -172,31 +161,22 @@ QCString clearBlock(const char *s,const char *begin,const char *end); QCString selectBlock(const QCString& s,const QCString &name,bool enable, OutputGenerator::OutputType o); QCString removeEmptyLines(const QCString &s); -QCString resolveDefines(const char *n); - -ClassDef *getClass(const char *key); -inline ClassDefMutable *getClassMutable(const char *key) -{ - return toClassDefMutable(getClass(key)); -} - -NamespaceDef *getResolvedNamespace(const char *key); -inline NamespaceDefMutable *getResolvedNamespaceMutable(const char *key) -{ - return toNamespaceDefMutable(getResolvedNamespace(key)); -} -FileDef *findFileDef(const FileNameLinkedMap *fnMap,const char *n, +FileDef *findFileDef(const FileNameLinkedMap *fnMap,const QCString &n, bool &ambig); -QCString showFileDefMatches(const FileNameLinkedMap *fnMap,const char *n); +QCString showFileDefMatches(const FileNameLinkedMap *fnMap,const QCString &n); -int guessSection(const char *name); +int guessSection(const QCString &name); inline bool isId(int c) { return c=='_' || c>=128 || c<0 || isalnum(c); } +inline bool isIdJS(int c) +{ + return c>=128 || c<0 || isalnum(c); +} QCString removeRedundantWhiteSpace(const QCString &s); @@ -218,25 +198,16 @@ bool rightScopeMatch(const QCString &scope, const QCString &name); bool leftScopeMatch(const QCString &scope, const QCString &name); -QCString substituteKeywords(const QCString &s,const char *title, - const char *projName,const char *projNum,const char *projBrief); +QCString substituteKeywords(const QCString &s,const QCString &title, + const QCString &projName,const QCString &projNum,const QCString &projBrief); int getPrefixIndex(const QCString &name); QCString removeAnonymousScopes(const QCString &s); -QCString replaceAnonymousScopes(const QCString &s,const char *replacement=0); - -bool hasVisibleRoot(const BaseClassList &bcl); -bool classHasVisibleChildren(const ClassDef *cd); -bool namespaceHasNestedNamespace(const NamespaceDef *nd); -bool namespaceHasNestedClass(const NamespaceDef *nd,bool filterClasses,ClassDef::CompoundType ct); -bool classVisibleInIndex(const ClassDef *cd); - -int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level=0); -Protection classInheritedProtectionLevel(const ClassDef *cd,const ClassDef *bcd,Protection prot=Public,int level=0); +QCString replaceAnonymousScopes(const QCString &s,const QCString &replacement=QCString()); -QCString convertNameToFile(const char *name,bool allowDots=FALSE,bool allowUnderscore=FALSE); +QCString convertNameToFile(const QCString &name,bool allowDots=FALSE,bool allowUnderscore=FALSE); void extractNamespaceName(const QCString &scopeName, QCString &className,QCString &namespaceName, @@ -244,22 +215,22 @@ void extractNamespaceName(const QCString &scopeName, QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ); -QCString stripScope(const char *name); +QCString stripScope(const QCString &name); -QCString convertToId(const char *s); -QCString correctId(QCString s); +QCString convertToId(const QCString &s); +QCString correctId(const QCString &s); -QCString convertToHtml(const char *s,bool keepEntities=TRUE); +QCString convertToHtml(const QCString &s,bool keepEntities=TRUE); QCString convertToLaTeX(const QCString &s,bool insideTabbing=FALSE,bool keepSpaces=FALSE); -QCString convertToXML(const char *s, bool keepEntities=FALSE); +QCString convertToXML(const QCString &s, bool keepEntities=FALSE); -QCString convertToDocBook(const char *s); +QCString convertToDocBook(const QCString &s); -QCString convertToJSString(const char *s, bool applyTextDir = true); +QCString convertToJSString(const QCString &s); -QCString convertToPSString(const char *s); +QCString convertToPSString(const QCString &s); QCString getOverloadDocs(); @@ -291,20 +262,18 @@ QCString mergeScopes(const QCString &leftScope,const QCString &rightScope); int getScopeFragment(const QCString &s,int p,int *l); -int filterCRLF(char *buf,int len); - void addRefItem(const RefItemVector &sli, - const char *key, - const char *prefix, - const char *name, - const char *title, - const char *args, + const QCString &key, + const QCString &prefix, + const QCString &name, + const QCString &title, + const QCString &args, const Definition *scope); -PageDef *addRelatedPage(const char *name, +PageDef *addRelatedPage(const QCString &name, const QCString &ptitle, const QCString &doc, - const char *fileName, + const QCString &fileName, int docLine, int startLine, const RefItemVector &sli = RefItemVector(), @@ -314,34 +283,34 @@ PageDef *addRelatedPage(const char *name, SrcLangExt lang=SrcLangExt_Unknown ); -QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore=FALSE); -QCString unescapeCharsInString(const char *s); +QCString escapeCharsInString(const QCString &name,bool allowDots,bool allowUnderscore=FALSE); +QCString unescapeCharsInString(const QCString &s); void addGroupListToTitle(OutputList &ol,const Definition *d); -void filterLatexString(FTextStream &t,const char *str, +void filterLatexString(TextStream &t,const QCString &str, bool insideTabbing, bool insidePre, bool insideItem, bool insideTable, bool keepSpaces); -QCString latexEscapeLabelName(const char *s); -QCString latexEscapeIndexChars(const char *s); -QCString latexEscapePDFString(const char *s); -QCString latexFilterURL(const char *s); +QCString latexEscapeLabelName(const QCString &s); +QCString latexEscapeIndexChars(const QCString &s); +QCString latexEscapePDFString(const QCString &s); +QCString latexFilterURL(const QCString &s); -QCString rtfFormatBmkStr(const char *name); +QCString rtfFormatBmkStr(const QCString &name); -QCString linkToText(SrcLangExt lang,const char *link,bool isFileName); +QCString linkToText(SrcLangExt lang,const QCString &link,bool isFileName); -bool checkExtension(const char *fName, const char *ext); +bool checkExtension(const QCString &fName, const QCString &ext); -QCString addHtmlExtensionIfMissing(const char *fName); +QCString addHtmlExtensionIfMissing(const QCString &fName); -QCString stripExtensionGeneral(const char *fName, const char *ext); +QCString stripExtensionGeneral(const QCString &fName, const QCString &ext); -QCString stripExtension(const char *fName); +QCString stripExtension(const QCString &fName); void replaceNamespaceAliases(QCString &scope,int i); @@ -349,15 +318,15 @@ int computeQualifiedIndex(const QCString &name); void addDirPrefix(QCString &fileName); -QCString relativePathToRoot(const char *name); +QCString relativePathToRoot(const QCString &name); -void createSubDirs(QDir &d); +void createSubDirs(const Dir &d); -QCString stripPath(const char *s); +QCString stripPath(const QCString &s); -bool containsWord(const QCString &s,const QCString &word); +bool containsWord(const QCString &s,const char *word); -bool findAndRemoveWord(QCString &s,const QCString &word); +bool findAndRemoveWord(QCString &s,const char *word); QCString stripLeadingAndTrailingEmptyLines(const QCString &s,int &docLine); @@ -368,7 +337,7 @@ QCString getFileNameExtension(QCString fn); void initDefaultExtensionMapping(); void addCodeOnlyMappings(); -bool checkIfTypedef(const Definition *scope,const FileDef *fileScope,const char *n); +bool checkIfTypedef(const Definition *scope,const FileDef *fileScope,const QCString &n); QCString parseCommentAsText(const Definition *scope,const MemberDef *member,const QCString &doc,const QCString &fileName,int lineNr); @@ -378,10 +347,10 @@ QCString recodeString(const QCString &str,const char *fromEncoding,const char *t QCString extractAliasArgs(const QCString &args,int pos); -int countAliasArguments(const QCString argList); +int countAliasArguments(const QCString &argList); -QCString resolveAliasCmd(const QCString aliasCmd); -QCString expandAlias(const QCString &aliasName,const QCString &aliasValue); +QCString resolveAliasCmd(const QCString &aliasCmd); +std::string expandAlias(const std::string &aliasName,const std::string &aliasValue); void writeTypeConstraints(OutputList &ol,const Definition *d,const ArgumentList &al); @@ -389,17 +358,18 @@ QCString convertCharEntitiesToUTF8(const QCString &s); void stackTrace(); -bool readInputFile(const char *fileName,BufStr &inBuf, +bool readInputFile(const QCString &fileName,BufStr &inBuf, bool filter=TRUE,bool isSourceCode=FALSE); QCString filterTitle(const QCString &title); -bool patternMatch(const QFileInfo &fi,const StringVector &patList); +bool patternMatch(const FileInfo &fi,const StringVector &patList); QCString externalLinkTarget(const bool parent = false); QCString externalRef(const QCString &relPath,const QCString &ref,bool href); int nextUtf8CharPosition(const QCString &utf8Str,uint len,uint startPos); -const char *writeUtf8Char(FTextStream &t,const char *s); +void writeMarkerList(OutputList &ol,const std::string &markerText,size_t numMarkers, + std::function<void(size_t)> replaceFunc); /** Data associated with a HSV colored image. */ struct ColoredImgDataItem @@ -411,12 +381,12 @@ struct ColoredImgDataItem unsigned char *alpha; }; -void writeColoredImgData(const char *dir,ColoredImgDataItem data[]); -QCString replaceColorMarkers(const char *str); +void writeColoredImgData(const QCString &dir,ColoredImgDataItem data[]); +QCString replaceColorMarkers(const QCString &str); bool copyFile(const QCString &src,const QCString &dest); -QCString extractBlock(const QCString text,const QCString marker); -int lineBlock(const QCString text,const QCString marker); +QCString extractBlock(const QCString &text,const QCString &marker); +int lineBlock(const QCString &text,const QCString &marker); bool isURL(const QCString &url); @@ -433,19 +403,6 @@ QCString getDotImageExtension(); bool fileVisibleInIndex(const FileDef *fd,bool &genSourceFile); -const int MAX_UTF8_CHAR_LEN = 4; -const int MAX_UTF8_CHAR_SIZE = MAX_UTF8_CHAR_LEN+1; // include 0 terminator -enum class CaseModifier -{ - None, - ToUpper, - ToLower -}; -int getUtf8Char(const char *input,char ids[MAX_UTF8_CHAR_SIZE],CaseModifier modifier=CaseModifier::None); -uint getUtf8Code( const QCString& s, int idx ); -uint getUtf8CodeToLower( const QCString& s, int idx ); -uint getUtf8CodeToUpper( const QCString& s, int idx ); - QCString extractDirection(QCString &docs); void convertProtectionLevel( @@ -456,11 +413,20 @@ void convertProtectionLevel( ); bool mainPageHasTitle(); -bool openOutputFile(const char *outFile,QFile &f); -void writeExtraLatexPackages(FTextStream &t); -void writeLatexSpecialFormulaChars(FTextStream &t); +bool openOutputFile(const QCString &outFile,std::ofstream &f); +void writeExtraLatexPackages(TextStream &t); +void writeLatexSpecialFormulaChars(TextStream &t); -bool recognizeFixedForm(const char* contents, FortranFormat format); +StringVector split(const std::string &s,const std::string &delimiter); +StringVector split(const std::string &s,const reg::Ex &delimiter); +int findIndex(const StringVector &sv,const std::string &s); +int findIndex(const std::string &s,const reg::Ex &re); +std::string join(const StringVector &s,const std::string &delimiter); + +bool recognizeFixedForm(const QCString &contents, FortranFormat format); FortranFormat convertFileNameFortranParserCode(QCString fn); +QCString integerToAlpha(int n, bool upper=true); +QCString integerToRoman(int n, bool upper=true); + #endif |