initial commit
commit
a1d123c53c
|
@ -0,0 +1,100 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
// Although this function looks imperative, note that its job is to
|
||||||
|
// declaratively construct a build graph that will be executed by an external
|
||||||
|
// runner.
|
||||||
|
pub fn build(b: *std.Build) void {
|
||||||
|
// Standard target options allows the person running `zig build` to choose
|
||||||
|
// what target to build for. Here we do not override the defaults, which
|
||||||
|
// means any target is allowed, and the default is native. Other options
|
||||||
|
// for restricting supported target set are available.
|
||||||
|
const target = b.standardTargetOptions(.{});
|
||||||
|
|
||||||
|
// Standard optimization options allow the person running `zig build` to select
|
||||||
|
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not
|
||||||
|
// set a preferred release mode, allowing the user to decide how to optimize.
|
||||||
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
|
|
||||||
|
const lib = b.addStaticLibrary(.{
|
||||||
|
.name = "mdcat",
|
||||||
|
// In this case the main source file is merely a path, however, in more
|
||||||
|
// complicated build scripts, this could be a generated file.
|
||||||
|
.root_source_file = b.path("src/root.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
|
||||||
|
// This declares intent for the library to be installed into the standard
|
||||||
|
// location when the user invokes the "install" step (the default step when
|
||||||
|
// running `zig build`).
|
||||||
|
b.installArtifact(lib);
|
||||||
|
|
||||||
|
const exe = b.addExecutable(.{
|
||||||
|
.name = "mdcat",
|
||||||
|
.root_source_file = b.path("src/main.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
|
||||||
|
exe.linkLibC();
|
||||||
|
exe.addCSourceFile(.{ .file = b.path("md4c/md4c.c"), .flags = &[_][]const u8{"-DMD4C_USE_UTF8"} });
|
||||||
|
|
||||||
|
const clap = b.dependency("clap", .{});
|
||||||
|
exe.root_module.addImport("clap", clap.module("clap"));
|
||||||
|
|
||||||
|
const ansiterm = b.dependency("ansi-term", .{});
|
||||||
|
exe.root_module.addImport("ansi-term", ansiterm.module("ansi-term"));
|
||||||
|
|
||||||
|
// This declares intent for the executable to be installed into the
|
||||||
|
// standard location when the user invokes the "install" step (the default
|
||||||
|
// step when running `zig build`).
|
||||||
|
b.installArtifact(exe);
|
||||||
|
|
||||||
|
// This *creates* a Run step in the build graph, to be executed when another
|
||||||
|
// step is evaluated that depends on it. The next line below will establish
|
||||||
|
// such a dependency.
|
||||||
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
|
|
||||||
|
// By making the run step depend on the install step, it will be run from the
|
||||||
|
// installation directory rather than directly from within the cache directory.
|
||||||
|
// This is not necessary, however, if the application depends on other installed
|
||||||
|
// files, this ensures they will be present and in the expected location.
|
||||||
|
run_cmd.step.dependOn(b.getInstallStep());
|
||||||
|
|
||||||
|
// This allows the user to pass arguments to the application in the build
|
||||||
|
// command itself, like this: `zig build run -- arg1 arg2 etc`
|
||||||
|
if (b.args) |args| {
|
||||||
|
run_cmd.addArgs(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This creates a build step. It will be visible in the `zig build --help` menu,
|
||||||
|
// and can be selected like this: `zig build run`
|
||||||
|
// This will evaluate the `run` step rather than the default, which is "install".
|
||||||
|
const run_step = b.step("run", "Run the app");
|
||||||
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
|
||||||
|
// Creates a step for unit testing. This only builds the test executable
|
||||||
|
// but does not run it.
|
||||||
|
const lib_unit_tests = b.addTest(.{
|
||||||
|
.root_source_file = b.path("src/root.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
|
||||||
|
const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests);
|
||||||
|
|
||||||
|
const exe_unit_tests = b.addTest(.{
|
||||||
|
.root_source_file = b.path("src/main.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
|
||||||
|
const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
|
||||||
|
|
||||||
|
// Similar to creating the run step earlier, this exposes a `test` step to
|
||||||
|
// the `zig build --help` menu, providing a way for the user to request
|
||||||
|
// running the unit tests.
|
||||||
|
const test_step = b.step("test", "Run unit tests");
|
||||||
|
test_step.dependOn(&run_lib_unit_tests.step);
|
||||||
|
test_step.dependOn(&run_exe_unit_tests.step);
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
.{
|
||||||
|
// This is the default name used by packages depending on this one. For
|
||||||
|
// example, when a user runs `zig fetch --save <url>`, this field is used
|
||||||
|
// as the key in the `dependencies` table. Although the user can choose a
|
||||||
|
// different name, most users will stick with this provided value.
|
||||||
|
//
|
||||||
|
// It is redundant to include "zig" in this name because it is already
|
||||||
|
// within the Zig package namespace.
|
||||||
|
.name = "mdcat",
|
||||||
|
|
||||||
|
// This is a [Semantic Version](https://semver.org/).
|
||||||
|
// In a future version of Zig it will be used for package deduplication.
|
||||||
|
.version = "0.0.0",
|
||||||
|
|
||||||
|
// This field is optional.
|
||||||
|
// This is currently advisory only; Zig does not yet do anything
|
||||||
|
// with this value.
|
||||||
|
//.minimum_zig_version = "0.11.0",
|
||||||
|
|
||||||
|
// This field is optional.
|
||||||
|
// Each dependency must either provide a `url` and `hash`, or a `path`.
|
||||||
|
// `zig build --fetch` can be used to fetch all dependencies of a package, recursively.
|
||||||
|
// Once all dependencies are fetched, `zig build` no longer requires
|
||||||
|
// internet connectivity.
|
||||||
|
.dependencies = .{
|
||||||
|
.clap = .{
|
||||||
|
.url = "https://github.com/Hejsil/zig-clap/archive/refs/tags/0.9.1.tar.gz",
|
||||||
|
.hash = "122062d301a203d003547b414237229b09a7980095061697349f8bef41be9c30266b",
|
||||||
|
},
|
||||||
|
.@"ansi-term" = .{
|
||||||
|
.url = "https://github.com/ziglibs/ansi-term/archive/refs/heads/master.zip",
|
||||||
|
.hash = "12203a64b02d46e6c2e268b7da60cb11b2fa83dc580cad77cf330d1438e2280de46f",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
.paths = .{
|
||||||
|
"build.zig",
|
||||||
|
"build.zig.zon",
|
||||||
|
"src",
|
||||||
|
// For example...
|
||||||
|
//"LICENSE",
|
||||||
|
//"README.md",
|
||||||
|
},
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,407 @@
|
||||||
|
/*
|
||||||
|
* MD4C: Markdown parser for C
|
||||||
|
* (http://github.com/mity/md4c)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016-2024 Martin Mitáš
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
* IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MD4C_H
|
||||||
|
#define MD4C_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MD4C_USE_UTF16
|
||||||
|
/* Magic to support UTF-16. Note that in order to use it, you have to define
|
||||||
|
* the macro MD4C_USE_UTF16 both when building MD4C as well as when
|
||||||
|
* including this header in your code. */
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
typedef WCHAR MD_CHAR;
|
||||||
|
#else
|
||||||
|
#error MD4C_USE_UTF16 is only supported on Windows.
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
typedef char MD_CHAR;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef unsigned MD_SIZE;
|
||||||
|
typedef unsigned MD_OFFSET;
|
||||||
|
|
||||||
|
|
||||||
|
/* Block represents a part of document hierarchy structure like a paragraph
|
||||||
|
* or list item.
|
||||||
|
*/
|
||||||
|
typedef enum MD_BLOCKTYPE {
|
||||||
|
/* <body>...</body> */
|
||||||
|
MD_BLOCK_DOC = 0,
|
||||||
|
|
||||||
|
/* <blockquote>...</blockquote> */
|
||||||
|
MD_BLOCK_QUOTE,
|
||||||
|
|
||||||
|
/* <ul>...</ul>
|
||||||
|
* Detail: Structure MD_BLOCK_UL_DETAIL. */
|
||||||
|
MD_BLOCK_UL,
|
||||||
|
|
||||||
|
/* <ol>...</ol>
|
||||||
|
* Detail: Structure MD_BLOCK_OL_DETAIL. */
|
||||||
|
MD_BLOCK_OL,
|
||||||
|
|
||||||
|
/* <li>...</li>
|
||||||
|
* Detail: Structure MD_BLOCK_LI_DETAIL. */
|
||||||
|
MD_BLOCK_LI,
|
||||||
|
|
||||||
|
/* <hr> */
|
||||||
|
MD_BLOCK_HR,
|
||||||
|
|
||||||
|
/* <h1>...</h1> (for levels up to 6)
|
||||||
|
* Detail: Structure MD_BLOCK_H_DETAIL. */
|
||||||
|
MD_BLOCK_H,
|
||||||
|
|
||||||
|
/* <pre><code>...</code></pre>
|
||||||
|
* Note the text lines within code blocks are terminated with '\n'
|
||||||
|
* instead of explicit MD_TEXT_BR. */
|
||||||
|
MD_BLOCK_CODE,
|
||||||
|
|
||||||
|
/* Raw HTML block. This itself does not correspond to any particular HTML
|
||||||
|
* tag. The contents of it _is_ raw HTML source intended to be put
|
||||||
|
* in verbatim form to the HTML output. */
|
||||||
|
MD_BLOCK_HTML,
|
||||||
|
|
||||||
|
/* <p>...</p> */
|
||||||
|
MD_BLOCK_P,
|
||||||
|
|
||||||
|
/* <table>...</table> and its contents.
|
||||||
|
* Detail: Structure MD_BLOCK_TABLE_DETAIL (for MD_BLOCK_TABLE),
|
||||||
|
* structure MD_BLOCK_TD_DETAIL (for MD_BLOCK_TH and MD_BLOCK_TD)
|
||||||
|
* Note all of these are used only if extension MD_FLAG_TABLES is enabled. */
|
||||||
|
MD_BLOCK_TABLE,
|
||||||
|
MD_BLOCK_THEAD,
|
||||||
|
MD_BLOCK_TBODY,
|
||||||
|
MD_BLOCK_TR,
|
||||||
|
MD_BLOCK_TH,
|
||||||
|
MD_BLOCK_TD
|
||||||
|
} MD_BLOCKTYPE;
|
||||||
|
|
||||||
|
/* Span represents an in-line piece of a document which should be rendered with
|
||||||
|
* the same font, color and other attributes. A sequence of spans forms a block
|
||||||
|
* like paragraph or list item. */
|
||||||
|
typedef enum MD_SPANTYPE {
|
||||||
|
/* <em>...</em> */
|
||||||
|
MD_SPAN_EM,
|
||||||
|
|
||||||
|
/* <strong>...</strong> */
|
||||||
|
MD_SPAN_STRONG,
|
||||||
|
|
||||||
|
/* <a href="xxx">...</a>
|
||||||
|
* Detail: Structure MD_SPAN_A_DETAIL. */
|
||||||
|
MD_SPAN_A,
|
||||||
|
|
||||||
|
/* <img src="xxx">...</a>
|
||||||
|
* Detail: Structure MD_SPAN_IMG_DETAIL.
|
||||||
|
* Note: Image text can contain nested spans and even nested images.
|
||||||
|
* If rendered into ALT attribute of HTML <IMG> tag, it's responsibility
|
||||||
|
* of the parser to deal with it.
|
||||||
|
*/
|
||||||
|
MD_SPAN_IMG,
|
||||||
|
|
||||||
|
/* <code>...</code> */
|
||||||
|
MD_SPAN_CODE,
|
||||||
|
|
||||||
|
/* <del>...</del>
|
||||||
|
* Note: Recognized only when MD_FLAG_STRIKETHROUGH is enabled.
|
||||||
|
*/
|
||||||
|
MD_SPAN_DEL,
|
||||||
|
|
||||||
|
/* For recognizing inline ($) and display ($$) equations
|
||||||
|
* Note: Recognized only when MD_FLAG_LATEXMATHSPANS is enabled.
|
||||||
|
*/
|
||||||
|
MD_SPAN_LATEXMATH,
|
||||||
|
MD_SPAN_LATEXMATH_DISPLAY,
|
||||||
|
|
||||||
|
/* Wiki links
|
||||||
|
* Note: Recognized only when MD_FLAG_WIKILINKS is enabled.
|
||||||
|
*/
|
||||||
|
MD_SPAN_WIKILINK,
|
||||||
|
|
||||||
|
/* <u>...</u>
|
||||||
|
* Note: Recognized only when MD_FLAG_UNDERLINE is enabled. */
|
||||||
|
MD_SPAN_U
|
||||||
|
} MD_SPANTYPE;
|
||||||
|
|
||||||
|
/* Text is the actual textual contents of span. */
|
||||||
|
typedef enum MD_TEXTTYPE {
|
||||||
|
/* Normal text. */
|
||||||
|
MD_TEXT_NORMAL = 0,
|
||||||
|
|
||||||
|
/* NULL character. CommonMark requires replacing NULL character with
|
||||||
|
* the replacement char U+FFFD, so this allows caller to do that easily. */
|
||||||
|
MD_TEXT_NULLCHAR,
|
||||||
|
|
||||||
|
/* Line breaks.
|
||||||
|
* Note these are not sent from blocks with verbatim output (MD_BLOCK_CODE
|
||||||
|
* or MD_BLOCK_HTML). In such cases, '\n' is part of the text itself. */
|
||||||
|
MD_TEXT_BR, /* <br> (hard break) */
|
||||||
|
MD_TEXT_SOFTBR, /* '\n' in source text where it is not semantically meaningful (soft break) */
|
||||||
|
|
||||||
|
/* Entity.
|
||||||
|
* (a) Named entity, e.g.
|
||||||
|
* (Note MD4C does not have a list of known entities.
|
||||||
|
* Anything matching the regexp /&[A-Za-z][A-Za-z0-9]{1,47};/ is
|
||||||
|
* treated as a named entity.)
|
||||||
|
* (b) Numerical entity, e.g. Ӓ
|
||||||
|
* (c) Hexadecimal entity, e.g. ካ
|
||||||
|
*
|
||||||
|
* As MD4C is mostly encoding agnostic, application gets the verbatim
|
||||||
|
* entity text into the MD_PARSER::text_callback(). */
|
||||||
|
MD_TEXT_ENTITY,
|
||||||
|
|
||||||
|
/* Text in a code block (inside MD_BLOCK_CODE) or inlined code (`code`).
|
||||||
|
* If it is inside MD_BLOCK_CODE, it includes spaces for indentation and
|
||||||
|
* '\n' for new lines. MD_TEXT_BR and MD_TEXT_SOFTBR are not sent for this
|
||||||
|
* kind of text. */
|
||||||
|
MD_TEXT_CODE,
|
||||||
|
|
||||||
|
/* Text is a raw HTML. If it is contents of a raw HTML block (i.e. not
|
||||||
|
* an inline raw HTML), then MD_TEXT_BR and MD_TEXT_SOFTBR are not used.
|
||||||
|
* The text contains verbatim '\n' for the new lines. */
|
||||||
|
MD_TEXT_HTML,
|
||||||
|
|
||||||
|
/* Text is inside an equation. This is processed the same way as inlined code
|
||||||
|
* spans (`code`). */
|
||||||
|
MD_TEXT_LATEXMATH
|
||||||
|
} MD_TEXTTYPE;
|
||||||
|
|
||||||
|
|
||||||
|
/* Alignment enumeration. */
|
||||||
|
typedef enum MD_ALIGN {
|
||||||
|
MD_ALIGN_DEFAULT = 0, /* When unspecified. */
|
||||||
|
MD_ALIGN_LEFT,
|
||||||
|
MD_ALIGN_CENTER,
|
||||||
|
MD_ALIGN_RIGHT
|
||||||
|
} MD_ALIGN;
|
||||||
|
|
||||||
|
|
||||||
|
/* String attribute.
|
||||||
|
*
|
||||||
|
* This wraps strings which are outside of a normal text flow and which are
|
||||||
|
* propagated within various detailed structures, but which still may contain
|
||||||
|
* string portions of different types like e.g. entities.
|
||||||
|
*
|
||||||
|
* So, for example, lets consider this image:
|
||||||
|
*
|
||||||
|
* 
|
||||||
|
*
|
||||||
|
* The image alt text is propagated as a normal text via the MD_PARSER::text()
|
||||||
|
* callback. However, the image title ('foo " bar') is propagated as
|
||||||
|
* MD_ATTRIBUTE in MD_SPAN_IMG_DETAIL::title.
|
||||||
|
*
|
||||||
|
* Then the attribute MD_SPAN_IMG_DETAIL::title shall provide the following:
|
||||||
|
* -- [0]: "foo " (substr_types[0] == MD_TEXT_NORMAL; substr_offsets[0] == 0)
|
||||||
|
* -- [1]: """ (substr_types[1] == MD_TEXT_ENTITY; substr_offsets[1] == 4)
|
||||||
|
* -- [2]: " bar" (substr_types[2] == MD_TEXT_NORMAL; substr_offsets[2] == 10)
|
||||||
|
* -- [3]: (n/a) (n/a ; substr_offsets[3] == 14)
|
||||||
|
*
|
||||||
|
* Note that these invariants are always guaranteed:
|
||||||
|
* -- substr_offsets[0] == 0
|
||||||
|
* -- substr_offsets[LAST+1] == size
|
||||||
|
* -- Currently, only MD_TEXT_NORMAL, MD_TEXT_ENTITY, MD_TEXT_NULLCHAR
|
||||||
|
* substrings can appear. This could change only of the specification
|
||||||
|
* changes.
|
||||||
|
*/
|
||||||
|
typedef struct MD_ATTRIBUTE {
|
||||||
|
const MD_CHAR* text;
|
||||||
|
MD_SIZE size;
|
||||||
|
const MD_TEXTTYPE* substr_types;
|
||||||
|
const MD_OFFSET* substr_offsets;
|
||||||
|
} MD_ATTRIBUTE;
|
||||||
|
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_UL. */
|
||||||
|
typedef struct MD_BLOCK_UL_DETAIL {
|
||||||
|
int is_tight; /* Non-zero if tight list, zero if loose. */
|
||||||
|
MD_CHAR mark; /* Item bullet character in MarkDown source of the list, e.g. '-', '+', '*'. */
|
||||||
|
} MD_BLOCK_UL_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_OL. */
|
||||||
|
typedef struct MD_BLOCK_OL_DETAIL {
|
||||||
|
unsigned start; /* Start index of the ordered list. */
|
||||||
|
int is_tight; /* Non-zero if tight list, zero if loose. */
|
||||||
|
MD_CHAR mark_delimiter; /* Character delimiting the item marks in MarkDown source, e.g. '.' or ')' */
|
||||||
|
} MD_BLOCK_OL_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_LI. */
|
||||||
|
typedef struct MD_BLOCK_LI_DETAIL {
|
||||||
|
int is_task; /* Can be non-zero only with MD_FLAG_TASKLISTS */
|
||||||
|
MD_CHAR task_mark; /* If is_task, then one of 'x', 'X' or ' '. Undefined otherwise. */
|
||||||
|
MD_OFFSET task_mark_offset; /* If is_task, then offset in the input of the char between '[' and ']'. */
|
||||||
|
} MD_BLOCK_LI_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_H. */
|
||||||
|
typedef struct MD_BLOCK_H_DETAIL {
|
||||||
|
unsigned level; /* Header level (1 - 6) */
|
||||||
|
} MD_BLOCK_H_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_CODE. */
|
||||||
|
typedef struct MD_BLOCK_CODE_DETAIL {
|
||||||
|
MD_ATTRIBUTE info;
|
||||||
|
MD_ATTRIBUTE lang;
|
||||||
|
MD_CHAR fence_char; /* The character used for fenced code block; or zero for indented code block. */
|
||||||
|
} MD_BLOCK_CODE_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_TABLE. */
|
||||||
|
typedef struct MD_BLOCK_TABLE_DETAIL {
|
||||||
|
unsigned col_count; /* Count of columns in the table. */
|
||||||
|
unsigned head_row_count; /* Count of rows in the table header (currently always 1) */
|
||||||
|
unsigned body_row_count; /* Count of rows in the table body */
|
||||||
|
} MD_BLOCK_TABLE_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_BLOCK_TH and MD_BLOCK_TD. */
|
||||||
|
typedef struct MD_BLOCK_TD_DETAIL {
|
||||||
|
MD_ALIGN align;
|
||||||
|
} MD_BLOCK_TD_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_SPAN_A. */
|
||||||
|
typedef struct MD_SPAN_A_DETAIL {
|
||||||
|
MD_ATTRIBUTE href;
|
||||||
|
MD_ATTRIBUTE title;
|
||||||
|
int is_autolink; /* nonzero if this is an autolink */
|
||||||
|
} MD_SPAN_A_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_SPAN_IMG. */
|
||||||
|
typedef struct MD_SPAN_IMG_DETAIL {
|
||||||
|
MD_ATTRIBUTE src;
|
||||||
|
MD_ATTRIBUTE title;
|
||||||
|
} MD_SPAN_IMG_DETAIL;
|
||||||
|
|
||||||
|
/* Detailed info for MD_SPAN_WIKILINK. */
|
||||||
|
typedef struct MD_SPAN_WIKILINK {
|
||||||
|
MD_ATTRIBUTE target;
|
||||||
|
} MD_SPAN_WIKILINK_DETAIL;
|
||||||
|
|
||||||
|
/* Flags specifying extensions/deviations from CommonMark specification.
|
||||||
|
*
|
||||||
|
* By default (when MD_PARSER::flags == 0), we follow CommonMark specification.
|
||||||
|
* The following flags may allow some extensions or deviations from it.
|
||||||
|
*/
|
||||||
|
#define MD_FLAG_COLLAPSEWHITESPACE 0x0001 /* In MD_TEXT_NORMAL, collapse non-trivial whitespace into single ' ' */
|
||||||
|
#define MD_FLAG_PERMISSIVEATXHEADERS 0x0002 /* Do not require space in ATX headers ( ###header ) */
|
||||||
|
#define MD_FLAG_PERMISSIVEURLAUTOLINKS 0x0004 /* Recognize URLs as autolinks even without '<', '>' */
|
||||||
|
#define MD_FLAG_PERMISSIVEEMAILAUTOLINKS 0x0008 /* Recognize e-mails as autolinks even without '<', '>' and 'mailto:' */
|
||||||
|
#define MD_FLAG_NOINDENTEDCODEBLOCKS 0x0010 /* Disable indented code blocks. (Only fenced code works.) */
|
||||||
|
#define MD_FLAG_NOHTMLBLOCKS 0x0020 /* Disable raw HTML blocks. */
|
||||||
|
#define MD_FLAG_NOHTMLSPANS 0x0040 /* Disable raw HTML (inline). */
|
||||||
|
#define MD_FLAG_TABLES 0x0100 /* Enable tables extension. */
|
||||||
|
#define MD_FLAG_STRIKETHROUGH 0x0200 /* Enable strikethrough extension. */
|
||||||
|
#define MD_FLAG_PERMISSIVEWWWAUTOLINKS 0x0400 /* Enable WWW autolinks (even without any scheme prefix, if they begin with 'www.') */
|
||||||
|
#define MD_FLAG_TASKLISTS 0x0800 /* Enable task list extension. */
|
||||||
|
#define MD_FLAG_LATEXMATHSPANS 0x1000 /* Enable $ and $$ containing LaTeX equations. */
|
||||||
|
#define MD_FLAG_WIKILINKS 0x2000 /* Enable wiki links extension. */
|
||||||
|
#define MD_FLAG_UNDERLINE 0x4000 /* Enable underline extension (and disables '_' for normal emphasis). */
|
||||||
|
#define MD_FLAG_HARD_SOFT_BREAKS 0x8000 /* Force all soft breaks to act as hard breaks. */
|
||||||
|
|
||||||
|
#define MD_FLAG_PERMISSIVEAUTOLINKS (MD_FLAG_PERMISSIVEEMAILAUTOLINKS | MD_FLAG_PERMISSIVEURLAUTOLINKS | MD_FLAG_PERMISSIVEWWWAUTOLINKS)
|
||||||
|
#define MD_FLAG_NOHTML (MD_FLAG_NOHTMLBLOCKS | MD_FLAG_NOHTMLSPANS)
|
||||||
|
|
||||||
|
/* Convenient sets of flags corresponding to well-known Markdown dialects.
|
||||||
|
*
|
||||||
|
* Note we may only support subset of features of the referred dialect.
|
||||||
|
* The constant just enables those extensions which bring us as close as
|
||||||
|
* possible given what features we implement.
|
||||||
|
*
|
||||||
|
* ABI compatibility note: Meaning of these can change in time as new
|
||||||
|
* extensions, bringing the dialect closer to the original, are implemented.
|
||||||
|
*/
|
||||||
|
#define MD_DIALECT_COMMONMARK 0
|
||||||
|
#define MD_DIALECT_GITHUB (MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_TABLES | MD_FLAG_STRIKETHROUGH | MD_FLAG_TASKLISTS)
|
||||||
|
|
||||||
|
/* Parser structure.
|
||||||
|
*/
|
||||||
|
typedef struct MD_PARSER {
|
||||||
|
/* Reserved. Set to zero.
|
||||||
|
*/
|
||||||
|
unsigned abi_version;
|
||||||
|
|
||||||
|
/* Dialect options. Bitmask of MD_FLAG_xxxx values.
|
||||||
|
*/
|
||||||
|
unsigned flags;
|
||||||
|
|
||||||
|
/* Caller-provided rendering callbacks.
|
||||||
|
*
|
||||||
|
* For some block/span types, more detailed information is provided in a
|
||||||
|
* type-specific structure pointed by the argument 'detail'.
|
||||||
|
*
|
||||||
|
* The last argument of all callbacks, 'userdata', is just propagated from
|
||||||
|
* md_parse() and is available for any use by the application.
|
||||||
|
*
|
||||||
|
* Note any strings provided to the callbacks as their arguments or as
|
||||||
|
* members of any detail structure are generally not zero-terminated.
|
||||||
|
* Application has to take the respective size information into account.
|
||||||
|
*
|
||||||
|
* Any rendering callback may abort further parsing of the document by
|
||||||
|
* returning non-zero.
|
||||||
|
*/
|
||||||
|
int (*enter_block)(MD_BLOCKTYPE /*type*/, void* /*detail*/, void* /*userdata*/);
|
||||||
|
int (*leave_block)(MD_BLOCKTYPE /*type*/, void* /*detail*/, void* /*userdata*/);
|
||||||
|
|
||||||
|
int (*enter_span)(MD_SPANTYPE /*type*/, void* /*detail*/, void* /*userdata*/);
|
||||||
|
int (*leave_span)(MD_SPANTYPE /*type*/, void* /*detail*/, void* /*userdata*/);
|
||||||
|
|
||||||
|
int (*text)(MD_TEXTTYPE /*type*/, const MD_CHAR* /*text*/, MD_SIZE /*size*/, void* /*userdata*/);
|
||||||
|
|
||||||
|
/* Debug callback. Optional (may be NULL).
|
||||||
|
*
|
||||||
|
* If provided and something goes wrong, this function gets called.
|
||||||
|
* This is intended for debugging and problem diagnosis for developers;
|
||||||
|
* it is not intended to provide any errors suitable for displaying to an
|
||||||
|
* end user.
|
||||||
|
*/
|
||||||
|
void (*debug_log)(const char* /*msg*/, void* /*userdata*/);
|
||||||
|
|
||||||
|
/* Reserved. Set to NULL.
|
||||||
|
*/
|
||||||
|
void (*syntax)(void);
|
||||||
|
} MD_PARSER;
|
||||||
|
|
||||||
|
|
||||||
|
/* For backward compatibility. Do not use in new code.
|
||||||
|
*/
|
||||||
|
typedef MD_PARSER MD_RENDERER;
|
||||||
|
|
||||||
|
|
||||||
|
/* Parse the Markdown document stored in the string 'text' of size 'size'.
|
||||||
|
* The parser provides callbacks to be called during the parsing so the
|
||||||
|
* caller can render the document on the screen or convert the Markdown
|
||||||
|
* to another format.
|
||||||
|
*
|
||||||
|
* Zero is returned on success. If a runtime error occurs (e.g. a memory
|
||||||
|
* fails), -1 is returned. If the processing is aborted due any callback
|
||||||
|
* returning non-zero, the return value of the callback is returned.
|
||||||
|
*/
|
||||||
|
int md_parse(const MD_CHAR* text, MD_SIZE size, const MD_PARSER* parser, void* userdata);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" { */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* MD4C_H */
|
|
@ -0,0 +1,291 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const clap = @import("clap");
|
||||||
|
const md4c = @import("md4c_h.zig");
|
||||||
|
const ansi = @import("ansi-term");
|
||||||
|
const cstdio = @cImport({
|
||||||
|
@cInclude("stdio.h");
|
||||||
|
});
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
defer _ = gpa.deinit();
|
||||||
|
|
||||||
|
const params = comptime clap.parseParamsComptime(
|
||||||
|
\\-h, --help display this help and exit
|
||||||
|
\\<FILE> file to read from, if empty or "-" use stdin.
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
|
||||||
|
const parsers = comptime .{
|
||||||
|
.FILE = clap.parsers.string,
|
||||||
|
};
|
||||||
|
|
||||||
|
var diag = clap.Diagnostic{};
|
||||||
|
var res = clap.parse(clap.Help, ¶ms, parsers, .{
|
||||||
|
.diagnostic = &diag,
|
||||||
|
.allocator = gpa.allocator(),
|
||||||
|
}) catch |err| {
|
||||||
|
diag.report(std.io.getStdErr().writer(), err) catch {};
|
||||||
|
return err;
|
||||||
|
};
|
||||||
|
defer res.deinit();
|
||||||
|
|
||||||
|
var reader: std.io.AnyReader = undefined;
|
||||||
|
if (res.positionals.len < 1) {
|
||||||
|
reader = std.io.getStdIn().reader().any();
|
||||||
|
} else {
|
||||||
|
const filename = res.positionals[0];
|
||||||
|
const cwd = std.fs.cwd();
|
||||||
|
reader = (cwd.openFile(filename, .{}) catch errorexit(13, "failed to open file D:\n")).reader().any();
|
||||||
|
}
|
||||||
|
|
||||||
|
const stdout_file = std.io.getStdOut().writer();
|
||||||
|
var bw = std.io.bufferedWriter(stdout_file);
|
||||||
|
const stdout = bw.writer();
|
||||||
|
|
||||||
|
var state = State{
|
||||||
|
.writer = stdout.any(),
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = reader.readAllAlloc(gpa.allocator(), std.math.maxInt(usize)) catch errorexit(5, "failed to read from input stream D:");
|
||||||
|
|
||||||
|
_ = md4c.md_parse(@ptrCast(data), @intCast(data.len), &parser, @ptrCast(&state));
|
||||||
|
|
||||||
|
gpa.allocator().free(data);
|
||||||
|
|
||||||
|
try stdout.writeByte('\n');
|
||||||
|
|
||||||
|
try bw.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
const State = struct {
|
||||||
|
writer: std.io.AnyWriter,
|
||||||
|
last_style: ansi.style.Style = .{},
|
||||||
|
nested_bold_count: u16 = 0,
|
||||||
|
nested_italic_count: u16 = 0,
|
||||||
|
nested_strike_count: u16 = 0,
|
||||||
|
nested_underline_count: u16 = 0,
|
||||||
|
|
||||||
|
fn update_style(self: *State, new: ansi.style.Style) void {
|
||||||
|
ansi.format.updateStyle(self.writer, new, self.last_style) catch errorexit(1, "failed to output ansi style D:");
|
||||||
|
self.last_style = new;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_bold(self: *State) void {
|
||||||
|
var temp_style = self.last_style;
|
||||||
|
temp_style.font_style.bold = self.nested_bold_count > 0;
|
||||||
|
self.update_style(temp_style);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_italic(self: *State) void {
|
||||||
|
var temp_style = self.last_style;
|
||||||
|
temp_style.font_style.italic = self.nested_italic_count > 0;
|
||||||
|
self.update_style(temp_style);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_strike(self: *State) void {
|
||||||
|
var temp_style = self.last_style;
|
||||||
|
temp_style.font_style.crossedout = self.nested_strike_count > 0;
|
||||||
|
self.update_style(temp_style);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_underline(self: *State) void {
|
||||||
|
var temp_style = self.last_style;
|
||||||
|
temp_style.font_style.underline = self.nested_underline_count > 0;
|
||||||
|
self.update_style(temp_style);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fn enter_block(blocktype: md4c.MD_BLOCKTYPE, detail: ?*anyopaque, userdata: ?*anyopaque) callconv(.C) c_int {
|
||||||
|
//std.debug.print("enter {d}\n", .{blocktype});
|
||||||
|
const state: *State = @ptrCast(@alignCast(userdata));
|
||||||
|
|
||||||
|
if (blocktype == md4c.MD_BLOCK_H) {
|
||||||
|
just_write(state.writer, "\n");
|
||||||
|
const h_detail: *md4c.MD_BLOCK_H_DETAIL = @ptrCast(@alignCast(detail));
|
||||||
|
var temp_style = state.last_style;
|
||||||
|
temp_style.font_style.dim = true;
|
||||||
|
temp_style.font_style.bold = true;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
for (0..h_detail.level) |_| {
|
||||||
|
just_write(state.writer, "#");
|
||||||
|
}
|
||||||
|
temp_style.font_style.dim = false;
|
||||||
|
temp_style.font_style.bold = state.nested_bold_count > 0;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
just_write(state.writer, " ");
|
||||||
|
}
|
||||||
|
if (blocktype == md4c.MD_BLOCK_LI) {
|
||||||
|
const li_detail: *md4c.MD_BLOCK_LI_DETAIL = @ptrCast(@alignCast(detail));
|
||||||
|
var temp_style = state.last_style;
|
||||||
|
if (li_detail.is_task == 0) temp_style.font_style.dim = true;
|
||||||
|
temp_style.font_style.bold = true;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
if (li_detail.is_task == 0) {
|
||||||
|
just_write(state.writer, "• ");
|
||||||
|
} else {
|
||||||
|
if (li_detail.task_mark == 'x' or li_detail.task_mark == 'X') {
|
||||||
|
just_write(state.writer, "☑ ");
|
||||||
|
} else {
|
||||||
|
just_write(state.writer, "☐ ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
temp_style.font_style.dim = false;
|
||||||
|
temp_style.font_style.bold = state.nested_bold_count > 0;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
}
|
||||||
|
if (blocktype == md4c.MD_BLOCK_UL or blocktype == md4c.MD_BLOCK_OL) {
|
||||||
|
just_write(state.writer, "\n");
|
||||||
|
}
|
||||||
|
return 0; // TODO what does the return value represent ????
|
||||||
|
}
|
||||||
|
|
||||||
|
fn leave_block(blocktype: md4c.MD_BLOCKTYPE, detail: ?*anyopaque, userdata: ?*anyopaque) callconv(.C) c_int {
|
||||||
|
//std.debug.print("leave {d}\n", .{blocktype});
|
||||||
|
const state: *State = @ptrCast(@alignCast(userdata));
|
||||||
|
|
||||||
|
if (blocktype == md4c.MD_BLOCK_H) {
|
||||||
|
just_write(state.writer, "\n\n");
|
||||||
|
}
|
||||||
|
if (blocktype == md4c.MD_BLOCK_P or blocktype == md4c.MD_BLOCK_LI) {
|
||||||
|
just_write(state.writer, "\n");
|
||||||
|
}
|
||||||
|
if (blocktype == md4c.MD_BLOCK_HR) {
|
||||||
|
var winsize: std.c.winsize = undefined;
|
||||||
|
var temp_style = state.last_style;
|
||||||
|
temp_style.font_style.dim = true;
|
||||||
|
temp_style.font_style.bold = true;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
const term_name_c = cstdio.ctermid(null);
|
||||||
|
const term_name = std.mem.sliceTo(term_name_c, 0);
|
||||||
|
const term_fd = std.posix.open(term_name, .{}, 0) catch errorexit(5, "failed to open terminal D:\n");
|
||||||
|
if (std.c.ioctl(term_fd, std.c.T.IOCGWINSZ, &winsize) != -1) {
|
||||||
|
for (0..winsize.ws_col) |_| {
|
||||||
|
just_write(state.writer, "-");
|
||||||
|
}
|
||||||
|
just_write(state.writer, "\n");
|
||||||
|
} else {
|
||||||
|
just_write(state.writer, "---\n");
|
||||||
|
}
|
||||||
|
temp_style.font_style.dim = false;
|
||||||
|
temp_style.font_style.bold = state.nested_bold_count > 0;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
}
|
||||||
|
if (blocktype == md4c.MD_BLOCK_UL or blocktype == md4c.MD_BLOCK_OL) {
|
||||||
|
just_write(state.writer, "\n");
|
||||||
|
}
|
||||||
|
_ = detail;
|
||||||
|
return 0; // TODO what does the return value represent ????
|
||||||
|
}
|
||||||
|
|
||||||
|
fn enter_span(spantype: md4c.MD_SPANTYPE, detail: ?*anyopaque, userdata: ?*anyopaque) callconv(.C) c_int {
|
||||||
|
const state: *State = @ptrCast(@alignCast(userdata));
|
||||||
|
if (spantype == md4c.MD_SPAN_STRONG) {
|
||||||
|
state.nested_bold_count +|= 1;
|
||||||
|
state.update_bold();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_EM) {
|
||||||
|
state.nested_italic_count +|= 1;
|
||||||
|
state.update_italic();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_DEL) {
|
||||||
|
state.nested_strike_count +|= 1;
|
||||||
|
state.update_strike();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_U) {
|
||||||
|
state.nested_underline_count +|= 1;
|
||||||
|
state.update_underline();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_A) {
|
||||||
|
var temp_style = state.last_style;
|
||||||
|
temp_style.foreground = .Blue;
|
||||||
|
temp_style.font_style.underline = true;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
just_write(state.writer, "\x1b]8;;");
|
||||||
|
const detail_a: *md4c.MD_SPAN_A_DETAIL = @ptrCast(@alignCast(detail));
|
||||||
|
const link_c = detail_a.href.text;
|
||||||
|
const link = link_c[0..detail_a.href.size];
|
||||||
|
just_write(state.writer, link);
|
||||||
|
just_write(state.writer, "\x07");
|
||||||
|
}
|
||||||
|
// TODO emit ansi to the writer
|
||||||
|
return 0; // TODO what does the return value represent ????
|
||||||
|
}
|
||||||
|
|
||||||
|
fn leave_span(spantype: md4c.MD_SPANTYPE, detail: ?*anyopaque, userdata: ?*anyopaque) callconv(.C) c_int {
|
||||||
|
_ = detail;
|
||||||
|
const state: *State = @ptrCast(@alignCast(userdata));
|
||||||
|
if (spantype == md4c.MD_SPAN_STRONG) {
|
||||||
|
state.nested_bold_count -|= 1;
|
||||||
|
state.update_bold();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_EM) {
|
||||||
|
state.nested_italic_count -|= 1;
|
||||||
|
state.update_italic();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_DEL) {
|
||||||
|
state.nested_strike_count -|= 1;
|
||||||
|
state.update_strike();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_U) {
|
||||||
|
state.nested_underline_count -|= 1;
|
||||||
|
state.update_underline();
|
||||||
|
}
|
||||||
|
if (spantype == md4c.MD_SPAN_A) {
|
||||||
|
just_write(state.writer, "\x1b]8;;\x07");
|
||||||
|
var temp_style = state.last_style;
|
||||||
|
temp_style.foreground = .Default;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
state.update_underline();
|
||||||
|
}
|
||||||
|
// TODO emit ansi to the writer
|
||||||
|
return 0; // TODO what does the return value represent ????
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_text(texttype: md4c.MD_TEXTTYPE, text: [*c]const md4c.MD_CHAR, size: md4c.MD_SIZE, userdata: ?*anyopaque) callconv(.C) c_int {
|
||||||
|
const state: *State = @ptrCast(@alignCast(userdata));
|
||||||
|
|
||||||
|
const text_data: []const u8 = @ptrCast(text[0..size]);
|
||||||
|
|
||||||
|
if (texttype == md4c.MD_TEXT_NORMAL) {
|
||||||
|
just_write(state.writer, text_data);
|
||||||
|
}
|
||||||
|
if (texttype == md4c.MD_TEXT_NULLCHAR) {
|
||||||
|
just_write(state.writer, "<EFBFBD>");
|
||||||
|
}
|
||||||
|
if (texttype == md4c.MD_TEXT_BR) {
|
||||||
|
just_write(state.writer, "\n");
|
||||||
|
}
|
||||||
|
if (texttype == md4c.MD_TEXT_CODE) {
|
||||||
|
var temp_style = state.last_style;
|
||||||
|
temp_style.font_style.dim = true;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
just_write(state.writer, text_data);
|
||||||
|
temp_style.font_style.dim = false;
|
||||||
|
state.update_style(temp_style);
|
||||||
|
}
|
||||||
|
return 0; // TODO what does the return value represent ????
|
||||||
|
}
|
||||||
|
|
||||||
|
const parser: md4c.MD_PARSER = .{
|
||||||
|
.abi_version = @intCast(0),
|
||||||
|
.flags = md4c.MD_FLAG_UNDERLINE | md4c.MD_FLAG_STRIKETHROUGH | md4c.MD_FLAG_COLLAPSEWHITESPACE | md4c.MD_FLAG_TASKLISTS | md4c.MD_FLAG_UNDERLINE,
|
||||||
|
|
||||||
|
.enter_block = &enter_block,
|
||||||
|
.leave_block = &leave_block,
|
||||||
|
.enter_span = &enter_span,
|
||||||
|
.leave_span = &leave_span,
|
||||||
|
.text = &on_text,
|
||||||
|
|
||||||
|
.debug_log = null,
|
||||||
|
.syntax = null,
|
||||||
|
};
|
||||||
|
|
||||||
|
fn errorexit(code: u8, comptime msg: []const u8) noreturn {
|
||||||
|
std.debug.print(msg, .{});
|
||||||
|
std.process.exit(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn just_write(writer: std.io.AnyWriter, data: []const u8) void {
|
||||||
|
writer.writeAll(data) catch errorexit(5, "failed to write to output D:\n");
|
||||||
|
}
|
|
@ -0,0 +1,631 @@
|
||||||
|
pub const __builtin_bswap16 = @import("std").zig.c_builtins.__builtin_bswap16;
|
||||||
|
pub const __builtin_bswap32 = @import("std").zig.c_builtins.__builtin_bswap32;
|
||||||
|
pub const __builtin_bswap64 = @import("std").zig.c_builtins.__builtin_bswap64;
|
||||||
|
pub const __builtin_signbit = @import("std").zig.c_builtins.__builtin_signbit;
|
||||||
|
pub const __builtin_signbitf = @import("std").zig.c_builtins.__builtin_signbitf;
|
||||||
|
pub const __builtin_popcount = @import("std").zig.c_builtins.__builtin_popcount;
|
||||||
|
pub const __builtin_ctz = @import("std").zig.c_builtins.__builtin_ctz;
|
||||||
|
pub const __builtin_clz = @import("std").zig.c_builtins.__builtin_clz;
|
||||||
|
pub const __builtin_sqrt = @import("std").zig.c_builtins.__builtin_sqrt;
|
||||||
|
pub const __builtin_sqrtf = @import("std").zig.c_builtins.__builtin_sqrtf;
|
||||||
|
pub const __builtin_sin = @import("std").zig.c_builtins.__builtin_sin;
|
||||||
|
pub const __builtin_sinf = @import("std").zig.c_builtins.__builtin_sinf;
|
||||||
|
pub const __builtin_cos = @import("std").zig.c_builtins.__builtin_cos;
|
||||||
|
pub const __builtin_cosf = @import("std").zig.c_builtins.__builtin_cosf;
|
||||||
|
pub const __builtin_exp = @import("std").zig.c_builtins.__builtin_exp;
|
||||||
|
pub const __builtin_expf = @import("std").zig.c_builtins.__builtin_expf;
|
||||||
|
pub const __builtin_exp2 = @import("std").zig.c_builtins.__builtin_exp2;
|
||||||
|
pub const __builtin_exp2f = @import("std").zig.c_builtins.__builtin_exp2f;
|
||||||
|
pub const __builtin_log = @import("std").zig.c_builtins.__builtin_log;
|
||||||
|
pub const __builtin_logf = @import("std").zig.c_builtins.__builtin_logf;
|
||||||
|
pub const __builtin_log2 = @import("std").zig.c_builtins.__builtin_log2;
|
||||||
|
pub const __builtin_log2f = @import("std").zig.c_builtins.__builtin_log2f;
|
||||||
|
pub const __builtin_log10 = @import("std").zig.c_builtins.__builtin_log10;
|
||||||
|
pub const __builtin_log10f = @import("std").zig.c_builtins.__builtin_log10f;
|
||||||
|
pub const __builtin_abs = @import("std").zig.c_builtins.__builtin_abs;
|
||||||
|
pub const __builtin_labs = @import("std").zig.c_builtins.__builtin_labs;
|
||||||
|
pub const __builtin_llabs = @import("std").zig.c_builtins.__builtin_llabs;
|
||||||
|
pub const __builtin_fabs = @import("std").zig.c_builtins.__builtin_fabs;
|
||||||
|
pub const __builtin_fabsf = @import("std").zig.c_builtins.__builtin_fabsf;
|
||||||
|
pub const __builtin_floor = @import("std").zig.c_builtins.__builtin_floor;
|
||||||
|
pub const __builtin_floorf = @import("std").zig.c_builtins.__builtin_floorf;
|
||||||
|
pub const __builtin_ceil = @import("std").zig.c_builtins.__builtin_ceil;
|
||||||
|
pub const __builtin_ceilf = @import("std").zig.c_builtins.__builtin_ceilf;
|
||||||
|
pub const __builtin_trunc = @import("std").zig.c_builtins.__builtin_trunc;
|
||||||
|
pub const __builtin_truncf = @import("std").zig.c_builtins.__builtin_truncf;
|
||||||
|
pub const __builtin_round = @import("std").zig.c_builtins.__builtin_round;
|
||||||
|
pub const __builtin_roundf = @import("std").zig.c_builtins.__builtin_roundf;
|
||||||
|
pub const __builtin_strlen = @import("std").zig.c_builtins.__builtin_strlen;
|
||||||
|
pub const __builtin_strcmp = @import("std").zig.c_builtins.__builtin_strcmp;
|
||||||
|
pub const __builtin_object_size = @import("std").zig.c_builtins.__builtin_object_size;
|
||||||
|
pub const __builtin___memset_chk = @import("std").zig.c_builtins.__builtin___memset_chk;
|
||||||
|
pub const __builtin_memset = @import("std").zig.c_builtins.__builtin_memset;
|
||||||
|
pub const __builtin___memcpy_chk = @import("std").zig.c_builtins.__builtin___memcpy_chk;
|
||||||
|
pub const __builtin_memcpy = @import("std").zig.c_builtins.__builtin_memcpy;
|
||||||
|
pub const __builtin_expect = @import("std").zig.c_builtins.__builtin_expect;
|
||||||
|
pub const __builtin_nanf = @import("std").zig.c_builtins.__builtin_nanf;
|
||||||
|
pub const __builtin_huge_valf = @import("std").zig.c_builtins.__builtin_huge_valf;
|
||||||
|
pub const __builtin_inff = @import("std").zig.c_builtins.__builtin_inff;
|
||||||
|
pub const __builtin_isnan = @import("std").zig.c_builtins.__builtin_isnan;
|
||||||
|
pub const __builtin_isinf = @import("std").zig.c_builtins.__builtin_isinf;
|
||||||
|
pub const __builtin_isinf_sign = @import("std").zig.c_builtins.__builtin_isinf_sign;
|
||||||
|
pub const __has_builtin = @import("std").zig.c_builtins.__has_builtin;
|
||||||
|
pub const __builtin_assume = @import("std").zig.c_builtins.__builtin_assume;
|
||||||
|
pub const __builtin_unreachable = @import("std").zig.c_builtins.__builtin_unreachable;
|
||||||
|
pub const __builtin_constant_p = @import("std").zig.c_builtins.__builtin_constant_p;
|
||||||
|
pub const __builtin_mul_overflow = @import("std").zig.c_builtins.__builtin_mul_overflow;
|
||||||
|
pub const MD_CHAR = u8;
|
||||||
|
pub const MD_SIZE = c_uint;
|
||||||
|
pub const MD_OFFSET = c_uint;
|
||||||
|
pub const MD_BLOCK_DOC: c_int = 0;
|
||||||
|
pub const MD_BLOCK_QUOTE: c_int = 1;
|
||||||
|
pub const MD_BLOCK_UL: c_int = 2;
|
||||||
|
pub const MD_BLOCK_OL: c_int = 3;
|
||||||
|
pub const MD_BLOCK_LI: c_int = 4;
|
||||||
|
pub const MD_BLOCK_HR: c_int = 5;
|
||||||
|
pub const MD_BLOCK_H: c_int = 6;
|
||||||
|
pub const MD_BLOCK_CODE: c_int = 7;
|
||||||
|
pub const MD_BLOCK_HTML: c_int = 8;
|
||||||
|
pub const MD_BLOCK_P: c_int = 9;
|
||||||
|
pub const MD_BLOCK_TABLE: c_int = 10;
|
||||||
|
pub const MD_BLOCK_THEAD: c_int = 11;
|
||||||
|
pub const MD_BLOCK_TBODY: c_int = 12;
|
||||||
|
pub const MD_BLOCK_TR: c_int = 13;
|
||||||
|
pub const MD_BLOCK_TH: c_int = 14;
|
||||||
|
pub const MD_BLOCK_TD: c_int = 15;
|
||||||
|
pub const enum_MD_BLOCKTYPE = c_uint;
|
||||||
|
pub const MD_BLOCKTYPE = enum_MD_BLOCKTYPE;
|
||||||
|
pub const MD_SPAN_EM: c_int = 0;
|
||||||
|
pub const MD_SPAN_STRONG: c_int = 1;
|
||||||
|
pub const MD_SPAN_A: c_int = 2;
|
||||||
|
pub const MD_SPAN_IMG: c_int = 3;
|
||||||
|
pub const MD_SPAN_CODE: c_int = 4;
|
||||||
|
pub const MD_SPAN_DEL: c_int = 5;
|
||||||
|
pub const MD_SPAN_LATEXMATH: c_int = 6;
|
||||||
|
pub const MD_SPAN_LATEXMATH_DISPLAY: c_int = 7;
|
||||||
|
pub const MD_SPAN_WIKILINK: c_int = 8;
|
||||||
|
pub const MD_SPAN_U: c_int = 9;
|
||||||
|
pub const enum_MD_SPANTYPE = c_uint;
|
||||||
|
pub const MD_SPANTYPE = enum_MD_SPANTYPE;
|
||||||
|
pub const MD_TEXT_NORMAL: c_int = 0;
|
||||||
|
pub const MD_TEXT_NULLCHAR: c_int = 1;
|
||||||
|
pub const MD_TEXT_BR: c_int = 2;
|
||||||
|
pub const MD_TEXT_SOFTBR: c_int = 3;
|
||||||
|
pub const MD_TEXT_ENTITY: c_int = 4;
|
||||||
|
pub const MD_TEXT_CODE: c_int = 5;
|
||||||
|
pub const MD_TEXT_HTML: c_int = 6;
|
||||||
|
pub const MD_TEXT_LATEXMATH: c_int = 7;
|
||||||
|
pub const enum_MD_TEXTTYPE = c_uint;
|
||||||
|
pub const MD_TEXTTYPE = enum_MD_TEXTTYPE;
|
||||||
|
pub const MD_ALIGN_DEFAULT: c_int = 0;
|
||||||
|
pub const MD_ALIGN_LEFT: c_int = 1;
|
||||||
|
pub const MD_ALIGN_CENTER: c_int = 2;
|
||||||
|
pub const MD_ALIGN_RIGHT: c_int = 3;
|
||||||
|
pub const enum_MD_ALIGN = c_uint;
|
||||||
|
pub const MD_ALIGN = enum_MD_ALIGN;
|
||||||
|
pub const struct_MD_ATTRIBUTE = extern struct {
|
||||||
|
text: [*c]const MD_CHAR = @import("std").mem.zeroes([*c]const MD_CHAR),
|
||||||
|
size: MD_SIZE = @import("std").mem.zeroes(MD_SIZE),
|
||||||
|
substr_types: [*c]const MD_TEXTTYPE = @import("std").mem.zeroes([*c]const MD_TEXTTYPE),
|
||||||
|
substr_offsets: [*c]const MD_OFFSET = @import("std").mem.zeroes([*c]const MD_OFFSET),
|
||||||
|
};
|
||||||
|
pub const MD_ATTRIBUTE = struct_MD_ATTRIBUTE;
|
||||||
|
pub const struct_MD_BLOCK_UL_DETAIL = extern struct {
|
||||||
|
is_tight: c_int = @import("std").mem.zeroes(c_int),
|
||||||
|
mark: MD_CHAR = @import("std").mem.zeroes(MD_CHAR),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_UL_DETAIL = struct_MD_BLOCK_UL_DETAIL;
|
||||||
|
pub const struct_MD_BLOCK_OL_DETAIL = extern struct {
|
||||||
|
start: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
is_tight: c_int = @import("std").mem.zeroes(c_int),
|
||||||
|
mark_delimiter: MD_CHAR = @import("std").mem.zeroes(MD_CHAR),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_OL_DETAIL = struct_MD_BLOCK_OL_DETAIL;
|
||||||
|
pub const struct_MD_BLOCK_LI_DETAIL = extern struct {
|
||||||
|
is_task: c_int = @import("std").mem.zeroes(c_int),
|
||||||
|
task_mark: MD_CHAR = @import("std").mem.zeroes(MD_CHAR),
|
||||||
|
task_mark_offset: MD_OFFSET = @import("std").mem.zeroes(MD_OFFSET),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_LI_DETAIL = struct_MD_BLOCK_LI_DETAIL;
|
||||||
|
pub const struct_MD_BLOCK_H_DETAIL = extern struct {
|
||||||
|
level: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_H_DETAIL = struct_MD_BLOCK_H_DETAIL;
|
||||||
|
pub const struct_MD_BLOCK_CODE_DETAIL = extern struct {
|
||||||
|
info: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
lang: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
fence_char: MD_CHAR = @import("std").mem.zeroes(MD_CHAR),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_CODE_DETAIL = struct_MD_BLOCK_CODE_DETAIL;
|
||||||
|
pub const struct_MD_BLOCK_TABLE_DETAIL = extern struct {
|
||||||
|
col_count: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
head_row_count: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
body_row_count: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_TABLE_DETAIL = struct_MD_BLOCK_TABLE_DETAIL;
|
||||||
|
pub const struct_MD_BLOCK_TD_DETAIL = extern struct {
|
||||||
|
@"align": MD_ALIGN = @import("std").mem.zeroes(MD_ALIGN),
|
||||||
|
};
|
||||||
|
pub const MD_BLOCK_TD_DETAIL = struct_MD_BLOCK_TD_DETAIL;
|
||||||
|
pub const struct_MD_SPAN_A_DETAIL = extern struct {
|
||||||
|
href: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
title: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
is_autolink: c_int = @import("std").mem.zeroes(c_int),
|
||||||
|
};
|
||||||
|
pub const MD_SPAN_A_DETAIL = struct_MD_SPAN_A_DETAIL;
|
||||||
|
pub const struct_MD_SPAN_IMG_DETAIL = extern struct {
|
||||||
|
src: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
title: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
};
|
||||||
|
pub const MD_SPAN_IMG_DETAIL = struct_MD_SPAN_IMG_DETAIL;
|
||||||
|
pub const struct_MD_SPAN_WIKILINK = extern struct {
|
||||||
|
target: MD_ATTRIBUTE = @import("std").mem.zeroes(MD_ATTRIBUTE),
|
||||||
|
};
|
||||||
|
pub const MD_SPAN_WIKILINK_DETAIL = struct_MD_SPAN_WIKILINK;
|
||||||
|
pub const struct_MD_PARSER = extern struct {
|
||||||
|
abi_version: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
flags: c_uint = @import("std").mem.zeroes(c_uint),
|
||||||
|
enter_block: ?*const fn (MD_BLOCKTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int = @import("std").mem.zeroes(?*const fn (MD_BLOCKTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int),
|
||||||
|
leave_block: ?*const fn (MD_BLOCKTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int = @import("std").mem.zeroes(?*const fn (MD_BLOCKTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int),
|
||||||
|
enter_span: ?*const fn (MD_SPANTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int = @import("std").mem.zeroes(?*const fn (MD_SPANTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int),
|
||||||
|
leave_span: ?*const fn (MD_SPANTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int = @import("std").mem.zeroes(?*const fn (MD_SPANTYPE, ?*anyopaque, ?*anyopaque) callconv(.C) c_int),
|
||||||
|
text: ?*const fn (MD_TEXTTYPE, [*c]const MD_CHAR, MD_SIZE, ?*anyopaque) callconv(.C) c_int = @import("std").mem.zeroes(?*const fn (MD_TEXTTYPE, [*c]const MD_CHAR, MD_SIZE, ?*anyopaque) callconv(.C) c_int),
|
||||||
|
debug_log: ?*const fn ([*c]const u8, ?*anyopaque) callconv(.C) void = @import("std").mem.zeroes(?*const fn ([*c]const u8, ?*anyopaque) callconv(.C) void),
|
||||||
|
syntax: ?*const fn () callconv(.C) void = @import("std").mem.zeroes(?*const fn () callconv(.C) void),
|
||||||
|
};
|
||||||
|
pub const MD_PARSER = struct_MD_PARSER;
|
||||||
|
pub const MD_RENDERER = MD_PARSER;
|
||||||
|
pub extern fn md_parse(text: [*c]const MD_CHAR, size: MD_SIZE, parser: [*c]const MD_PARSER, userdata: ?*anyopaque) c_int;
|
||||||
|
pub const __llvm__ = @as(c_int, 1);
|
||||||
|
pub const __clang__ = @as(c_int, 1);
|
||||||
|
pub const __clang_major__ = @as(c_int, 18);
|
||||||
|
pub const __clang_minor__ = @as(c_int, 1);
|
||||||
|
pub const __clang_patchlevel__ = @as(c_int, 6);
|
||||||
|
pub const __clang_version__ = "18.1.6 (https://github.com/ziglang/zig-bootstrap 98bc6bf4fc4009888d33941daf6b600d20a42a56)";
|
||||||
|
pub const __GNUC__ = @as(c_int, 4);
|
||||||
|
pub const __GNUC_MINOR__ = @as(c_int, 2);
|
||||||
|
pub const __GNUC_PATCHLEVEL__ = @as(c_int, 1);
|
||||||
|
pub const __GXX_ABI_VERSION = @as(c_int, 1002);
|
||||||
|
pub const __ATOMIC_RELAXED = @as(c_int, 0);
|
||||||
|
pub const __ATOMIC_CONSUME = @as(c_int, 1);
|
||||||
|
pub const __ATOMIC_ACQUIRE = @as(c_int, 2);
|
||||||
|
pub const __ATOMIC_RELEASE = @as(c_int, 3);
|
||||||
|
pub const __ATOMIC_ACQ_REL = @as(c_int, 4);
|
||||||
|
pub const __ATOMIC_SEQ_CST = @as(c_int, 5);
|
||||||
|
pub const __MEMORY_SCOPE_SYSTEM = @as(c_int, 0);
|
||||||
|
pub const __MEMORY_SCOPE_DEVICE = @as(c_int, 1);
|
||||||
|
pub const __MEMORY_SCOPE_WRKGRP = @as(c_int, 2);
|
||||||
|
pub const __MEMORY_SCOPE_WVFRNT = @as(c_int, 3);
|
||||||
|
pub const __MEMORY_SCOPE_SINGLE = @as(c_int, 4);
|
||||||
|
pub const __OPENCL_MEMORY_SCOPE_WORK_ITEM = @as(c_int, 0);
|
||||||
|
pub const __OPENCL_MEMORY_SCOPE_WORK_GROUP = @as(c_int, 1);
|
||||||
|
pub const __OPENCL_MEMORY_SCOPE_DEVICE = @as(c_int, 2);
|
||||||
|
pub const __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES = @as(c_int, 3);
|
||||||
|
pub const __OPENCL_MEMORY_SCOPE_SUB_GROUP = @as(c_int, 4);
|
||||||
|
pub const __FPCLASS_SNAN = @as(c_int, 0x0001);
|
||||||
|
pub const __FPCLASS_QNAN = @as(c_int, 0x0002);
|
||||||
|
pub const __FPCLASS_NEGINF = @as(c_int, 0x0004);
|
||||||
|
pub const __FPCLASS_NEGNORMAL = @as(c_int, 0x0008);
|
||||||
|
pub const __FPCLASS_NEGSUBNORMAL = @as(c_int, 0x0010);
|
||||||
|
pub const __FPCLASS_NEGZERO = @as(c_int, 0x0020);
|
||||||
|
pub const __FPCLASS_POSZERO = @as(c_int, 0x0040);
|
||||||
|
pub const __FPCLASS_POSSUBNORMAL = @as(c_int, 0x0080);
|
||||||
|
pub const __FPCLASS_POSNORMAL = @as(c_int, 0x0100);
|
||||||
|
pub const __FPCLASS_POSINF = @as(c_int, 0x0200);
|
||||||
|
pub const __PRAGMA_REDEFINE_EXTNAME = @as(c_int, 1);
|
||||||
|
pub const __VERSION__ = "Clang 18.1.6 (https://github.com/ziglang/zig-bootstrap 98bc6bf4fc4009888d33941daf6b600d20a42a56)";
|
||||||
|
pub const __OBJC_BOOL_IS_BOOL = @as(c_int, 0);
|
||||||
|
pub const __CONSTANT_CFSTRINGS__ = @as(c_int, 1);
|
||||||
|
pub const __clang_literal_encoding__ = "UTF-8";
|
||||||
|
pub const __clang_wide_literal_encoding__ = "UTF-32";
|
||||||
|
pub const __ORDER_LITTLE_ENDIAN__ = @as(c_int, 1234);
|
||||||
|
pub const __ORDER_BIG_ENDIAN__ = @as(c_int, 4321);
|
||||||
|
pub const __ORDER_PDP_ENDIAN__ = @as(c_int, 3412);
|
||||||
|
pub const __BYTE_ORDER__ = __ORDER_LITTLE_ENDIAN__;
|
||||||
|
pub const __LITTLE_ENDIAN__ = @as(c_int, 1);
|
||||||
|
pub const _LP64 = @as(c_int, 1);
|
||||||
|
pub const __LP64__ = @as(c_int, 1);
|
||||||
|
pub const __CHAR_BIT__ = @as(c_int, 8);
|
||||||
|
pub const __BOOL_WIDTH__ = @as(c_int, 8);
|
||||||
|
pub const __SHRT_WIDTH__ = @as(c_int, 16);
|
||||||
|
pub const __INT_WIDTH__ = @as(c_int, 32);
|
||||||
|
pub const __LONG_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __LLONG_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __BITINT_MAXWIDTH__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 8388608, .decimal);
|
||||||
|
pub const __SCHAR_MAX__ = @as(c_int, 127);
|
||||||
|
pub const __SHRT_MAX__ = @as(c_int, 32767);
|
||||||
|
pub const __INT_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
|
||||||
|
pub const __LONG_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __LONG_LONG_MAX__ = @as(c_longlong, 9223372036854775807);
|
||||||
|
pub const __WCHAR_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
|
||||||
|
pub const __WCHAR_WIDTH__ = @as(c_int, 32);
|
||||||
|
pub const __WINT_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
|
||||||
|
pub const __WINT_WIDTH__ = @as(c_int, 32);
|
||||||
|
pub const __INTMAX_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __INTMAX_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __SIZE_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
|
||||||
|
pub const __SIZE_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __UINTMAX_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
|
||||||
|
pub const __UINTMAX_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __PTRDIFF_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __PTRDIFF_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __INTPTR_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __INTPTR_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __UINTPTR_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
|
||||||
|
pub const __UINTPTR_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __SIZEOF_DOUBLE__ = @as(c_int, 8);
|
||||||
|
pub const __SIZEOF_FLOAT__ = @as(c_int, 4);
|
||||||
|
pub const __SIZEOF_INT__ = @as(c_int, 4);
|
||||||
|
pub const __SIZEOF_LONG__ = @as(c_int, 8);
|
||||||
|
pub const __SIZEOF_LONG_DOUBLE__ = @as(c_int, 16);
|
||||||
|
pub const __SIZEOF_LONG_LONG__ = @as(c_int, 8);
|
||||||
|
pub const __SIZEOF_POINTER__ = @as(c_int, 8);
|
||||||
|
pub const __SIZEOF_SHORT__ = @as(c_int, 2);
|
||||||
|
pub const __SIZEOF_PTRDIFF_T__ = @as(c_int, 8);
|
||||||
|
pub const __SIZEOF_SIZE_T__ = @as(c_int, 8);
|
||||||
|
pub const __SIZEOF_WCHAR_T__ = @as(c_int, 4);
|
||||||
|
pub const __SIZEOF_WINT_T__ = @as(c_int, 4);
|
||||||
|
pub const __SIZEOF_INT128__ = @as(c_int, 16);
|
||||||
|
pub const __INTMAX_TYPE__ = c_long;
|
||||||
|
pub const __INTMAX_FMTd__ = "ld";
|
||||||
|
pub const __INTMAX_FMTi__ = "li";
|
||||||
|
pub const __INTMAX_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `L`");
|
||||||
|
// (no file):95:9
|
||||||
|
pub const __UINTMAX_TYPE__ = c_ulong;
|
||||||
|
pub const __UINTMAX_FMTo__ = "lo";
|
||||||
|
pub const __UINTMAX_FMTu__ = "lu";
|
||||||
|
pub const __UINTMAX_FMTx__ = "lx";
|
||||||
|
pub const __UINTMAX_FMTX__ = "lX";
|
||||||
|
pub const __UINTMAX_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `UL`");
|
||||||
|
// (no file):101:9
|
||||||
|
pub const __PTRDIFF_TYPE__ = c_long;
|
||||||
|
pub const __PTRDIFF_FMTd__ = "ld";
|
||||||
|
pub const __PTRDIFF_FMTi__ = "li";
|
||||||
|
pub const __INTPTR_TYPE__ = c_long;
|
||||||
|
pub const __INTPTR_FMTd__ = "ld";
|
||||||
|
pub const __INTPTR_FMTi__ = "li";
|
||||||
|
pub const __SIZE_TYPE__ = c_ulong;
|
||||||
|
pub const __SIZE_FMTo__ = "lo";
|
||||||
|
pub const __SIZE_FMTu__ = "lu";
|
||||||
|
pub const __SIZE_FMTx__ = "lx";
|
||||||
|
pub const __SIZE_FMTX__ = "lX";
|
||||||
|
pub const __WCHAR_TYPE__ = c_int;
|
||||||
|
pub const __WINT_TYPE__ = c_uint;
|
||||||
|
pub const __SIG_ATOMIC_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
|
||||||
|
pub const __SIG_ATOMIC_WIDTH__ = @as(c_int, 32);
|
||||||
|
pub const __CHAR16_TYPE__ = c_ushort;
|
||||||
|
pub const __CHAR32_TYPE__ = c_uint;
|
||||||
|
pub const __UINTPTR_TYPE__ = c_ulong;
|
||||||
|
pub const __UINTPTR_FMTo__ = "lo";
|
||||||
|
pub const __UINTPTR_FMTu__ = "lu";
|
||||||
|
pub const __UINTPTR_FMTx__ = "lx";
|
||||||
|
pub const __UINTPTR_FMTX__ = "lX";
|
||||||
|
pub const __FLT16_DENORM_MIN__ = @as(f16, 5.9604644775390625e-8);
|
||||||
|
pub const __FLT16_HAS_DENORM__ = @as(c_int, 1);
|
||||||
|
pub const __FLT16_DIG__ = @as(c_int, 3);
|
||||||
|
pub const __FLT16_DECIMAL_DIG__ = @as(c_int, 5);
|
||||||
|
pub const __FLT16_EPSILON__ = @as(f16, 9.765625e-4);
|
||||||
|
pub const __FLT16_HAS_INFINITY__ = @as(c_int, 1);
|
||||||
|
pub const __FLT16_HAS_QUIET_NAN__ = @as(c_int, 1);
|
||||||
|
pub const __FLT16_MANT_DIG__ = @as(c_int, 11);
|
||||||
|
pub const __FLT16_MAX_10_EXP__ = @as(c_int, 4);
|
||||||
|
pub const __FLT16_MAX_EXP__ = @as(c_int, 16);
|
||||||
|
pub const __FLT16_MAX__ = @as(f16, 6.5504e+4);
|
||||||
|
pub const __FLT16_MIN_10_EXP__ = -@as(c_int, 4);
|
||||||
|
pub const __FLT16_MIN_EXP__ = -@as(c_int, 13);
|
||||||
|
pub const __FLT16_MIN__ = @as(f16, 6.103515625e-5);
|
||||||
|
pub const __FLT_DENORM_MIN__ = @as(f32, 1.40129846e-45);
|
||||||
|
pub const __FLT_HAS_DENORM__ = @as(c_int, 1);
|
||||||
|
pub const __FLT_DIG__ = @as(c_int, 6);
|
||||||
|
pub const __FLT_DECIMAL_DIG__ = @as(c_int, 9);
|
||||||
|
pub const __FLT_EPSILON__ = @as(f32, 1.19209290e-7);
|
||||||
|
pub const __FLT_HAS_INFINITY__ = @as(c_int, 1);
|
||||||
|
pub const __FLT_HAS_QUIET_NAN__ = @as(c_int, 1);
|
||||||
|
pub const __FLT_MANT_DIG__ = @as(c_int, 24);
|
||||||
|
pub const __FLT_MAX_10_EXP__ = @as(c_int, 38);
|
||||||
|
pub const __FLT_MAX_EXP__ = @as(c_int, 128);
|
||||||
|
pub const __FLT_MAX__ = @as(f32, 3.40282347e+38);
|
||||||
|
pub const __FLT_MIN_10_EXP__ = -@as(c_int, 37);
|
||||||
|
pub const __FLT_MIN_EXP__ = -@as(c_int, 125);
|
||||||
|
pub const __FLT_MIN__ = @as(f32, 1.17549435e-38);
|
||||||
|
pub const __DBL_DENORM_MIN__ = @as(f64, 4.9406564584124654e-324);
|
||||||
|
pub const __DBL_HAS_DENORM__ = @as(c_int, 1);
|
||||||
|
pub const __DBL_DIG__ = @as(c_int, 15);
|
||||||
|
pub const __DBL_DECIMAL_DIG__ = @as(c_int, 17);
|
||||||
|
pub const __DBL_EPSILON__ = @as(f64, 2.2204460492503131e-16);
|
||||||
|
pub const __DBL_HAS_INFINITY__ = @as(c_int, 1);
|
||||||
|
pub const __DBL_HAS_QUIET_NAN__ = @as(c_int, 1);
|
||||||
|
pub const __DBL_MANT_DIG__ = @as(c_int, 53);
|
||||||
|
pub const __DBL_MAX_10_EXP__ = @as(c_int, 308);
|
||||||
|
pub const __DBL_MAX_EXP__ = @as(c_int, 1024);
|
||||||
|
pub const __DBL_MAX__ = @as(f64, 1.7976931348623157e+308);
|
||||||
|
pub const __DBL_MIN_10_EXP__ = -@as(c_int, 307);
|
||||||
|
pub const __DBL_MIN_EXP__ = -@as(c_int, 1021);
|
||||||
|
pub const __DBL_MIN__ = @as(f64, 2.2250738585072014e-308);
|
||||||
|
pub const __LDBL_DENORM_MIN__ = @as(c_longdouble, 3.64519953188247460253e-4951);
|
||||||
|
pub const __LDBL_HAS_DENORM__ = @as(c_int, 1);
|
||||||
|
pub const __LDBL_DIG__ = @as(c_int, 18);
|
||||||
|
pub const __LDBL_DECIMAL_DIG__ = @as(c_int, 21);
|
||||||
|
pub const __LDBL_EPSILON__ = @as(c_longdouble, 1.08420217248550443401e-19);
|
||||||
|
pub const __LDBL_HAS_INFINITY__ = @as(c_int, 1);
|
||||||
|
pub const __LDBL_HAS_QUIET_NAN__ = @as(c_int, 1);
|
||||||
|
pub const __LDBL_MANT_DIG__ = @as(c_int, 64);
|
||||||
|
pub const __LDBL_MAX_10_EXP__ = @as(c_int, 4932);
|
||||||
|
pub const __LDBL_MAX_EXP__ = @as(c_int, 16384);
|
||||||
|
pub const __LDBL_MAX__ = @as(c_longdouble, 1.18973149535723176502e+4932);
|
||||||
|
pub const __LDBL_MIN_10_EXP__ = -@as(c_int, 4931);
|
||||||
|
pub const __LDBL_MIN_EXP__ = -@as(c_int, 16381);
|
||||||
|
pub const __LDBL_MIN__ = @as(c_longdouble, 3.36210314311209350626e-4932);
|
||||||
|
pub const __POINTER_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __BIGGEST_ALIGNMENT__ = @as(c_int, 16);
|
||||||
|
pub const __WINT_UNSIGNED__ = @as(c_int, 1);
|
||||||
|
pub const __INT8_TYPE__ = i8;
|
||||||
|
pub const __INT8_FMTd__ = "hhd";
|
||||||
|
pub const __INT8_FMTi__ = "hhi";
|
||||||
|
pub const __INT8_C_SUFFIX__ = "";
|
||||||
|
pub const __INT16_TYPE__ = c_short;
|
||||||
|
pub const __INT16_FMTd__ = "hd";
|
||||||
|
pub const __INT16_FMTi__ = "hi";
|
||||||
|
pub const __INT16_C_SUFFIX__ = "";
|
||||||
|
pub const __INT32_TYPE__ = c_int;
|
||||||
|
pub const __INT32_FMTd__ = "d";
|
||||||
|
pub const __INT32_FMTi__ = "i";
|
||||||
|
pub const __INT32_C_SUFFIX__ = "";
|
||||||
|
pub const __INT64_TYPE__ = c_long;
|
||||||
|
pub const __INT64_FMTd__ = "ld";
|
||||||
|
pub const __INT64_FMTi__ = "li";
|
||||||
|
pub const __INT64_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `L`");
|
||||||
|
// (no file):198:9
|
||||||
|
pub const __UINT8_TYPE__ = u8;
|
||||||
|
pub const __UINT8_FMTo__ = "hho";
|
||||||
|
pub const __UINT8_FMTu__ = "hhu";
|
||||||
|
pub const __UINT8_FMTx__ = "hhx";
|
||||||
|
pub const __UINT8_FMTX__ = "hhX";
|
||||||
|
pub const __UINT8_C_SUFFIX__ = "";
|
||||||
|
pub const __UINT8_MAX__ = @as(c_int, 255);
|
||||||
|
pub const __INT8_MAX__ = @as(c_int, 127);
|
||||||
|
pub const __UINT16_TYPE__ = c_ushort;
|
||||||
|
pub const __UINT16_FMTo__ = "ho";
|
||||||
|
pub const __UINT16_FMTu__ = "hu";
|
||||||
|
pub const __UINT16_FMTx__ = "hx";
|
||||||
|
pub const __UINT16_FMTX__ = "hX";
|
||||||
|
pub const __UINT16_C_SUFFIX__ = "";
|
||||||
|
pub const __UINT16_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
|
||||||
|
pub const __INT16_MAX__ = @as(c_int, 32767);
|
||||||
|
pub const __UINT32_TYPE__ = c_uint;
|
||||||
|
pub const __UINT32_FMTo__ = "o";
|
||||||
|
pub const __UINT32_FMTu__ = "u";
|
||||||
|
pub const __UINT32_FMTx__ = "x";
|
||||||
|
pub const __UINT32_FMTX__ = "X";
|
||||||
|
pub const __UINT32_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `U`");
|
||||||
|
// (no file):220:9
|
||||||
|
pub const __UINT32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
|
||||||
|
pub const __INT32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
|
||||||
|
pub const __UINT64_TYPE__ = c_ulong;
|
||||||
|
pub const __UINT64_FMTo__ = "lo";
|
||||||
|
pub const __UINT64_FMTu__ = "lu";
|
||||||
|
pub const __UINT64_FMTx__ = "lx";
|
||||||
|
pub const __UINT64_FMTX__ = "lX";
|
||||||
|
pub const __UINT64_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `UL`");
|
||||||
|
// (no file):228:9
|
||||||
|
pub const __UINT64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
|
||||||
|
pub const __INT64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __INT_LEAST8_TYPE__ = i8;
|
||||||
|
pub const __INT_LEAST8_MAX__ = @as(c_int, 127);
|
||||||
|
pub const __INT_LEAST8_WIDTH__ = @as(c_int, 8);
|
||||||
|
pub const __INT_LEAST8_FMTd__ = "hhd";
|
||||||
|
pub const __INT_LEAST8_FMTi__ = "hhi";
|
||||||
|
pub const __UINT_LEAST8_TYPE__ = u8;
|
||||||
|
pub const __UINT_LEAST8_MAX__ = @as(c_int, 255);
|
||||||
|
pub const __UINT_LEAST8_FMTo__ = "hho";
|
||||||
|
pub const __UINT_LEAST8_FMTu__ = "hhu";
|
||||||
|
pub const __UINT_LEAST8_FMTx__ = "hhx";
|
||||||
|
pub const __UINT_LEAST8_FMTX__ = "hhX";
|
||||||
|
pub const __INT_LEAST16_TYPE__ = c_short;
|
||||||
|
pub const __INT_LEAST16_MAX__ = @as(c_int, 32767);
|
||||||
|
pub const __INT_LEAST16_WIDTH__ = @as(c_int, 16);
|
||||||
|
pub const __INT_LEAST16_FMTd__ = "hd";
|
||||||
|
pub const __INT_LEAST16_FMTi__ = "hi";
|
||||||
|
pub const __UINT_LEAST16_TYPE__ = c_ushort;
|
||||||
|
pub const __UINT_LEAST16_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
|
||||||
|
pub const __UINT_LEAST16_FMTo__ = "ho";
|
||||||
|
pub const __UINT_LEAST16_FMTu__ = "hu";
|
||||||
|
pub const __UINT_LEAST16_FMTx__ = "hx";
|
||||||
|
pub const __UINT_LEAST16_FMTX__ = "hX";
|
||||||
|
pub const __INT_LEAST32_TYPE__ = c_int;
|
||||||
|
pub const __INT_LEAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
|
||||||
|
pub const __INT_LEAST32_WIDTH__ = @as(c_int, 32);
|
||||||
|
pub const __INT_LEAST32_FMTd__ = "d";
|
||||||
|
pub const __INT_LEAST32_FMTi__ = "i";
|
||||||
|
pub const __UINT_LEAST32_TYPE__ = c_uint;
|
||||||
|
pub const __UINT_LEAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
|
||||||
|
pub const __UINT_LEAST32_FMTo__ = "o";
|
||||||
|
pub const __UINT_LEAST32_FMTu__ = "u";
|
||||||
|
pub const __UINT_LEAST32_FMTx__ = "x";
|
||||||
|
pub const __UINT_LEAST32_FMTX__ = "X";
|
||||||
|
pub const __INT_LEAST64_TYPE__ = c_long;
|
||||||
|
pub const __INT_LEAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __INT_LEAST64_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __INT_LEAST64_FMTd__ = "ld";
|
||||||
|
pub const __INT_LEAST64_FMTi__ = "li";
|
||||||
|
pub const __UINT_LEAST64_TYPE__ = c_ulong;
|
||||||
|
pub const __UINT_LEAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
|
||||||
|
pub const __UINT_LEAST64_FMTo__ = "lo";
|
||||||
|
pub const __UINT_LEAST64_FMTu__ = "lu";
|
||||||
|
pub const __UINT_LEAST64_FMTx__ = "lx";
|
||||||
|
pub const __UINT_LEAST64_FMTX__ = "lX";
|
||||||
|
pub const __INT_FAST8_TYPE__ = i8;
|
||||||
|
pub const __INT_FAST8_MAX__ = @as(c_int, 127);
|
||||||
|
pub const __INT_FAST8_WIDTH__ = @as(c_int, 8);
|
||||||
|
pub const __INT_FAST8_FMTd__ = "hhd";
|
||||||
|
pub const __INT_FAST8_FMTi__ = "hhi";
|
||||||
|
pub const __UINT_FAST8_TYPE__ = u8;
|
||||||
|
pub const __UINT_FAST8_MAX__ = @as(c_int, 255);
|
||||||
|
pub const __UINT_FAST8_FMTo__ = "hho";
|
||||||
|
pub const __UINT_FAST8_FMTu__ = "hhu";
|
||||||
|
pub const __UINT_FAST8_FMTx__ = "hhx";
|
||||||
|
pub const __UINT_FAST8_FMTX__ = "hhX";
|
||||||
|
pub const __INT_FAST16_TYPE__ = c_short;
|
||||||
|
pub const __INT_FAST16_MAX__ = @as(c_int, 32767);
|
||||||
|
pub const __INT_FAST16_WIDTH__ = @as(c_int, 16);
|
||||||
|
pub const __INT_FAST16_FMTd__ = "hd";
|
||||||
|
pub const __INT_FAST16_FMTi__ = "hi";
|
||||||
|
pub const __UINT_FAST16_TYPE__ = c_ushort;
|
||||||
|
pub const __UINT_FAST16_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
|
||||||
|
pub const __UINT_FAST16_FMTo__ = "ho";
|
||||||
|
pub const __UINT_FAST16_FMTu__ = "hu";
|
||||||
|
pub const __UINT_FAST16_FMTx__ = "hx";
|
||||||
|
pub const __UINT_FAST16_FMTX__ = "hX";
|
||||||
|
pub const __INT_FAST32_TYPE__ = c_int;
|
||||||
|
pub const __INT_FAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
|
||||||
|
pub const __INT_FAST32_WIDTH__ = @as(c_int, 32);
|
||||||
|
pub const __INT_FAST32_FMTd__ = "d";
|
||||||
|
pub const __INT_FAST32_FMTi__ = "i";
|
||||||
|
pub const __UINT_FAST32_TYPE__ = c_uint;
|
||||||
|
pub const __UINT_FAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
|
||||||
|
pub const __UINT_FAST32_FMTo__ = "o";
|
||||||
|
pub const __UINT_FAST32_FMTu__ = "u";
|
||||||
|
pub const __UINT_FAST32_FMTx__ = "x";
|
||||||
|
pub const __UINT_FAST32_FMTX__ = "X";
|
||||||
|
pub const __INT_FAST64_TYPE__ = c_long;
|
||||||
|
pub const __INT_FAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
|
||||||
|
pub const __INT_FAST64_WIDTH__ = @as(c_int, 64);
|
||||||
|
pub const __INT_FAST64_FMTd__ = "ld";
|
||||||
|
pub const __INT_FAST64_FMTi__ = "li";
|
||||||
|
pub const __UINT_FAST64_TYPE__ = c_ulong;
|
||||||
|
pub const __UINT_FAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
|
||||||
|
pub const __UINT_FAST64_FMTo__ = "lo";
|
||||||
|
pub const __UINT_FAST64_FMTu__ = "lu";
|
||||||
|
pub const __UINT_FAST64_FMTx__ = "lx";
|
||||||
|
pub const __UINT_FAST64_FMTX__ = "lX";
|
||||||
|
pub const __USER_LABEL_PREFIX__ = "";
|
||||||
|
pub const __FINITE_MATH_ONLY__ = @as(c_int, 0);
|
||||||
|
pub const __GNUC_STDC_INLINE__ = @as(c_int, 1);
|
||||||
|
pub const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = @as(c_int, 1);
|
||||||
|
pub const __CLANG_ATOMIC_BOOL_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_CHAR_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_CHAR16_T_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_CHAR32_T_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_WCHAR_T_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_SHORT_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_INT_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_LONG_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_LLONG_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __CLANG_ATOMIC_POINTER_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_BOOL_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_CHAR_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_CHAR16_T_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_CHAR32_T_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_WCHAR_T_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_SHORT_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_INT_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_LONG_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_LLONG_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __GCC_ATOMIC_POINTER_LOCK_FREE = @as(c_int, 2);
|
||||||
|
pub const __NO_INLINE__ = @as(c_int, 1);
|
||||||
|
pub const __PIC__ = @as(c_int, 2);
|
||||||
|
pub const __pic__ = @as(c_int, 2);
|
||||||
|
pub const __PIE__ = @as(c_int, 2);
|
||||||
|
pub const __pie__ = @as(c_int, 2);
|
||||||
|
pub const __FLT_RADIX__ = @as(c_int, 2);
|
||||||
|
pub const __DECIMAL_DIG__ = __LDBL_DECIMAL_DIG__;
|
||||||
|
pub const __ELF__ = @as(c_int, 1);
|
||||||
|
pub const __GCC_ASM_FLAG_OUTPUTS__ = @as(c_int, 1);
|
||||||
|
pub const __code_model_small__ = @as(c_int, 1);
|
||||||
|
pub const __amd64__ = @as(c_int, 1);
|
||||||
|
pub const __amd64 = @as(c_int, 1);
|
||||||
|
pub const __x86_64 = @as(c_int, 1);
|
||||||
|
pub const __x86_64__ = @as(c_int, 1);
|
||||||
|
pub const __SEG_GS = @as(c_int, 1);
|
||||||
|
pub const __SEG_FS = @as(c_int, 1);
|
||||||
|
pub const __seg_gs = @compileError("unable to translate macro: undefined identifier `address_space`");
|
||||||
|
// (no file):359:9
|
||||||
|
pub const __seg_fs = @compileError("unable to translate macro: undefined identifier `address_space`");
|
||||||
|
// (no file):360:9
|
||||||
|
pub const __znver2 = @as(c_int, 1);
|
||||||
|
pub const __znver2__ = @as(c_int, 1);
|
||||||
|
pub const __tune_znver2__ = @as(c_int, 1);
|
||||||
|
pub const __REGISTER_PREFIX__ = "";
|
||||||
|
pub const __NO_MATH_INLINES = @as(c_int, 1);
|
||||||
|
pub const __AES__ = @as(c_int, 1);
|
||||||
|
pub const __PCLMUL__ = @as(c_int, 1);
|
||||||
|
pub const __LAHF_SAHF__ = @as(c_int, 1);
|
||||||
|
pub const __LZCNT__ = @as(c_int, 1);
|
||||||
|
pub const __RDRND__ = @as(c_int, 1);
|
||||||
|
pub const __FSGSBASE__ = @as(c_int, 1);
|
||||||
|
pub const __BMI__ = @as(c_int, 1);
|
||||||
|
pub const __BMI2__ = @as(c_int, 1);
|
||||||
|
pub const __POPCNT__ = @as(c_int, 1);
|
||||||
|
pub const __PRFCHW__ = @as(c_int, 1);
|
||||||
|
pub const __RDSEED__ = @as(c_int, 1);
|
||||||
|
pub const __ADX__ = @as(c_int, 1);
|
||||||
|
pub const __MWAITX__ = @as(c_int, 1);
|
||||||
|
pub const __MOVBE__ = @as(c_int, 1);
|
||||||
|
pub const __SSE4A__ = @as(c_int, 1);
|
||||||
|
pub const __FMA__ = @as(c_int, 1);
|
||||||
|
pub const __F16C__ = @as(c_int, 1);
|
||||||
|
pub const __SHA__ = @as(c_int, 1);
|
||||||
|
pub const __FXSR__ = @as(c_int, 1);
|
||||||
|
pub const __XSAVE__ = @as(c_int, 1);
|
||||||
|
pub const __XSAVEOPT__ = @as(c_int, 1);
|
||||||
|
pub const __XSAVEC__ = @as(c_int, 1);
|
||||||
|
pub const __XSAVES__ = @as(c_int, 1);
|
||||||
|
pub const __CLFLUSHOPT__ = @as(c_int, 1);
|
||||||
|
pub const __CLWB__ = @as(c_int, 1);
|
||||||
|
pub const __WBNOINVD__ = @as(c_int, 1);
|
||||||
|
pub const __CLZERO__ = @as(c_int, 1);
|
||||||
|
pub const __RDPID__ = @as(c_int, 1);
|
||||||
|
pub const __RDPRU__ = @as(c_int, 1);
|
||||||
|
pub const __CRC32__ = @as(c_int, 1);
|
||||||
|
pub const __AVX2__ = @as(c_int, 1);
|
||||||
|
pub const __AVX__ = @as(c_int, 1);
|
||||||
|
pub const __SSE4_2__ = @as(c_int, 1);
|
||||||
|
pub const __SSE4_1__ = @as(c_int, 1);
|
||||||
|
pub const __SSSE3__ = @as(c_int, 1);
|
||||||
|
pub const __SSE3__ = @as(c_int, 1);
|
||||||
|
pub const __SSE2__ = @as(c_int, 1);
|
||||||
|
pub const __SSE2_MATH__ = @as(c_int, 1);
|
||||||
|
pub const __SSE__ = @as(c_int, 1);
|
||||||
|
pub const __SSE_MATH__ = @as(c_int, 1);
|
||||||
|
pub const __MMX__ = @as(c_int, 1);
|
||||||
|
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 = @as(c_int, 1);
|
||||||
|
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 = @as(c_int, 1);
|
||||||
|
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 = @as(c_int, 1);
|
||||||
|
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 = @as(c_int, 1);
|
||||||
|
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 = @as(c_int, 1);
|
||||||
|
pub const __SIZEOF_FLOAT128__ = @as(c_int, 16);
|
||||||
|
pub const unix = @as(c_int, 1);
|
||||||
|
pub const __unix = @as(c_int, 1);
|
||||||
|
pub const __unix__ = @as(c_int, 1);
|
||||||
|
pub const linux = @as(c_int, 1);
|
||||||
|
pub const __linux = @as(c_int, 1);
|
||||||
|
pub const __linux__ = @as(c_int, 1);
|
||||||
|
pub const __gnu_linux__ = @as(c_int, 1);
|
||||||
|
pub const __FLOAT128__ = @as(c_int, 1);
|
||||||
|
pub const __STDC__ = @as(c_int, 1);
|
||||||
|
pub const __STDC_HOSTED__ = @as(c_int, 1);
|
||||||
|
pub const __STDC_VERSION__ = @as(c_long, 201710);
|
||||||
|
pub const __STDC_UTF_16__ = @as(c_int, 1);
|
||||||
|
pub const __STDC_UTF_32__ = @as(c_int, 1);
|
||||||
|
pub const _DEBUG = @as(c_int, 1);
|
||||||
|
pub const __GCC_HAVE_DWARF2_CFI_ASM = @as(c_int, 1);
|
||||||
|
pub const MD4C_H = "";
|
||||||
|
pub const MD_FLAG_COLLAPSEWHITESPACE = @as(c_int, 0x0001);
|
||||||
|
pub const MD_FLAG_PERMISSIVEATXHEADERS = @as(c_int, 0x0002);
|
||||||
|
pub const MD_FLAG_PERMISSIVEURLAUTOLINKS = @as(c_int, 0x0004);
|
||||||
|
pub const MD_FLAG_PERMISSIVEEMAILAUTOLINKS = @as(c_int, 0x0008);
|
||||||
|
pub const MD_FLAG_NOINDENTEDCODEBLOCKS = @as(c_int, 0x0010);
|
||||||
|
pub const MD_FLAG_NOHTMLBLOCKS = @as(c_int, 0x0020);
|
||||||
|
pub const MD_FLAG_NOHTMLSPANS = @as(c_int, 0x0040);
|
||||||
|
pub const MD_FLAG_TABLES = @as(c_int, 0x0100);
|
||||||
|
pub const MD_FLAG_STRIKETHROUGH = @as(c_int, 0x0200);
|
||||||
|
pub const MD_FLAG_PERMISSIVEWWWAUTOLINKS = @as(c_int, 0x0400);
|
||||||
|
pub const MD_FLAG_TASKLISTS = @as(c_int, 0x0800);
|
||||||
|
pub const MD_FLAG_LATEXMATHSPANS = @as(c_int, 0x1000);
|
||||||
|
pub const MD_FLAG_WIKILINKS = @as(c_int, 0x2000);
|
||||||
|
pub const MD_FLAG_UNDERLINE = @as(c_int, 0x4000);
|
||||||
|
pub const MD_FLAG_HARD_SOFT_BREAKS = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8000, .hex);
|
||||||
|
pub const MD_FLAG_PERMISSIVEAUTOLINKS = (MD_FLAG_PERMISSIVEEMAILAUTOLINKS | MD_FLAG_PERMISSIVEURLAUTOLINKS) | MD_FLAG_PERMISSIVEWWWAUTOLINKS;
|
||||||
|
pub const MD_FLAG_NOHTML = MD_FLAG_NOHTMLBLOCKS | MD_FLAG_NOHTMLSPANS;
|
||||||
|
pub const MD_DIALECT_COMMONMARK = @as(c_int, 0);
|
||||||
|
pub const MD_DIALECT_GITHUB = ((MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_TABLES) | MD_FLAG_STRIKETHROUGH) | MD_FLAG_TASKLISTS;
|
|
@ -0,0 +1,10 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const testing = std.testing;
|
||||||
|
|
||||||
|
export fn add(a: i32, b: i32) i32 {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
test "basic add functionality" {
|
||||||
|
try testing.expect(add(3, 7) == 10);
|
||||||
|
}
|
Loading…
Reference in New Issue