readme-thing/main.c

147 lines
2.9 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "main.h"
#include "token.h"
#include "lexer.h"
#include "node.h"
/*
* RawText ""
* LineNumber 0
* NodeType NT_Root
* ChildNodes
* RawText "# Header1"
* LineNumber 1
* NodeType NT_Header1
* ChildNodes
* {"Some text."}
*
* RawText "## Header2"
*/
/*
* NodeType NT_Root
* ChildNodes
* RawText "## Header2"
* ChildNodes
* paragraph
* ChildNodes
* {*bold text*}
* {_underlined text_}
* paragraph
*
*
*/
//Node* ParseLine(char *buffer);
void writeTokenFile(TokenList* tl);
int
main(int argc, const char** argv)
{
/*int i;
for(i = 0; i < argc; i++) {
printf("[%d:%d] %s\n", i, argc, argv[i]);
}*/
if (argc <= 1) {
printf("Missing input file\n");
return 1;
}
if (argc > 2) {
printf("Too many arguments\n");
return 2;
}
Lexer* l = NewLexer(argv[1]);
TokenList* current = malloc(sizeof(TokenList));
TokenList* tl = current;//= malloc(sizeof(TokenList));
current->token = NULL;
current->next = NULL;
TokenType tt;
do
{
Token* t = NextToken(l);
tt = t->type;
current = TokenListAdd(current, t);
}
while(tt != TT_EOF);
writeTokenFile(tl);
NodeList* nl = ParseNodes(tl);
Node* node = nl->first;
printf("nodes:\n");
while(node != NULL)
{
/*PrintNodeType(node->type);*/
switch (node->type) {
case NT_Header1:
case NT_Header2:
case NT_Header3:
case NT_Header4:
{
HeaderNode* hnode = (HeaderNode*)node;
printf("{HeaderNode type:%s text:%s}\n", NodeTypeString(hnode->type), hnode->rawText);
}
break;
default:
printf("%s\n", NodeTypeString(node->type));
}
node = node->next;
}
printf("rawLen: %d position: %d readPosition: %d ch: %c line: %d column: %d\n",
l->rawLen,
l->position,
l->readPosition,
l->ch,
l->line,
l->column
);
return 0;
}
void
writeTokenFile(TokenList* tl)
{
printf("writeTokenFile() start\n");
int count;
FILE* fp = fopen("tokens.txt", "w");
if (fp == NULL)
{
printf("unable to open output.txt\n");
return;
}
TokenList* current = tl;
for(count = 0; current != NULL; count++) {
if (count == 0 && current->token == NULL)
{
printf("first token null\n");
break;
}
/*printf("writeTokenFile(): %s\n", TokenString(current->token));*/
fprintf(fp, "%s\n", TokenString(current->token));
current = current->next;
}
fclose(fp);
if (count == 0) {
printf("nothing written to file!\n");
}
printf("Token count: %d\n", count);
}