76 lines
1.2 KiB
C
76 lines
1.2 KiB
C
#include <stdlib.h>
|
|
|
|
#include "token.h"
|
|
|
|
#ifndef NODE_H
|
|
#define NODE_H
|
|
|
|
typedef enum {
|
|
// Stand-alone elements
|
|
// cannot contain text modifiers
|
|
NT_Header1,
|
|
NT_Header2,
|
|
NT_Header3,
|
|
NT_Header4,
|
|
NT_BlockCode,
|
|
|
|
// Container elements
|
|
// can contain text modifiers
|
|
NT_Paragraph,
|
|
NT_UnorderedList,
|
|
NT_OrderedList,
|
|
|
|
// Contained elements (cannot be bare)
|
|
// text modifiers
|
|
NT_InlineCode,
|
|
NT_Bold,
|
|
NT_Underline,
|
|
|
|
// something went wrong
|
|
NT_Error,
|
|
} NodeType;
|
|
|
|
|
|
typedef struct Node {
|
|
NodeType type;
|
|
struct Node* next;
|
|
} Node;
|
|
|
|
typedef struct {
|
|
NodeType type;
|
|
struct Node* next;
|
|
char* rawText;
|
|
} HeaderNode;
|
|
|
|
typedef struct {
|
|
NodeType type;
|
|
struct Node* next;
|
|
char* rawText;
|
|
} CodeBlockNode;
|
|
|
|
typedef struct {
|
|
NodeType type;
|
|
struct Node* next;
|
|
char* error;
|
|
} ErrorNode;
|
|
|
|
typedef enum {
|
|
PT_Standard,
|
|
PT_Quote,
|
|
PT_Code,
|
|
} ParagraphType;
|
|
|
|
typedef struct {
|
|
NodeType type;
|
|
struct Node* next;
|
|
ParagraphType ptype;
|
|
struct Token* content;
|
|
} ParagraphNode;
|
|
|
|
Node* ParseNodes(Token* firstToken);
|
|
char* NodeTypeString(NodeType t);
|
|
char* ParagraphTypeString(ParagraphType t);
|
|
Node* FreeNode(Node* node);
|
|
|
|
#endif
|