hmml_to_html.c: The beginnings of config [#25]
May in all likelihood back this stuff out
This commit is contained in:
parent
2569f6cc6b
commit
955f119a18
|
@ -28,13 +28,15 @@ typedef struct
|
||||||
int Identifier;
|
int Identifier;
|
||||||
} identifier;
|
} identifier;
|
||||||
|
|
||||||
|
#define REF_MAX_IDENTIFIER 32
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char RefTitle[620];
|
char RefTitle[620];
|
||||||
char ID[512];
|
char ID[512];
|
||||||
char URL[512];
|
char URL[512];
|
||||||
char Source[256];
|
char Source[256];
|
||||||
identifier Identifier[12];
|
identifier Identifier[REF_MAX_IDENTIFIER];
|
||||||
int IdentifierCount;
|
int IdentifierCount;
|
||||||
} ref_info;
|
} ref_info;
|
||||||
|
|
||||||
|
@ -456,7 +458,7 @@ GenerateTopicColours(buffer *Colour, char *Topic)
|
||||||
|
|
||||||
if(!(TopicsBuffer = malloc(TopicsLength)))
|
if(!(TopicsBuffer = malloc(TopicsLength)))
|
||||||
{
|
{
|
||||||
perror("hmml_to_html");
|
perror("GenerateTopicColours");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,11 +490,277 @@ GenerateTopicColours(buffer *Colour, char *Topic)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
perror("hmml_to_html");
|
perror("GenerateTopicColours");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CONFIG 0
|
||||||
|
|
||||||
|
#if CONFIG
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *Username;
|
||||||
|
char *Display_Name;
|
||||||
|
char *Homepage;
|
||||||
|
char *Funding_Platform;
|
||||||
|
char *Funding_Username;
|
||||||
|
unsigned int Index;
|
||||||
|
} credentials;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
credentials Credentials;
|
||||||
|
} config;
|
||||||
|
|
||||||
|
int
|
||||||
|
ParseConfig(buffer *Buffer, char *Username)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Essentially, I want to pass a Username to this, and have it write the credentials into the Config buffer
|
||||||
|
Let's start by just grabbing the stuff and printing it out
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TODO(matt): Actually figure out the "standard" config location
|
||||||
|
char Config_Location[255];
|
||||||
|
if(getenv("XDG_CONFIG_HOME"))
|
||||||
|
{
|
||||||
|
sprintf(Config_Location, "%s/hmml.conf", getenv("XDG_CONFIG_HOME"));
|
||||||
|
}
|
||||||
|
else if(getenv("HOME"))
|
||||||
|
{
|
||||||
|
sprintf(Config_Location, "%s/.config/hmml.conf", getenv("HOME"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Config file location not set");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *InFile;
|
||||||
|
if(!(InFile = fopen(Config_Location, "r")))
|
||||||
|
{
|
||||||
|
perror(Config_Location);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Reading: %s\n", Config_Location);
|
||||||
|
|
||||||
|
fseek(InFile, 0, SEEK_END);
|
||||||
|
int InSize = ftell(InFile);
|
||||||
|
fseek(InFile, 0, SEEK_SET);
|
||||||
|
|
||||||
|
char *InBuffer;
|
||||||
|
//config Config = { 0 };
|
||||||
|
|
||||||
|
if(!(InBuffer = malloc(InSize)))
|
||||||
|
{
|
||||||
|
perror("ParseConfig");
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread(InBuffer, InSize, 1, InFile);
|
||||||
|
fclose(InFile);
|
||||||
|
|
||||||
|
char *InPtr = InBuffer;
|
||||||
|
char OutBuffer[256];
|
||||||
|
//char *OutPtr = Config.Credentials.Display_Name;
|
||||||
|
char *OutPtr = OutBuffer;
|
||||||
|
bool Quoted = FALSE;
|
||||||
|
bool FoundCredentials, ParsingUsername = FALSE;
|
||||||
|
unsigned int ScopeDepth = 0;
|
||||||
|
|
||||||
|
while(InPtr - InBuffer < InSize)
|
||||||
|
{
|
||||||
|
switch(*InPtr)
|
||||||
|
{
|
||||||
|
case '#':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
printf(" We are commenting\n");
|
||||||
|
while(InPtr - InBuffer < InSize && *InPtr != '\n')
|
||||||
|
{
|
||||||
|
++InPtr;
|
||||||
|
}
|
||||||
|
++InPtr;
|
||||||
|
while(InPtr - InBuffer < InSize && (*InPtr == ' ' || *InPtr == '\n'))
|
||||||
|
{
|
||||||
|
++InPtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '{':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
++ScopeDepth;
|
||||||
|
++InPtr;
|
||||||
|
while(*InPtr == '\n' || *InPtr == ' ')
|
||||||
|
{
|
||||||
|
++InPtr;
|
||||||
|
}
|
||||||
|
printf(" We have entered a scope\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '}':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
--ScopeDepth;
|
||||||
|
++InPtr;
|
||||||
|
printf(" We have left a scope\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if 1
|
||||||
|
case ' ':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
++InPtr;
|
||||||
|
*OutPtr = '\0';
|
||||||
|
OutPtr = OutBuffer;
|
||||||
|
printf("%s\n", OutBuffer);
|
||||||
|
|
||||||
|
// TODO(matt): Switch on the OutBuffer? I have a feeling that isn't actually possible, though
|
||||||
|
if(!StringsDiffer("credentials", OutBuffer))
|
||||||
|
{
|
||||||
|
FoundCredentials = TRUE;
|
||||||
|
printf(" We have found the credentials block\n");
|
||||||
|
}
|
||||||
|
if(ParsingUsername)
|
||||||
|
{
|
||||||
|
printf(" The username is %s\n", OutBuffer);
|
||||||
|
ParsingUsername = FALSE;
|
||||||
|
}
|
||||||
|
if(FoundCredentials && (!StringsDiffer("username", OutBuffer)))
|
||||||
|
{
|
||||||
|
ParsingUsername = TRUE;
|
||||||
|
printf(" We have found the username\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
case '"':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
Quoted = TRUE;
|
||||||
|
printf(" We are quoting!\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Quoted = FALSE;
|
||||||
|
printf(" We are no longer quoting!\n");
|
||||||
|
}
|
||||||
|
++InPtr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ';':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
printf(" We have reached the end of a setting\n");
|
||||||
|
++InPtr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case '\n':
|
||||||
|
{
|
||||||
|
if(!Quoted)
|
||||||
|
{
|
||||||
|
if(InPtr - InBuffer < InSize)
|
||||||
|
{
|
||||||
|
*OutPtr = '\0';
|
||||||
|
OutPtr = OutBuffer;
|
||||||
|
// TODO(matt)
|
||||||
|
if(!StringsDiffer("credentials", OutBuffer))
|
||||||
|
{
|
||||||
|
FoundCredentials = TRUE;
|
||||||
|
printf(" We have found the credentials block\n");
|
||||||
|
}
|
||||||
|
if(ParsingUsername)
|
||||||
|
{
|
||||||
|
printf(" The username is %s\n", OutBuffer);
|
||||||
|
ParsingUsername = FALSE;
|
||||||
|
}
|
||||||
|
if(FoundCredentials && (!StringsDiffer("username", OutBuffer)))
|
||||||
|
{
|
||||||
|
ParsingUsername = TRUE;
|
||||||
|
printf(" We have found the username\n");
|
||||||
|
}
|
||||||
|
printf("%s\n", OutBuffer);
|
||||||
|
++InPtr;
|
||||||
|
while(InPtr - InBuffer < InSize && *InPtr == ' ') // NOTE(matt): Skip indentation whitespace
|
||||||
|
{
|
||||||
|
++InPtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(InPtr - InBuffer == InSize)
|
||||||
|
{
|
||||||
|
printf(" We have reached the EOF\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
while(InPtr - InBuffer < InSize)
|
||||||
|
{
|
||||||
|
while(*InPtr != '\n')
|
||||||
|
{
|
||||||
|
*OutPtr++ = *InPtr++;
|
||||||
|
}
|
||||||
|
*OutPtr = '\0';
|
||||||
|
printf("%s\n", Config.Credentials.Display_Name);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
free(InBuffer);
|
||||||
|
|
||||||
|
// Reading from the config file, parsing it inline (on the stack) and writing into the buffer *Config
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int ArgC, char **Args)
|
main(int ArgC, char **Args)
|
||||||
{
|
{
|
||||||
|
@ -515,6 +783,10 @@ main(int ArgC, char **Args)
|
||||||
// NOTE(matt): Setup buffers and ptrs
|
// NOTE(matt): Setup buffers and ptrs
|
||||||
char *InPtr;
|
char *InPtr;
|
||||||
|
|
||||||
|
#if CONFIG
|
||||||
|
buffer Config;
|
||||||
|
#endif
|
||||||
|
|
||||||
buffer Title;
|
buffer Title;
|
||||||
buffer QuoteMenu;
|
buffer QuoteMenu;
|
||||||
buffer ReferenceMenu;
|
buffer ReferenceMenu;
|
||||||
|
@ -543,6 +815,10 @@ main(int ArgC, char **Args)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG
|
||||||
|
ClaimBuffer(MemoryArena, &ClaimedMemory, &Config, 1024);
|
||||||
|
#endif
|
||||||
|
|
||||||
HMML_Output HMML = hmml_parse_file(InFile);
|
HMML_Output HMML = hmml_parse_file(InFile);
|
||||||
fclose(InFile);
|
fclose(InFile);
|
||||||
|
|
||||||
|
@ -648,7 +924,7 @@ Readable);
|
||||||
ClaimBuffer(MemoryArena, &ClaimedMemory, &ReferenceMenu, 1024 * 16);
|
ClaimBuffer(MemoryArena, &ClaimedMemory, &ReferenceMenu, 1024 * 16);
|
||||||
|
|
||||||
CopyStringToBuffer(&ReferenceMenu,
|
CopyStringToBuffer(&ReferenceMenu,
|
||||||
" <div class=\"refs_container\">\n"
|
" <div class=\"menu\">\n"
|
||||||
" <span>References ▼</span>\n"
|
" <span>References ▼</span>\n"
|
||||||
" <div class=\"mouse_catcher\"></div>\n"
|
" <div class=\"mouse_catcher\"></div>\n"
|
||||||
" <div class=\"refs\">\n");
|
" <div class=\"refs\">\n");
|
||||||
|
@ -767,7 +1043,7 @@ AppendedIdentifier:
|
||||||
{
|
{
|
||||||
ClaimBuffer(MemoryArena, &ClaimedMemory, &QuoteMenu, 1024 * 16);
|
ClaimBuffer(MemoryArena, &ClaimedMemory, &QuoteMenu, 1024 * 16);
|
||||||
CopyStringToBuffer(&QuoteMenu,
|
CopyStringToBuffer(&QuoteMenu,
|
||||||
" <div class=\"refs_container\">\n"
|
" <div class=\"menu\">\n"
|
||||||
" <span>Quotes ▼</span>\n"
|
" <span>Quotes ▼</span>\n"
|
||||||
" <div class=\"mouse_catcher\"></div>\n"
|
" <div class=\"mouse_catcher\"></div>\n"
|
||||||
" <div class=\"refs\">\n");
|
" <div class=\"refs\">\n");
|
||||||
|
@ -953,6 +1229,10 @@ ReferencesArray[i].Identifier[j].Timecode);
|
||||||
ClaimedMemory -= ReferenceMenu.Size;
|
ClaimedMemory -= ReferenceMenu.Size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG
|
||||||
|
// TODO(matt): Here is where I test ParseConfig
|
||||||
|
ParseConfig(&Config, HMML.metadata.annotator);
|
||||||
|
#endif
|
||||||
CopyStringToBuffer(&Title,
|
CopyStringToBuffer(&Title,
|
||||||
" <span class=\"annotator_container\">Annotator: <span class=\"annotator\">%s</span></span>\n"
|
" <span class=\"annotator_container\">Annotator: <span class=\"annotator\">%s</span></span>\n"
|
||||||
" </div>\n",
|
" </div>\n",
|
||||||
|
|
Loading…
Reference in New Issue