#include #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, NT_BlockQuote, // 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); #endif