mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-08 16:48:15 +00:00
Merge
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
CC=clang
|
||||
|
||||
# NOTE(mal): Silent pushd/popd
|
||||
pushd () {
|
||||
command pushd "$@" > /dev/null
|
||||
}
|
||||
popd () {
|
||||
command popd "$@" > /dev/null
|
||||
}
|
||||
|
||||
echo ~~~ Metadesk Build ~~~
|
||||
# TODO(mal): Review these warnings
|
||||
accepted_clang_warnings="-Wno-deprecated-declarations -Wno-pointer-sign -Wno-writable-strings -Wno-unknown-warning-option"
|
||||
compile_flags="-I../source/ $accepted_clang_warnings"
|
||||
|
||||
mkdir -p build
|
||||
pushd build
|
||||
echo
|
||||
echo ~~~ Build All Samples ~~~
|
||||
$CC $compile_flags ../samples/old_style_custom_layer.c -o old_style_custom_layer
|
||||
$CC $compile_flags ../samples/static_site_generator/static_site_generator.c -o static_site_generator
|
||||
$CC $compile_flags ../samples/output_parse/output_parse.c -o output_parse
|
||||
echo
|
||||
echo ~~~ Build All Tests ~~~
|
||||
$CC $compile_flags ../tests/sanity_tests.c -o sanity_tests
|
||||
$CC $compile_flags ../tests/unicode_test.c -o unicode_test
|
||||
clang++ $compile_flags ../tests/cpp_build_test.cpp
|
||||
popd
|
||||
|
||||
echo
|
||||
echo ~~~ Running Sanity Tests ~~~
|
||||
pushd build
|
||||
sanity_tests
|
||||
popd
|
||||
|
||||
echo
|
||||
echo ~~~ Running Static Site Generator Sample ~~~
|
||||
mkdir -p samples/static_site_generator/example_site/generated
|
||||
pushd samples/static_site_generator/example_site/generated
|
||||
../../../../build/static_site_generator --siteinfo ../site_info.md --pagedir ../
|
||||
popd
|
||||
|
||||
echo
|
||||
echo ~~~ Running Output Parse Sample ~~~
|
||||
mkdir -p samples/output_parse/examples/output
|
||||
pushd samples/output_parse/examples/output
|
||||
../../../../build/output_parse ../example.md ../example2.md
|
||||
popd
|
||||
@@ -0,0 +1,52 @@
|
||||
@echo off
|
||||
|
||||
echo ~~~ Metadesk Build ~~~
|
||||
rem TODO(mal): Review these warnings
|
||||
set accepted_clang_warnings=-Wno-deprecated-declarations -Wno-pointer-sign -Wno-writable-strings -Wno-unknown-warning-option
|
||||
set compile_flags=-I../source/ %accepted_clang_warnings%
|
||||
|
||||
if not exist build mkdir build
|
||||
pushd build
|
||||
echo.
|
||||
echo ~~~ Build All Samples ~~~
|
||||
clang %compile_flags% ..\samples\old_style_custom_layer.c -o old_style_custom_layer.exe
|
||||
clang %compile_flags% ..\samples\static_site_generator\static_site_generator.c -o static_site_generator.exe
|
||||
clang %compile_flags% ..\samples\output_parse\output_parse.c -o output_parse.exe
|
||||
echo.
|
||||
echo ~~~ Build All Tests ~~~
|
||||
clang %compile_flags% ..\tests\sanity_tests.c -o sanity_tests.exe
|
||||
clang %compile_flags% ..\tests\unicode_test.c -o unicode_test.exe
|
||||
clang++ %compile_flags% ..\tests\cpp_build_test.cpp -o cpp_build_test.exe
|
||||
popd
|
||||
|
||||
echo.
|
||||
echo ~~~ Running Sanity Tests ~~~
|
||||
pushd build
|
||||
sanity_tests.exe
|
||||
popd
|
||||
|
||||
echo.
|
||||
echo ~~~ Running Static Site Generator Sample ~~~
|
||||
pushd samples
|
||||
pushd static_site_generator
|
||||
pushd example_site
|
||||
if not exist generated mkdir generated
|
||||
pushd generated
|
||||
..\..\..\..\build\static_site_generator.exe --siteinfo ..\site_info.md --pagedir ..\
|
||||
popd
|
||||
popd
|
||||
popd
|
||||
popd
|
||||
|
||||
echo.
|
||||
echo ~~~ Running Output Parse Sample ~~~
|
||||
pushd samples
|
||||
pushd output_parse
|
||||
pushd examples
|
||||
if not exist output mkdir output
|
||||
pushd output
|
||||
..\..\..\..\build\output_parse.exe ..\example.md ..\example2.md
|
||||
popd
|
||||
popd
|
||||
popd
|
||||
popd
|
||||
+15
-8
@@ -991,7 +991,8 @@ MD_NodeTable_Insert(MD_NodeTable *table, MD_NodeTableCollisionRule collision_rul
|
||||
MD_FUNCTION_IMPL MD_Token
|
||||
MD_ZeroToken(void)
|
||||
{
|
||||
MD_Token token = {0};
|
||||
MD_Token token;
|
||||
_MD_MemoryZero(&token, sizeof(token));
|
||||
return token;
|
||||
}
|
||||
|
||||
@@ -1064,7 +1065,8 @@ MD_Parse_BumpNext(MD_ParseCtx *ctx)
|
||||
MD_FUNCTION_IMPL MD_Token
|
||||
MD_Parse_LexNext(MD_ParseCtx *ctx)
|
||||
{
|
||||
MD_Token token = {0};
|
||||
MD_Token token;
|
||||
_MD_MemoryZero(&token, sizeof(token));
|
||||
|
||||
MD_u8 *one_past_last = ctx->file_contents.str + ctx->file_contents.size;
|
||||
MD_u8 *first = ctx->at;
|
||||
@@ -1239,7 +1241,8 @@ MD_Parse_PeekSkipSome(MD_ParseCtx *ctx, MD_TokenGroups skip_groups)
|
||||
MD_b32 skip_whitespace = (skip_groups & MD_TokenGroup_Whitespace);
|
||||
MD_b32 skip_regular = (skip_groups & MD_TokenGroup_Regular);
|
||||
|
||||
MD_Token result = {0};
|
||||
MD_Token result;
|
||||
_MD_MemoryZero(&result, sizeof(result));
|
||||
|
||||
loop:
|
||||
{
|
||||
@@ -1272,6 +1275,7 @@ MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string)
|
||||
int result = 0;
|
||||
|
||||
MD_Token token_any = MD_Parse_PeekSkipSome(ctx, 0);
|
||||
MD_Token token_regular;
|
||||
if(MD_StringMatch(token_any.string, string, 0))
|
||||
{
|
||||
result = 1;
|
||||
@@ -1279,7 +1283,7 @@ MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string)
|
||||
goto end;
|
||||
}
|
||||
|
||||
MD_Token token_regular = MD_Parse_PeekSkipSome(ctx, MD_TokenGroup_Comment|MD_TokenGroup_Whitespace);
|
||||
token_regular = MD_Parse_PeekSkipSome(ctx, MD_TokenGroup_Comment|MD_TokenGroup_Whitespace);
|
||||
if(MD_StringMatch(token_regular.string, string, 0))
|
||||
{
|
||||
result = 1;
|
||||
@@ -1396,7 +1400,8 @@ _MD_ParseOneNode(MD_ParseCtx *ctx)
|
||||
MD_ParseResult result = {0};
|
||||
result.node = MD_NilNode();
|
||||
|
||||
MD_Token token = {0};
|
||||
MD_Token token;
|
||||
_MD_MemoryZero(&token, sizeof(token));
|
||||
|
||||
MD_Node *first_tag = 0;
|
||||
MD_Node *last_tag = 0;
|
||||
@@ -1574,7 +1579,8 @@ _MD_ParseTagList(MD_ParseCtx *ctx, MD_Node **first_out, MD_Node **last_out)
|
||||
|
||||
for(;MD_Parse_Require(ctx, MD_S8Lit("@"));)
|
||||
{
|
||||
MD_Token name = {0};
|
||||
MD_Token name;
|
||||
_MD_MemoryZero(&name, sizeof(name));
|
||||
if(MD_Parse_RequireKind(ctx, MD_TokenKind_Identifier, &name))
|
||||
{
|
||||
MD_Node *tag = _MD_MakeNodeFromToken_Ctx(ctx, MD_NodeKind_Tag, name);
|
||||
@@ -1905,7 +1911,7 @@ MD_TagCountFromNodeAndString(MD_Node *node, MD_String8 string, MD_StringMatchFla
|
||||
MD_FUNCTION_IMPL void
|
||||
MD_NodeMessage(MD_Node *node, MD_MessageKind kind, MD_String8 str)
|
||||
{
|
||||
char *kind_name = kind == MD_MessageKind_Error ? "error" : "warning";
|
||||
const char *kind_name = kind == MD_MessageKind_Error ? "error" : "warning";
|
||||
MD_CodeLoc loc = MD_CodeLocFromNode(node);
|
||||
fprintf(stderr, "%.*s(%i:%i): %s: %.*s\n",
|
||||
MD_StringExpand(loc.filename),
|
||||
@@ -2267,12 +2273,13 @@ MD_PRIVATE_FUNCTION_IMPL MD_Expr *
|
||||
_MD_ParseExpr_(_MD_NodeParseCtx *ctx, int precedence_in)
|
||||
{
|
||||
MD_Expr *expr = _MD_ParseUnaryExpr(ctx);
|
||||
MD_ExprKind expr_kind;
|
||||
if(MD_ExprIsNil(expr))
|
||||
{
|
||||
goto end_parse;
|
||||
}
|
||||
|
||||
MD_ExprKind expr_kind = MD_BinaryExprKindFromNode(ctx->at);
|
||||
expr_kind = MD_BinaryExprKindFromNode(ctx->at);
|
||||
if(expr_kind != MD_ExprKind_Nil)
|
||||
{
|
||||
for(int precedence = MD_ExprPrecFromExprKind(expr_kind);
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ MD_MALLOC_Alloc(void *ctx, MD_u64 size)
|
||||
static void*
|
||||
MD_MALLOC_GetCtx(void)
|
||||
{
|
||||
return(MD_MALLOC_Alloc);
|
||||
return((void *)MD_MALLOC_Alloc);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+51
-3
@@ -1,9 +1,57 @@
|
||||
// LICENSE AT END OF FILE (MIT).
|
||||
|
||||
static MD_b32
|
||||
_MD_OS_IMPL_FileIter_Increment(MD_FileIter *it, MD_String8 path, MD_FileInfo *out_info)
|
||||
{
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define MD_IMPL_FileIterIncrement MD_POSIX_FileIterIncrement
|
||||
|
||||
static MD_b32
|
||||
MD_POSIX_FileIterIncrement(MD_FileIter *it, MD_String8 path, MD_FileInfo *out_info)
|
||||
{
|
||||
MD_b32 result = 0;
|
||||
|
||||
DIR *dir = (DIR *)(it->state);
|
||||
if(dir == 0)
|
||||
{
|
||||
dir = opendir((char*)path.str);
|
||||
}
|
||||
|
||||
struct dirent *dir_entry = 0;
|
||||
if(dir && (dir_entry = readdir(dir)))
|
||||
{
|
||||
out_info->filename = MD_PushStringF("%s", dir_entry->d_name);
|
||||
out_info->flags = 0;
|
||||
|
||||
if(path.size > 1 && path.str[path.size-1] == '/')
|
||||
{
|
||||
path.size -= 1;
|
||||
}
|
||||
MD_String8 cfile_path = MD_PushStringF("%.*s/%s", MD_StringExpand(path), dir_entry->d_name);
|
||||
|
||||
// NOTE(mal): On Linux, fstatat(2) would save us from doing path manipulation and avoid some race
|
||||
// conditions but we would need to make space for an extra directory file descriptor
|
||||
// inside MD_FileIter struct. We would also stop being POSIX-compliant.
|
||||
struct stat st;
|
||||
if(stat((char *)cfile_path.str, &st) == 0)
|
||||
{
|
||||
if((st.st_mode & S_IFMT) == S_IFDIR)
|
||||
{
|
||||
out_info->flags |= MD_FileFlag_Directory;
|
||||
}
|
||||
out_info->file_size = st.st_size;
|
||||
}
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
closedir(dir);
|
||||
dir = 0;
|
||||
result = 0;
|
||||
}
|
||||
|
||||
it->state = *(MD_u64 *)(&dir);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user