hmml_to_html.c: Correct integration [#25]
This commit is contained in:
parent
0ad47c6c48
commit
811abe6271
|
@ -170,13 +170,16 @@ CopyString(char Dest[], char *Format, ...)
|
||||||
va_end(Args);
|
va_end(Args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
CopyStringNoFormat(char *Dest, char *String)
|
CopyStringNoFormat(char *Dest, char *String)
|
||||||
{
|
{
|
||||||
|
int Length = 0;
|
||||||
while(*String)
|
while(*String)
|
||||||
{
|
{
|
||||||
*Dest++ = *String++;
|
*Dest++ = *String++;
|
||||||
|
++Length;
|
||||||
}
|
}
|
||||||
|
return Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -288,7 +291,7 @@ CopyStringToBufferCSVSafe(buffer *Dest, char *String)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
StringsDiffer(char *A, char *B)
|
StringsDiffer(char *A, char *B) // NOTE(matt): Two null-terminated strings
|
||||||
{
|
{
|
||||||
while(*A && *B && *A == *B)
|
while(*A && *B && *A == *B)
|
||||||
{
|
{
|
||||||
|
@ -298,15 +301,19 @@ StringsDiffer(char *A, char *B)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
StringsDifferL(char *A, char *B, int LengthofA)
|
StringsDifferT(char *A, // NOTE(matt): Null-terminated string
|
||||||
|
char *B, // NOTE(matt): Not null-terminated string (e.g. one mid-buffer)
|
||||||
|
char Terminator // NOTE(matt): Caller definable terminator. Pass '\0' to only match on the extent of A
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
int ALength = StringLength(A);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while(i < LengthofA && A[i] && A[i] == B[i])
|
while(i < ALength && A[i] && A[i] == B[i])
|
||||||
{
|
{
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
// TODO(matt): Uncomment
|
if((!Terminator && !A[i] && ALength == i) ||
|
||||||
if(!A[i] && LengthofA == i)// && (B[i] == ' ' || B[i] == '\"'))
|
(!A[i] && ALength == i && (B[i] == Terminator)))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -705,7 +712,7 @@ BuildCategories(buffer *AnnotationClass, buffer *Category, int *MarkerIndex, boo
|
||||||
if(*Ptr == '\"')
|
if(*Ptr == '\"')
|
||||||
{
|
{
|
||||||
++Ptr;
|
++Ptr;
|
||||||
if(!StringsDifferL(SanitisePunctuation(Marker), Ptr, StringLength(SanitisePunctuation(Marker))))
|
if(!StringsDifferT(SanitisePunctuation(Marker), Ptr, ' '))
|
||||||
{
|
{
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
break;
|
break;
|
||||||
|
@ -865,7 +872,7 @@ GenerateTopicColours(buffer *Colour, char *Topic)
|
||||||
while(TopicsPtr - TopicsBuffer < TopicsLength)
|
while(TopicsPtr - TopicsBuffer < TopicsLength)
|
||||||
{
|
{
|
||||||
TopicsPtr += StringLength(".category.");
|
TopicsPtr += StringLength(".category.");
|
||||||
if(!StringsDifferL(SanitisePunctuation(Topic), TopicsPtr, StringLength(Topic)))
|
if(!StringsDifferT(SanitisePunctuation(Topic), TopicsPtr, ' '))
|
||||||
{
|
{
|
||||||
free(TopicsBuffer);
|
free(TopicsBuffer);
|
||||||
fclose(TopicsFile);
|
fclose(TopicsFile);
|
||||||
|
@ -1836,7 +1843,8 @@ ReferencesArray[i].Identifier[j].Timecode);
|
||||||
|
|
||||||
if(HasFilterMenu)
|
if(HasFilterMenu)
|
||||||
{
|
{
|
||||||
CopyStringToBuffer(&FilterState, "var filterState = {\n");
|
CopyStringToBuffer(&FilterState,
|
||||||
|
" var filterState = {\n");
|
||||||
for(int i = 0; i < UniqueTopics; ++i)
|
for(int i = 0; i < UniqueTopics; ++i)
|
||||||
{
|
{
|
||||||
CopyStringToBuffer(&FilterState, "\"%s\":\t{ \"type\": \"%s\",\t\"off\": false },\n",
|
CopyStringToBuffer(&FilterState, "\"%s\":\t{ \"type\": \"%s\",\t\"off\": false },\n",
|
||||||
|
@ -1847,8 +1855,8 @@ ReferencesArray[i].Identifier[j].Timecode);
|
||||||
CopyStringToBuffer(&FilterState, "\"%s\":\t{ \"type\": \"%s\",\t\"off\": false },\n",
|
CopyStringToBuffer(&FilterState, "\"%s\":\t{ \"type\": \"%s\",\t\"off\": false },\n",
|
||||||
MediaArray[i].Marker, "medium");
|
MediaArray[i].Marker, "medium");
|
||||||
}
|
}
|
||||||
CopyStringToBuffer(&FilterState, "};\n"
|
CopyStringToBuffer(&FilterState,
|
||||||
"\n");
|
" };\n");
|
||||||
|
|
||||||
CopyStringToBuffer(&FilterMenu,
|
CopyStringToBuffer(&FilterMenu,
|
||||||
" <div class=\"menu filter\">\n"
|
" <div class=\"menu filter\">\n"
|
||||||
|
@ -2177,9 +2185,7 @@ CategoryMedium[j][2]
|
||||||
" <script type=\"text/javascript\" src=\"player.js\"></script>\n"
|
" <script type=\"text/javascript\" src=\"player.js\"></script>\n"
|
||||||
" <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n"
|
" <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n"
|
||||||
" <link rel=\"stylesheet\" type=\"text/css\" href=\"%s.css\">\n"
|
" <link rel=\"stylesheet\" type=\"text/css\" href=\"%s.css\">\n"
|
||||||
" <link rel=\"stylesheet\" type=\"text/css\" href=\"topics.css\">\n"
|
" <link rel=\"stylesheet\" type=\"text/css\" href=\"topics.css\">\n",
|
||||||
" </head>\n"
|
|
||||||
" <body>\n",
|
|
||||||
HMML.metadata.project);
|
HMML.metadata.project);
|
||||||
|
|
||||||
CopyStringToBuffer(&Script,
|
CopyStringToBuffer(&Script,
|
||||||
|
@ -2260,8 +2266,8 @@ HMML.metadata.project);
|
||||||
" filterItemToggle(this);\n"
|
" filterItemToggle(this);\n"
|
||||||
" });\n"
|
" });\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%s\n"
|
"%s"
|
||||||
"}\n"
|
" }\n"
|
||||||
"}\n", FilterState.Location);
|
"}\n", FilterState.Location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2304,7 +2310,8 @@ HMML.metadata.project);
|
||||||
"var focusedElement = null;\n"
|
"var focusedElement = null;\n"
|
||||||
"var focusedIdentifier = null;\n"
|
"var focusedIdentifier = null;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"var player = new Player(document.querySelector(\".player_container\"), onRefChanged);\n"
|
"var playerContainer = document.querySelector(\".player_container\")\n"
|
||||||
|
"var player = new Player(playerContainer, onRefChanged);\n"
|
||||||
"window.addEventListener(\"resize\", function() { player.updateSize(); });\n"
|
"window.addEventListener(\"resize\", function() { player.updateSize(); });\n"
|
||||||
"document.addEventListener(\"keydown\", function(ev) {\n"
|
"document.addEventListener(\"keydown\", function(ev) {\n"
|
||||||
" var key = ev.key;\n"
|
" var key = ev.key;\n"
|
||||||
|
@ -2348,7 +2355,7 @@ HMML.metadata.project);
|
||||||
" });\n"
|
" });\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"\n"
|
"\n"
|
||||||
"var testMarkers = document.querySelectorAll(\".marker\");\n"
|
"var testMarkers = playerContainer.querySelectorAll(\".marker\");\n"
|
||||||
"\n"
|
"\n"
|
||||||
"window.addEventListener(\"blur\", function(){\n"
|
"window.addEventListener(\"blur\", function(){\n"
|
||||||
" document.getElementById(\"focus-warn\").style.display = \"block\";\n"
|
" document.getElementById(\"focus-warn\").style.display = \"block\";\n"
|
||||||
|
@ -2358,7 +2365,7 @@ HMML.metadata.project);
|
||||||
" document.getElementById(\"focus-warn\").style.display = \"none\";\n"
|
" document.getElementById(\"focus-warn\").style.display = \"none\";\n"
|
||||||
"});\n"
|
"});\n"
|
||||||
"\n"
|
"\n"
|
||||||
"var colouredItems = document.querySelectorAll(\".author, .member, .project\");\n"
|
"var colouredItems = playerContainer.querySelectorAll(\".author, .member, .project\");\n"
|
||||||
"for(i = 0; i < colouredItems.length; ++i)\n"
|
"for(i = 0; i < colouredItems.length; ++i)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" setTextLightness(colouredItems[i]);\n"
|
" setTextLightness(colouredItems[i]);\n"
|
||||||
|
@ -2369,7 +2376,7 @@ HMML.metadata.project);
|
||||||
"{\n"
|
"{\n"
|
||||||
" setDotLightness(topicDots[i]);\n"
|
" setDotLightness(topicDots[i]);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
" </script>\n");
|
" </script>");
|
||||||
//
|
//
|
||||||
//NOTE(matt): Collate the buffers!
|
//NOTE(matt): Collate the buffers!
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
@ -2382,10 +2389,7 @@ HMML.metadata.project);
|
||||||
FILE *TemplateFile;
|
FILE *TemplateFile;
|
||||||
if(!(TemplateFile = fopen("template.html", "r")))
|
if(!(TemplateFile = fopen("template.html", "r")))
|
||||||
{
|
{
|
||||||
perror(Args[0]);
|
perror(Args[0]); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
hmml_free(&HMML);
|
|
||||||
free(MemoryArena);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(TemplateFile, 0, SEEK_END);
|
fseek(TemplateFile, 0, SEEK_END);
|
||||||
|
@ -2394,10 +2398,7 @@ HMML.metadata.project);
|
||||||
char *TemplateBuffer;
|
char *TemplateBuffer;
|
||||||
if(!(TemplateBuffer = malloc(TemplateSize)))
|
if(!(TemplateBuffer = malloc(TemplateSize)))
|
||||||
{
|
{
|
||||||
perror(Args[0]);
|
perror(Args[0]); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
hmml_free(&HMML);
|
|
||||||
free(MemoryArena);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
fread(TemplateBuffer, TemplateSize, 1, TemplateFile);
|
fread(TemplateBuffer, TemplateSize, 1, TemplateFile);
|
||||||
fclose(TemplateFile);
|
fclose(TemplateFile);
|
||||||
|
@ -2405,19 +2406,16 @@ HMML.metadata.project);
|
||||||
char *OutputBuffer;
|
char *OutputBuffer;
|
||||||
if(!(OutputBuffer = malloc(TemplateSize + Master.Size)))
|
if(!(OutputBuffer = malloc(TemplateSize + Master.Size)))
|
||||||
{
|
{
|
||||||
perror(Args[0]);
|
perror(Args[0]); free(TemplateBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
hmml_free(&HMML);
|
|
||||||
free(MemoryArena);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *TemplatePtr = TemplateBuffer;
|
char *TemplatePtr = TemplateBuffer;
|
||||||
char *OutputPtr = OutputBuffer;
|
char *OutputPtr = OutputBuffer;
|
||||||
|
|
||||||
char *HeaderTag = "<!-- __CINERA_HEADER__ -->";
|
char *HeaderTag = "__CINERA_HEADER__";
|
||||||
char *TitleTag = "<!-- __CINERA_TITLE__ -->";
|
char *TitleTag = "__CINERA_TITLE__";
|
||||||
char *PlayerTag = "<!-- __CINERA_PLAYER__ -->";
|
char *PlayerTag = "__CINERA_PLAYER__";
|
||||||
char *ScriptTag = "<!-- __CINERA_SCRIPT__ -->";
|
char *ScriptTag = "__CINERA_SCRIPT__";
|
||||||
|
|
||||||
bool FoundHeader = FALSE;
|
bool FoundHeader = FALSE;
|
||||||
bool FoundTitle = FALSE;
|
bool FoundTitle = FALSE;
|
||||||
|
@ -2428,53 +2426,92 @@ HMML.metadata.project);
|
||||||
{
|
{
|
||||||
if(*TemplatePtr == '!')
|
if(*TemplatePtr == '!')
|
||||||
{
|
{
|
||||||
if(OutputPtr > OutputBuffer)
|
if((TemplatePtr > TemplateBuffer && TemplatePtr[-1] == '<') &&
|
||||||
|
(TemplatePtr+1 - TemplateBuffer < TemplateSize && TemplatePtr[1] == '-') &&
|
||||||
|
(TemplatePtr+2 - TemplateBuffer < TemplateSize && TemplatePtr[2] == '-'))
|
||||||
{
|
{
|
||||||
--OutputPtr;
|
char *CommentStart = &OutputPtr[-1];
|
||||||
|
while(TemplatePtr - TemplateBuffer < TemplateSize && *TemplatePtr != '>')
|
||||||
|
{
|
||||||
|
if(*TemplatePtr == '_')
|
||||||
|
{
|
||||||
|
if(!(StringsDifferT(HeaderTag, TemplatePtr, '\0')))
|
||||||
|
{
|
||||||
|
if(FoundHeader == TRUE)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Template contains more than one <!-- __CINERA_HEADER__ --> tag\n");
|
||||||
|
free(TemplateBuffer); free(OutputBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
}
|
}
|
||||||
if(TemplatePtr > TemplateBuffer)
|
|
||||||
{
|
|
||||||
--TemplatePtr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!(StringsDifferL(HeaderTag, TemplatePtr, StringLength(HeaderTag))))
|
|
||||||
{
|
|
||||||
FoundHeader = TRUE;
|
FoundHeader = TRUE;
|
||||||
CopyStringNoFormat(OutputPtr, Header.Location);
|
OutputPtr = CommentStart;
|
||||||
OutputPtr += Header.Ptr - Header.Location;
|
OutputPtr += CopyStringNoFormat(OutputPtr, Header.Location);
|
||||||
}
|
|
||||||
else if(!(StringsDifferL(TitleTag, TemplatePtr, StringLength(TitleTag))))
|
|
||||||
{
|
|
||||||
FoundTitle = TRUE;
|
|
||||||
CopyStringNoFormat(OutputPtr, Title.Location);
|
|
||||||
OutputPtr += Title.Ptr - Title.Location;
|
|
||||||
}
|
|
||||||
else if(!(StringsDifferL(PlayerTag, TemplatePtr, StringLength(PlayerTag))))
|
|
||||||
{
|
|
||||||
FoundPlayer = TRUE;
|
|
||||||
CopyStringNoFormat(OutputPtr, Player.Location);
|
|
||||||
OutputPtr += Player.Ptr - Player.Location;
|
|
||||||
}
|
|
||||||
else if(!(StringsDifferL(ScriptTag, TemplatePtr, StringLength(ScriptTag))))
|
|
||||||
{
|
|
||||||
FoundScript = TRUE;
|
|
||||||
CopyStringNoFormat(OutputPtr, Script.Location);
|
|
||||||
OutputPtr += Script.Ptr - Script.Location;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++OutputPtr;
|
|
||||||
*OutputPtr++ = '!';
|
|
||||||
}
|
|
||||||
|
|
||||||
while(TemplatePtr - TemplateBuffer < TemplateSize && *TemplatePtr != '>')
|
while(TemplatePtr - TemplateBuffer < TemplateSize && *TemplatePtr != '>')
|
||||||
{
|
{
|
||||||
++TemplatePtr;
|
++TemplatePtr;
|
||||||
}
|
}
|
||||||
if(TemplatePtr - TemplateBuffer < TemplateSize)
|
++TemplatePtr;
|
||||||
|
}
|
||||||
|
else if(!(StringsDifferT(TitleTag, TemplatePtr, '\0')))
|
||||||
|
{
|
||||||
|
if(FoundTitle == TRUE)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Template contains more than one <!-- __CINERA_TITLE__ --> tag\n");
|
||||||
|
free(TemplateBuffer); free(OutputBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
|
}
|
||||||
|
/* TODO(matt): Allow setting a Title format, e.g.
|
||||||
|
<-- __CINERA_TITLE__ "%s - HandmadeDev" -->
|
||||||
|
Where %s is replaced with the HMML.metadata.title
|
||||||
|
Perhaps it would be saner to do this in the config file
|
||||||
|
*/
|
||||||
|
FoundTitle = TRUE;
|
||||||
|
OutputPtr = CommentStart;
|
||||||
|
OutputPtr += CopyStringNoFormat(OutputPtr, Title.Location);
|
||||||
|
while(TemplatePtr - TemplateBuffer < TemplateSize && *TemplatePtr != '>')
|
||||||
{
|
{
|
||||||
++TemplatePtr;
|
++TemplatePtr;
|
||||||
}
|
}
|
||||||
|
++TemplatePtr;
|
||||||
|
}
|
||||||
|
else if(!(StringsDifferT(PlayerTag, TemplatePtr, '\0')))
|
||||||
|
{
|
||||||
|
if(FoundPlayer == TRUE)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Template contains more than one <!-- __CINERA_PLAYER__ --> tag\n");
|
||||||
|
free(TemplateBuffer); free(OutputBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
|
}
|
||||||
|
FoundPlayer = TRUE;
|
||||||
|
OutputPtr = CommentStart;
|
||||||
|
OutputPtr += CopyStringNoFormat(OutputPtr, Player.Location);
|
||||||
|
while(TemplatePtr - TemplateBuffer < TemplateSize && *TemplatePtr != '>')
|
||||||
|
{
|
||||||
|
++TemplatePtr;
|
||||||
|
}
|
||||||
|
++TemplatePtr;
|
||||||
|
}
|
||||||
|
else if(!(StringsDifferT(ScriptTag, TemplatePtr, '\0')))
|
||||||
|
{
|
||||||
|
if(FoundScript == TRUE)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Template contains more than one <!-- __CINERA_SCRIPT__ --> tag\n");
|
||||||
|
free(TemplateBuffer); free(OutputBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
|
}
|
||||||
|
FoundScript = TRUE;
|
||||||
|
OutputPtr = CommentStart;
|
||||||
|
OutputPtr += CopyStringNoFormat(OutputPtr, Script.Location);
|
||||||
|
while(TemplatePtr - TemplateBuffer < TemplateSize && *TemplatePtr != '>')
|
||||||
|
{
|
||||||
|
++TemplatePtr;
|
||||||
|
}
|
||||||
|
++TemplatePtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*OutputPtr++ = *TemplatePtr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutputPtr++ = *TemplatePtr++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2487,22 +2524,19 @@ HMML.metadata.project);
|
||||||
FILE *OutFile;
|
FILE *OutFile;
|
||||||
if(!(OutFile = fopen("out_integrated.html", "w")))
|
if(!(OutFile = fopen("out_integrated.html", "w")))
|
||||||
{
|
{
|
||||||
perror(Args[0]);
|
perror(Args[0]); free(TemplateBuffer); free(OutputBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
hmml_free(&HMML);
|
|
||||||
free(MemoryArena);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
fwrite(OutputBuffer, OutputPtr - OutputBuffer, 1, OutFile);
|
fwrite(OutputBuffer, OutputPtr - OutputBuffer, 1, OutFile);
|
||||||
fclose(OutFile);
|
fclose(OutFile);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Template is missing necessary tags\n");
|
fprintf(stderr, "Template is missing necessary tags:\n");
|
||||||
free(TemplateBuffer);
|
if(!FoundHeader) { fprintf(stderr, " <!-- __CINERA_HEADER__ -->\n"); }
|
||||||
free(OutputBuffer);
|
if(!FoundTitle) { fprintf(stderr, " <!-- __CINERA_TITLE__ -->\n"); }
|
||||||
hmml_free(&HMML);
|
if(!FoundPlayer) { fprintf(stderr, " <!-- __CINERA_PLAYER__ -->\n"); }
|
||||||
free(MemoryArena);
|
if(!FoundScript) { fprintf(stderr, " <!-- __CINERA_SCRIPT__ -->\n"); }
|
||||||
return 1;
|
free(TemplateBuffer); free(OutputBuffer); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(TemplateBuffer);
|
free(TemplateBuffer);
|
||||||
|
@ -2517,30 +2551,28 @@ HMML.metadata.project);
|
||||||
|
|
||||||
//NOTE(matt): Here is where we do all our CopyBuffer() calls
|
//NOTE(matt): Here is where we do all our CopyBuffer() calls
|
||||||
CopyBuffer(&Master, &Header);
|
CopyBuffer(&Master, &Header);
|
||||||
|
CopyStringToBuffer(&Master,
|
||||||
|
" </head>\n"
|
||||||
|
" <body>\n");
|
||||||
CopyBuffer(&Master, &Title);
|
CopyBuffer(&Master, &Title);
|
||||||
CopyBuffer(&Master, &Player);
|
CopyBuffer(&Master, &Player);
|
||||||
CopyBuffer(&Master, &Script);
|
CopyBuffer(&Master, &Script);
|
||||||
|
CopyStringToBuffer(&Master, "\n");
|
||||||
//
|
//
|
||||||
|
|
||||||
CopyStringToBuffer(&Master,
|
CopyStringToBuffer(&Master,
|
||||||
" </body>\n"
|
" </body>\n"
|
||||||
"</html>\n");
|
"</html>\n");
|
||||||
|
|
||||||
FILE *OutFile;
|
FILE *OutFile;
|
||||||
if(!(OutFile = fopen("out.html", "w")))
|
if(!(OutFile = fopen("out.html", "w")))
|
||||||
{
|
{
|
||||||
perror(Args[0]);
|
perror(Args[0]); hmml_free(&HMML); free(MemoryArena); return 1;
|
||||||
hmml_free(&HMML);
|
|
||||||
free(MemoryArena);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
fwrite(Master.Location, Master.Ptr - Master.Location, 1, OutFile);
|
fwrite(Master.Location, Master.Ptr - Master.Location, 1, OutFile);
|
||||||
fclose(OutFile);
|
fclose(OutFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeclaimBuffer(&Master, &ClaimedMemory);
|
|
||||||
|
|
||||||
|
|
||||||
// NOTE(matt): Tree structure of "global" buffer dependencies
|
// NOTE(matt): Tree structure of "global" buffer dependencies
|
||||||
// FilterState
|
// FilterState
|
||||||
// Script
|
// Script
|
||||||
|
@ -2557,6 +2589,7 @@ HMML.metadata.project);
|
||||||
// QuoteMenu
|
// QuoteMenu
|
||||||
// Title
|
// Title
|
||||||
// Header
|
// Header
|
||||||
|
// Master
|
||||||
|
|
||||||
DeclaimBuffer(&FilterState, &ClaimedMemory);
|
DeclaimBuffer(&FilterState, &ClaimedMemory);
|
||||||
DeclaimBuffer(&Script, &ClaimedMemory);
|
DeclaimBuffer(&Script, &ClaimedMemory);
|
||||||
|
@ -2575,6 +2608,7 @@ HMML.metadata.project);
|
||||||
DeclaimBuffer(&Title, &ClaimedMemory);
|
DeclaimBuffer(&Title, &ClaimedMemory);
|
||||||
|
|
||||||
DeclaimBuffer(&Header, &ClaimedMemory);
|
DeclaimBuffer(&Header, &ClaimedMemory);
|
||||||
|
DeclaimBuffer(&Master, &ClaimedMemory);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue