Skip to content

Commit

Permalink
Replace raw bool pointer array and counter by std::stack<bool>
Browse files Browse the repository at this point in the history
  • Loading branch information
doxygen committed Feb 29, 2020
1 parent 89aeed4 commit 734702d
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 38 deletions.
51 changes: 19 additions & 32 deletions src/docbookvisitor.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2015 by Dimitri van Heesch.
* Copyright (C) 1997-2020 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
Expand All @@ -16,6 +13,7 @@
*
*/


#include <qfileinfo.h>

#include "docbookvisitor.h"
Expand Down Expand Up @@ -155,7 +153,7 @@ void DocbookDocVisitor::visitPostEnd(FTextStream &t, bool hasCaption, bool inlin
}

DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
: DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
: DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci)
{
DB_VIS_C
// m_t << "<section>" << endl;
Expand Down Expand Up @@ -1006,19 +1004,10 @@ DB_VIS_C
m_t << "</listitem></varlistentry>\n";
}

static int tabLevel = -1;
static int colCnt = 0;
static bool *bodySet = NULL; // it is possible to have tables without a header, needs to be an array as we can have tables in tables
void DocbookDocVisitor::visitPre(DocHtmlTable *t)
{
DB_VIS_C
static int sizeBodySet = 0;
if (sizeBodySet <= ++tabLevel)
{
sizeBodySet += 10;
bodySet = (bool *)realloc((void *)bodySet,sizeBodySet);
}
bodySet[tabLevel] = FALSE;
m_bodySet.push(false);
if (m_hide) return;
m_t << "<informaltable frame=\"all\">" << endl;
m_t << " <tgroup cols=\"" << t->numColumns() << "\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
Expand All @@ -1033,27 +1022,27 @@ void DocbookDocVisitor::visitPost(DocHtmlTable *)
{
DB_VIS_C
if (m_hide) return;
if (bodySet[tabLevel--]) m_t << " </tbody>" << endl;
//bodySet = FALSE;
if (m_bodySet.top()) m_t << " </tbody>" << endl;
m_bodySet.pop();
m_t << " </tgroup>" << endl;
m_t << "</informaltable>" << endl;
}

void DocbookDocVisitor::visitPre(DocHtmlRow *tr)
{
DB_VIS_C
colCnt = 0;
m_colCnt = 0;
if (m_hide) return;

if (tr->isHeading())
{
if (bodySet[tabLevel]) m_t << "</tbody>\n";
bodySet[tabLevel] = FALSE;
if (m_bodySet.top()) m_t << "</tbody>\n";
m_bodySet.top() = false;
m_t << "<thead>\n";
}
else if (!bodySet[tabLevel])
else if (!m_bodySet.top())
{
bodySet[tabLevel] = TRUE;
m_bodySet.top() = true;
m_t << "<tbody>\n";
}

Expand All @@ -1079,15 +1068,15 @@ DB_VIS_C
m_t << "</row>\n";
if (tr->isHeading())
{
bodySet[tabLevel] = TRUE;
m_t << "</thead><tbody>\n";
m_bodySet.top() = true;
}
}

void DocbookDocVisitor::visitPre(DocHtmlCell *c)
{
DB_VIS_C
colCnt++;
m_colCnt++;
if (m_hide) return;
m_t << "<entry";

Expand All @@ -1097,10 +1086,10 @@ DB_VIS_C
{
if (opt->name=="colspan")
{
m_t << " namest='c" << colCnt << "'";
m_t << " namest='c" << m_colCnt << "'";
int cols = opt->value.toInt();
colCnt += (cols - 1);
m_t << " nameend='c" << colCnt << "'";
m_colCnt += (cols - 1);
m_t << " nameend='c" << m_colCnt << "'";
}
else if (opt->name=="rowspan")
{
Expand Down Expand Up @@ -1633,16 +1622,14 @@ DB_VIS_C
void DocbookDocVisitor::pushEnabled()
{
DB_VIS_C
m_enabled.push(new bool(m_hide));
m_enabled.push(m_hide);
}

void DocbookDocVisitor::popEnabled()
{
DB_VIS_C
bool *v=m_enabled.pop();
ASSERT(v!=0);
m_hide = *v;
delete v;
m_hide=m_enabled.top();
m_enabled.pop();
}

void DocbookDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
Expand Down
14 changes: 8 additions & 6 deletions src/docbookvisitor.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
/******************************************************************************
*
*
*
* Copyright (C) 1997-2015 by Dimitri van Heesch.
* Copyright (C) 1997-2020 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
Expand All @@ -18,6 +16,8 @@
#ifndef _DOCBOOKDOCVISITOR_H
#define _DOCBOOKDOCVISITOR_H

#include <stack>

#include "docvisitor.h"
#include <qstack.h>
#include <qlist.h>
Expand Down Expand Up @@ -173,10 +173,12 @@ class DocbookDocVisitor : public DocVisitor
//--------------------------------------
FTextStream &m_t;
CodeOutputInterface &m_ci;
bool m_insidePre;
bool m_hide;
QStack<bool> m_enabled;
bool m_insidePre = false;
bool m_hide = false;
std::stack<bool> m_enabled;
QCString m_langExt;
int m_colCnt = 0;
std::stack<bool> m_bodySet; // it is possible to have tables without a header, needs to be an array as we can have tables in tables
};

#endif

0 comments on commit 734702d

Please sign in to comment.