From fe2d4de7c45849e358b9087b020d68d92d6551d8 Mon Sep 17 00:00:00 2001 From: gemmaro Date: Fri, 11 Sep 2026 10:42:57 +0900 Subject: [PATCH 1/5] Add clang-format configuration file. --- .clang-format | 5 +++++ Makefile | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..7b7298a78 --- /dev/null +++ b/.clang-format @@ -0,0 +1,5 @@ +--- +BasedOnStyle: LLVM +SortIncludes: + Enabled: true + IgnoreCase: false diff --git a/Makefile b/Makefile index 29f047184..43e70284e 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ VERSION?=$(SPECVERSION) RELEASE?=cmark-$(VERSION) INSTALL_PREFIX?=/usr/local CLANG_CHECK?=clang-check -CLANG_FORMAT=clang-format -style llvm -sort-includes=0 -i +CLANG_FORMAT=clang-format -i AFL_PATH?=/usr/local/bin .PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive newbench bench format update-spec afl libFuzzer lint From 9b991e44dea98d183138771f59b38079093dd0e2 Mon Sep 17 00:00:00 2001 From: gemmaro Date: Fri, 11 Sep 2026 10:45:31 +0900 Subject: [PATCH 2/5] Add scanner C code generator script. --- Makefile | 10 +--------- tools/make_scanners | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) create mode 100755 tools/make_scanners diff --git a/Makefile b/Makefile index 43e70284e..b506d8bed 100644 --- a/Makefile +++ b/Makefile @@ -141,15 +141,7 @@ $(SRCDIR)/case_fold.inc: $(DATADIR)/CaseFolding.txt # We include scanners.c in the repository, so this shouldn't # normally need to be generated. $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re - @case "$$(re2c -v)" in \ - *\ 0.13.*|*\ 0.14|*\ 0.14.1) \ - echo "re2c >= 0.14.2 is required"; \ - false; \ - ;; \ - esac - re2c -W -Werror -b -i --no-generation-date \ - -o $@ $< - $(CLANG_FORMAT) $@ + ./tools/make_scanners $< $@ # We include entities.inc in the repository, so normally this # doesn't need to be regenerated: diff --git a/tools/make_scanners b/tools/make_scanners new file mode 100755 index 000000000..b982d92a0 --- /dev/null +++ b/tools/make_scanners @@ -0,0 +1,24 @@ +#!/bin/sh + +# Creates C scanner code using re2c. +# Usage: ./tools/make_scanners src/scanners.re src/scanners.c +# Environment variable: RE2C_EXECUTABLE, CLANG_FORMAT_EXECUTABLE + +set -eu + +in=${1?no input file} +out=${2?no output file} + +: "${RE2C_EXECUTABLE:=re2c}" +: "${CLANG_FORMAT_EXECUTABLE:=clang-format}" + +case "$("$RE2C_EXECUTABLE" -v)" in + *\ 0.13.*|*\ 0.14|*\ 0.14.1) + echo "re2c >= 0.14.2 is required" + false + ;; +esac + +"$RE2C_EXECUTABLE" -W -Werror -b -i --no-generation-date \ + -o "$out" "$in" +"$CLANG_FORMAT_EXECUTABLE" -i "$out" From 658b52efc464e2c78efd8c188f79ccbf4f2a4c9e Mon Sep 17 00:00:00 2001 From: gemmaro Date: Fri, 11 Sep 2026 10:48:50 +0900 Subject: [PATCH 3/5] Add optional scanner code generation command for CMake. --- src/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 523b2cb82..68d9cfcb2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,6 +5,21 @@ configure_file(libcmark.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY) +find_program(RE2C_EXECUTABLE re2c OPTIONAL) +find_program(CLANG_FORMAT_EXECUTABLE clang-format OPTIONAL) + +if(RE2C_EXECUTABLE AND CLANG_FORMAT_EXECUTABLE) + add_custom_command( + OUTPUT scanners.c + COMMAND RE2C_EXECUTABLE=${RE2C_EXECUTABLE} + CLANG_FORMAT_EXECUTABLE=${CLANG_FORMAT_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/../tools/make_scanners + ${CMAKE_CURRENT_SOURCE_DIR}/scanners.re + scanners.c + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scanners.re + VERBATIM) +endif() + add_library(cmark blocks.c buffer.c From dbc8236d96174def0a3fa7f80fb0b82b51462897 Mon Sep 17 00:00:00 2001 From: gemmaro Date: Fri, 11 Sep 2026 11:08:55 +0900 Subject: [PATCH 4/5] Add optional command to generate case folding code for CMake. --- src/CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 68d9cfcb2..539af025d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,6 +5,19 @@ configure_file(libcmark.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY) +find_program(PYTHON3_EXECUTABLE python3 OPTIONAL) + +if(PYTHON3_EXECUTABLE) + add_custom_command( + OUTPUT case_fold.inc + COMMAND ${PYTHON3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/../tools/make_case_fold_inc.py + < ${CMAKE_CURRENT_SOURCE_DIR}/../data/CaseFolding.txt + > case_fold.inc + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../data/CaseFolding.txt + VERBATIM) +endif() + find_program(RE2C_EXECUTABLE re2c OPTIONAL) find_program(CLANG_FORMAT_EXECUTABLE clang-format OPTIONAL) @@ -23,6 +36,7 @@ endif() add_library(cmark blocks.c buffer.c + case_fold.inc cmark.c cmark_ctype.c commonmark.c From a9dff9312d6985a7fa5fb9629ecbdf4b92708924 Mon Sep 17 00:00:00 2001 From: gemmaro Date: Fri, 11 Sep 2026 11:11:55 +0900 Subject: [PATCH 5/5] Add optional command to generate entities code for CMake. --- src/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 539af025d..4ccb445b9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,6 +16,13 @@ if(PYTHON3_EXECUTABLE) > case_fold.inc DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../data/CaseFolding.txt VERBATIM) + add_custom_command( + OUTPUT entities.inc + COMMAND ${PYTHON3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/../tools/make_entities_inc.py + > entities.inc + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../tools/make_entities_inc.py + VERBATIM) endif() find_program(RE2C_EXECUTABLE re2c OPTIONAL) @@ -40,6 +47,7 @@ add_library(cmark cmark.c cmark_ctype.c commonmark.c + entities.inc houdini_href_e.c houdini_html_e.c houdini_html_u.c