diff --git a/hmml_to_html/hmml_to_html.c b/hmml_to_html/hmml_to_html.c
index f8c82f6..7bface7 100644
--- a/hmml_to_html/hmml_to_html.c
+++ b/hmml_to_html/hmml_to_html.c
@@ -13,7 +13,6 @@ typedef unsigned int bool;
#include // NOTE(matt): varargs
#include // NOTE(matt): printf, sprintf, vsprintf, fprintf, perror
#include // NOTE(matt): calloc, malloc, free
-#include // NOTE(matt): strncmp, memset
#include "hmmlib.h"
typedef struct
@@ -123,6 +122,24 @@ StringsDiffer(char *A, char *B)
return *A - *B;
}
+bool
+StringsDifferL(char *A, char *B, int LengthofA)
+{
+ int i = 0;
+ while(i < LengthofA && A[i] && A[i] == B[i])
+ {
+ ++i;
+ }
+ if(!A[i] && LengthofA == i)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
typedef struct
{
unsigned int Hue:16;
@@ -222,19 +239,20 @@ char *CategoryMedium[] =
int
BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMML_Reference Ref, HMML_Annotation Anno)
{
- if(Ref.page && Ref.url && Ref.title)
+ 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.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);
@@ -242,12 +260,6 @@ BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMM
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);
@@ -255,13 +267,6 @@ BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMM
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);
@@ -283,6 +288,18 @@ BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMM
CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.title);
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.url)
+ {
+ CopyString(ReferencesArray[UniqueRefs].ID, Ref.url);
+ CopyString(ReferencesArray[UniqueRefs].RefTitle, Ref.site);
+ CopyString(ReferencesArray[UniqueRefs].URL, Ref.url);
+ }
else
{
return 1;
@@ -352,7 +369,7 @@ GenerateTopicColours(buffer *Colour, char *Topic)
while(TopicsPtr - TopicsBuffer < TopicsLength)
{
TopicsPtr += 39;
- if(!strncmp(SanitisePunctuation(Topic), TopicsPtr, StringLength(Topic)))
+ if(!StringsDifferL(SanitisePunctuation(Topic), TopicsPtr, StringLength(Topic)))
{
free(TopicsBuffer);
fclose(TopicsFile);
@@ -434,8 +451,7 @@ main(int ArgC, char **Args)
if(HMML.well_formed)
{
ClaimBuffer(MemoryArena, &ClaimedMemory, &Title, 1024 * 16);
- ref_info ReferencesArray[200];
- memset(ReferencesArray, 0, sizeof(ReferencesArray));
+ ref_info ReferencesArray[200] = { 0 };
ClaimBuffer(MemoryArena, &ClaimedMemory, &Player, 1024 * 256);
bool HasQuoteMenu = FALSE;
@@ -576,6 +592,8 @@ Readable);
else
{
fprintf(stderr, "%s:%d: Reference must have an ISBN or URL\n", Args[FileIndex], Anno->line);
+ hmml_free(&HMML);
+ free(MemoryArena);
return 1;
}
}
@@ -605,8 +623,8 @@ AppendedIdentifier:
else
{
fprintf(stderr, "%s:%d: Reference must have an ISBN or URL\n", Args[FileIndex], Anno->line);
- free(MemoryArena);
hmml_free(&HMML);
+ free(MemoryArena);
return 1;
}
@@ -625,8 +643,8 @@ AppendedIdentifier:
else
{
fprintf(stderr, "%s:%d: Reference must have an ISBN or URL", Args[FileIndex], Anno->line);
- free(MemoryArena);
hmml_free(&HMML);
+ free(MemoryArena);
return 1;
}
}
@@ -935,6 +953,8 @@ HMML.metadata.annotator);
if(!(OutFile = fopen("out.html", "w")))
{
perror(Args[0]);
+ hmml_free(&HMML);
+ free(MemoryArena);
return 1;
}
fwrite(Master.Location, Master.Ptr - Master.Location, 1, OutFile);