mirror of
https://github.com/Ed94/metadesk.git
synced 2026-07-29 10:50:02 +00:00
starting to review mdesk.h/c
This commit is contained in:
+7
-11
@@ -1057,16 +1057,12 @@ str8_path_list_join_by_style_alloc(AllocatorInfo ainfo, String8List* path, PathS
|
||||
////////////////////////////////
|
||||
//~ rjf: UTF-8 & UTF-16 Decoding/Encoding
|
||||
|
||||
read_only global U8 utf8_class[32] = {
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2,3,3,4,5,
|
||||
};
|
||||
|
||||
UnicodeDecode
|
||||
utf8_decode(U8* str, U64 max)
|
||||
{
|
||||
UnicodeDecode result = {1, MAX_U32};
|
||||
U8 byte = str[0];
|
||||
U8 byte_class = utf8_class[byte >> 3];
|
||||
U8 byte_class = utf8_class(byte >> 3);
|
||||
switch (byte_class)
|
||||
{
|
||||
case 1:
|
||||
@@ -1080,7 +1076,7 @@ utf8_decode(U8* str, U64 max)
|
||||
if (2 < max)
|
||||
{
|
||||
U8 cont_byte = str[1];
|
||||
if (utf8_class[cont_byte >> 3] == 0)
|
||||
if (utf8_class(cont_byte >> 3) == 0)
|
||||
{
|
||||
result.codepoint = (byte & BITMASK5) << 6;
|
||||
result.codepoint |= (cont_byte & BITMASK6);
|
||||
@@ -1095,8 +1091,8 @@ utf8_decode(U8* str, U64 max)
|
||||
if (2 < max)
|
||||
{
|
||||
U8 cont_byte[2] = {str[1], str[2]};
|
||||
if (utf8_class[cont_byte[0] >> 3] == 0 &&
|
||||
utf8_class[cont_byte[1] >> 3] == 0)
|
||||
if (utf8_class(cont_byte[0] >> 3) == 0 &&
|
||||
utf8_class(cont_byte[1] >> 3) == 0)
|
||||
{
|
||||
result.codepoint = (byte & BITMASK4) << 12;
|
||||
result.codepoint |= ((cont_byte[0] & BITMASK6) << 6);
|
||||
@@ -1112,9 +1108,9 @@ utf8_decode(U8* str, U64 max)
|
||||
if (3 < max)
|
||||
{
|
||||
U8 cont_byte[3] = {str[1], str[2], str[3]};
|
||||
if (utf8_class[cont_byte[0] >> 3] == 0 &&
|
||||
utf8_class[cont_byte[1] >> 3] == 0 &&
|
||||
utf8_class[cont_byte[2] >> 3] == 0)
|
||||
if (utf8_class(cont_byte[0] >> 3) == 0 &&
|
||||
utf8_class(cont_byte[1] >> 3) == 0 &&
|
||||
utf8_class(cont_byte[2] >> 3) == 0)
|
||||
{
|
||||
result.codepoint = (byte & BITMASK3) << 18;
|
||||
result.codepoint |= ((cont_byte[0] & BITMASK6) << 12);
|
||||
|
||||
@@ -822,6 +822,16 @@ MD_API String8 str8_path_list_join_by_style_alloc (AllocatorInfo ainfo, Str
|
||||
////////////////////////////////
|
||||
//~ rjf: UTF-8 & UTF-16 Decoding/Encoding
|
||||
|
||||
inline U8
|
||||
utf8_class(U8 value)
|
||||
{
|
||||
read_only local_persist thread_local
|
||||
U8 lookup_table[32] = {
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2,3,3,4,5,
|
||||
};
|
||||
return lookup_table[value];
|
||||
}
|
||||
|
||||
MD_API UnicodeDecode utf8_decode (U8* str, U64 max);
|
||||
UnicodeDecode utf16_decode (U16* str, U64 max);
|
||||
MD_API U32 utf8_encode (U8* str, U32 codepoint);
|
||||
|
||||
+259
-259
File diff suppressed because it is too large
Load Diff
+195
-188
@@ -1,9 +1,7 @@
|
||||
#if INTELLISENSE_DIRECTIVES
|
||||
#pragma once
|
||||
#include "base/base_types.h"
|
||||
#include "base/math.h"
|
||||
#include "base/arena.h"
|
||||
#include "base/string.h"
|
||||
# pragma once
|
||||
# include "base/base.h"
|
||||
# include "os/os.h"
|
||||
#endif
|
||||
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
@@ -14,11 +12,11 @@
|
||||
|
||||
typedef enum MsgKind
|
||||
{
|
||||
MsgKind_Null,
|
||||
MsgKind_Note,
|
||||
MsgKind_Warning,
|
||||
MsgKind_Error,
|
||||
MsgKind_FatalError,
|
||||
MsgKind_Null,
|
||||
MsgKind_Note,
|
||||
MsgKind_Warning,
|
||||
MsgKind_Error,
|
||||
MsgKind_FatalError,
|
||||
}
|
||||
MsgKind;
|
||||
|
||||
@@ -26,19 +24,19 @@ typedef struct Node Node;
|
||||
typedef struct Msg Msg;
|
||||
struct Msg
|
||||
{
|
||||
Msg* next;
|
||||
Node* node;
|
||||
MsgKind kind;
|
||||
String8 string;
|
||||
Msg* next;
|
||||
Node* node;
|
||||
MsgKind kind;
|
||||
String8 string;
|
||||
};
|
||||
|
||||
typedef struct MsgList MsgList;
|
||||
struct MsgList
|
||||
{
|
||||
Msg* first;
|
||||
Msg* last;
|
||||
U64 count;
|
||||
MsgKind worst_message_kind;
|
||||
Msg* first;
|
||||
Msg* last;
|
||||
U64 count;
|
||||
MsgKind worst_message_kind;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@@ -47,69 +45,69 @@ struct MsgList
|
||||
typedef U32 TokenFlags;
|
||||
enum
|
||||
{
|
||||
// rjf: base kind info
|
||||
TokenFlag_Identifier = (1<<0),
|
||||
TokenFlag_Numeric = (1<<1),
|
||||
TokenFlag_StringLiteral = (1<<2),
|
||||
TokenFlag_Symbol = (1<<3),
|
||||
TokenFlag_Reserved = (1<<4),
|
||||
TokenFlag_Comment = (1<<5),
|
||||
TokenFlag_Whitespace = (1<<6),
|
||||
TokenFlag_Newline = (1<<7),
|
||||
|
||||
// rjf: decoration info
|
||||
TokenFlag_StringSingleQuote = (1<<8),
|
||||
TokenFlag_StringDoubleQuote = (1<<9),
|
||||
TokenFlag_StringTick = (1<<10),
|
||||
TokenFlag_StringTriplet = (1<<11),
|
||||
|
||||
// rjf: error info
|
||||
TokenFlag_BrokenComment = (1<<12),
|
||||
TokenFlag_BrokenStringLiteral = (1<<13),
|
||||
TokenFlag_BadCharacter = (1<<14),
|
||||
// rjf: base kind info
|
||||
TokenFlag_Identifier = (1<<0),
|
||||
TokenFlag_Numeric = (1<<1),
|
||||
TokenFlag_StringLiteral = (1<<2),
|
||||
TokenFlag_Symbol = (1<<3),
|
||||
TokenFlag_Reserved = (1<<4),
|
||||
TokenFlag_Comment = (1<<5),
|
||||
TokenFlag_Whitespace = (1<<6),
|
||||
TokenFlag_Newline = (1<<7),
|
||||
|
||||
// rjf: decoration info
|
||||
TokenFlag_StringSingleQuote = (1<<8),
|
||||
TokenFlag_StringDoubleQuote = (1<<9),
|
||||
TokenFlag_StringTick = (1<<10),
|
||||
TokenFlag_StringTriplet = (1<<11),
|
||||
|
||||
// rjf: error info
|
||||
TokenFlag_BrokenComment = (1<<12),
|
||||
TokenFlag_BrokenStringLiteral = (1<<13),
|
||||
TokenFlag_BadCharacter = (1<<14),
|
||||
};
|
||||
|
||||
typedef U32 TokenGroups;
|
||||
enum
|
||||
{
|
||||
TokenGroup_Comment = TokenFlag_Comment,
|
||||
TokenGroup_Whitespace = (TokenFlag_Whitespace| TokenFlag_Newline),
|
||||
TokenGroup_Irregular = (TokenGroup_Comment | TokenGroup_Whitespace),
|
||||
TokenGroup_Regular = ~TokenGroup_Irregular,
|
||||
TokenGroup_Label = (TokenFlag_Identifier | TokenFlag_Numeric | TokenFlag_StringLiteral | TokenFlag_Symbol),
|
||||
TokenGroup_Error = (TokenFlag_BrokenComment | TokenFlag_BrokenStringLiteral | TokenFlag_BadCharacter),
|
||||
TokenGroup_Comment = TokenFlag_Comment,
|
||||
TokenGroup_Whitespace = (TokenFlag_Whitespace| TokenFlag_Newline),
|
||||
TokenGroup_Irregular = (TokenGroup_Comment | TokenGroup_Whitespace),
|
||||
TokenGroup_Regular = ~TokenGroup_Irregular,
|
||||
TokenGroup_Label = (TokenFlag_Identifier | TokenFlag_Numeric | TokenFlag_StringLiteral | TokenFlag_Symbol),
|
||||
TokenGroup_Error = (TokenFlag_BrokenComment | TokenFlag_BrokenStringLiteral | TokenFlag_BadCharacter),
|
||||
};
|
||||
|
||||
typedef struct Token Token;
|
||||
struct Token
|
||||
{
|
||||
Rng1U64 range;
|
||||
TokenFlags flags;
|
||||
Rng1U64 range;
|
||||
TokenFlags flags;
|
||||
};
|
||||
|
||||
typedef struct TokenChunkNode TokenChunkNode;
|
||||
struct TokenChunkNode
|
||||
{
|
||||
TokenChunkNode *next;
|
||||
Token *v;
|
||||
U64 count;
|
||||
U64 cap;
|
||||
TokenChunkNode* next;
|
||||
Token* v;
|
||||
U64 count;
|
||||
U64 cap;
|
||||
};
|
||||
|
||||
typedef struct TokenChunkList TokenChunkList;
|
||||
struct TokenChunkList
|
||||
{
|
||||
TokenChunkNode* first;
|
||||
TokenChunkNode* last;
|
||||
U64 chunk_count;
|
||||
U64 total_token_count;
|
||||
TokenChunkNode* first;
|
||||
TokenChunkNode* last;
|
||||
U64 chunk_count;
|
||||
U64 total_token_count;
|
||||
};
|
||||
|
||||
typedef struct TokenArray TokenArray;
|
||||
struct TokenArray
|
||||
{
|
||||
Token* v;
|
||||
U64 count;
|
||||
Token* v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@@ -117,208 +115,217 @@ struct TokenArray
|
||||
|
||||
typedef enum NodeKind
|
||||
{
|
||||
NodeKind_Nil,
|
||||
NodeKind_File,
|
||||
NodeKind_ErrorMarker,
|
||||
NodeKind_Main,
|
||||
NodeKind_Tag,
|
||||
NodeKind_List,
|
||||
NodeKind_Reference,
|
||||
NodeKind_COUNT
|
||||
NodeKind_Nil,
|
||||
NodeKind_File,
|
||||
NodeKind_ErrorMarker,
|
||||
NodeKind_Main,
|
||||
NodeKind_Tag,
|
||||
NodeKind_List,
|
||||
NodeKind_Reference,
|
||||
NodeKind_COUNT
|
||||
}
|
||||
NodeKind;
|
||||
|
||||
typedef U32 NodeFlags;
|
||||
enum
|
||||
{
|
||||
NodeFlag_MaskSetDelimiters = (0x3F<<0),
|
||||
NodeFlag_HasParenLeft = (1<<0),
|
||||
NodeFlag_HasParenRight = (1<<1),
|
||||
NodeFlag_HasBracketLeft = (1<<2),
|
||||
NodeFlag_HasBracketRight = (1<<3),
|
||||
NodeFlag_HasBraceLeft = (1<<4),
|
||||
NodeFlag_HasBraceRight = (1<<5),
|
||||
|
||||
NodeFlag_MaskSeparators = (0xF<<6),
|
||||
NodeFlag_IsBeforeSemicolon = (1<<6),
|
||||
NodeFlag_IsAfterSemicolon = (1<<7),
|
||||
NodeFlag_IsBeforeComma = (1<<8),
|
||||
NodeFlag_IsAfterComma = (1<<9),
|
||||
|
||||
NodeFlag_MaskStringDelimiters = (0xF<<10),
|
||||
NodeFlag_StringSingleQuote = (1<<10),
|
||||
NodeFlag_StringDoubleQuote = (1<<11),
|
||||
NodeFlag_StringTick = (1<<12),
|
||||
NodeFlag_StringTriplet = (1<<13),
|
||||
|
||||
NodeFlag_MaskLabelKind = (0xF<<14),
|
||||
NodeFlag_Numeric = (1<<14),
|
||||
NodeFlag_Identifier = (1<<15),
|
||||
NodeFlag_StringLiteral = (1<<16),
|
||||
NodeFlag_Symbol = (1<<17),
|
||||
NodeFlag_MaskSetDelimiters = (0x3F<<0),
|
||||
NodeFlag_HasParenLeft = (1<<0),
|
||||
NodeFlag_HasParenRight = (1<<1),
|
||||
NodeFlag_HasBracketLeft = (1<<2),
|
||||
NodeFlag_HasBracketRight = (1<<3),
|
||||
NodeFlag_HasBraceLeft = (1<<4),
|
||||
NodeFlag_HasBraceRight = (1<<5),
|
||||
|
||||
NodeFlag_MaskSeparators = (0xF<<6),
|
||||
NodeFlag_IsBeforeSemicolon = (1<<6),
|
||||
NodeFlag_IsAfterSemicolon = (1<<7),
|
||||
NodeFlag_IsBeforeComma = (1<<8),
|
||||
NodeFlag_IsAfterComma = (1<<9),
|
||||
|
||||
NodeFlag_MaskStringDelimiters = (0xF<<10),
|
||||
NodeFlag_StringSingleQuote = (1<<10),
|
||||
NodeFlag_StringDoubleQuote = (1<<11),
|
||||
NodeFlag_StringTick = (1<<12),
|
||||
NodeFlag_StringTriplet = (1<<13),
|
||||
|
||||
NodeFlag_MaskLabelKind = (0xF<<14),
|
||||
NodeFlag_Numeric = (1<<14),
|
||||
NodeFlag_Identifier = (1<<15),
|
||||
NodeFlag_StringLiteral = (1<<16),
|
||||
NodeFlag_Symbol = (1<<17),
|
||||
};
|
||||
#define NodeFlag_AfterFromBefore(f) ((f) << 1)
|
||||
|
||||
typedef struct MD_Node MD_Node;
|
||||
struct MD_Node
|
||||
typedef struct Node Node;
|
||||
struct Node
|
||||
{
|
||||
// rjf: tree links
|
||||
MD_Node *next;
|
||||
MD_Node *prev;
|
||||
MD_Node *parent;
|
||||
MD_Node *first;
|
||||
MD_Node *last;
|
||||
|
||||
// rjf: tag links
|
||||
MD_Node *first_tag;
|
||||
MD_Node *last_tag;
|
||||
|
||||
// rjf: node info
|
||||
MD_NodeKind kind;
|
||||
MD_NodeFlags flags;
|
||||
String8 string;
|
||||
String8 raw_string;
|
||||
|
||||
// rjf: source code info
|
||||
U64 src_offset;
|
||||
|
||||
// rjf: user-controlled generation number
|
||||
//
|
||||
// (unused by mdesk layer, but can be used by usage code to use MD_Node trees
|
||||
// in a "retained mode" way, where stable generational handles can be formed
|
||||
// to nodes)
|
||||
U64 user_gen;
|
||||
|
||||
// rjf: extra padding to 128 bytes
|
||||
U64 _unused_[2];
|
||||
// rjf: tree links
|
||||
Node* next;
|
||||
Node* prev;
|
||||
Node* parent;
|
||||
Node* first;
|
||||
Node* last;
|
||||
|
||||
// rjf: tag links
|
||||
Node* first_tag;
|
||||
Node* last_tag;
|
||||
|
||||
// rjf: node info
|
||||
NodeKind kind;
|
||||
NodeFlags flags;
|
||||
String8 string;
|
||||
String8 raw_string;
|
||||
|
||||
// rjf: source code info
|
||||
U64 src_offset;
|
||||
|
||||
// rjf: user-controlled generation number
|
||||
//
|
||||
// (unused by mdesk layer, but can be used by usage code to use Node trees
|
||||
// in a "retained mode" way, where stable generational handles can be formed
|
||||
// to nodes)
|
||||
U64 user_gen;
|
||||
|
||||
// rjf: extra padding to 128 bytes
|
||||
U64 _unused_[2];
|
||||
};
|
||||
|
||||
typedef struct MD_NodeRec MD_NodeRec;
|
||||
struct MD_NodeRec
|
||||
typedef struct NodeRec NodeRec;
|
||||
struct NodeRec
|
||||
{
|
||||
MD_Node *next;
|
||||
S32 push_count;
|
||||
S32 pop_count;
|
||||
Node* next;
|
||||
S32 push_count;
|
||||
S32 pop_count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Text -> Tokens Types
|
||||
|
||||
typedef struct MD_TokenizeResult MD_TokenizeResult;
|
||||
struct MD_TokenizeResult
|
||||
typedef struct TokenizeResult TokenizeResult;
|
||||
struct TokenizeResult
|
||||
{
|
||||
MD_TokenArray tokens;
|
||||
MD_MsgList msgs;
|
||||
TokenArray tokens;
|
||||
MsgList msgs;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Tokens -> Tree Types
|
||||
|
||||
typedef struct MD_ParseResult MD_ParseResult;
|
||||
struct MD_ParseResult
|
||||
typedef struct ParseResult ParseResult;
|
||||
struct ParseResult
|
||||
{
|
||||
MD_Node *root;
|
||||
MD_MsgList msgs;
|
||||
Node* root;
|
||||
MsgList msgs;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
global read_only MD_Node md_nil_node =
|
||||
inline Node*
|
||||
nil_node()
|
||||
{
|
||||
&md_nil_node,
|
||||
&md_nil_node,
|
||||
&md_nil_node,
|
||||
&md_nil_node,
|
||||
&md_nil_node,
|
||||
&md_nil_node,
|
||||
&md_nil_node,
|
||||
};
|
||||
read_only thread_local local_persist
|
||||
nil = {
|
||||
&nil,
|
||||
&nil,
|
||||
&nil,
|
||||
&nil,
|
||||
&nil,
|
||||
&nil,
|
||||
&nil,
|
||||
};
|
||||
return &nil;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Message Type Functions
|
||||
|
||||
internal void md_msg_list_push(Arena *arena, MD_MsgList *msgs, MD_Node *node, MD_MsgKind kind, String8 string);
|
||||
internal void md_msg_list_pushf(Arena *arena, MD_MsgList *msgs, MD_Node *node, MD_MsgKind kind, char *fmt, ...);
|
||||
internal void md_msg_list_concat_in_place(MD_MsgList *dst, MD_MsgList *to_push);
|
||||
internal void md_msg_list_push (Arena* arena, MsgList* msgs, Node* node, MsgKind kind, String8 string);
|
||||
internal void md_msg_list_pushf(Arena* arena, MsgList* msgs, Node* node, MsgKind kind, char *fmt, ...);
|
||||
|
||||
internal void md_msg_list_concat_in_place(MsgList* dst, MsgList* to_push);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Token Type Functions
|
||||
|
||||
internal MD_Token md_token_make(Rng1U64 range, TokenFlags flags);
|
||||
internal B32 md_token_match(MD_Token a, MD_Token b);
|
||||
internal String8List md_string_list_from_token_flags(Arena *arena, TokenFlags flags);
|
||||
internal void md_token_chunk_list_push(Arena *arena, MD_TokenChunkList *list, U64 cap, MD_Token token);
|
||||
internal MD_TokenArray md_token_array_from_chunk_list(Arena *arena, MD_TokenChunkList *chunks);
|
||||
internal String8 md_content_string_from_token_flags_str8(TokenFlags flags, String8 string);
|
||||
internal Token md_token_make (Rng1U64 range, TokenFlags flags);
|
||||
internal B32 md_token_match (Token a, Token b);
|
||||
internal String8List md_string_list_from_token_flags (Arena *arena, TokenFlags flags);
|
||||
internal void md_token_chunk_list_push (Arena *arena, TokenChunkList *list, U64 cap, Token token);
|
||||
internal TokenArray md_token_array_from_chunk_list (Arena *arena, TokenChunkList *chunks);
|
||||
internal String8 md_content_string_from_token_flags_str8(TokenFlags flags, String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Node Type Functions
|
||||
|
||||
//- rjf: flag conversions
|
||||
internal MD_NodeFlags md_node_flags_from_token_flags(TokenFlags flags);
|
||||
internal NodeFlags md_node_flags_from_token_flags(TokenFlags flags);
|
||||
|
||||
//- rjf: nil
|
||||
internal B32 md_node_is_nil(MD_Node *node);
|
||||
internal B32 md_node_is_nil(Node *node);
|
||||
|
||||
//- rjf: iteration
|
||||
#define MD_EachNode(it, first) (MD_Node *it = first; !md_node_is_nil(it); it = it->next)
|
||||
internal MD_NodeRec md_node_rec_depth_first(MD_Node *node, MD_Node *subtree_root, U64 child_off, U64 sib_off);
|
||||
#define md_node_rec_depth_first_pre(node, subtree_root) md_node_rec_depth_first((node), (subtree_root), OffsetOf(MD_Node, first), OffsetOf(MD_Node, next))
|
||||
#define md_node_rec_depth_first_pre_rev(node, subtree_root) md_node_rec_depth_first((node), (subtree_root), OffsetOf(MD_Node, last), OffsetOf(MD_Node, prev))
|
||||
#define MD_EachNode(it, first) (Node *it = first; !md_node_is_nil(it); it = it->next)
|
||||
|
||||
internal NodeRec node_rec_depth_first(Node *node, Node *subtree_root, U64 child_off, U64 sib_off);
|
||||
|
||||
#define node_rec_depth_first_pre(node, subtree_root) node_rec_depth_first((node), (subtree_root), offset_of(Node, first), offset_of(Node, next))
|
||||
#define node_rec_depth_first_pre_rev(node, subtree_root) node_rec_depth_first((node), (subtree_root), offset_of(Node, last), offset_of(Node, prev))
|
||||
|
||||
//- rjf: tree building
|
||||
internal MD_Node* md_push_node(Arena *arena, MD_NodeKind kind, MD_NodeFlags flags, String8 string, String8 raw_string, U64 src_offset);
|
||||
internal void md_node_insert_tag(MD_Node *parent, MD_Node *prev_child, MD_Node *node);
|
||||
internal void md_node_insert_child(MD_Node *parent, MD_Node *prev_child, MD_Node *node);
|
||||
internal void md_node_push_child(MD_Node *parent, MD_Node *node);
|
||||
internal void md_node_push_tag(MD_Node *parent, MD_Node *node);
|
||||
internal void md_unhook(MD_Node *node);
|
||||
internal Node* md_push_node (Arena *arena, NodeKind kind, NodeFlags flags, String8 string, String8 raw_string, U64 src_offset);
|
||||
internal void md_node_insert_tag (Node *parent, Node *prev_child, Node *node);
|
||||
internal void md_node_insert_child(Node *parent, Node *prev_child, Node *node);
|
||||
internal void md_node_push_child (Node *parent, Node *node);
|
||||
internal void md_node_push_tag (Node *parent, Node *node);
|
||||
internal void md_unhook (Node *node);
|
||||
|
||||
//- rjf: tree introspection
|
||||
internal MD_Node * md_node_from_chain_string(MD_Node *first, MD_Node *opl, String8 string, StringMatchFlags flags);
|
||||
internal MD_Node * md_node_from_chain_index(MD_Node *first, MD_Node *opl, U64 index);
|
||||
internal MD_Node * md_node_from_chain_flags(MD_Node *first, MD_Node *opl, MD_NodeFlags flags);
|
||||
internal U64 md_index_from_node(MD_Node *node);
|
||||
internal MD_Node * md_root_from_node(MD_Node *node);
|
||||
internal MD_Node * md_child_from_string(MD_Node *node, String8 child_string, StringMatchFlags flags);
|
||||
internal MD_Node * md_tag_from_string(MD_Node *node, String8 tag_string, StringMatchFlags flags);
|
||||
internal MD_Node * md_child_from_index(MD_Node *node, U64 index);
|
||||
internal MD_Node * md_tag_from_index(MD_Node *node, U64 index);
|
||||
internal MD_Node * md_tag_arg_from_index(MD_Node *node, String8 tag_string, StringMatchFlags flags, U64 index);
|
||||
internal MD_Node * md_tag_arg_from_string(MD_Node *node, String8 tag_string, StringMatchFlags tag_str_flags, String8 arg_string, StringMatchFlags arg_str_flags);
|
||||
internal B32 md_node_has_child(MD_Node *node, String8 string, StringMatchFlags flags);
|
||||
internal B32 md_node_has_tag(MD_Node *node, String8 string, StringMatchFlags flags);
|
||||
internal U64 md_child_count_from_node(MD_Node *node);
|
||||
internal U64 md_tag_count_from_node(MD_Node *node);
|
||||
internal String8 md_string_from_children(Arena *arena, MD_Node *root);
|
||||
internal Node* md_node_from_chain_string(Node *first, Node *opl, String8 string, StringMatchFlags flags);
|
||||
internal Node* md_node_from_chain_index (Node *first, Node *opl, U64 index);
|
||||
internal Node* md_node_from_chain_flags (Node *first, Node *opl, NodeFlags flags);
|
||||
internal U64 md_index_from_node (Node *node);
|
||||
internal Node* md_root_from_node (Node *node);
|
||||
internal Node* md_child_from_string (Node *node, String8 child_string, StringMatchFlags flags);
|
||||
internal Node* md_tag_from_string (Node *node, String8 tag_string, StringMatchFlags flags);
|
||||
internal Node* md_child_from_index (Node *node, U64 index);
|
||||
internal Node* md_tag_from_index (Node *node, U64 index);
|
||||
internal Node* md_tag_arg_from_index (Node *node, String8 tag_string, StringMatchFlags flags, U64 index);
|
||||
internal Node* md_tag_arg_from_string (Node *node, String8 tag_string, StringMatchFlags tag_str_flags, String8 arg_string, StringMatchFlags arg_str_flags);
|
||||
internal B32 md_node_has_child (Node *node, String8 string, StringMatchFlags flags);
|
||||
internal B32 md_node_has_tag (Node *node, String8 string, StringMatchFlags flags);
|
||||
internal U64 md_child_count_from_node (Node *node);
|
||||
internal U64 md_tag_count_from_node (Node *node);
|
||||
|
||||
internal String8 md_string_from_children (Arena *arena, Node *root);
|
||||
|
||||
//- rjf: tree comparison
|
||||
internal B32 md_tree_match(MD_Node *a, MD_Node *b, StringMatchFlags flags);
|
||||
internal B32 md_node_match(MD_Node *a, MD_Node *b, StringMatchFlags flags);
|
||||
internal B32 md_tree_match(Node *a, Node *b, StringMatchFlags flags);
|
||||
internal B32 md_node_match(Node *a, Node *b, StringMatchFlags flags);
|
||||
|
||||
//- rjf: tree duplication
|
||||
internal MD_Node *md_tree_copy(Arena *arena, MD_Node *src_root);
|
||||
// MD_Node* tree_copy_arena(MD_Node* src_root, Arena* arena);
|
||||
// MD_Node* tree_copy_ainfo(MD_Node* src_root, AllocatorInfo info);
|
||||
internal Node* md_tree_copy(Arena *arena, Node *src_root);
|
||||
// Node* tree_copy_arena(Node* src_root, Arena* arena);
|
||||
// Node* tree_copy_ainfo(Node* src_root, AllocatorInfo info);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Text -> Tokens Functions
|
||||
|
||||
internal MD_TokenizeResult md_tokenize_from_text(Arena *arena, String8 text);
|
||||
internal TokenizeResult md_tokenize_from_text(Arena *arena, String8 text);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Tokens -> Tree Functions
|
||||
|
||||
internal MD_ParseResult md_parse_from_text_tokens(Arena *arena, String8 filename, String8 text, MD_TokenArray tokens);
|
||||
internal ParseResult md_parse_from_text_tokens(Arena *arena, String8 filename, String8 text, TokenArray tokens);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Bundled Text -> Tree Functions
|
||||
|
||||
internal MD_ParseResult md_parse_from_text(Arena *arena, String8 filename, String8 text);
|
||||
internal ParseResult md_parse_from_text(Arena *arena, String8 filename, String8 text);
|
||||
#define md_tree_from_string(arena, string) (md_parse_from_text((arena), str8_zero(), (string)).root)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Tree -> Text Functions
|
||||
|
||||
internal String8List md_debug_string_list_from_tree(Arena *arena, MD_Node *root);
|
||||
internal String8List md_debug_string_list_from_tree(Arena *arena, Node *root);
|
||||
|
||||
+30
-30
@@ -354,7 +354,7 @@ mg_map_insert_ptr(Arena *arena, MG_Map *map, String8 string, void *val)
|
||||
//~ rjf: String Expression Parsing
|
||||
|
||||
internal MG_StrExpr *
|
||||
mg_push_str_expr(Arena *arena, MG_StrExprOp op, MD_Node *node)
|
||||
mg_push_str_expr(Arena *arena, MG_StrExprOp op, Node *node)
|
||||
{
|
||||
MG_StrExpr *expr = push_array(arena, MG_StrExpr, 1);
|
||||
MemoryCopyStruct(expr, &mg_str_expr_nil);
|
||||
@@ -364,11 +364,11 @@ mg_push_str_expr(Arena *arena, MG_StrExprOp op, MD_Node *node)
|
||||
}
|
||||
|
||||
internal MG_StrExprParseResult
|
||||
mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, MD_Node *first, MD_Node *opl, S8 min_prec)
|
||||
mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, Node *first, Node *opl, S8 min_prec)
|
||||
{
|
||||
MG_StrExprParseResult parse = {&mg_str_expr_nil};
|
||||
{
|
||||
MD_Node *it = first;
|
||||
Node *it = first;
|
||||
|
||||
//- rjf: consume prefix operators
|
||||
MG_StrExpr *leafmost_op = &mg_str_expr_nil;
|
||||
@@ -407,7 +407,7 @@ mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, MD_Node *first, MD_Node
|
||||
//- rjf: parse atom
|
||||
{
|
||||
MG_StrExpr *atom = &mg_str_expr_nil;
|
||||
if(it->flags & (MD_NodeFlag_Identifier|MD_NodeFlag_Numeric|MD_NodeFlag_StringLiteral) &&
|
||||
if(it->flags & (NodeFlag_Identifier|NodeFlag_Numeric|NodeFlag_StringLiteral) &&
|
||||
md_node_is_nil(it->first))
|
||||
{
|
||||
atom = mg_push_str_expr(arena, MG_StrExprOp_Null, it);
|
||||
@@ -415,7 +415,7 @@ mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, MD_Node *first, MD_Node
|
||||
}
|
||||
else if(!md_node_is_nil(it->first))
|
||||
{
|
||||
MG_StrExprParseResult subparse = mg_str_expr_parse_from_first_opl__min_prec(arena, it->first, &md_nil_node, 0);
|
||||
MG_StrExprParseResult subparse = mg_str_expr_parse_from_first_opl__min_prec(arena, it->first, &nil_node(), 0);
|
||||
atom = subparse.root;
|
||||
md_msg_list_concat_in_place(&parse.msgs, &subparse.msgs);
|
||||
it = it->next;
|
||||
@@ -471,7 +471,7 @@ mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, MD_Node *first, MD_Node
|
||||
md_msg_list_concat_in_place(&parse.msgs, &subparse.msgs);
|
||||
if(subparse.root == &mg_str_expr_nil)
|
||||
{
|
||||
md_msg_list_pushf(arena, &parse.msgs, it, MD_MsgKind_Error, "Missing right-hand-side of '%S'.", mg_str_expr_op_symbol_string_table[found_op]);
|
||||
md_msg_list_pushf(arena, &parse.msgs, it, MsgKind_Error, "Missing right-hand-side of '%S'.", mg_str_expr_op_symbol_string_table[found_op]);
|
||||
}
|
||||
it = subparse.next_node;
|
||||
}
|
||||
@@ -483,16 +483,16 @@ mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, MD_Node *first, MD_Node
|
||||
}
|
||||
|
||||
internal MG_StrExprParseResult
|
||||
mg_str_expr_parse_from_first_opl(Arena *arena, MD_Node *first, MD_Node *opl)
|
||||
mg_str_expr_parse_from_first_opl(Arena *arena, Node *first, Node *opl)
|
||||
{
|
||||
MG_StrExprParseResult parse = mg_str_expr_parse_from_first_opl__min_prec(arena, first, opl, 0);
|
||||
return parse;
|
||||
}
|
||||
|
||||
internal MG_StrExprParseResult
|
||||
mg_str_expr_parse_from_root(Arena *arena, MD_Node *root)
|
||||
mg_str_expr_parse_from_root(Arena *arena, Node *root)
|
||||
{
|
||||
MG_StrExprParseResult parse = mg_str_expr_parse_from_first_opl__min_prec(arena, root->first, &md_nil_node, 0);
|
||||
MG_StrExprParseResult parse = mg_str_expr_parse_from_first_opl__min_prec(arena, root->first, &nil_node(), 0);
|
||||
return parse;
|
||||
}
|
||||
|
||||
@@ -504,16 +504,16 @@ mg_node_array_make(Arena *arena, U64 count)
|
||||
{
|
||||
MG_NodeArray result = {0};
|
||||
result.count = count;
|
||||
result.v = push_array(arena, MD_Node *, result.count);
|
||||
result.v = push_array(arena, Node *, result.count);
|
||||
for(U64 idx = 0; idx < result.count; idx += 1)
|
||||
{
|
||||
result.v[idx] = &md_nil_node;
|
||||
result.v[idx] = &nil_node();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal MG_NodeArray
|
||||
mg_child_array_from_node(Arena *arena, MD_Node *node)
|
||||
mg_child_array_from_node(Arena *arena, Node *node)
|
||||
{
|
||||
MG_NodeArray children = mg_node_array_make(arena, md_child_count_from_node(node));
|
||||
U64 idx = 0;
|
||||
@@ -526,7 +526,7 @@ mg_child_array_from_node(Arena *arena, MD_Node *node)
|
||||
}
|
||||
|
||||
internal MG_NodeGrid
|
||||
mg_node_grid_make_from_node(Arena *arena, MD_Node *root)
|
||||
mg_node_grid_make_from_node(Arena *arena, Node *root)
|
||||
{
|
||||
MG_NodeGrid grid = {0};
|
||||
|
||||
@@ -593,10 +593,10 @@ mg_column_from_index(Arena *arena, MG_NodeGrid grid, U64 index)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal MD_Node *
|
||||
internal Node *
|
||||
mg_node_from_grid_xy(MG_NodeGrid grid, U64 x, U64 y)
|
||||
{
|
||||
MD_Node *result = &md_nil_node;
|
||||
Node *result = &nil_node();
|
||||
U64 idx = x*grid.x_stride + y*grid.y_stride;
|
||||
if(0 <= idx && idx < grid.cells.count)
|
||||
{
|
||||
@@ -616,7 +616,7 @@ mg_column_desc_array_make(Arena *arena, U64 count, MG_ColumnDesc *descs)
|
||||
}
|
||||
|
||||
internal MG_ColumnDescArray
|
||||
mg_column_desc_array_from_tag(Arena *arena, MD_Node *tag)
|
||||
mg_column_desc_array_from_tag(Arena *arena, Node *tag)
|
||||
{
|
||||
MG_ColumnDescArray result = {0};
|
||||
result.count = md_child_count_from_node(tag);
|
||||
@@ -657,7 +657,7 @@ mg_column_index_from_name(MG_ColumnDescArray descs, String8 name)
|
||||
}
|
||||
|
||||
internal String8
|
||||
mg_string_from_row_desc_idx(MD_Node *row_parent, MG_ColumnDescArray descs, U64 idx)
|
||||
mg_string_from_row_desc_idx(Node *row_parent, MG_ColumnDescArray descs, U64 idx)
|
||||
{
|
||||
String8 result = {0};
|
||||
|
||||
@@ -686,21 +686,21 @@ mg_string_from_row_desc_idx(MD_Node *row_parent, MG_ColumnDescArray descs, U64 i
|
||||
cell_idx -= 1;
|
||||
}
|
||||
}
|
||||
MD_Node *node = md_child_from_index(row_parent, cell_idx);
|
||||
Node *node = md_child_from_index(row_parent, cell_idx);
|
||||
result = node->string;
|
||||
}break;
|
||||
|
||||
case MG_ColumnKind_CheckForTag:
|
||||
{
|
||||
String8 tag_name = desc->name;
|
||||
MD_Node *tag = md_tag_from_string(row_parent, tag_name, 0);
|
||||
Node *tag = md_tag_from_string(row_parent, tag_name, 0);
|
||||
result = md_node_is_nil(tag) ? str8_lit("0") : str8_lit("1");
|
||||
}break;
|
||||
|
||||
case MG_ColumnKind_TagChild:
|
||||
{
|
||||
String8 tag_name = desc->tag_name;
|
||||
MD_Node *tag = md_tag_from_string(row_parent, tag_name, 0);
|
||||
Node *tag = md_tag_from_string(row_parent, tag_name, 0);
|
||||
result = tag->first->string;
|
||||
}break;
|
||||
}
|
||||
@@ -836,9 +836,9 @@ mg_eval_table_expand_expr__string(Arena *arena, MG_StrExpr *expr, MG_TableExpand
|
||||
{
|
||||
// rjf: grab left/right
|
||||
MG_StrExpr *left_expr = expr->left;
|
||||
MD_Node *left_node = left_expr->node;
|
||||
Node *left_node = left_expr->node;
|
||||
MG_StrExpr *right_expr = expr->right;
|
||||
MD_Node *right_node = right_expr->node;
|
||||
Node *right_node = right_expr->node;
|
||||
|
||||
// rjf: grab table name (LHS of .) and column lookup string (RHS of .)
|
||||
String8 expand_label = left_node->string;
|
||||
@@ -862,7 +862,7 @@ mg_eval_table_expand_expr__string(Arena *arena, MG_StrExpr *expr, MG_TableExpand
|
||||
}
|
||||
|
||||
// rjf: grab row parent
|
||||
MD_Node *row_parent = &md_nil_node;
|
||||
Node *row_parent = &nil_node();
|
||||
if(grid && (0 <= row_idx && row_idx < grid->row_parents.count))
|
||||
{
|
||||
row_parent = grid->row_parents.v[row_idx];
|
||||
@@ -880,13 +880,13 @@ mg_eval_table_expand_expr__string(Arena *arena, MG_StrExpr *expr, MG_TableExpand
|
||||
else
|
||||
{
|
||||
// NOTE(rjf): numeric column lookup (column index)
|
||||
if(right_node->flags & MD_NodeFlag_Numeric)
|
||||
if(right_node->flags & NodeFlag_Numeric)
|
||||
{
|
||||
try_u64_from_str8_c_rules(column_lookup, &column_idx);
|
||||
}
|
||||
|
||||
// NOTE(rjf): string column lookup (column name)
|
||||
if(right_node->flags & (MD_NodeFlag_Identifier|MD_NodeFlag_StringLiteral))
|
||||
if(right_node->flags & (NodeFlag_Identifier|NodeFlag_StringLiteral))
|
||||
{
|
||||
column_idx = mg_column_index_from_name(column_descs, column_lookup);
|
||||
}
|
||||
@@ -999,8 +999,8 @@ mg_loop_table_column_expansion(Arena *arena, String8 strexpr, MG_TableExpandInfo
|
||||
}
|
||||
}
|
||||
String8 expr_string = str8_substr(string, expr_range);
|
||||
MD_TokenizeResult expr_tokenize = md_tokenize_from_text(scratch.arena, expr_string);
|
||||
MD_ParseResult expr_base_parse = md_parse_from_text_tokens(scratch.arena, str8_lit(""), expr_string, expr_tokenize.tokens);
|
||||
TokenizeResult expr_tokenize = md_tokenize_from_text(scratch.arena, expr_string);
|
||||
ParseResult expr_base_parse = md_parse_from_text_tokens(scratch.arena, str8_lit(""), expr_string, expr_tokenize.tokens);
|
||||
MG_StrExprParseResult expr_parse = mg_str_expr_parse_from_root(scratch.arena, expr_base_parse.root->first);
|
||||
mg_eval_table_expand_expr__string(arena, expr_parse.root, info, &expansion_strs);
|
||||
char_idx = start = char_idx + 1 + expr_range.max;
|
||||
@@ -1022,7 +1022,7 @@ mg_loop_table_column_expansion(Arena *arena, String8 strexpr, MG_TableExpandInfo
|
||||
}
|
||||
|
||||
internal String8List
|
||||
mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_column_desc_map, String8 fallback, MD_Node *gen)
|
||||
mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_column_desc_map, String8 fallback, Node *gen)
|
||||
{
|
||||
String8List result = {0};
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
@@ -1041,8 +1041,8 @@ mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_co
|
||||
if(str8_match(tag->string, str8_lit("expand"), 0))
|
||||
{
|
||||
// rjf: grab args for this expansion
|
||||
MD_Node *table_name_node = md_child_from_index(tag, 0);
|
||||
MD_Node *expand_label_node = md_child_from_index(tag, 1);
|
||||
Node *table_name_node = md_child_from_index(tag, 0);
|
||||
Node *expand_label_node = md_child_from_index(tag, 1);
|
||||
String8 table_name = table_name_node->string;
|
||||
String8 expand_label = expand_label_node->string;
|
||||
|
||||
|
||||
+15
-15
@@ -36,7 +36,7 @@ struct MG_MsgList
|
||||
typedef struct MG_FileParse MG_FileParse;
|
||||
struct MG_FileParse
|
||||
{
|
||||
MD_Node *root;
|
||||
Node *root;
|
||||
};
|
||||
|
||||
typedef struct MG_FileParseNode MG_FileParseNode;
|
||||
@@ -133,15 +133,15 @@ struct MG_StrExpr
|
||||
MG_StrExpr *left;
|
||||
MG_StrExpr *right;
|
||||
MG_StrExprOp op;
|
||||
MD_Node *node;
|
||||
Node *node;
|
||||
};
|
||||
|
||||
typedef struct MG_StrExprParseResult MG_StrExprParseResult;
|
||||
struct MG_StrExprParseResult
|
||||
{
|
||||
MG_StrExpr *root;
|
||||
MD_MsgList msgs;
|
||||
MD_Node *next_node;
|
||||
MsgList msgs;
|
||||
Node *next_node;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@@ -150,7 +150,7 @@ struct MG_StrExprParseResult
|
||||
typedef struct MG_NodeArray MG_NodeArray;
|
||||
struct MG_NodeArray
|
||||
{
|
||||
MD_Node **v;
|
||||
Node **v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
@@ -295,30 +295,30 @@ internal void mg_map_insert_ptr(Arena *arena, MG_Map *map, String8 string, void
|
||||
////////////////////////////////
|
||||
//~ rjf: String Expression Parsing
|
||||
|
||||
internal MG_StrExpr *mg_push_str_expr(Arena *arena, MG_StrExprOp op, MD_Node *node);
|
||||
internal MG_StrExprParseResult mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, MD_Node *first, MD_Node *opl, S8 min_prec);
|
||||
internal MG_StrExprParseResult mg_str_expr_parse_from_first_opl(Arena *arena, MD_Node *first, MD_Node *opl);
|
||||
internal MG_StrExprParseResult mg_str_expr_parse_from_root(Arena *arena, MD_Node *root);
|
||||
internal MG_StrExpr *mg_push_str_expr(Arena *arena, MG_StrExprOp op, Node *node);
|
||||
internal MG_StrExprParseResult mg_str_expr_parse_from_first_opl__min_prec(Arena *arena, Node *first, Node *opl, S8 min_prec);
|
||||
internal MG_StrExprParseResult mg_str_expr_parse_from_first_opl(Arena *arena, Node *first, Node *opl);
|
||||
internal MG_StrExprParseResult mg_str_expr_parse_from_root(Arena *arena, Node *root);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Table Generation Functions
|
||||
|
||||
internal MG_NodeArray mg_node_array_make(Arena *arena, U64 count);
|
||||
internal MG_NodeArray mg_child_array_from_node(Arena *arena, MD_Node *node);
|
||||
internal MG_NodeGrid mg_node_grid_make_from_node(Arena *arena, MD_Node *root);
|
||||
internal MG_NodeArray mg_child_array_from_node(Arena *arena, Node *node);
|
||||
internal MG_NodeGrid mg_node_grid_make_from_node(Arena *arena, Node *root);
|
||||
internal MG_NodeArray mg_row_from_index(MG_NodeGrid grid, U64 index);
|
||||
internal MG_NodeArray mg_column_from_index(Arena *arena, MG_NodeGrid grid, U64 index);
|
||||
internal MD_Node *mg_node_from_grid_xy(MG_NodeGrid grid, U64 x, U64 y);
|
||||
internal Node *mg_node_from_grid_xy(MG_NodeGrid grid, U64 x, U64 y);
|
||||
|
||||
internal MG_ColumnDescArray mg_column_desc_array_make(Arena *arena, U64 count, MG_ColumnDesc *descs);
|
||||
internal MG_ColumnDescArray mg_column_desc_array_from_tag(Arena *arena, MD_Node *tag);
|
||||
internal MG_ColumnDescArray mg_column_desc_array_from_tag(Arena *arena, Node *tag);
|
||||
internal U64 mg_column_index_from_name(MG_ColumnDescArray descs, String8 name);
|
||||
internal String8 mg_string_from_row_desc_idx(MD_Node *row_parent, MG_ColumnDescArray descs, U64 idx);
|
||||
internal String8 mg_string_from_row_desc_idx(Node *row_parent, MG_ColumnDescArray descs, U64 idx);
|
||||
|
||||
internal S64 mg_eval_table_expand_expr__numeric(MG_StrExpr *expr, MG_TableExpandInfo *info);
|
||||
internal void mg_eval_table_expand_expr__string(Arena *arena, MG_StrExpr *expr, MG_TableExpandInfo *info, String8List *out);
|
||||
internal void mg_loop_table_column_expansion(Arena *arena, String8 strexpr, MG_TableExpandInfo *info, MG_TableExpandTask *task, String8List *out);
|
||||
internal String8List mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_column_desc_map, String8 fallback, MD_Node *gen);
|
||||
internal String8List mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_column_desc_map, String8 fallback, Node *gen);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Layer Lookup Functions
|
||||
|
||||
+22
-22
@@ -92,9 +92,9 @@ entry_point(CmdLine *cmdline)
|
||||
if(str8_match(file_ext, str8_lit("mdesk"), 0))
|
||||
{
|
||||
String8 data = os_data_from_file_path(mg_arena, file_path);
|
||||
MD_TokenizeResult tokenize = md_tokenize_from_text(mg_arena, data);
|
||||
MD_ParseResult parse = md_parse_from_text_tokens(mg_arena, file_path, data, tokenize.tokens);
|
||||
for(MD_Msg *m = parse.msgs.first; m != 0; m = m->next)
|
||||
TokenizeResult tokenize = md_tokenize_from_text(mg_arena, data);
|
||||
ParseResult parse = md_parse_from_text_tokens(mg_arena, file_path, data, tokenize.tokens);
|
||||
for(Msg *m = parse.msgs.first; m != 0; m = m->next)
|
||||
{
|
||||
TxtPt pt = mg_txt_pt_from_string_off(data, m->node->src_offset);
|
||||
String8 msg_kind_string = {0};
|
||||
@@ -102,8 +102,8 @@ entry_point(CmdLine *cmdline)
|
||||
{
|
||||
default:{}break;
|
||||
case MD_MsgKind_Note: {msg_kind_string = str8_lit("note");}break;
|
||||
case MD_MsgKind_Warning: {msg_kind_string = str8_lit("warning");}break;
|
||||
case MD_MsgKind_Error: {msg_kind_string = str8_lit("error");}break;
|
||||
case MsgKind_Warning: {msg_kind_string = str8_lit("warning");}break;
|
||||
case MsgKind_Error: {msg_kind_string = str8_lit("error");}break;
|
||||
case MD_MsgKind_FatalError: {msg_kind_string = str8_lit("fatal error");}break;
|
||||
}
|
||||
String8 location = push_str8f(mg_arena, "%S:%I64d:%I64d", file_path, pt.line, pt.column);
|
||||
@@ -128,10 +128,10 @@ entry_point(CmdLine *cmdline)
|
||||
{
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
MD_Node *table_tag = md_tag_from_string(node, str8_lit("table"), 0);
|
||||
Node *table_tag = md_tag_from_string(node, str8_lit("table"), 0);
|
||||
if(!md_node_is_nil(table_tag))
|
||||
{
|
||||
MG_NodeGrid *table = push_array(mg_arena, MG_NodeGrid, 1);
|
||||
@@ -151,7 +151,7 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
MG_Layer *layer = mg_layer_from_key(layer_key);
|
||||
for MD_EachNode(node, file->first)
|
||||
@@ -219,10 +219,10 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("enum"), 0);
|
||||
Node *tag = md_tag_from_string(node, str8_lit("enum"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 enum_name = node->string;
|
||||
@@ -266,10 +266,10 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("xlist"), 0);
|
||||
Node *tag = md_tag_from_string(node, str8_lit("xlist"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
@@ -291,7 +291,7 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
if(md_node_has_tag(node, str8_lit("struct"), 0))
|
||||
@@ -316,10 +316,10 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("data"), 0);
|
||||
Node *tag = md_tag_from_string(node, str8_lit("data"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 element_type = tag->first->string;
|
||||
@@ -346,10 +346,10 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("enum2string_switch"), 0);
|
||||
Node *tag = md_tag_from_string(node, str8_lit("enum2string_switch"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 enum_type = tag->first->string;
|
||||
@@ -379,10 +379,10 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("gen"), 0);
|
||||
Node *tag = md_tag_from_string(node, str8_lit("gen"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
@@ -411,7 +411,7 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
if(md_node_has_tag(node, str8_lit("embed_string"), 0))
|
||||
@@ -445,14 +445,14 @@ entry_point(CmdLine *cmdline)
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
Node *file = n->v.root;
|
||||
for MD_EachNode(node, file->first)
|
||||
{
|
||||
//- rjf: generate markdown page
|
||||
if(md_node_has_tag(node, str8_lit("markdown"), 0))
|
||||
{
|
||||
String8List md_strs = {0};
|
||||
for(MD_Node *piece = node->first; !md_node_is_nil(piece); piece = piece->next)
|
||||
for(Node *piece = node->first; !md_node_is_nil(piece); piece = piece->next)
|
||||
{
|
||||
if(md_node_has_tag(piece, str8_lit("title"), 0))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user