mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-07 16:18:49 +00:00
more arranging functions; MD_MakeNode
This commit is contained in:
@@ -1109,7 +1109,6 @@ main:
|
|||||||
@func MD_PushSibling: {
|
@func MD_PushSibling: {
|
||||||
first: **MD_Node,
|
first: **MD_Node,
|
||||||
last: **MD_Node,
|
last: **MD_Node,
|
||||||
parent: *MD_Node,
|
|
||||||
new_sibling: *MD_Node,
|
new_sibling: *MD_Node,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ int main(int argument_count, char **arguments)
|
|||||||
for(int i = 1; i < argument_count; i += 1)
|
for(int i = 1; i < argument_count; i += 1)
|
||||||
{
|
{
|
||||||
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
|
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
|
||||||
MD_PushSibling(&first, &last, MD_NilNode(), root);
|
MD_PushSibling(&first, &last, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(rjf): Put errors on every single node.
|
// NOTE(rjf): Put errors on every single node.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ int main(int argument_count, char **arguments)
|
|||||||
for(int i = 1; i < argument_count; i += 1)
|
for(int i = 1; i < argument_count; i += 1)
|
||||||
{
|
{
|
||||||
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
|
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
|
||||||
MD_PushSibling(&first, &last, MD_NilNode(), root);
|
MD_PushSibling(&first, &last, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(rjf): Call "custom layer" back.
|
// NOTE(rjf): Call "custom layer" back.
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ int main(int argument_count, char **arguments)
|
|||||||
for(int i = 1; i < argument_count; i += 1)
|
for(int i = 1; i < argument_count; i += 1)
|
||||||
{
|
{
|
||||||
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
|
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
|
||||||
MD_PushSibling(&first, &last, MD_NilNode(), root);
|
MD_PushSibling(&first, &last, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(MD_EachNode(root, first))
|
for(MD_EachNode(root, first))
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ int main(int argument_count, char **arguments)
|
|||||||
MD_String8 path = MD_PushStringF("%.*s/%.*s",
|
MD_String8 path = MD_PushStringF("%.*s/%.*s",
|
||||||
MD_StringExpand(folder),
|
MD_StringExpand(folder),
|
||||||
MD_StringExpand(file_info.filename));
|
MD_StringExpand(file_info.filename));
|
||||||
MD_PushSibling(&first_root, &last_root, MD_NilNode(), MD_ParseWholeFile(path).node);
|
MD_PushSibling(&first_root, &last_root, MD_ParseWholeFile(path).node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -672,10 +672,13 @@ MD_FUNCTION MD_CodeLoc MD_CodeLocFromNode(MD_Node *node);
|
|||||||
//~ Tree/List Building
|
//~ Tree/List Building
|
||||||
MD_FUNCTION MD_b32 MD_NodeIsNil(MD_Node *node);
|
MD_FUNCTION MD_b32 MD_NodeIsNil(MD_Node *node);
|
||||||
MD_FUNCTION MD_Node *MD_NilNode(void);
|
MD_FUNCTION MD_Node *MD_NilNode(void);
|
||||||
|
MD_FUNCTION MD_Node *MD_MakeNode(MD_NodeKind kind, MD_String8 string,
|
||||||
|
MD_String8 whole_string, MD_String8 filename,
|
||||||
|
MD_u8 *file_contents, MD_u8 *at);
|
||||||
MD_FUNCTION MD_Node *MD_MakeNodeFromToken(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_Token token);
|
MD_FUNCTION MD_Node *MD_MakeNodeFromToken(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_Token token);
|
||||||
MD_FUNCTION MD_Node *MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_String8 string);
|
MD_FUNCTION MD_Node *MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_String8 string);
|
||||||
MD_FUNCTION MD_Node *MD_MakeNodeReference(MD_Node *target);
|
MD_FUNCTION MD_Node *MD_MakeNodeReference(MD_Node *target);
|
||||||
MD_FUNCTION void MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *parent, MD_Node *new_sibling);
|
MD_FUNCTION void MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *new_sibling);
|
||||||
MD_FUNCTION void MD_PushChild(MD_Node *parent, MD_Node *new_child);
|
MD_FUNCTION void MD_PushChild(MD_Node *parent, MD_Node *new_child);
|
||||||
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
|
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
|
||||||
MD_FUNCTION void MD_InsertToNamespace(MD_Node *ns, MD_Node *node);
|
MD_FUNCTION void MD_InsertToNamespace(MD_Node *ns, MD_Node *node);
|
||||||
|
|||||||
+53
-58
@@ -1146,31 +1146,6 @@ MD_Parse_InitializeCtx(MD_String8 filename, MD_String8 contents)
|
|||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL void
|
|
||||||
_MD_PushNodeToList(MD_Node **firstp, MD_Node **lastp, MD_Node *parent, MD_Node *node)
|
|
||||||
{
|
|
||||||
if(!MD_NodeIsNil(node))
|
|
||||||
{
|
|
||||||
MD_Node *first = *firstp;
|
|
||||||
MD_Node *last = *lastp;
|
|
||||||
if(MD_NodeIsNil(last))
|
|
||||||
{
|
|
||||||
first = last = node;
|
|
||||||
node->next = node->prev = MD_NilNode();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last->next = node;
|
|
||||||
node->next = MD_NilNode();
|
|
||||||
node->prev = last;
|
|
||||||
last = last->next;
|
|
||||||
}
|
|
||||||
*firstp = first;
|
|
||||||
*lastp = last;
|
|
||||||
node->parent = parent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MD_FUNCTION_IMPL void
|
MD_FUNCTION_IMPL void
|
||||||
MD_Parse_Bump(MD_ParseCtx *ctx, MD_Token token)
|
MD_Parse_Bump(MD_ParseCtx *ctx, MD_Token token)
|
||||||
{
|
{
|
||||||
@@ -1568,39 +1543,36 @@ _MD_Error(MD_ParseCtx *ctx, MD_Node *node, MD_MessageKind kind, char *fmt, ...)
|
|||||||
#define _MD_TokenError(ctx, token, kind, fmt, ...) \
|
#define _MD_TokenError(ctx, token, kind, fmt, ...) \
|
||||||
_MD_Error(ctx, _MD_MakeNodeFromToken_Ctx(ctx, MD_NodeKind_ErrorMarker, token), kind, fmt, __VA_ARGS__)
|
_MD_Error(ctx, _MD_MakeNodeFromToken_Ctx(ctx, MD_NodeKind_ErrorMarker, token), kind, fmt, __VA_ARGS__)
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL MD_Node *
|
MD_FUNCTION_IMPL MD_Node *
|
||||||
_MD_MakeNode(MD_NodeKind kind, MD_String8 string, MD_String8 whole_string, MD_String8 filename,
|
MD_MakeNode(MD_NodeKind kind, MD_String8 string,
|
||||||
MD_u8 *file_contents, MD_u8 *at)
|
MD_String8 whole_string, MD_String8 filename,
|
||||||
|
MD_u8 *file_contents, MD_u8 *at)
|
||||||
{
|
{
|
||||||
MD_Node *node = _MD_PushArray(MD_Node, 1);
|
MD_Node *node = _MD_PushArray(MD_Node, 1);
|
||||||
if(node)
|
node->kind = kind;
|
||||||
{
|
node->string = string;
|
||||||
node->kind = kind;
|
node->whole_string = whole_string;
|
||||||
node->string = string;
|
node->next = node->prev = node->parent =
|
||||||
node->whole_string = whole_string;
|
node->first_child = node->last_child =
|
||||||
node->next = node->prev = node->parent = node->first_child = node->last_child = node->first_tag = node->last_tag = node->ref_target = MD_NilNode();
|
node->first_tag = node->last_tag = node->ref_target = MD_NilNode();
|
||||||
node->filename = filename;
|
node->filename = filename;
|
||||||
node->file_contents = file_contents;
|
node->file_contents = file_contents;
|
||||||
node->at = at;
|
node->at = at;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
node = MD_NilNode();
|
|
||||||
}
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL MD_Node *
|
MD_PRIVATE_FUNCTION_IMPL MD_Node *
|
||||||
_MD_MakeNodeFromToken_Ctx(MD_ParseCtx *ctx, MD_NodeKind kind, MD_Token token)
|
_MD_MakeNodeFromToken_Ctx(MD_ParseCtx *ctx, MD_NodeKind kind, MD_Token token)
|
||||||
{
|
{
|
||||||
return _MD_MakeNode(kind, token.string, token.outer_string, ctx->filename, ctx->file_contents.str,
|
return MD_MakeNode(kind, token.string, token.outer_string, ctx->filename,
|
||||||
token.outer_string.str);
|
ctx->file_contents.str,
|
||||||
|
token.outer_string.str);
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL MD_Node *
|
MD_PRIVATE_FUNCTION_IMPL MD_Node *
|
||||||
_MD_MakeNodeFromString_Ctx(MD_ParseCtx *ctx, MD_NodeKind kind, MD_String8 string, MD_u8 *at)
|
_MD_MakeNodeFromString_Ctx(MD_ParseCtx *ctx, MD_NodeKind kind, MD_String8 string, MD_u8 *at)
|
||||||
{
|
{
|
||||||
return _MD_MakeNode(kind, string, string, ctx->filename, ctx->file_contents.str, at);
|
return MD_MakeNode(kind, string, string, ctx->filename, ctx->file_contents.str, at);
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL void _MD_ParseTagList(MD_ParseCtx *ctx, MD_Node **first_out, MD_Node **last_out);
|
MD_PRIVATE_FUNCTION_IMPL void _MD_ParseTagList(MD_ParseCtx *ctx, MD_Node **first_out, MD_Node **last_out);
|
||||||
@@ -1927,7 +1899,8 @@ MD_Parse_Set(MD_ParseCtx *ctx, MD_Node *parent, MD_ParseSetFlags flags)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_MD_PushNodeToList(&parent->first_child, &parent->last_child, parent, child);
|
MD_PushSibling(&parent->first_child, &parent->last_child, child);
|
||||||
|
child->parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(rjf): Separators.
|
// NOTE(rjf): Separators.
|
||||||
@@ -1989,7 +1962,7 @@ _MD_ParseTagList(MD_ParseCtx *ctx, MD_Node **first_out, MD_Node **last_out)
|
|||||||
{
|
{
|
||||||
MD_Parse_Set(ctx, tag, MD_ParseSetFlag_Paren);
|
MD_Parse_Set(ctx, tag, MD_ParseSetFlag_Paren);
|
||||||
}
|
}
|
||||||
_MD_PushNodeToList(&first, &last, MD_NilNode(), tag);
|
MD_PushSibling(&first, &last, tag);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2017,16 +1990,17 @@ MD_ParseOneNode(MD_String8 filename, MD_String8 contents)
|
|||||||
return MD_ParseOneNodeFromCtx(&ctx);
|
return MD_ParseOneNodeFromCtx(&ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_PRIVATE_FUNCTION_IMPL void
|
MD_FUNCTION_IMPL void
|
||||||
MD_InsertToNamespace(MD_Node *ns, MD_Node *node)
|
MD_InsertToNamespace(MD_Node *ns, MD_Node *node)
|
||||||
{
|
{
|
||||||
MD_Node *ref = _MD_MakeNode(MD_NodeKind_Reference, node->string, node->whole_string, node->filename,
|
MD_Node *ref = MD_MakeNode(MD_NodeKind_Reference, node->string,
|
||||||
node->file_contents, node->at);
|
node->whole_string, node->filename,
|
||||||
|
node->file_contents, node->at);
|
||||||
ref->ref_target = node;
|
ref->ref_target = node;
|
||||||
MD_PushChild(ns, ref);
|
MD_PushChild(ns, ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION MD_ParseResult
|
MD_FUNCTION_IMPL MD_ParseResult
|
||||||
MD_ParseWholeString(MD_String8 filename, MD_String8 contents)
|
MD_ParseWholeString(MD_String8 filename, MD_String8 contents)
|
||||||
{
|
{
|
||||||
MD_ParseResult result = MD_ZERO_STRUCT;
|
MD_ParseResult result = MD_ZERO_STRUCT;
|
||||||
@@ -2091,7 +2065,8 @@ MD_ParseWholeString(MD_String8 filename, MD_String8 contents)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_MD_PushNodeToList(&root->first_child, &root->last_child, root, child);
|
MD_PushSibling(&root->first_child, &root->last_child, child);
|
||||||
|
child->parent = root;
|
||||||
MD_InsertToNamespace(selected_namespace, child);
|
MD_InsertToNamespace(selected_namespace, child);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2171,13 +2146,13 @@ MD_NilNode(void) { return &_md_nil_node; }
|
|||||||
MD_FUNCTION_IMPL MD_Node *
|
MD_FUNCTION_IMPL MD_Node *
|
||||||
MD_MakeNodeFromToken(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_Token token)
|
MD_MakeNodeFromToken(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_Token token)
|
||||||
{
|
{
|
||||||
return _MD_MakeNode(kind, token.string, token.outer_string, filename, file, at);
|
return MD_MakeNode(kind, token.string, token.outer_string, filename, file, at);
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL MD_Node *
|
MD_FUNCTION_IMPL MD_Node *
|
||||||
MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_String8 string)
|
MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_String8 string)
|
||||||
{
|
{
|
||||||
return _MD_MakeNode(kind, string, string, filename, file, at);
|
return MD_MakeNode(kind, string, string, filename, file, at);
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL MD_Node *
|
MD_FUNCTION_IMPL MD_Node *
|
||||||
@@ -2189,21 +2164,41 @@ MD_MakeNodeReference(MD_Node *target)
|
|||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL void
|
MD_FUNCTION_IMPL void
|
||||||
MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *parent, MD_Node *new_sibling)
|
MD_PushSibling(MD_Node **firstp, MD_Node **lastp, MD_Node *node)
|
||||||
{
|
{
|
||||||
_MD_PushNodeToList(first, last, parent, new_sibling);
|
if(!MD_NodeIsNil(node))
|
||||||
|
{
|
||||||
|
MD_Node *first = *firstp;
|
||||||
|
MD_Node *last = *lastp;
|
||||||
|
if(MD_NodeIsNil(last))
|
||||||
|
{
|
||||||
|
first = last = node;
|
||||||
|
node->next = node->prev = MD_NilNode();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last->next = node;
|
||||||
|
node->next = MD_NilNode();
|
||||||
|
node->prev = last;
|
||||||
|
last = last->next;
|
||||||
|
}
|
||||||
|
*firstp = first;
|
||||||
|
*lastp = last;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL void
|
MD_FUNCTION_IMPL void
|
||||||
MD_PushChild(MD_Node *parent, MD_Node *new_child)
|
MD_PushChild(MD_Node *parent, MD_Node *new_child)
|
||||||
{
|
{
|
||||||
_MD_PushNodeToList(&parent->first_child, &parent->last_child, parent, new_child);
|
MD_PushSibling(&parent->first_child, &parent->last_child, new_child);
|
||||||
|
new_child->parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL void
|
MD_FUNCTION_IMPL void
|
||||||
MD_PushTag(MD_Node *node, MD_Node *tag)
|
MD_PushTag(MD_Node *node, MD_Node *tag)
|
||||||
{
|
{
|
||||||
_MD_PushNodeToList(&node->first_tag, &node->last_tag, node, tag);
|
MD_PushSibling(&node->first_tag, &node->last_tag, tag);
|
||||||
|
tag->parent = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL MD_b32
|
MD_FUNCTION_IMPL MD_b32
|
||||||
|
|||||||
Reference in New Issue
Block a user