@@ -67,6 +67,8 @@ static QCString g_footer_file;
67
67
static QCString g_footer;
68
68
static QCString g_mathjax_code;
69
69
static QCString g_latex_macro;
70
+ static QCString g_build_date_str;
71
+ static bool g_build_date = false ;
70
72
static constexpr auto hex=" 0123456789ABCDEF" ;
71
73
72
74
static const SelectionMarkerInfo htmlMarkerInfo = { ' <' , " <!--BEGIN " ,10 ," <!--END " ,8 ," -->" ,3 };
@@ -628,6 +630,7 @@ static QCString substituteHtmlKeywords(const QCString &file,
628
630
{ " $treeview" , [&]() { return treeViewCssJs; } },
629
631
{ " $searchbox" , [&]() { return searchBox; } },
630
632
{ " $search" , [&]() { return searchCssJs; } },
633
+ { " $builddate" , [&]() { return g_build_date_str;} },
631
634
{ " $mathjax" , [&]() { return mathJaxJs; } },
632
635
{ " $darkmode" , [&]() { return darkModeJs; } },
633
636
{ " $generatedby" , [&]() { return generatedBy; } },
@@ -1167,6 +1170,19 @@ void HtmlGenerator::addCodeGen(OutputCodeList &list)
1167
1170
list.add <HtmlCodeGeneratorDefer>(m_codeGen);
1168
1171
}
1169
1172
1173
+ static bool hasDateReplacement (const QCString &str)
1174
+ {
1175
+ return (str.contains (" $datetime" ,false ) ||
1176
+ str.contains (" $date" ,false ) ||
1177
+ str.contains (" $time" ,false ) ||
1178
+ str.contains (" $year" ,false ) ||
1179
+ ((Config_getEnum (TIMESTAMP) != TIMESTAMP_t::NO) && str.contains (" $generatedby" ,false )) ||
1180
+ str.contains (" class=\" datetime\" " ,false ) ||
1181
+ str.contains (" class=\" date\" " ,false ) ||
1182
+ str.contains (" class=\" time\" " ,false ) ||
1183
+ str.contains (" class=\" year\" " ,false )
1184
+ );
1185
+ }
1170
1186
void HtmlGenerator::init ()
1171
1187
{
1172
1188
QCString dname = Config_getString (HTML_OUTPUT);
@@ -1180,6 +1196,7 @@ void HtmlGenerator::init()
1180
1196
{
1181
1197
g_header_file=Config_getString (HTML_HEADER);
1182
1198
g_header=fileToString (g_header_file);
1199
+ g_build_date = (g_build_date || hasDateReplacement (g_header));
1183
1200
// printf("g_header='%s'\n",qPrint(g_header));
1184
1201
QCString result = substituteHtmlKeywords (g_header_file,g_header,QCString (),QCString ());
1185
1202
checkBlocks (result,Config_getString (HTML_HEADER),htmlMarkerInfo);
@@ -1188,6 +1205,7 @@ void HtmlGenerator::init()
1188
1205
{
1189
1206
g_header_file=" header.html" ;
1190
1207
g_header = ResourceMgr::instance ().getAsString (g_header_file);
1208
+ g_build_date = (g_build_date || hasDateReplacement (g_header));
1191
1209
QCString result = substituteHtmlKeywords (g_header_file,g_header,QCString (),QCString ());
1192
1210
checkBlocks (result," <default header.html>" ,htmlMarkerInfo);
1193
1211
}
@@ -1196,6 +1214,7 @@ void HtmlGenerator::init()
1196
1214
{
1197
1215
g_footer_file=Config_getString (HTML_FOOTER);
1198
1216
g_footer=fileToString (g_footer_file);
1217
+ g_build_date = (g_build_date || hasDateReplacement (g_footer));
1199
1218
// printf("g_footer='%s'\n",qPrint(g_footer));
1200
1219
QCString result = substituteHtmlKeywords (g_footer_file,g_footer,QCString (),QCString ());
1201
1220
checkBlocks (result,Config_getString (HTML_FOOTER),htmlMarkerInfo);
@@ -1204,6 +1223,7 @@ void HtmlGenerator::init()
1204
1223
{
1205
1224
g_footer_file = " footer.html" ;
1206
1225
g_footer = ResourceMgr::instance ().getAsString (g_footer_file);
1226
+ g_build_date = (g_build_date || hasDateReplacement (g_footer));
1207
1227
QCString result = substituteHtmlKeywords (g_footer_file,g_footer,QCString (),QCString ());
1208
1228
checkBlocks (result," <default footer.html>" ,htmlMarkerInfo);
1209
1229
}
@@ -1318,13 +1338,15 @@ void HtmlGenerator::init()
1318
1338
}
1319
1339
}
1320
1340
1341
+ if (g_build_date)
1321
1342
{
1322
1343
std::ofstream f = Portable::openOutputStream (dname+" /build_date.js" );
1323
1344
if (f.is_open ())
1324
1345
{
1325
1346
TextStream t (&f);
1326
1347
writeBuildDateJS (t);
1327
1348
}
1349
+ g_build_date_str = " <script type=\" text/javascript\" src=\" $relpath^build_date.js\" ></script>" ;
1328
1350
}
1329
1351
}
1330
1352
0 commit comments