Doxygen
Loading...
Searching...
No Matches
OutputCodeRecorder Class Reference

Implementation that allows capturing calls made to the code interface to later invoke them on a OutputCodeList via replay(). More...

#include <src/outputlist.h>

Inheritance diagram for OutputCodeRecorder:
Collaboration diagram for OutputCodeRecorder:

Classes

struct  CallInfo

Public Member Functions

OutputType type () const override
void codify (const QCString &s) override
void stripCodeComments (bool) override
void startSpecialComment () override
void endSpecialComment () override
void setStripIndentAmount (size_t) override
std::unique_ptr< OutputCodeIntfclone () override
void writeCodeLink (CodeSymbolType type, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip) override
void writeLineNumber (const QCString &ref, const QCString &file, const QCString &anchor, int lineNumber, bool writeLineAnchor) override
void writeTooltip (const QCString &id, const DocLinkInfo &docInfo, const QCString &decl, const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo) override
void startCodeLine (int) override
void endCodeLine () override
void startFontClass (const QCString &c) override
void endFontClass () override
void writeCodeAnchor (const QCString &name) override
void startCodeFragment (const QCString &style) override
void endCodeFragment (const QCString &style) override
void startFold (int lineNr, const QCString &startMarker, const QCString &endMarker) override
void endFold () override
void replay (OutputCodeList &ol, int startLine, int endLine, bool showLineNumbers, bool stripComment, size_t stripIndentAmount)
Public Member Functions inherited from OutputCodeIntf
 OutputCodeIntf ()=default

Private Member Functions

void startNewLine (int lineNr)

Private Attributes

std::vector< CallInfom_calls
std::vector< size_t > m_lineOffset
bool m_showLineNumbers = false
bool m_insideSpecialComment = false

Detailed Description

Implementation that allows capturing calls made to the code interface to later invoke them on a OutputCodeList via replay().

Definition at line 111 of file outputlist.h.

Member Function Documentation

◆ clone()

std::unique_ptr< OutputCodeIntf > OutputCodeRecorder::clone ( )
inlineoverridevirtual

Implements OutputCodeIntf.

Definition at line 120 of file outputlist.h.

120{ return std::make_unique<OutputCodeRecorder>(*this); }

◆ codify()

void OutputCodeRecorder::codify ( const QCString & s)
overridevirtual

Implements OutputCodeIntf.

Definition at line 231 of file outputlist.cpp.

232{
233 m_calls.emplace_back([]() { return true; },
234 [=](OutputCodeList *ol) { ol->codify(s); },
236 );
237}
std::vector< CallInfo > m_calls
Definition outputlist.h:152

References m_calls, and m_insideSpecialComment.

◆ endCodeFragment()

void OutputCodeRecorder::endCodeFragment ( const QCString & style)
overridevirtual

Implements OutputCodeIntf.

Definition at line 332 of file outputlist.cpp.

333{
334}

◆ endCodeLine()

void OutputCodeRecorder::endCodeLine ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 296 of file outputlist.cpp.

297{
298 m_calls.emplace_back([](){ return true; },
299 [=](OutputCodeList *ol) { ol->endCodeLine(); },
301 );
302}

References m_calls, and m_insideSpecialComment.

◆ endFold()

void OutputCodeRecorder::endFold ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 344 of file outputlist.cpp.

345{
346 m_calls.emplace_back([]() { return true; },
347 [=](OutputCodeList *ol) { ol->endFold(); },
349 );
350}

References m_calls, and m_insideSpecialComment.

◆ endFontClass()

void OutputCodeRecorder::endFontClass ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 312 of file outputlist.cpp.

313{
314 m_calls.emplace_back([]() { return true; },
315 [=](OutputCodeList *ol){ ol->endFontClass(); },
317 );
318}

References m_calls, and m_insideSpecialComment.

◆ endSpecialComment()

void OutputCodeRecorder::endSpecialComment ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 248 of file outputlist.cpp.

249{
250 m_calls.emplace_back([]() { return true; },
251 [=](OutputCodeList *ol) { ol->endSpecialComment(); },
252 true
253 );
255}

References m_calls, and m_insideSpecialComment.

◆ replay()

void OutputCodeRecorder::replay ( OutputCodeList & ol,
int startLine,
int endLine,
bool showLineNumbers,
bool stripComment,
size_t stripIndentAmount )

Definition at line 352 of file outputlist.cpp.

354{
355 size_t startIndex = startLine>0 && startLine<=(int)m_lineOffset.size() ? m_lineOffset[startLine-1] : 0;
356 size_t endIndex = endLine>0 && endLine <=(int)m_lineOffset.size() ? m_lineOffset[ endLine-1] : m_calls.size();
357 //printf("startIndex=%zu endIndex=%zu\n",startIndex,endIndex);
358
359 // configure run time properties of the rendering
361 ol.setStripIndentAmount(stripIndentAmount);
362 m_showLineNumbers = showLineNumbers;
363
364 bool insideSpecialComment = false;
365 // in case the start of the special comment marker is outside of the fragment, start it here
366 if (startIndex<endIndex && m_calls[startIndex].insideSpecialComment)
367 {
369 insideSpecialComment = true;
370 }
371
372 // render the requested fragment of the pre-recorded output
373 for (size_t i=startIndex; i<endIndex; i++)
374 {
375 if (m_calls[i].condition())
376 {
377 insideSpecialComment = m_calls[i].insideSpecialComment;
378 m_calls[i].function(&ol);
379 }
380 }
381
382 // if we end the fragment inside a special comment, make sure we end it,
383 // and also the code line
384 if (insideSpecialComment)
385 {
387 ol.endCodeLine();
388 }
389
390 ol.stripCodeComments(false);
392}
void endCodeLine()
Definition outputlist.h:266
void endSpecialComment()
Definition outputlist.h:243
void startSpecialComment()
Definition outputlist.h:240
void setStripIndentAmount(size_t amount)
Definition outputlist.h:246
void stripCodeComments(bool b)
Definition outputlist.h:237
void stripCodeComments(bool) override
Definition outputlist.h:116
std::vector< size_t > m_lineOffset
Definition outputlist.h:153

References OutputCodeList::endCodeLine(), OutputCodeList::endSpecialComment(), m_calls, m_lineOffset, m_showLineNumbers, OutputCodeList::setStripIndentAmount(), OutputCodeList::startSpecialComment(), OutputCodeList::stripCodeComments(), and stripCodeComments().

Referenced by CodeFragmentManager::parseCodeFragment().

◆ setStripIndentAmount()

void OutputCodeRecorder::setStripIndentAmount ( size_t )
inlineoverridevirtual

Implements OutputCodeIntf.

Definition at line 119 of file outputlist.h.

119{}

◆ startCodeFragment()

void OutputCodeRecorder::startCodeFragment ( const QCString & style)
overridevirtual

Implements OutputCodeIntf.

Definition at line 328 of file outputlist.cpp.

329{
330}

◆ startCodeLine()

void OutputCodeRecorder::startCodeLine ( int lineNr)
overridevirtual

Implements OutputCodeIntf.

Definition at line 287 of file outputlist.cpp.

288{
289 startNewLine(lineNr);
290 m_calls.emplace_back([](){ return true; },
291 [=](OutputCodeList *ol) { ol->startCodeLine(lineNr); },
293 );
294}
void startNewLine(int lineNr)

References m_calls, m_insideSpecialComment, and startNewLine().

◆ startFold()

void OutputCodeRecorder::startFold ( int lineNr,
const QCString & startMarker,
const QCString & endMarker )
overridevirtual

Implements OutputCodeIntf.

Definition at line 336 of file outputlist.cpp.

337{
338 m_calls.emplace_back([]() { return true; },
339 [=](OutputCodeList *ol) { ol->startFold(lineNr,startMarker,endMarker); },
341 );
342}

References m_calls, and m_insideSpecialComment.

◆ startFontClass()

void OutputCodeRecorder::startFontClass ( const QCString & c)
overridevirtual

Implements OutputCodeIntf.

Definition at line 304 of file outputlist.cpp.

305{
306 m_calls.emplace_back([]() { return true; },
307 [=](OutputCodeList *ol) { ol->startFontClass(c); },
309 );
310}

References m_calls, and m_insideSpecialComment.

◆ startNewLine()

void OutputCodeRecorder::startNewLine ( int lineNr)
private

Definition at line 217 of file outputlist.cpp.

218{
219 int orgSize = static_cast<int>(m_lineOffset.size());
220 if (orgSize<lineNr)
221 {
222 m_lineOffset.resize(lineNr);
223 for (int i=orgSize;i<lineNr;i++) // output lines can be skipped due to hidden comments so fill in the gap
224 {
225 //printf("%p: startCodeLine(%d) offset=%zu\n",(void*)this,i,m_calls.size());
226 m_lineOffset[i]=m_calls.size();
227 }
228 }
229}

References m_calls, and m_lineOffset.

Referenced by startCodeLine(), and writeLineNumber().

◆ startSpecialComment()

void OutputCodeRecorder::startSpecialComment ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 239 of file outputlist.cpp.

240{
242 m_calls.emplace_back([]() { return true; },
243 [=](OutputCodeList *ol) { ol->startSpecialComment(); },
244 true
245 );
246}

References m_calls, and m_insideSpecialComment.

◆ stripCodeComments()

void OutputCodeRecorder::stripCodeComments ( bool )
inlineoverridevirtual

Implements OutputCodeIntf.

Definition at line 116 of file outputlist.h.

116{}

Referenced by replay().

◆ type()

OutputType OutputCodeRecorder::type ( ) const
inlineoverridevirtual

Implements OutputCodeIntf.

Definition at line 114 of file outputlist.h.

114{ return OutputType::Recorder; }

References Recorder.

Referenced by writeCodeLink().

◆ writeCodeAnchor()

void OutputCodeRecorder::writeCodeAnchor ( const QCString & name)
overridevirtual

Implements OutputCodeIntf.

Definition at line 320 of file outputlist.cpp.

321{
322 m_calls.emplace_back([]() { return true; },
323 [=](OutputCodeList *ol){ ol->writeCodeAnchor(name); },
325 );
326}

References m_calls, and m_insideSpecialComment.

◆ writeCodeLink()

void OutputCodeRecorder::writeCodeLink ( CodeSymbolType type,
const QCString & ref,
const QCString & file,
const QCString & anchor,
const QCString & name,
const QCString & tooltip )
overridevirtual

Implements OutputCodeIntf.

Definition at line 257 of file outputlist.cpp.

261{
262 m_calls.emplace_back([](){ return true; },
263 [=](OutputCodeList *ol) { ol->writeCodeLink(type,ref,file,anchor,name,tooltip); },
265 );
266}
OutputType type() const override
Definition outputlist.h:114

References m_calls, m_insideSpecialComment, and type().

◆ writeLineNumber()

void OutputCodeRecorder::writeLineNumber ( const QCString & ref,
const QCString & file,
const QCString & anchor,
int lineNumber,
bool writeLineAnchor )
overridevirtual

Implements OutputCodeIntf.

Definition at line 268 of file outputlist.cpp.

270{
271 startNewLine(lineNumber);
272 m_calls.emplace_back([&]() { return m_showLineNumbers; },
273 [=](OutputCodeList *ol) { ol->writeLineNumber(ref,file,anchor,lineNumber,writeLineAnchor); },
275 );
276}

References m_calls, m_insideSpecialComment, m_showLineNumbers, and startNewLine().

◆ writeTooltip()

void OutputCodeRecorder::writeTooltip ( const QCString & id,
const DocLinkInfo & docInfo,
const QCString & decl,
const QCString & desc,
const SourceLinkInfo & defInfo,
const SourceLinkInfo & declInfo )
overridevirtual

Implements OutputCodeIntf.

Definition at line 278 of file outputlist.cpp.

280{
281 m_calls.emplace_back([](){ return true; },
282 [=](OutputCodeList *ol) { ol->writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); },
284 );
285}

References m_calls, and m_insideSpecialComment.

Member Data Documentation

◆ m_calls

◆ m_insideSpecialComment

bool OutputCodeRecorder::m_insideSpecialComment = false
private

◆ m_lineOffset

std::vector<size_t> OutputCodeRecorder::m_lineOffset
private

Definition at line 153 of file outputlist.h.

Referenced by replay(), and startNewLine().

◆ m_showLineNumbers

bool OutputCodeRecorder::m_showLineNumbers = false
private

Definition at line 154 of file outputlist.h.

Referenced by replay(), and writeLineNumber().


The documentation for this class was generated from the following files: