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

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 DString &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 DString &ref, const DString &file, const DString &anchor, const DString &name, const DString &tooltip) override
void writeLineNumber (const DString &ref, const DString &file, const DString &anchor, int lineNumber, bool writeLineAnchor) override
void writeTooltip (const DString &id, const DocLinkInfo &docInfo, const DString &decl, const DString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo) override
void startCodeLine (int) override
void endCodeLine () override
void startFontClass (const DString &c) override
void endFontClass () override
void writeCodeAnchor (const DString &name) override
void startCodeFragment (const DString &style) override
void endCodeFragment (const DString &style) override
void startFold (int lineNr, const DString &startMarker, const DString &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 109 of file outputlist.h.

Member Function Documentation

◆ clone()

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

Implements OutputCodeIntf.

Definition at line 118 of file outputlist.h.

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

◆ codify()

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

Implements OutputCodeIntf.

Definition at line 277 of file outputlist.cpp.

278{
279 m_calls.emplace_back([]() { return true; },
280 [=](OutputCodeList *ol) { ol->codify(s); },
282 );
283}
std::vector< CallInfo > m_calls
Definition outputlist.h:150

References m_calls, and m_insideSpecialComment.

◆ endCodeFragment()

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

Implements OutputCodeIntf.

Definition at line 378 of file outputlist.cpp.

379{
380}

◆ endCodeLine()

void OutputCodeRecorder::endCodeLine ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 342 of file outputlist.cpp.

343{
344 m_calls.emplace_back([](){ return true; },
345 [=](OutputCodeList *ol) { ol->endCodeLine(); },
347 );
348}

References m_calls, and m_insideSpecialComment.

◆ endFold()

void OutputCodeRecorder::endFold ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 390 of file outputlist.cpp.

391{
392 m_calls.emplace_back([]() { return true; },
393 [=](OutputCodeList *ol) { ol->endFold(); },
395 );
396}

References m_calls, and m_insideSpecialComment.

◆ endFontClass()

void OutputCodeRecorder::endFontClass ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 358 of file outputlist.cpp.

359{
360 m_calls.emplace_back([]() { return true; },
361 [=](OutputCodeList *ol){ ol->endFontClass(); },
363 );
364}

References m_calls, and m_insideSpecialComment.

◆ endSpecialComment()

void OutputCodeRecorder::endSpecialComment ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 294 of file outputlist.cpp.

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

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 398 of file outputlist.cpp.

400{
401 size_t startIndex = startLine>0 && startLine<=(int)m_lineOffset.size() ? m_lineOffset[startLine-1] : 0;
402 size_t endIndex = endLine>0 && endLine <=(int)m_lineOffset.size() ? m_lineOffset[ endLine-1] : m_calls.size();
403 //printf("startIndex=%zu endIndex=%zu\n",startIndex,endIndex);
404
405 // configure run time properties of the rendering
407 ol.setStripIndentAmount(stripIndentAmount);
408 m_showLineNumbers = showLineNumbers;
409
410 bool insideSpecialComment = false;
411 // in case the start of the special comment marker is outside of the fragment, start it here
412 if (startIndex<endIndex && m_calls[startIndex].insideSpecialComment)
413 {
415 insideSpecialComment = true;
416 }
417
418 // render the requested fragment of the pre-recorded output
419 for (size_t i=startIndex; i<endIndex; i++)
420 {
421 if (m_calls[i].condition())
422 {
423 insideSpecialComment = m_calls[i].insideSpecialComment;
424 m_calls[i].function(&ol);
425 }
426 }
427
428 // if we end the fragment inside a special comment, make sure we end it,
429 // and also the code line
430 if (insideSpecialComment)
431 {
433 ol.endCodeLine();
434 }
435
436 ol.stripCodeComments(false);
438}
void endCodeLine()
Definition outputlist.h:264
void endSpecialComment()
Definition outputlist.h:241
void startSpecialComment()
Definition outputlist.h:238
void setStripIndentAmount(size_t amount)
Definition outputlist.h:244
void stripCodeComments(bool b)
Definition outputlist.h:235
void stripCodeComments(bool) override
Definition outputlist.h:114
std::vector< size_t > m_lineOffset
Definition outputlist.h:151

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 117 of file outputlist.h.

117{}

◆ startCodeFragment()

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

Implements OutputCodeIntf.

Definition at line 374 of file outputlist.cpp.

375{
376}

◆ startCodeLine()

void OutputCodeRecorder::startCodeLine ( int lineNr)
overridevirtual

Implements OutputCodeIntf.

Definition at line 333 of file outputlist.cpp.

334{
335 startNewLine(lineNr);
336 m_calls.emplace_back([](){ return true; },
337 [=](OutputCodeList *ol) { ol->startCodeLine(lineNr); },
339 );
340}
void startNewLine(int lineNr)

References m_calls, m_insideSpecialComment, and startNewLine().

◆ startFold()

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

Implements OutputCodeIntf.

Definition at line 382 of file outputlist.cpp.

383{
384 m_calls.emplace_back([]() { return true; },
385 [=](OutputCodeList *ol) { ol->startFold(lineNr,startMarker,endMarker); },
387 );
388}

References m_calls, and m_insideSpecialComment.

◆ startFontClass()

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

Implements OutputCodeIntf.

Definition at line 350 of file outputlist.cpp.

351{
352 m_calls.emplace_back([]() { return true; },
353 [=](OutputCodeList *ol) { ol->startFontClass(c); },
355 );
356}

References m_calls, and m_insideSpecialComment.

◆ startNewLine()

void OutputCodeRecorder::startNewLine ( int lineNr)
private

Definition at line 263 of file outputlist.cpp.

264{
265 int orgSize = static_cast<int>(m_lineOffset.size());
266 if (orgSize<lineNr)
267 {
268 m_lineOffset.resize(lineNr);
269 for (int i=orgSize;i<lineNr;i++) // output lines can be skipped due to hidden comments so fill in the gap
270 {
271 //printf("%p: startCodeLine(%d) offset=%zu\n",(void*)this,i,m_calls.size());
272 m_lineOffset[i]=m_calls.size();
273 }
274 }
275}

References m_calls, and m_lineOffset.

Referenced by startCodeLine(), and writeLineNumber().

◆ startSpecialComment()

void OutputCodeRecorder::startSpecialComment ( )
overridevirtual

Implements OutputCodeIntf.

Definition at line 285 of file outputlist.cpp.

286{
288 m_calls.emplace_back([]() { return true; },
289 [=](OutputCodeList *ol) { ol->startSpecialComment(); },
290 true
291 );
292}

References m_calls, and m_insideSpecialComment.

◆ stripCodeComments()

void OutputCodeRecorder::stripCodeComments ( bool )
inlineoverridevirtual

Implements OutputCodeIntf.

Definition at line 114 of file outputlist.h.

114{}

Referenced by replay().

◆ type()

OutputType OutputCodeRecorder::type ( ) const
inlineoverridevirtual

Implements OutputCodeIntf.

Definition at line 112 of file outputlist.h.

112{ return OutputType::Recorder; }

References Recorder.

Referenced by writeCodeLink().

◆ writeCodeAnchor()

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

Implements OutputCodeIntf.

Definition at line 366 of file outputlist.cpp.

367{
368 m_calls.emplace_back([]() { return true; },
369 [=](OutputCodeList *ol){ ol->writeCodeAnchor(name); },
371 );
372}

References m_calls, and m_insideSpecialComment.

◆ writeCodeLink()

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

Implements OutputCodeIntf.

Definition at line 303 of file outputlist.cpp.

307{
308 m_calls.emplace_back([](){ return true; },
309 [=](OutputCodeList *ol) { ol->writeCodeLink(type,ref,file,anchor,name,tooltip); },
311 );
312}
OutputType type() const override
Definition outputlist.h:112

References m_calls, m_insideSpecialComment, and type().

◆ writeLineNumber()

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

Implements OutputCodeIntf.

Definition at line 314 of file outputlist.cpp.

316{
317 startNewLine(lineNumber);
318 m_calls.emplace_back([&]() { return m_showLineNumbers; },
319 [=](OutputCodeList *ol) { ol->writeLineNumber(ref,file,anchor,lineNumber,writeLineAnchor); },
321 );
322}

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

◆ writeTooltip()

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

Implements OutputCodeIntf.

Definition at line 324 of file outputlist.cpp.

326{
327 m_calls.emplace_back([](){ return true; },
328 [=](OutputCodeList *ol) { ol->writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); },
330 );
331}

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 151 of file outputlist.h.

Referenced by replay(), and startNewLine().

◆ m_showLineNumbers

bool OutputCodeRecorder::m_showLineNumbers = false
private

Definition at line 152 of file outputlist.h.

Referenced by replay(), and writeLineNumber().


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