Commit 425e64e2 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Extension specific filtering

parent 47adeb82
...@@ -6788,8 +6788,8 @@ void generateOutputViaTemplate() ...@@ -6788,8 +6788,8 @@ void generateOutputViaTemplate()
g_globals.outputFormat = ContextGlobals::Html; g_globals.outputFormat = ContextGlobals::Html;
g_globals.dynSectionId = 0; g_globals.dynSectionId = 0;
g_globals.outputDir = Config_getString("HTML_OUTPUT"); g_globals.outputDir = Config_getString("HTML_OUTPUT");
HtmlEscaper esc; HtmlEscaper htmlEsc;
ctx->setEscapeIntf(&esc); ctx->setEscapeIntf(Config_getString("HTML_FILE_EXTENSION"),&htmlEsc);
HtmlSpaceless spl; HtmlSpaceless spl;
ctx->setSpacelessIntf(&spl); ctx->setSpacelessIntf(&spl);
ctx->setOutputDirectory(g_globals.outputDir); ctx->setOutputDirectory(g_globals.outputDir);
......
...@@ -584,8 +584,17 @@ class TemplateContextImpl : public TemplateContext ...@@ -584,8 +584,17 @@ class TemplateContextImpl : public TemplateContext
const TemplateVariant *getRef(const QCString &name) const; const TemplateVariant *getRef(const QCString &name) const;
void setOutputDirectory(const QCString &dir) void setOutputDirectory(const QCString &dir)
{ m_outputDir = dir; } { m_outputDir = dir; }
void setEscapeIntf(TemplateEscapeIntf *intf) void setEscapeIntf(const QCString &ext,TemplateEscapeIntf *intf)
{ m_escapeIntf = intf; } {
int i=(!ext.isEmpty() && ext.at(0)=='.') ? 1 : 0;
m_escapeIntfDict.insert(ext.mid(i),new TemplateEscapeIntf*(intf));
}
void selectEscapeIntf(const QCString &ext)
{ TemplateEscapeIntf **ppIntf = m_escapeIntfDict.find(ext);
m_activeEscapeIntf = ppIntf ? *ppIntf : 0;
}
void setActiveEscapeIntf(TemplateEscapeIntf *intf)
{ m_activeEscapeIntf = intf; }
void setSpacelessIntf(TemplateSpacelessIntf *intf) void setSpacelessIntf(TemplateSpacelessIntf *intf)
{ m_spacelessIntf = intf; } { m_spacelessIntf = intf; }
...@@ -597,7 +606,7 @@ class TemplateContextImpl : public TemplateContext ...@@ -597,7 +606,7 @@ class TemplateContextImpl : public TemplateContext
QCString templateName() const { return m_templateName; } QCString templateName() const { return m_templateName; }
int line() const { return m_line; } int line() const { return m_line; }
QCString outputDirectory() const { return m_outputDir; } QCString outputDirectory() const { return m_outputDir; }
TemplateEscapeIntf *escapeIntf() const { return m_escapeIntf; } TemplateEscapeIntf *escapeIntf() const { return m_activeEscapeIntf; }
TemplateSpacelessIntf *spacelessIntf() const { return m_spacelessIntf; } TemplateSpacelessIntf *spacelessIntf() const { return m_spacelessIntf; }
void enableSpaceless(bool b) { m_spacelessEnabled=b; } void enableSpaceless(bool b) { m_spacelessEnabled=b; }
bool spacelessEnabled() const { return m_spacelessEnabled && m_spacelessIntf; } bool spacelessEnabled() const { return m_spacelessEnabled && m_spacelessIntf; }
...@@ -610,7 +619,8 @@ class TemplateContextImpl : public TemplateContext ...@@ -610,7 +619,8 @@ class TemplateContextImpl : public TemplateContext
QCString m_outputDir; QCString m_outputDir;
QList< QDict<TemplateVariant> > m_contextStack; QList< QDict<TemplateVariant> > m_contextStack;
TemplateBlockContext m_blockContext; TemplateBlockContext m_blockContext;
TemplateEscapeIntf *m_escapeIntf; QDict<TemplateEscapeIntf*> m_escapeIntfDict;
TemplateEscapeIntf *m_activeEscapeIntf;
TemplateSpacelessIntf *m_spacelessIntf; TemplateSpacelessIntf *m_spacelessIntf;
bool m_spacelessEnabled; bool m_spacelessEnabled;
}; };
...@@ -1763,10 +1773,11 @@ class TemplateImpl : public TemplateNode, public Template ...@@ -1763,10 +1773,11 @@ class TemplateImpl : public TemplateNode, public Template
TemplateContextImpl::TemplateContextImpl(const TemplateEngine *e) TemplateContextImpl::TemplateContextImpl(const TemplateEngine *e)
: m_engine(e), m_templateName("<unknown>"), m_line(1), m_escapeIntf(0), : m_engine(e), m_templateName("<unknown>"), m_line(1), m_activeEscapeIntf(0),
m_spacelessIntf(0), m_spacelessEnabled(FALSE) m_spacelessIntf(0), m_spacelessEnabled(FALSE)
{ {
m_contextStack.setAutoDelete(TRUE); m_contextStack.setAutoDelete(TRUE);
m_escapeIntfDict.setAutoDelete(TRUE);
push(); push();
} }
...@@ -2510,13 +2521,13 @@ class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg> ...@@ -2510,13 +2521,13 @@ class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg>
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c); TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line); ci->setLocation(m_templateName,m_line);
TemplateEscapeIntf *escIntf = ci->escapeIntf(); TemplateEscapeIntf *escIntf = ci->escapeIntf();
ci->setEscapeIntf(0); // avoid escaping things we send to standard out ci->setActiveEscapeIntf(0); // avoid escaping things we send to standard out
bool enable = ci->spacelessEnabled(); bool enable = ci->spacelessEnabled();
ci->enableSpaceless(FALSE); ci->enableSpaceless(FALSE);
FTextStream ts(stdout); FTextStream ts(stdout);
m_nodes.render(ts,c); m_nodes.render(ts,c);
ts << endl; ts << endl;
ci->setEscapeIntf(escIntf); ci->setActiveEscapeIntf(escIntf);
ci->enableSpaceless(enable); ci->enableSpaceless(enable);
} }
private: private:
...@@ -2809,6 +2820,12 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate> ...@@ -2809,6 +2820,12 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0; TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0;
if (createTemplate) if (createTemplate)
{ {
QCString extension=outputFile;
int i=extension.findRev('.');
if (i!=-1)
{
extension=extension.right(extension.length()-i-1);
}
if (!ci->outputDirectory().isEmpty()) if (!ci->outputDirectory().isEmpty())
{ {
outputFile.prepend(ci->outputDirectory()+"/"); outputFile.prepend(ci->outputDirectory()+"/");
...@@ -2816,9 +2833,12 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate> ...@@ -2816,9 +2833,12 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
QFile f(outputFile); QFile f(outputFile);
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
TemplateEscapeIntf *escIntf = ci->escapeIntf();
ci->selectEscapeIntf(extension);
FTextStream ts(&f); FTextStream ts(&f);
createTemplate->render(ts,c); createTemplate->render(ts,c);
t->engine()->unload(t); t->engine()->unload(t);
ci->setActiveEscapeIntf(escIntf);
} }
else else
{ {
......
...@@ -399,7 +399,7 @@ class TemplateContext ...@@ -399,7 +399,7 @@ class TemplateContext
/** Sets the interface that will be used for escaping the result /** Sets the interface that will be used for escaping the result
* of variable expansion before writing it to the output. * of variable expansion before writing it to the output.
*/ */
virtual void setEscapeIntf(TemplateEscapeIntf *intf) = 0; virtual void setEscapeIntf(const QCString &extension, TemplateEscapeIntf *intf) = 0;
/** Sets the interface that will be used inside a spaceless block /** Sets the interface that will be used inside a spaceless block
* to remove any redundant whitespace. * to remove any redundant whitespace.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment