summaryrefslogtreecommitdiff
path: root/cli/context.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-04-08 14:51:57 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2020-04-27 11:38:53 +0300
commit720c5a33b6a49cf328fdd7611f49153cf8f60247 (patch)
tree9725f3d1f42ec90fde84520f49647edea013ce5e /cli/context.hxx
parent3183f3bb927a90783ae0aeaf190a0919377aabe4 (diff)
Separate tests and examples into individual packages
Also make cli module to be explicitly enabled via the config.cli configuration variable.
Diffstat (limited to 'cli/context.hxx')
-rw-r--r--cli/context.hxx295
1 files changed, 0 insertions, 295 deletions
diff --git a/cli/context.hxx b/cli/context.hxx
deleted file mode 100644
index 633b8ad..0000000
--- a/cli/context.hxx
+++ /dev/null
@@ -1,295 +0,0 @@
-// file : cli/context.hxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// license : MIT; see accompanying LICENSE file
-
-#ifndef CLI_CONTEXT_HXX
-#define CLI_CONTEXT_HXX
-
-#include <set>
-#include <map>
-#include <string>
-#include <vector>
-#include <ostream>
-#include <cstddef> // std::size_t
-
-#include <cutl/re.hxx>
-#include <cutl/shared-ptr.hxx>
-#include <cutl/fs/path.hxx>
-
-#include <cli/options.hxx>
-#include <cli/semantics.hxx>
-#include <cli/traversal.hxx>
-
-using std::endl;
-
-class generation_failed {};
-
-enum usage
-{
- ut_none,
- ut_short,
- ut_long,
- ut_both
-};
-
-enum class_doc
-{
- cd_default,
- cd_exclude,
- cd_exclude_base,
- cd_short,
- cd_long
-};
-
-class context
-{
-public:
- typedef std::size_t size_t;
- typedef std::string string;
-
- typedef cutl::fs::path path;
- typedef cutl::fs::invalid_path invalid_path;
-
- typedef ::options options_type;
- typedef ::usage usage_type;
- typedef ::class_doc class_doc_type;
-
- // Regex.
- //
- typedef cutl::re::regex regex;
- typedef cutl::re::regexsub regexsub;
- typedef cutl::re::format regex_format;
-
- typedef std::vector<regexsub> regex_mapping;
-
-private:
- struct data;
- cutl::shared_ptr<data> data_;
-
-public:
- std::ostream& os;
- semantics::cli_unit& unit;
- options_type const& options;
-
- // Documentation output type.
- //
- enum output_type
- {
- ot_plain,
- ot_html,
- ot_man
- };
-
- output_type ot;
-
- bool gen_modifier;
- bool gen_specifier;
- bool gen_parse;
- bool gen_merge;
- usage_type gen_usage;
-
- string const& inl;
- string const& opt_prefix;
- string const& opt_sep;
- string const& cli;
-
- typedef std::map<string, string> reserved_name_map_type;
- reserved_name_map_type const& reserved_name_map;
-
- typedef std::set<string> keyword_set_type;
- keyword_set_type const& keyword_set;
-
- regex_mapping const& link_regex;
-
- typedef std::set<string> id_set_type;
- id_set_type& id_set;
- id_set_type& ref_set;
-
- // Map of heading ids to heading number (assigned during TOC generation)
- //
- typedef std::map<string, string> heading_map_type;
- heading_map_type& heading_map;
-
- // TOC phase.
- //
- // 0 - non-TOC
- // 1 - generating TOC after seeing expansion but before restart
- // 2 - generating TOC after restart
- // 0 - non-TOC after seeing expansion after restart
- //
- unsigned short& toc;
-
- struct toc_entry
- {
- toc_entry (char t = '\0', size_t c = 0): type (t), count (c) {}
-
- char type; // Entry type (output type-specific, usually X from \hX).
- size_t count; // Number of sub-entries so far.
- };
-
- typedef std::vector<toc_entry> toc_stack;
- toc_stack& tocs;
-
-private:
- struct data
- {
- string inl_;
- string cli_;
- keyword_set_type keyword_set_;
- regex_mapping link_regex_;
- id_set_type id_set_;
- id_set_type ref_set_;
- heading_map_type heading_map_;
- unsigned short toc_;
- toc_stack tocs_;
- };
-
-public:
- // Escape C++ keywords, reserved names, and illegal characters.
- //
- string
- escape (string const&) const;
-
- string
- process_link_target (const string&);
-
- // Translate and format the documentation string. Translate converts
- // the <arg>-style constructs to \i{arg}. Format converts the string
- // to the output format.
- //
- static string
- translate_arg (string const&, std::set<string>&);
-
- static string
- translate (string const&, std::set<string> const&);
-
- // If para is true, start a new paragraph.
- //
- string
- format (semantics::scope&, string const&, bool para);
-
- void
- format_line (output_type, string&, const char*, size_t);
-
- // Called when we switch to the TOC mode and when we exit it,
- // respectively.
- //
- string
- start_toc ();
-
- string
- end_toc ();
-
- // Make sure each local fragment reference has the corresponding id. Issue
- // diagnostics and throw generation_failed if fails. Otherwise clear the
- // id and ref sets.
- //
- void
- verify_id_ref ();
-
- // Substitute doc variable expansions ($var$). Var must be a C identifier.
- // If the path is not NULL, then also recognize names that start with either
- // ./ or ../ and treat them as files relative to path. Such file expansions
- // are substituted with the file contents.
- //
- string
- substitute (const string&, const path* = 0);
-
- // Substitute doc variable expansions (\$var$). Note that it leaves escapes
- // (\\$) as is. Return true if any substitutions have been made, in which
- // case result will contain the expansion result.
- //
- bool
- substitute (semantics::scope&, const char* s, size_t n, string& result);
-
-public:
- static string const&
- ename (semantics::nameable& n)
- {
- return n.context ().get<string> ("name");
- }
-
- static string const&
- especifier (semantics::nameable& n)
- {
- return n.context ().get<string> ("specifier");
- }
-
- static string const&
- emember (semantics::nameable& n)
- {
- return n.context ().get<string> ("member");
- }
-
- static string const&
- especifier_member (semantics::nameable& n)
- {
- return n.context ().get<string> ("specifier-member");
- }
-
-public:
- // Return fully-qualified C++ or CLI name.
- //
- string
- fq_name (semantics::nameable& n, bool cxx_name = true);
-
- // Open/close namespace. If last is false, then the last name
- // component is not treated as a namespace. The open function
- // also returns the last name component.
- //
-public:
- string
- ns_open (const string& name, bool last = true);
-
- void
- ns_close (const string& name, bool last = true);
-
-public:
- class_doc_type
- class_doc (semantics::class_&);
-
-public:
- string
- first_sentence (string const&);
-
-public:
- context (std::ostream&,
- output_type,
- semantics::cli_unit&,
- options_type const&);
-
- context (context&);
-
-private:
- context&
- operator= (context const&);
-};
-
-// Checks if scope Y names any of X.
-//
-template <typename X, typename Y>
-bool
-has (Y& y)
-{
- for (semantics::scope::names_iterator i (y.names_begin ()),
- e (y.names_end ()); i != e; ++i)
- if (i->named (). template is_a<X> ())
- return true;
-
- return false;
-}
-
-// Standard namespace traverser.
-//
-struct namespace_: traversal::namespace_, context
-{
- namespace_ (context& c) : context (c) {}
-
- virtual void
- pre (type&);
-
- virtual void
- post (type&);
-};
-
-#endif // CLI_CONTEXT_HXX