diff --git a/build.bat b/build.bat index 72825ee..b1fdaac 100644 --- a/build.bat +++ b/build.bat @@ -69,3 +69,9 @@ pushd build node_errors.exe %~dp0\samples\node_errors\node_errors.md popd +echo. +echo ~~~ Running C++ Sample ~~~ +pushd build +cpp_build_test.exe +popd + diff --git a/build_with_clang.bat b/build_with_clang.bat index 057d8a5..12a885f 100644 --- a/build_with_clang.bat +++ b/build_with_clang.bat @@ -5,21 +5,23 @@ 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% +set src=%cd% + 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 -clang %compile_flags% ..\samples\c_code_generation.c -o c_code_generation.exe -clang %compile_flags% ..\samples\node_errors\node_errors.c -o node_errors.exe +clang %compile_flags% %src%\samples\old_style_custom_layer.c -o old_style_custom_layer.exe +clang %compile_flags% %src%\samples\static_site_generator\static_site_generator.c -o static_site_generator.exe +clang %compile_flags% %src%\samples\output_parse\output_parse.c -o output_parse.exe +clang %compile_flags% %src%\samples\c_code_generation.c -o c_code_generation.exe +clang %compile_flags% %src%\samples\node_errors\node_errors.c -o node_errors.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 -clang %compile_flags% ..\tests\grammar.c -o grammar.exe +clang %compile_flags% %src%\tests\sanity_tests.c -o sanity_tests.exe +clang %compile_flags% %src%\tests\unicode_test.c -o unicode_test.exe +clang++ %compile_flags% %src%\tests\cpp_build_test.cpp -o cpp_build_test.exe +clang %compile_flags% %src%\tests\grammar.c -o grammar.exe popd echo. @@ -67,3 +69,9 @@ node_errors.exe %~dp0\samples\node_errors\node_errors.md popd +echo. +echo ~~~ Running C++ Sample ~~~ +pushd build +cpp_build_test.exe +popd + diff --git a/project.4coder b/project.4coder index 6a1ee26..6874ade 100644 --- a/project.4coder +++ b/project.4coder @@ -39,6 +39,18 @@ command_list = { "build.bat", .os = "win" }, }, }, + { + .name = "build_with_clang", + .out = "*compilation*", + .footer_panel = true, + .save_dirty_files = true, + .cursor_at_end = false, + .cmd = + { + { "build_with_clang.bat", .os = "win" }, + }, + }, }; fkey_command[1] = "build"; +fkey_command[2] = "build_with_clang"; diff --git a/samples/static_site_generator/example_site/generated/blog1.html b/samples/static_site_generator/example_site/generated/blog1.html index ea7006b..ec66352 100644 --- a/samples/static_site_generator/example_site/generated/blog1.html +++ b/samples/static_site_generator/example_site/generated/blog1.html @@ -26,15 +26,18 @@

Test Blog #1

This is my test blog.

30 November 2020

Section 1

-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem.

-

Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor.

-

Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem. + +Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor. + +Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit.

Section 2

-Aliquam quis diam at sem interdum imperdiet. Nunc imperdiet ligula tempus nibh semper mattis. Suspendisse fringilla molestie semper. Sed felis dolor, vehicula et tempus sed, porttitor finibus lacus. Pellentesque egestas ex finibus, facilisis tellus suscipit, accumsan turpis. Ut imperdiet vitae nisl eget vestibulum. Donec eu bibendum erat, id maximus magna. Vivamus quis rhoncus justo. Morbi eget commodo lorem, vulputate varius ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer accumsan, sem vel rutrum cursus, odio enim sodales leo, sit amet rutrum odio purus at nisi. Fusce iaculis ante id nunc volutpat tincidunt. Duis nec tincidunt ipsum. Fusce vitae odio ac velit sollicitudin maximus. Vestibulum ante dui, varius auctor ante eu, gravida laoreet justo.

-

Vivamus dignissim mauris nec turpis convallis, vitae pellentesque sapien faucibus. Phasellus eu euismod elit, sit amet vehicula diam. Curabitur sit amet leo magna. In est erat, congue vel euismod id, venenatis vitae mauris. Vestibulum sit amet leo eget leo ornare feugiat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vivamus at efficitur ex, a mattis lorem. Maecenas blandit tincidunt tortor vel cursus. In in purus a nisi pretium venenatis in ut lacus. Maecenas venenatis rutrum laoreet. Donec aliquam leo vel risus cursus, placerat pretium lacus fringilla. Suspendisse ut porttitor mauris. +Aliquam quis diam at sem interdum imperdiet. Nunc imperdiet ligula tempus nibh semper mattis. Suspendisse fringilla molestie semper. Sed felis dolor, vehicula et tempus sed, porttitor finibus lacus. Pellentesque egestas ex finibus, facilisis tellus suscipit, accumsan turpis. Ut imperdiet vitae nisl eget vestibulum. Donec eu bibendum erat, id maximus magna. Vivamus quis rhoncus justo. Morbi eget commodo lorem, vulputate varius ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer accumsan, sem vel rutrum cursus, odio enim sodales leo, sit amet rutrum odio purus at nisi. Fusce iaculis ante id nunc volutpat tincidunt. Duis nec tincidunt ipsum. Fusce vitae odio ac velit sollicitudin maximus. Vestibulum ante dui, varius auctor ante eu, gravida laoreet justo. + +Vivamus dignissim mauris nec turpis convallis, vitae pellentesque sapien faucibus. Phasellus eu euismod elit, sit amet vehicula diam. Curabitur sit amet leo magna. In est erat, congue vel euismod id, venenatis vitae mauris. Vestibulum sit amet leo eget leo ornare feugiat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vivamus at efficitur ex, a mattis lorem. Maecenas blandit tincidunt tortor vel cursus. In in purus a nisi pretium venenatis in ut lacus. Maecenas venenatis rutrum laoreet. Donec aliquam leo vel risus cursus, placerat pretium lacus fringilla. Suspendisse ut porttitor mauris.

Section 3

diff --git a/samples/static_site_generator/example_site/generated/blog2.html b/samples/static_site_generator/example_site/generated/blog2.html index 55a3c73..312a5fc 100644 --- a/samples/static_site_generator/example_site/generated/blog2.html +++ b/samples/static_site_generator/example_site/generated/blog2.html @@ -26,9 +26,11 @@

Hello, Again!

This is another test blog.

28 November 2020

Section 1

-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem.

-

Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor.

-

Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem. + +Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor. + +Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit.

diff --git a/samples/static_site_generator/example_site/generated/site.js b/samples/static_site_generator/example_site/generated/site.js index d38215e..e69de29 100644 --- a/samples/static_site_generator/example_site/generated/site.js +++ b/samples/static_site_generator/example_site/generated/site.js @@ -1,61 +0,0 @@ -function StringFitsFilter(str, filter) -{ - let match = true; - let filter_upper = filter.toUpperCase(); - let filter_substrings = filter_upper.split(/[ _*]+/); - let str_upper = str.toUpperCase(); - let minimum_index = 0; - - for(let i = 0; i < filter_substrings.length; ++i) - { - if(filter_substrings[i].length > 0) - { - let index_of_substring = str_upper.indexOf(filter_substrings[i], minimum_index); - if(index_of_substring < 0 || index_of_substring < minimum_index) - { - match = false; - break; - } - minimum_index = index_of_substring + filter_substrings[i].length - 1; - } - } - - return match; -} - -function UpdateListByFilter(menu_id, filter_id) -{ - let ul = document.getElementById(menu_id); - let li = ul.getElementsByTagName("li"); - let input = document.getElementById(filter_id); - let filter = input.value.toUpperCase(); - for(let i = 0; i < li.length; i++) - { - if(filter.length > 0) - { - let a = li[i].getElementsByTagName("a")[0]; - if(StringFitsFilter(a.innerHTML, filter)) - { - li[i].style.display = ""; - } - else - { - li[i].style.display = "none"; - } - } - else - { - li[i].style.display = ""; - } - } -} - -function SearchInput(event, lister_idx) -{ - UpdateListByFilter("lister_"+lister_idx, "lister_search_"+lister_idx); -} - -function SearchKeyDown(event, lister_idx) -{ - UpdateListByFilter("lister_"+lister_idx, "lister_search_"+lister_idx); -} \ No newline at end of file diff --git a/source/md.h b/source/md.h index 08d37e8..b25a57e 100644 --- a/source/md.h +++ b/source/md.h @@ -10,11 +10,11 @@ // [x] tests for legal tag syntaxes // [x] tests that ensure we don't accept labels when expecting symbols e.g. foo ":" b; foo: "(" ) // [x] pass all tests -// [ ] simplify error sorting and catastrophic error handling +// [x] simplify error sorting and catastrophic error handling // [ ] integer -> string helpers // [x] {rjf} remove symbol digraphs (maybe a test for this or something) and remove from comments // [x] stb_snprintf included and modified for %S ~ MD_String8 -// [ ] naming pass +// [x] naming pass // [ ] {rjf} get the branches/labels setup on Git for beta 0.1 and dev // [ ] {rjf} announcement @@ -29,7 +29,33 @@ // NOTE(rjf): Compiler cracking from the 4th dimension -#if defined(_MSC_VER) +#if defined(__clang__) + +# define MD_COMPILER_CLANG 1 + +# if defined(__APPLE__) && defined(__MACH__) +# define MD_OS_MAC 1 +# elif defined(__gnu_linux__) +# define MD_OS_LINUX 1 +# elif defined(_WIN32) +# define MD_OS_WINDOWS 1 +# else +# error This compiler/platform combo is not supported yet +# endif + +# if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) +# define MD_ARCH_X64 1 +# elif defined(i386) || defined(__i386) || defined(__i386__) +# define MD_ARCH_X86 1 +# elif defined(__aarch64__) +# define MD_ARCH_ARM64 1 +# elif defined(__arm__) +# define MD_ARCH_ARM32 1 +# else +# error architecture not supported yet +# endif + +#elif defined(_MSC_VER) # define MD_COMPILER_CL 1 @@ -71,30 +97,6 @@ # define MD_COMPILER_CL_YEAR 0 # endif -#elif defined(__clang__) - -# define MD_COMPILER_CLANG 1 - -# if defined(__APPLE__) && defined(__MACH__) -# define MD_OS_MAC 1 -# elif defined(__gnu_linux__) -# define MD_OS_LINUX 1 -# else -# error This compiler/platform combo is not supported yet -# endif - -# if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) -# define MD_ARCH_X64 1 -# elif defined(i386) || defined(__i386) || defined(__i386__) -# define MD_ARCH_X86 1 -# elif defined(__aarch64__) -# define MD_ARCH_ARM64 1 -# elif defined(__arm__) -# define MD_ARCH_ARM32 1 -# else -# error architecture not supported yet -# endif - #elif defined(__GNUC__) || defined(__GNUG__) # define MD_COMPILER_GCC 1 @@ -129,6 +131,21 @@ #if defined(__cplusplus) # define MD_LANG_CPP 1 + +# if __cplusplus <= 199711L +# define MD_CPP_VERSION 98 +# elif __cplusplus <= 201103L +# define MD_CPP_VERSION 11 +# elif __cplusplus <= 201402L +# define MD_CPP_VERSION 14 +# elif __cplusplus <= 201703L +# define MD_CPP_VERSION 17 +# elif __cplusplus <= 202002L +# define MD_CPP_VERSION 20 +# else +# define MD_CPP_VERSION 23 +# endif + #else # define MD_LANG_C 1 #endif diff --git a/tests/cpp_build_test.cpp b/tests/cpp_build_test.cpp index 834ae56..70fbae8 100644 --- a/tests/cpp_build_test.cpp +++ b/tests/cpp_build_test.cpp @@ -3,6 +3,8 @@ int main(void) { + printf("%d\n", MD_CPP_VERSION); + MD_String8 foo = "foo"_md; MD_String8 bar = "bar"_md; MD_String8 str = MD_S8Fmt("%S%S", foo, bar); diff --git a/tests/sanity_tests.c b/tests/sanity_tests.c index e8bb050..4babbde 100644 --- a/tests/sanity_tests.c +++ b/tests/sanity_tests.c @@ -294,17 +294,17 @@ int main(void) TestResult(MD_ParseOneNode(MD_S8Lit("abc"), 0).node->flags & MD_NodeFlag_Identifier); TestResult(MD_ParseOneNode(MD_S8Lit("\"foo\""), 0).node->flags & - MD_NodeFlag_StringLiteral | MD_NodeFlag_StringDoubleQuote); + (MD_NodeFlag_StringLiteral | MD_NodeFlag_StringDoubleQuote)); TestResult(MD_ParseOneNode(MD_S8Lit("'foo'"), 0).node->flags & - MD_NodeFlag_StringLiteral | MD_NodeFlag_StringSingleQuote); + (MD_NodeFlag_StringLiteral | MD_NodeFlag_StringSingleQuote)); TestResult(MD_ParseOneNode(MD_S8Lit("`foo`"), 0).node->flags & - MD_NodeFlag_StringLiteral | MD_NodeFlag_StringTick); + (MD_NodeFlag_StringLiteral | MD_NodeFlag_StringTick)); TestResult(MD_ParseOneNode(MD_S8Lit("\"\"\"foo\"\"\""), 0).node->flags & - MD_NodeFlag_StringLiteral | MD_NodeFlag_StringDoubleQuote | MD_NodeFlag_StringTriplet); + (MD_NodeFlag_StringLiteral | MD_NodeFlag_StringDoubleQuote | MD_NodeFlag_StringTriplet)); TestResult(MD_ParseOneNode(MD_S8Lit("'''foo'''"), 0).node->flags & - MD_NodeFlag_StringLiteral | MD_NodeFlag_StringSingleQuote | MD_NodeFlag_StringTriplet); + (MD_NodeFlag_StringLiteral | MD_NodeFlag_StringSingleQuote | MD_NodeFlag_StringTriplet)); TestResult(MD_ParseOneNode(MD_S8Lit("```foo```"), 0).node->flags & - MD_NodeFlag_StringLiteral | MD_NodeFlag_StringTick | MD_NodeFlag_StringTriplet); + (MD_NodeFlag_StringLiteral | MD_NodeFlag_StringTick | MD_NodeFlag_StringTriplet)); } Test("Expression Evaluation")