#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_List, // Contained elements (cannot be bare) // text modifiers NT_InlineCode, NT_Bold, NT_Underline, // something went wrong NT_Error, } NodeType; typedef enum { LT_Unordered, LT_NumericOrdered, LT_AlphaOrdered, // a) b) c) etc. } ListType; 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 struct { NodeType type; struct Node* next; ListType ltype; char* rawText; struct ListNode* nextItem; struct ListNode* children; } ListNode; 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); char* ListTypeString(ListType t); Node* FreeNode(Node* node); void ListDebugPrint(ListNode* lnode, int currentLevel); #endif