diff --git a/hmml_to_html/hmml_to_html.c b/hmml_to_html/hmml_to_html.c index 8e9a69f..f8c82f6 100644 --- a/hmml_to_html/hmml_to_html.c +++ b/hmml_to_html/hmml_to_html.c @@ -50,33 +50,6 @@ ClaimBuffer(char *MemoryArena, int *ClaimedMemory, buffer *Buffer, int Size) Buffer->Ptr = Buffer->Location; } -#if 0 -//TODO(matt): Rewrite me -ref_info -ParseRef(HMML_Reference RefInput) -{ - ref_info Info; - if(RefInput.author) - { - Info.Source = RefInput.author; - Info.RefTitle = RefInput.title; - return Info; - } - else if(RefInput.page) - { - Info.Source = RefInput.site; - Info.RefTitle = RefInput.page; - return Info; - } - else - { - Info.Source = ""; - Info.RefTitle = RefInput.site; - return Info; - } -} -#endif - int TimecodeToSeconds(char *Timecode) { @@ -152,9 +125,9 @@ StringsDiffer(char *A, char *B) typedef struct { - int Hue; - int Saturation; - int Lightness; + unsigned int Hue:16; + unsigned int Saturation:8; + unsigned int Lightness:8; } hsl_colour; hsl_colour @@ -246,44 +219,78 @@ char *CategoryMedium[] = "run", }; -void +int BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMML_Reference Ref, HMML_Annotation Anno) { - if(Ref.isbn) + if(Ref.page && Ref.url && Ref.title) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref.title); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.page); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else if(Ref.url && Ref.title) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.title); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else if(Ref.site && Ref.page && Ref.url) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref.site); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.page); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else if(Ref.site && Ref.url) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.site); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else if(Ref.site && Ref.url && Ref.title) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref.site); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.title); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else if(Ref.url && Ref.title && Ref.author && Ref.publisher && Ref.isbn) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.isbn); + CopyString(ReferencesArray[UniqueRefs].Source, "%s (%s)", Ref.author, Ref.publisher); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.title); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else if(Ref.title && Ref.author && Ref.isbn) { CopyString(ReferencesArray[UniqueRefs].ID, Ref.isbn); - // NOTE(matt): I could probably do with Asserting some of this stuff CopyString(ReferencesArray[UniqueRefs].Source, Ref.author); CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.title); - if(Ref.url) - { - CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); - } - else - { - // TODO(matt): Find better ISBN search site? - CopyString(ReferencesArray[UniqueRefs].URL, "http://www.isbnsearch.org/isbn/%s", Ref.isbn); - } - + CopyString(ReferencesArray[UniqueRefs].URL, "http://www.isbnsearch.org/isbn/%s", Ref.isbn); } - else if(Ref.url) + else if(Ref.url && Ref.article && Ref.author) { - CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); // NOTE(matt): Normalise? - if(Ref.page) - { - CopyString(ReferencesArray[UniqueRefs].Source, Ref.site); - CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.page); - } - else - { - // NOTE(matt): Empty Source - CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.site); - } + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref.author); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.article); CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); } + else if(Ref.url && Ref.title && Ref.author) + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref.url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref.author); + CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.title); + CopyString(ReferencesArray[UniqueRefs].URL, Ref.url); + } + else + { + return 1; + } CopyString(ReferencesArray[UniqueRefs].Identifier[ReferencesArray[UniqueRefs].IdentifierCount].Timecode, Anno.time); ReferencesArray[UniqueRefs].Identifier[ReferencesArray[UniqueRefs].IdentifierCount].Identifier = RefIdentifier; + return 0; } void @@ -348,6 +355,7 @@ GenerateTopicColours(buffer *Colour, char *Topic) if(!strncmp(SanitisePunctuation(Topic), TopicsPtr, StringLength(Topic))) { free(TopicsBuffer); + fclose(TopicsFile); return; } while(TopicsPtr - TopicsBuffer < TopicsLength && *TopicsPtr != '\n') @@ -409,6 +417,9 @@ main(int ArgC, char **Args) 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"))) { @@ -507,7 +518,6 @@ Readable); } else if(Anno->markers[MarkerIndex].type == HMML_CATEGORY) { - // TODO(matt): Uncomment GenerateTopicColours(&Colour, Anno->markers[MarkerIndex].marker); BuildCategories(&AnnotationClass, &Category, &MarkerIndex, &HasCategory, Anno->markers[MarkerIndex].marker); } @@ -527,7 +537,13 @@ Readable); "
\n" "