about summary refs log tree commit diff
path: root/md4c/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'md4c/default.nix')
-rw-r--r--md4c/default.nix67
1 files changed, 67 insertions, 0 deletions
diff --git a/md4c/default.nix b/md4c/default.nix
new file mode 100644
index 0000000..d5fb39e
--- /dev/null
+++ b/md4c/default.nix
@@ -0,0 +1,67 @@
+# Recipe for building md4c at specific snapshot
+#
+# SPDX-FileCopyrightText: 2021 Anderson Torres
+# SPDX-FileCopyrightText: 2021 Thomas Gerbet
+# SPDX-FileCopyrightText: 2021 Leif Middelschulte
+# SPDX-License-Identifier: MIT
+#
+# SPDX-FileCopyrightText: 2023 Nguyễn Gia Phong
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+{ lib, stdenv, version, fetchFromGitHub, commit, hash
+, binRenameHook, cmake, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "md4c";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "mity";
+    repo = pname;
+    rev = commit;
+    inherit hash;
+  };
+
+  patches = [
+    # We set CMAKE_INSTALL_LIBDIR to the absolute path in $out, so
+    # prefix and exec_prefix cannot be $out, too
+    # Use CMake's _FULL_ variables instead of `prefix` concatenation.
+    ./fix-pkgconfig.patch
+  ];
+
+  nativeBuildInputs = [ binRenameHook cmake pkg-config ];
+
+  meta = with lib; {
+    description = "Markdown parser made in C";
+    longDescription = ''
+      MD4C is Markdown parser implementation in C, with the following features:
+
+      - Compliance: Generally, MD4C aims to be compliant to the latest version
+        of CommonMark specification. Currently, we are fully compliant to
+        CommonMark 0.29.
+      - Extensions: MD4C supports some commonly requested and accepted
+        extensions. See below.
+      - Performance: MD4C is very fast.
+      - Compactness: MD4C parser is implemented in one source file and one
+        header file. There are no dependencies other than standard C library.
+      - Embedding: MD4C parser is easy to reuse in other projects, its API is
+        very straightforward: There is actually just one function, md_parse().
+      - Push model: MD4C parses the complete document and calls few callback
+        functions provided by the application to inform it about a start/end of
+        every block, a start/end of every span, and with any textual contents.
+      - Portability: MD4C builds and works on Windows and POSIX-compliant
+        OSes. (It should be simple to make it run also on most other platforms,
+        at least as long as the platform provides C standard library, including
+        a heap memory management.)
+      - Encoding: MD4C by default expects UTF-8 encoding of the input
+        document. But it can be compiled to recognize ASCII-only control
+        characters (i.e. to disable all Unicode-specific code), or (on Windows)
+        to expect UTF-16 (i.e. what is on Windows commonly called just
+        "Unicode"). See more details below.
+      - Permissive license: MD4C is available under the MIT license.
+    '';
+    homepage = "https://github.com/mity/md4c";
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}