From 30df421b9e8e5e873922e173958ee7477bd1bc21 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Sat, 25 Mar 2017 02:07:55 +0000 Subject: [PATCH] hmml_to_html.c: Category styling Also upgrade hmml.a for lower-cased markers --- hmml_to_html/hmml.a | Bin 73916 -> 73980 bytes hmml_to_html/hmml_to_html.c | 159 +++++++++++++++++++++++++++++++++--- 2 files changed, 148 insertions(+), 11 deletions(-) diff --git a/hmml_to_html/hmml.a b/hmml_to_html/hmml.a index a45b16ccb785fa58adc648cf046b9f795f433dec..cbf8ed411b6ae75a9973043a5be754eb39c75b35 100644 GIT binary patch delta 13997 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 M)huwn7*6v40I79xI{*Lx diff --git a/hmml_to_html/hmml_to_html.c b/hmml_to_html/hmml_to_html.c index cdc79af..c155f94 100644 --- a/hmml_to_html/hmml_to_html.c +++ b/hmml_to_html/hmml_to_html.c @@ -1,6 +1,7 @@ #if 0 ctime -begin ${0%.*}.ctm -clang -g -Wall -Wno-unused-variable -fsanitize=address -std=c99 $0 -o ${0%.*} hmml.a +#gcc -g -Wall -Wno-unused-variable -fsanitize=address -std=c99 $0 -o ${0%.*} hmml.a +gcc -g -Wall -fsanitize=address -std=c99 $0 -o ${0%.*} hmml.a ctime -end ${0%.*}.ctm exit #endif @@ -28,6 +29,8 @@ typedef struct char *RefTitle; } ref_info; +#define ArrayCount(A) sizeof(A)/sizeof(*(A)) + void ClaimBuffer(char *MemoryArena, int *ClaimedMemory, buffer *Buffer, int Size) { @@ -158,6 +161,48 @@ StringToColourHash(char *String) return Result / i; } +int +StringLength(char *String) +{ + int i = 0; + while(String[i]) + { + ++i; + } + return i; +} + +char * +SanitisePunctuation(char *String) +{ + char *Ptr = String; + while(*Ptr) + { + if(*Ptr == ' ') + { + *Ptr = '_'; + } + if((*Ptr < '0' || *Ptr > '9') && + (*Ptr < 'a' || *Ptr > 'z') && + (*Ptr < 'A' || *Ptr > 'Z')) + { + *Ptr = '-'; + } + ++Ptr; + } + return String; +} + +char *CategoryMedium[] = +{ + "blackboard", + "Blackboard", + "research", + "Research", + "run", + "Run", +}; + int main(int ArgC, char **Args) { @@ -224,6 +269,7 @@ main(int ArgC, char **Args) for(int AnnotationIndex = 0; AnnotationIndex < HMML.annotation_count; ++AnnotationIndex) { + bool HasCategory = FALSE; ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationHeader, 256); ClaimBuffer(MemoryArena, &ClaimedMemory, &AnnotationClass, 128); ClaimBuffer(MemoryArena, &ClaimedMemory, &Text, 1024 * 4); @@ -235,7 +281,6 @@ TimecodeToSeconds(HMML.annotations[AnnotationIndex].time)); CopyStringToBuffer(&AnnotationClass, " class=\"marker"); -#if 0 if(HMML.annotations[AnnotationIndex].author) { CopyStringToBuffer(&AnnotationClass, " authored"); @@ -244,18 +289,102 @@ TimecodeToSeconds(HMML.annotations[AnnotationIndex].time)); StringToColourHash(HMML.annotations[AnnotationIndex].author), HMML.annotations[AnnotationIndex].author); } -#endif + InPtr = HMML.annotations[AnnotationIndex].text; + int MarkerIndex = 0, RefIndex = 0; + while(*InPtr) + { + if(MarkerIndex < HMML.annotations[AnnotationIndex].marker_count && + InPtr - HMML.annotations[AnnotationIndex].text == HMML.annotations[AnnotationIndex].markers[MarkerIndex].offset) + { + char *Readable = HMML.annotations[AnnotationIndex].markers[MarkerIndex].parameter + ? HMML.annotations[AnnotationIndex].markers[MarkerIndex].parameter + : HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker; + if(HMML.annotations[AnnotationIndex].markers[MarkerIndex].type == HMML_MEMBER) + { + CopyStringToBuffer(&Text, +"%s", +HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker, +StringToColourHash(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker), +Readable); + InPtr += StringLength(Readable); + } + else if(HMML.annotations[AnnotationIndex].markers[MarkerIndex].type == HMML_PROJECT) + { + CopyStringToBuffer(&Text, +"%s", +HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker, +StringToColourHash(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker), +Readable); + InPtr += StringLength(Readable); + } + else if(HMML.annotations[AnnotationIndex].markers[MarkerIndex].type == HMML_CATEGORY) + { + for(int i = 0; i < ArrayCount(CategoryMedium); ++i) + { + if(!StringsDiffer(CategoryMedium[i], HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)) + { + CopyStringToBuffer(&AnnotationClass, " %s", SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + goto NextCategory; + } + } + if(!HasCategory) + { + ClaimBuffer(MemoryArena, &ClaimedMemory, &Category, 256); + CopyStringToBuffer(&Category, "
", + SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + HasCategory = TRUE; + } + else + { + CopyStringToBuffer(&Category, "
", + SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + } + CopyStringToBuffer(&AnnotationClass, " cat_%s", + SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + } +NextCategory: ++MarkerIndex; + } + + if(RefIndex < HMML.annotations[AnnotationIndex].reference_count && + InPtr - HMML.annotations[AnnotationIndex].text == HMML.annotations[AnnotationIndex].references[RefIndex].offset) + { + ++RefIndex; + } + if(*InPtr) + { + *Text.Ptr++ = *InPtr++; + } + } - - - //TODO(matt): Replace this CopyStringToBuffer() with real stuff! - CopyStringToBuffer(&Text, HMML.annotations[AnnotationIndex].text); - - - + while(MarkerIndex < HMML.annotations[AnnotationIndex].marker_count) + { + for(int i = 0; i < ArrayCount(CategoryMedium); ++i) + { + if(!StringsDiffer(CategoryMedium[i], HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)) + { + CopyStringToBuffer(&AnnotationClass, " %s", SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + goto NextCategoryInNode; + } + } + if(!HasCategory) + { + ClaimBuffer(MemoryArena, &ClaimedMemory, &Category, 256); + CopyStringToBuffer(&Category, "
", + SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + HasCategory = TRUE; + } + else + { + CopyStringToBuffer(&Category, "
", + SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); + } + CopyStringToBuffer(&AnnotationClass, " cat_%s", + SanitisePunctuation(HMML.annotations[AnnotationIndex].markers[MarkerIndex].marker)); +NextCategoryInNode: ++MarkerIndex; + } CopyStringToBuffer(&AnnotationClass, "\""); CopyBuffer(&AnnotationClass, &AnnotationHeader); @@ -268,6 +397,14 @@ HMML.annotations[AnnotationIndex].author); "
%s", HMML.annotations[AnnotationIndex].time); + if(HasCategory) + { + CopyStringToBuffer(&Category, ""); + CopyBuffer(&Category, &Text); + } + + *Text.Ptr = '\0'; + CopyBuffer(&Text, &Annotation); CopyStringToBuffer(&Annotation, "
\n" @@ -309,7 +446,7 @@ HMML.annotations[AnnotationIndex].time); ClaimBuffer(MemoryArena, &ClaimedMemory, &Master, 1024 * 512); CopyStringToBuffer(&Master, -"\n" +"\n" " \n" " \n" "\n"