summaryrefslogtreecommitdiffstats
path: root/src/boost/tools/quickbook/src/document_state_impl.hpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/tools/quickbook/src/document_state_impl.hpp
parentInitial commit. (diff)
downloadceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz
ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/tools/quickbook/src/document_state_impl.hpp')
-rw-r--r--src/boost/tools/quickbook/src/document_state_impl.hpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/boost/tools/quickbook/src/document_state_impl.hpp b/src/boost/tools/quickbook/src/document_state_impl.hpp
new file mode 100644
index 000000000..e9107d68e
--- /dev/null
+++ b/src/boost/tools/quickbook/src/document_state_impl.hpp
@@ -0,0 +1,156 @@
+/*=============================================================================
+ Copyright (c) 2011-2013 Daniel James
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(BOOST_QUICKBOOK_DOCUMENT_STATE_IMPL_HPP)
+#define BOOST_QUICKBOOK_DOCUMENT_STATE_IMPL_HPP
+
+#include <deque>
+#include <string>
+#include <vector>
+#include <boost/shared_ptr.hpp>
+#include "document_state.hpp"
+#include "phrase_tags.hpp"
+#include "string_view.hpp"
+#include "utils.hpp"
+
+namespace quickbook
+{
+ //
+ // id_placeholder
+ //
+ // When generating the xml, quickbook can't allocate the identifiers until
+ // the end, so it stores in the intermedia xml a placeholder string,
+ // e.g. id="$1". This represents one of these placeholders.
+ //
+
+ struct id_placeholder
+ {
+ std::size_t index; // The index in document_state_impl::placeholders.
+ // Use for the dollar identifiers in
+ // intermediate xml.
+ std::string id; // The node id.
+ std::string unresolved_id;
+ // The id that would be generated
+ // without any duplicate handling.
+ // Used for generating old style header anchors.
+ id_placeholder const* parent;
+ // Placeholder of the parent id.
+ id_category category;
+ std::ptrdiff_t num_dots; // Number of dots in the id.
+ // Normally equal to the section level
+ // but not when an explicit id contains
+ // dots.
+
+ id_placeholder(
+ std::size_t index,
+ quickbook::string_view id,
+ id_category category,
+ id_placeholder const* parent_);
+
+ std::string to_string() const;
+ };
+
+ //
+ // document_state_impl
+ //
+ // Contains all the data tracked by document_state.
+ //
+
+ struct file_info;
+ struct doc_info;
+ struct section_info;
+
+ struct document_state_impl
+ {
+ boost::shared_ptr<file_info> current_file;
+ std::deque<id_placeholder> placeholders;
+
+ // Placeholder methods
+
+ id_placeholder const* add_placeholder(
+ quickbook::string_view,
+ id_category,
+ id_placeholder const* parent = 0);
+
+ id_placeholder const* get_placeholder(quickbook::string_view) const;
+
+ id_placeholder const* get_id_placeholder(
+ boost::shared_ptr<section_info> const& section) const;
+
+ // Events
+
+ id_placeholder const* start_file(
+ unsigned compatibility_version,
+ bool document_root,
+ quickbook::string_view include_doc_id,
+ quickbook::string_view id,
+ value const& title);
+
+ void end_file();
+
+ id_placeholder const* add_id(
+ quickbook::string_view id, id_category category);
+ id_placeholder const* old_style_id(
+ quickbook::string_view id, id_category category);
+ id_placeholder const* begin_section(
+ value const& explicit_id,
+ quickbook::string_view id,
+ id_category category,
+ source_mode_info const&);
+ void end_section();
+
+ private:
+ id_placeholder const* add_id_to_section(
+ quickbook::string_view id,
+ id_category category,
+ boost::shared_ptr<section_info> const& section);
+ id_placeholder const* create_new_section(
+ value const& explicit_id,
+ quickbook::string_view id,
+ id_category category,
+ source_mode_info const&);
+ };
+
+ std::string replace_ids(
+ document_state_impl const& state,
+ quickbook::string_view xml,
+ std::vector<std::string> const* = 0);
+ std::vector<std::string> generate_ids(
+ document_state_impl const&, quickbook::string_view);
+
+ std::string normalize_id(quickbook::string_view src_id);
+ std::string normalize_id(quickbook::string_view src_id, std::size_t);
+
+ //
+ // Xml subset parser used for finding id values.
+ //
+ // I originally tried to integrate this into the post processor
+ // but that proved tricky. Alternatively it could use a proper
+ // xml parser, but I want this to be able to survive badly
+ // marked up escapes.
+ //
+
+ struct xml_processor
+ {
+ xml_processor();
+
+ std::vector<std::string> id_attributes;
+
+ struct callback
+ {
+ virtual void start(quickbook::string_view) {}
+ virtual void id_value(quickbook::string_view) {}
+ virtual void finish(quickbook::string_view) {}
+ virtual ~callback() {}
+ };
+
+ void parse(quickbook::string_view, callback&);
+ };
+}
+
+#endif