diff --git a/hmml_to_html/hmml_to_html.c b/hmml_to_html/hmml_to_html.c index 4010734..b5edc2d 100644 --- a/hmml_to_html/hmml_to_html.c +++ b/hmml_to_html/hmml_to_html.c @@ -158,7 +158,6 @@ CopyStringToBuffer(buffer *Dest, char *Format, ...) { printf("Too big! Too big!\n"); __asm__("int3"); - } } va_list Args; @@ -171,7 +170,6 @@ CopyStringToBuffer(buffer *Dest, char *Format, ...) { printf("Too big! Too big!\n"); __asm__("int3"); - } } Dest->Ptr += Length; @@ -549,6 +547,7 @@ GenerateTopicColours(buffer *Colour, char *Topic) int TopicsLength = ftell(TopicsFile); fseek(TopicsFile, 0, SEEK_SET); + // TODO(matt): May this not just ClaimBuffer? if(!(TopicsBuffer = malloc(TopicsLength))) { perror("GenerateTopicColours"); @@ -880,6 +879,26 @@ main(int ArgC, char **Args) buffer Config; #endif + // NOTE(matt): Tree structure of buffer dependencies + // Master + // Title + // QuoteMenu + // ReferenceMenu + // FilterMenu + // FilterTopics + // FilterMedia + // Player + // Colour + // Annotation + // AnnotationHeader + // AnnotationClass + // AnnotationData + // Text + // Category + // FilterState + + buffer Master; + buffer Title; buffer QuoteMenu; buffer ReferenceMenu; @@ -888,23 +907,18 @@ main(int ArgC, char **Args) buffer FilterMedia; buffer Player; + buffer Colour; buffer Annotation; buffer AnnotationHeader; buffer AnnotationClass; buffer AnnotationData; buffer Text; buffer Category; - buffer Colour; buffer FilterState; - buffer Master; - for(int FileIndex = 1; FileIndex < ArgC; ++FileIndex) { - // TODO(matt): Maybe look into this further. It works, but there may be - // bugs lurking - ClaimedMemory = 0; FILE *InFile; if(!(InFile = fopen(Args[FileIndex], "r"))) { @@ -922,16 +936,33 @@ main(int ArgC, char **Args) if(HMML.well_formed) { + // NOTE(matt): Tree structure of "global" buffer dependencies + // Master + // Title + // QuoteMenu + // ReferenceMenu + // FilterMenu + // FilterTopics + // FilterMedia + // Player + // Colour + // Annotation + // FilterState + ClaimBuffer(MemoryArena, &ClaimedMemory, &Master, "Master", 1024 * 512); - ClaimBuffer(MemoryArena, &ClaimedMemory, &Player, "Player", 1024 * 256); ClaimBuffer(MemoryArena, &ClaimedMemory, &Title, "Title", 1024 * 16); + ClaimBuffer(MemoryArena, &ClaimedMemory, &QuoteMenu, "QuoteMenu", 1024 * 16); + ClaimBuffer(MemoryArena, &ClaimedMemory, &ReferenceMenu, "ReferenceMenu", 1024 * 16); ClaimBuffer(MemoryArena, &ClaimedMemory, &FilterMenu, "FilterMenu", 1024 * 16); ClaimBuffer(MemoryArena, &ClaimedMemory, &FilterTopics, "FilterTopics", 1024 * 8); ClaimBuffer(MemoryArena, &ClaimedMemory, &FilterMedia, "FilterMedia", 1024 * 8); + + ClaimBuffer(MemoryArena, &ClaimedMemory, &Player, "Player", 1024 * 256); + ClaimBuffer(MemoryArena, &ClaimedMemory, &Colour, "Colour", 32); + ClaimBuffer(MemoryArena, &ClaimedMemory, &Annotation, "Annotation", 1024 * 8); + ClaimBuffer(MemoryArena, &ClaimedMemory, &FilterState, "FilterState", 1024 * 4); - ClaimBuffer(MemoryArena, &ClaimedMemory, &ReferenceMenu, "ReferenceMenu", 1024 * 16); - ClaimBuffer(MemoryArena, &ClaimedMemory, &QuoteMenu, "QuoteMenu", 1024 * 16); ref_info ReferencesArray[200] = { 0 }; category_info CategoriesArray[64] = { 0 }; @@ -954,6 +985,10 @@ main(int ArgC, char **Args) "
\n" "
\n", HMML.metadata.id, HMML.metadata.project); +#if DEBUG + printf(" --- Entering Annotations Loop ---\n"); +#endif + for(int AnnotationIndex = 0; AnnotationIndex < HMML.annotation_count; ++AnnotationIndex) { #if DEBUG @@ -966,10 +1001,18 @@ main(int ArgC, char **Args) quote_info QuoteInfo = { 0 }; + // NOTE(matt): Tree structure of "annotation local" buffer dependencies + // AnnotationHeader + // AnnotationClass + // AnnotationData + // Text + // Category + ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationHeader, "AnnotationHeader", 512); ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationClass, "AnnotationClass", 256); + ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationData, "AnnotationData", 128); ClaimBuffer(MemoryArena, &ClaimedMemory, &Text, "Text", 1024 * 4); - ClaimBuffer(MemoryArena, &ClaimedMemory, &Colour, "Colour", 32); + ClaimBuffer(MemoryArena, &ClaimedMemory, &Category, "Category", 256); CopyStringToBuffer(&AnnotationHeader, "
markers[MarkerIndex].marker); - if(!HasCategory) - { - ClaimBuffer(MemoryArena, &ClaimedMemory, &Category, "Category", 256); - } BuildCategories(&AnnotationClass, &Category, &MarkerIndex, &HasCategory, Anno->markers[MarkerIndex].marker); } } @@ -1114,7 +1153,6 @@ Readable); AppendedIdentifier: if(!HasReference) { - ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationData, "AnnotationData", 128); if(CurrentRef->isbn) { CopyStringToBuffer(&AnnotationData, " data-ref=\"%s", CurrentRef->isbn); @@ -1179,7 +1217,6 @@ AppendedIdentifier: if(!HasReference) { - ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationData, "AnnotationData", 128); CopyStringToBuffer(&AnnotationData, " data-ref=\"&#%d;", QuoteIdentifier); } else @@ -1241,10 +1278,6 @@ Anno->time); { BuildFilter(CategoriesArray, &UniqueCategories, Anno->markers[MarkerIndex].marker); } - if(!HasCategory) - { - ClaimBuffer(MemoryArena, &ClaimedMemory, &Category, "Category", 256); - } BuildCategories(&AnnotationClass, &Category, &MarkerIndex, &HasCategory, Anno->markers[MarkerIndex].marker); } @@ -1255,12 +1288,9 @@ Anno->time); { CopyStringToBuffer(&AnnotationData, "\""); CopyBuffer(&AnnotationHeader, &AnnotationData); - DeclaimBuffer(&AnnotationData, &ClaimedMemory); } CopyStringToBuffer(&AnnotationHeader, ">\n"); - ClaimBuffer(MemoryArena, &ClaimedMemory, &Annotation, "Annotation", 1024 * 8); - CopyBuffer(&Annotation, &AnnotationHeader); CopyStringToBuffer(&Annotation, "
%s", @@ -1270,7 +1300,6 @@ Anno->time); // TODO(matt): Handle special-cases, i.e. default media, and possibly other things if(!HasCategory) { - ClaimBuffer(MemoryArena, &ClaimedMemory, &Category, "Category", 256); BuildFilter(CategoriesArray, &UniqueCategories, "default"); BuildCategories(&AnnotationClass, &Category, &MarkerIndex, &HasCategory, "default"); } @@ -1280,7 +1309,6 @@ Anno->time); { CopyStringToBuffer(&Category, ""); CopyBuffer(&Text, &Category); - DeclaimBuffer(&Category, &ClaimedMemory); } *Text.Ptr = '\0'; @@ -1308,15 +1336,23 @@ Anno->time); CopyBuffer(&Player, &Annotation); - DeclaimBuffer(&Annotation, &ClaimedMemory); - DeclaimBuffer(&Colour, &ClaimedMemory); + // NOTE(matt): Tree structure of "annotation local" buffer dependencies + // Category + // Text + // AnnotationData + // AnnotationClass + // AnnotationHeader + + DeclaimBuffer(&Category, &ClaimedMemory); DeclaimBuffer(&Text, &ClaimedMemory); + DeclaimBuffer(&AnnotationData, &ClaimedMemory); DeclaimBuffer(&AnnotationClass, &ClaimedMemory); DeclaimBuffer(&AnnotationHeader, &ClaimedMemory); + Annotation.Ptr = Annotation.Location; } #if DEBUG - printf("EOA\n\n"); + printf(" --- End of Annotations Loop ---\n\n"); #endif if(HasQuoteMenu) { @@ -1558,14 +1594,29 @@ HMML.metadata.annotator); CopyBuffer(&Master, &FilterState); } - DeclaimBuffer(&QuoteMenu, &ClaimedMemory); - DeclaimBuffer(&ReferenceMenu, &ClaimedMemory); + // NOTE(matt): Tree structure of "global" buffer dependencies + // FilterState + // Annotation + // Colour + // Player + // FilterMedia + // FilterTopics + // FilterMenu + // ReferenceMenu + // QuoteMenu + // Title + DeclaimBuffer(&FilterState, &ClaimedMemory); + DeclaimBuffer(&Annotation, &ClaimedMemory); + DeclaimBuffer(&Colour, &ClaimedMemory); + DeclaimBuffer(&Player, &ClaimedMemory); + DeclaimBuffer(&FilterMedia, &ClaimedMemory); DeclaimBuffer(&FilterTopics, &ClaimedMemory); DeclaimBuffer(&FilterMenu, &ClaimedMemory); + DeclaimBuffer(&ReferenceMenu, &ClaimedMemory); + DeclaimBuffer(&QuoteMenu, &ClaimedMemory); DeclaimBuffer(&Title, &ClaimedMemory); - DeclaimBuffer(&Player, &ClaimedMemory); CopyStringToBuffer(&Master, "// Filter Mode Toggle\n"