diff options
author | Shawn Hussey <shawn@zeroc.com> | 2011-08-16 13:39:10 -0230 |
---|---|---|
committer | Shawn Hussey <shawn@zeroc.com> | 2011-08-16 13:39:10 -0230 |
commit | b1e407d3c7ca1f08d5e822226a17ba381f9003fc (patch) | |
tree | 0d5aca236c4d567736860500100ebd7dd28c40fc /cpp/src/slice2confluence/Gen.h | |
parent | Added support for replica & name cert CN verification (diff) | |
download | ice-b1e407d3c7ca1f08d5e822226a17ba381f9003fc.tar.bz2 ice-b1e407d3c7ca1f08d5e822226a17ba381f9003fc.tar.xz ice-b1e407d3c7ca1f08d5e822226a17ba381f9003fc.zip |
Initial commit of slice2confluence.
Diffstat (limited to 'cpp/src/slice2confluence/Gen.h')
-rw-r--r-- | cpp/src/slice2confluence/Gen.h | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/cpp/src/slice2confluence/Gen.h b/cpp/src/slice2confluence/Gen.h new file mode 100644 index 00000000000..6e5bb970649 --- /dev/null +++ b/cpp/src/slice2confluence/Gen.h @@ -0,0 +1,277 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef GEN_H +#define GEN_H + +#include <Slice/Parser.h> +#include <IceUtil/OutputUtil.h> +#include <ConfluenceOutput.h> + +namespace Slice +{ + +void generate(const UnitPtr&, const ::std::string&, const ::std::string&, const ::std::string&, const std::string&, + const ::std::string&, const ::std::string&, const ::std::string&, const ::std::string&, + unsigned, unsigned); + +typedef ::std::set< ::std::string> Files; + +class GeneratorBase : private ::IceUtil::noncopyable +{ +public: + + static void setOutputDir(const ::std::string&); + static void setHeader(const ::std::string&); + static void setFooter(const ::std::string&); + static void setImageDir(const ::std::string&); + static void setLogoURL(const ::std::string&); + static void setSearchAction(const ::std::string&); + static void setIndexCount(int); + static void warnSummary(int); + static void setSymbols(const ContainedList&); + + void closeStream(); + +protected: + + GeneratorBase(Confluence::ConfluenceOutput&, const Files&); + virtual ~GeneratorBase() = 0; + + void openDoc(const ::std::string&, const std::string&, const std::string& = "", const std::string& = ""); + void openDoc(const ContainedPtr&); + void closeDoc(const std::string& = ""); + + void start(const ::std::string&, const ::std::string& = ::std::string()); + void end(); + + std::string getImageMarkup(const std::string&, const std::string& = ""); + std::string getLinkMarkup(const std::string&, const std::string& = "", const std::string& = "", const std::string& = ""); + + void removeNewlines(std::string); + + void printComment(const ContainedPtr&, const ContainerPtr&, const ::std::string&, bool = false); + void printMetaData(const ContainedPtr&); + void printSummary(const ContainedPtr&, const ContainerPtr&, bool, bool); + + void printHeaderFooter(const ContainedPtr&); + void printSearch(); + void printLogo(const ContainedPtr&, const ContainerPtr&, bool); + + ::std::string toString(const SyntaxTreeBasePtr&, const ContainerPtr&, bool = true, bool = false, + size_t* = 0, bool = false); + ::std::string toString(const ::std::string&, const ContainerPtr&, bool = true, bool = false, size_t* = 0); + ::std::string getComment(const ContainedPtr&, const ContainerPtr&, bool, bool = false); + + static ::std::string getAnchor(const SyntaxTreeBasePtr&); + static StringList getTarget(const SyntaxTreeBasePtr&); + static ::std::string getLinkPath(const SyntaxTreeBasePtr&, const ContainerPtr&, bool, bool = false); + + static ::std::string getImageDir(); + static ::std::string getLogoURL(); + + static ::std::string getFooter(const ::std::string&); + + Confluence::ConfluenceOutput& _out; + + static size_t _indexCount; + static size_t _warnSummary; + +private: + + void openStream(const ::std::string&); + + static ::std::string containedToId(const ContainedPtr&, bool); + static StringList getTagged(const ::std::string&, ::std::string&); + static ::std::string getScopedMinimized(const ContainedPtr&, const ContainerPtr&, bool = false); + static StringList getContained(const SyntaxTreeBasePtr&); + static StringList getContainer(const SyntaxTreeBasePtr&); + static StringList toStringList(const ContainedPtr&); + static void makeDir(const ::std::string&); + static ::std::string readFile(const ::std::string&); + static void readFile(const ::std::string&, ::std::string&, ::std::string&); + static void getHeaders(const ::std::string&, ::std::string&, ::std::string&); + + ::std::string _indexFooter; + const Files _files; + + static ::std::string _dir; + static ::std::string _header1; + static ::std::string _header2; + static ::std::string _footer; + static ::std::string _imageDir; + static ::std::string _logoURL; + static ::std::string _searchAction; + static ContainedList _symbols; + + // + // TODO: + // Members below exist to emit warnings for old-style javadoc comments (using [...] instead of {@link ...}), + // and to emit warnings for old-style scoped names (X::Y::Z instead of X.Y#Z). + // Once we remove support for the old style comments, we also need to remove these members. + // + ::std::set< ::std::string> _warnOldCommentFiles; + ::std::string toSliceID(const ::std::string&, const ::std::string&); + void warnOldStyleIdent(const ::std::string&, const ::std::string&); +}; + +class StartPageGenerator : private GeneratorBase +{ +public: + + StartPageGenerator(const Files&); + ~StartPageGenerator(); + void generate(const ModulePtr&); + +private: + + using GeneratorBase::printHeaderFooter; + void printHeaderFooter(); + + typedef ::std::pair< ::std::string, ::std::string> StringPair; + typedef ::std::vector<StringPair> ModuleDescriptions; + ModuleDescriptions _modules; + Confluence::ConfluenceOutput _out; +}; + +class FileVisitor : private ::IceUtil::noncopyable, public ParserVisitor +{ +public: + + FileVisitor(Files&); + + virtual bool visitUnitStart(const UnitPtr&); + virtual bool visitModuleStart(const ModulePtr&); + virtual bool visitExceptionStart(const ExceptionPtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDecl(const ClassDeclPtr&); + virtual bool visitStructStart(const StructPtr&); + virtual void visitSequence(const SequencePtr&); + virtual void visitDictionary(const DictionaryPtr&); + virtual void visitEnum(const EnumPtr&); + +private: + + Files& _files; +}; + +class StartPageVisitor : private ::IceUtil::noncopyable, public ParserVisitor +{ +public: + + StartPageVisitor(const Files&); + + virtual bool visitUnitStart(const UnitPtr&); + virtual bool visitModuleStart(const ModulePtr&); + +private: + + StartPageGenerator _spg; +}; + +class TOCGenerator : private GeneratorBase +{ +public: + + TOCGenerator(const Files&, const ::std::string&, const ::std::string&); + void generate(const ModulePtr&); + void writeTOC(); + const ContainedList& symbols() const; + +private: + + void writeEntry(const ContainedPtr&); + + ::std::string _footer; + ModuleList _modules; + ContainedList _symbols; + Confluence::ConfluenceOutput _out; +}; + +class TOCVisitor : private ::IceUtil::noncopyable, public ParserVisitor +{ +public: + + TOCVisitor(const Files&, const ::std::string&, const ::std::string&); + + virtual bool visitUnitStart(const UnitPtr&); + virtual bool visitModuleStart(const ModulePtr&); + void generate(); + const ContainedList& symbols() const; + +private: + + TOCGenerator _tg; +}; + +class ModuleGenerator : private GeneratorBase +{ +public: + + ModuleGenerator(Confluence::ConfluenceOutput&, const Files&); + void generate(const ModulePtr&); + +private: + + virtual void visitContainer(const ContainerPtr&); +}; + +class ExceptionGenerator : private GeneratorBase +{ +public: + + ExceptionGenerator(Confluence::ConfluenceOutput&, const Files&); + void generate(const ExceptionPtr&); +}; + +class ClassGenerator : private GeneratorBase +{ +public: + + ClassGenerator(Confluence::ConfluenceOutput&, const Files&); + void generate(const ClassDefPtr&); +}; + +class StructGenerator : private GeneratorBase +{ +public: + + StructGenerator(Confluence::ConfluenceOutput&, const Files&); + void generate(const StructPtr&); +}; + +class EnumGenerator : private GeneratorBase +{ +public: + + EnumGenerator(Confluence::ConfluenceOutput&, const Files&); + void generate(const EnumPtr&); +}; + +class PageVisitor : private ::IceUtil::noncopyable, public ParserVisitor +{ +public: + + PageVisitor(const Files&); + + virtual bool visitUnitStart(const UnitPtr&); + virtual bool visitModuleStart(const ModulePtr&); + virtual bool visitExceptionStart(const ExceptionPtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual bool visitStructStart(const StructPtr&); + virtual void visitEnum(const EnumPtr&); + +private: + + const Files& _files; +}; + +} + +#endif |