Doxygen
Loading...
Searching...
No Matches
reflist.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2020 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef REFLIST_H
17#define REFLIST_H
18
19#include <unordered_map>
20#include <vector>
21
22#include "dstring.h"
23#include "linkedmap.h"
24#include "construct.h"
25
26class Definition;
27class RefList;
28
29/** This struct represents an item in the list of references. */
31{
32 public:
34
35 void setText (const DString &text) { m_text = text; }
38 void setName (const DString &name) { m_name = name; }
39 void setTitle (const DString &title) { m_title = title; }
40 void setArgs (const DString &args) { m_args = args; }
41 void setGroup (const DString &group) { m_group = group; }
42 void setScope (const Definition *scope) { m_scope = scope; }
43
44 DString text() const { return m_text; }
45 DString anchor() const { return m_anchor; }
46 DString prefix() const { return m_prefix; }
47 DString name() const { return m_name; }
48 DString title() const { return m_title; }
49 DString args() const { return m_args; }
50 DString group() const { return m_group; }
51 int id() const { return m_id; }
52 RefList *list() const { return m_list; }
53 const Definition *scope() const { return m_scope; }
54
55 private:
56 int m_id = 0; //!< unique identifier for this item within its list
57 RefList *m_list; //!< list owning this item
58 DString m_text; //!< text of the item.
59 DString m_anchor; //!< anchor in the list
60 DString m_prefix; //!< type prefix for the name
61 DString m_name; //!< name of the entity containing the reference
62 DString m_title; //!< display name of the entity
63 DString m_args; //!< optional arguments for the entity (if function)
64 DString m_group; //!< group id used to combine item under a single header
65 const Definition *m_scope = nullptr; //!< scope to use for references.
66};
67
68/** List of cross-referenced items
69 *
70 * This class represents a list of items that are put
71 * at a certain point in the documentation by some special command
72 * and are collected in a list. The items cross-reference the
73 * documentation and the list.
74 *
75 * Examples are the todo list, the test list and the bug list,
76 * introduced by the \\todo, \\test, and \\bug commands respectively.
77 */
79{
80 public:
81 /*! Create a list of items that are cross referenced with documentation blocks
82 * @param listName String representing the name of the list.
83 * @param pageTitle String representing the title of the list page.
84 * @param secTitle String representing the title of the section.
85 */
86 RefList(const DString &listName, const DString &pageTitle, const DString &secTitle);
87 bool isEnabled() const;
88
89 /*! Adds a new item to the list.
90 * @returns A unique id for this item.
91 */
92 RefItem *add();
93
94 /*! Returns an item given it's id that is obtained with addRefItem()
95 * @param itemId item's identifier.
96 * @returns A pointer to the todo item's structure.
97 */
98 RefItem *find(int itemId);
99
100 DString listName() const { return m_listName; }
101 DString fileName() const { return m_fileName; }
102 DString pageTitle() const { return m_pageTitle; }
103 DString sectionTitle() const { return m_secTitle; }
104
105 void generatePage();
106
107 private:
108 int m_id = 0;
113 std::vector< std::unique_ptr< RefItem > > m_entries;
114 std::unordered_map< int, RefItem* > m_lookup;
115};
116
117class RefListManager final : public LinkedMap<RefList>
118{
119 public:
121 {
122 static RefListManager rlm;
123 return rlm;
124 }
125
126 private:
127 RefListManager() = default;
128 ~RefListManager() = default;
130};
131
132using RefItemVector = std::vector<RefItem*>;
133
134inline void addRefItem(const RefItemVector &sli,
135 const DString &key, const DString &prefix, const DString &name,
136 const DString &title, const DString &args, const Definition *scope)
137{
138 //printf("addRefItem(sli=%d,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",(int)sli.size(),key,prefix,name,title,args);
139 if (!key.empty() && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
140 {
141 for (RefItem *item : sli)
142 {
143 item->setPrefix(prefix);
144 item->setScope(scope);
145 item->setName(name);
146 item->setTitle(title);
147 item->setArgs(args);
148 item->setGroup(key);
149 }
150 }
151}
152
153
154#endif
constexpr auto prefix
Definition anchor.cpp:47
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
The common base class of all entity definitions found in the sources.
Definition definition.h:77
Container class representing a vector of objects with keys.
Definition linkedmap.h:36
This struct represents an item in the list of references.
Definition reflist.h:31
void setPrefix(const DString &prefix)
Definition reflist.h:37
DString args() const
Definition reflist.h:49
void setTitle(const DString &title)
Definition reflist.h:39
RefItem(int id, RefList *list)
Definition reflist.h:33
DString anchor() const
Definition reflist.h:45
const Definition * scope() const
Definition reflist.h:53
void setGroup(const DString &group)
Definition reflist.h:41
int id() const
Definition reflist.h:51
DString text() const
Definition reflist.h:44
DString m_anchor
anchor in the list
Definition reflist.h:59
DString group() const
Definition reflist.h:50
RefList * m_list
list owning this item
Definition reflist.h:57
DString m_args
optional arguments for the entity (if function)
Definition reflist.h:63
void setText(const DString &text)
Definition reflist.h:35
DString prefix() const
Definition reflist.h:46
DString title() const
Definition reflist.h:48
DString m_prefix
type prefix for the name
Definition reflist.h:60
DString m_text
text of the item.
Definition reflist.h:58
RefList * list() const
Definition reflist.h:52
DString m_title
display name of the entity
Definition reflist.h:62
const Definition * m_scope
scope to use for references.
Definition reflist.h:65
DString m_group
group id used to combine item under a single header
Definition reflist.h:64
DString name() const
Definition reflist.h:47
DString m_name
name of the entity containing the reference
Definition reflist.h:61
void setAnchor(const DString &anchor)
Definition reflist.h:36
void setArgs(const DString &args)
Definition reflist.h:40
void setName(const DString &name)
Definition reflist.h:38
void setScope(const Definition *scope)
Definition reflist.h:42
int m_id
unique identifier for this item within its list
Definition reflist.h:56
List of cross-referenced items.
Definition reflist.h:79
DString m_pageTitle
Definition reflist.h:111
std::unordered_map< int, RefItem * > m_lookup
Definition reflist.h:114
void generatePage()
Definition reflist.cpp:60
std::vector< std::unique_ptr< RefItem > > m_entries
Definition reflist.h:113
DString sectionTitle() const
Definition reflist.h:103
DString listName() const
Definition reflist.h:100
DString m_secTitle
Definition reflist.h:112
DString m_listName
Definition reflist.h:109
int m_id
Definition reflist.h:108
DString pageTitle() const
Definition reflist.h:102
DString fileName() const
Definition reflist.h:101
RefItem * add()
Definition reflist.cpp:35
RefList(const DString &listName, const DString &pageTitle, const DString &secTitle)
Definition reflist.cpp:29
RefItem * find(int itemId)
Definition reflist.cpp:45
DString m_fileName
Definition reflist.h:110
bool isEnabled() const
Definition reflist.cpp:51
~RefListManager()=default
RefListManager()=default
static RefListManager & instance()
Definition reflist.h:120
#define NON_COPYABLE(cls)
Macro to help implementing the rule of 5 for a non-copyable & movable class.
Definition construct.h:37
void addRefItem(const RefItemVector &sli, const DString &key, const DString &prefix, const DString &name, const DString &title, const DString &args, const Definition *scope)
Definition reflist.h:134
std::vector< RefItem * > RefItemVector
Definition reflist.h:132