Mq (mq_elixir v0.1.20)

View Source

Elixir bindings for the mq markdown processing library.

Features

  • Process markdown, MDX, HTML, and plain text
  • Full mq query language support
  • Multiple input and output format options
  • Configurable rendering options

Installation

Add mq to your list of dependencies in mix.exs:

def deps do
  [
    {:mq, "~> 0.5.9"}
  ]
end

Usage

# Raw query string
{:ok, result} = Mq.run(".h1", "# Hello\n## World")
IO.inspect(result.values)  # ["# Hello"]

# Query builder — use Mq directly as the entry point
{:ok, result} =
  Mq.h2()
  |> Mq.select(Mq.Filter.contains("Feature"))
  |> Mq.to_text()
  |> Mq.run(content)

# With options
options = %Mq.Options{input_format: :markdown}
{:ok, result} = Mq.run(".h2", markdown_content, options)

# HTML to Markdown conversion
{:ok, markdown} = Mq.html_to_markdown("<h1>Hello</h1>")

Summary

Functions

Convert HTML to Markdown.

Run an mq query on the provided content.

Functions

abs(query)

See Mq.Query.abs/1.

add(query)

See Mq.Query.add/1.

align()

See Mq.Query.align/0.

align(query)

See Mq.Query.align/1.

alt()

See Mq.Query.alt/0.

alt(query)

See Mq.Query.alt/1.

ascii_downcase(query)

See Mq.Query.ascii_downcase/1.

ascii_upcase(query)

See Mq.Query.ascii_upcase/1.

attr(query, name)

See Mq.Query.attr/2.

base64(query)

See Mq.Query.base64/1.

base64d(query)

See Mq.Query.base64d/1.

base64url(query)

See Mq.Query.base64url/1.

base64urld(query)

See Mq.Query.base64urld/1.

basename(query)

See Mq.Query.basename/1.

blockquote()

See Mq.Query.blockquote/0.

capture(query, pattern)

See Mq.Query.capture/2.

ceil(query)

See Mq.Query.ceil/1.

checked()

See Mq.Query.checked/0.

checked(query)

See Mq.Query.checked/1.

children(query)

See Mq.Query.children/1.

coalesce(query, default)

See Mq.Query.coalesce/2.

code()

See Mq.Query.code/0.

code_inline()

See Mq.Query.code_inline/0.

column()

See Mq.Query.column/0.

column(query)

See Mq.Query.column/1.

compact(query)

See Mq.Query.compact/1.

debug(query)

See Mq.Query.debug/1.

definition()

See Mq.Query.definition/0.

del(query, value)

See Mq.Query.del/2.

delete()

See Mq.Query.delete/0.

depth()

See Mq.Query.depth/0.

depth(query)

See Mq.Query.depth/1.

dirname(query)

See Mq.Query.dirname/1.

done()

See Mq.Query.done/0.

downcase(query)

See Mq.Query.downcase/1.

emphasis()

See Mq.Query.emphasis/0.

empty(query)

See Mq.Query.empty/1.

entries(query)

See Mq.Query.entries/1.

exp(query)

See Mq.Query.exp/1.

explode(query)

See Mq.Query.explode/1.

extname(query)

See Mq.Query.extname/1.

fence()

See Mq.Query.fence/0.

fence(query)

See Mq.Query.fence/1.

first(query)

See Mq.Query.first/1.

flatten(query)

See Mq.Query.flatten/1.

floor(query)

See Mq.Query.floor/1.

footnote()

See Mq.Query.footnote/0.

footnote_ref()

See Mq.Query.footnote_ref/0.

from_hex(query)

See Mq.Query.from_hex/1.

get(query, key)

See Mq.Query.get/2.

get_title(query)

See Mq.Query.get_title/1.

get_url(query)

See Mq.Query.get_url/1.

gsub(query, pattern, replacement)

See Mq.Query.gsub/3.

h1()

See Mq.Query.h1/0.

h2()

See Mq.Query.h2/0.

h3()

See Mq.Query.h3/0.

h4()

See Mq.Query.h4/0.

h5()

See Mq.Query.h5/0.

h6()

See Mq.Query.h6/0.

heading()

See Mq.Query.heading/0.

hr()

See Mq.Query.hr/0.

html()

See Mq.Query.html/0.

html_to_markdown(content, options \\ nil)

@spec html_to_markdown(String.t(), Mq.ConversionOptions.t() | nil) ::
  {:ok, String.t()} | {:error, String.t()}

Convert HTML to Markdown.

Parameters

  • content - The HTML content to convert
  • options - Optional conversion options

Returns

  • {:ok, markdown_string} on success
  • {:error, reason} on failure

Examples

iex> Mq.html_to_markdown("<h1>Hello</h1><p>World</p>")
{:ok, "# Hello\n\nWorld"}

iex> html_content = "<html><head><title>Title</title></head><body><h1>Content</h1></body></html>"
iex> opts = %Mq.ConversionOptions{use_title_as_h1: true}
iex> {:ok, markdown} = Mq.html_to_markdown(html_content, opts)
{:ok, markdown}

ident(query)

See Mq.Query.ident/1.

image()

See Mq.Query.image/0.

image_ref()

See Mq.Query.image_ref/0.

implode(query)

See Mq.Query.implode/1.

index(query, value)

See Mq.Query.index/2.

insert(query, idx, val)

See Mq.Query.insert/3.

intern(query)

See Mq.Query.intern/1.

item_index(query)

See Mq.Query.item_index/1.

join(query, sep)

See Mq.Query.join/2.

keys(query)

See Mq.Query.keys/1.

label(query)

See Mq.Query.label/1.

lang()

See Mq.Query.lang/0.

lang(query)

See Mq.Query.lang/1.

last(query)

See Mq.Query.last/1.

len(query)

See Mq.Query.len/1.

length(query)

See Mq.Query.length/1.

level()

See Mq.Query.level/0.

level(query)

See Mq.Query.level/1.

limit(query, n)

See Mq.Query.limit/2.

line_break()

See Mq.Query.line_break/0.

link()

See Mq.Query.link/0.

list()

See Mq.Query.list/0.

list_at(n)

See Mq.Query.list_at/1.

ln(query)

See Mq.Query.ln/1.

log10(query)

See Mq.Query.log10/1.

ltrim(query)

See Mq.Query.ltrim/1.

map(query, filter)

See Mq.Query.map/2.

math()

See Mq.Query.math/0.

math_inline()

See Mq.Query.math_inline/0.

max(query, other)

See Mq.Query.max/2.

md5(query)

See Mq.Query.md5/1.

mdx_flow_expression()

See Mq.Query.mdx_flow_expression/0.

mdx_js_esm()

See Mq.Query.mdx_js_esm/0.

mdx_jsx_flow_element()

See Mq.Query.mdx_jsx_flow_element/0.

mdx_jsx_text_element()

See Mq.Query.mdx_jsx_text_element/0.

mdx_name(query)

See Mq.Query.mdx_name/1.

mdx_text_expression()

See Mq.Query.mdx_text_expression/0.

meta()

See Mq.Query.meta/0.

meta(query)

See Mq.Query.meta/1.

min(query, other)

See Mq.Query.min/2.

nan?(query)

See Mq.Query.nan?/1.

negate(query)

See Mq.Query.negate/1.

node_values()

See Mq.Query.node_values/0.

nth(query, n)

See Mq.Query.nth/2.

ordered()

See Mq.Query.ordered/0.

ordered(query)

See Mq.Query.ordered/1.

paragraph()

See Mq.Query.paragraph/0.

path_join(query, other)

See Mq.Query.path_join/2.

pow(query, n)

See Mq.Query.pow/2.

property(key)

See Mq.Query.property/1.

property(query, key)

See Mq.Query.property/2.

range(query, n)

See Mq.Query.range/2.

recursive()

See Mq.Query.recursive/0.

repeat(query, n)

See Mq.Query.repeat/2.

replace(query, from, to)

See Mq.Query.replace/3.

reverse(query)

See Mq.Query.reverse/1.

rindex(query, value)

See Mq.Query.rindex/2.

round(query)

See Mq.Query.round/1.

row()

See Mq.Query.row/0.

row(query)

See Mq.Query.row/1.

rtrim(query)

See Mq.Query.rtrim/1.

run(code, content, options \\ nil)

@spec run(String.t() | Mq.Query.t(), String.t(), Mq.Options.t() | nil) ::
  {:ok, Mq.Result.t()} | {:error, String.t()}

Run an mq query on the provided content.

Accepts either a raw query string or an Mq.Query struct built with the query builder functions on this module.

Parameters

  • code - The mq query string or an %Mq.Query{} struct
  • content - The markdown/HTML/text content to process
  • options - Optional configuration (defaults to %Mq.Options{})

Returns

  • {:ok, %Mq.Result{}} on success
  • {:error, reason} on failure

Examples

iex> Mq.run(".h1", "# Title\n## Subtitle")
{:ok, %Mq.Result{values: ["# Title"], text: "# Title"}}

iex> options = %Mq.Options{input_format: :text}
iex> {:ok, _result} = Mq.run("select(contains(\"test\"))", "line1\ntest line\nline3", options)
{:ok, %Mq.Result{values: ["test line"], text: "test line"}}

iex> {:ok, result} = Mq.h2() |> Mq.select(Mq.Filter.contains("World")) |> Mq.run("# Hello\n## World\n## Other")
iex> result.values
["## World"]

select(filter)

See Mq.Query.select/1.

select(query, filter)

See Mq.Query.select/2.

set(query, key, val)

See Mq.Query.set/3.

set_attr(query, name, val)

See Mq.Query.set_attr/3.

set_check(query, val)

See Mq.Query.set_check/2.

set_code_block_lang(query, lang)

See Mq.Query.set_code_block_lang/2.

set_list_ordered(query, val)

See Mq.Query.set_list_ordered/2.

set_ref(query, ref)

See Mq.Query.set_ref/2.

sha256(query)

See Mq.Query.sha256/1.

sha512(query)

See Mq.Query.sha512/1.

slice(query, start, stop)

See Mq.Query.slice/3.

sort(query)

See Mq.Query.sort/1.

split(query, sep)

See Mq.Query.split/2.

sqrt(query)

See Mq.Query.sqrt/1.

stem(query)

See Mq.Query.stem/1.

stringify(query)

See Mq.Query.stringify/1.

strong()

See Mq.Query.strong/0.

table()

See Mq.Query.table/0.

table_align()

See Mq.Query.table_align/0.

table_cell(r, c)

See Mq.Query.table_cell/2.

table_col(n)

See Mq.Query.table_col/1.

table_row(n)

See Mq.Query.table_row/1.

task()

See Mq.Query.task/0.

test(query, pattern)

See Mq.Query.test/2.

text()

See Mq.Query.text/0.

title(query)

See Mq.Query.title/1.

to_array(query)

See Mq.Query.to_array/1.

to_bytes(query)

See Mq.Query.to_bytes/1.

to_code(query)

See Mq.Query.to_code/1.

to_code(query, lang)

See Mq.Query.to_code/2.

to_code_inline(query)

See Mq.Query.to_code_inline/1.

to_em(query)

See Mq.Query.to_em/1.

to_h(query, depth)

See Mq.Query.to_h/2.

to_hex(query)

See Mq.Query.to_hex/1.

to_hr(query)

See Mq.Query.to_hr/1.

to_html(query)

See Mq.Query.to_html/1.

to_image(query, url)

See Mq.Query.to_image/2.

to_image(query, url, img_alt)

See Mq.Query.to_image/3.

to_image(query, url, img_alt, img_title)

See Mq.Query.to_image/4.

to_link(query, url)

See Mq.Query.to_link/2.

to_link(query, url, text)

See Mq.Query.to_link/3.

to_link(query, url, text, link_title)

See Mq.Query.to_link/4.

to_markdown(query)

See Mq.Query.to_markdown/1.

to_markdown_string(query)

See Mq.Query.to_markdown_string/1.

to_math(query)

See Mq.Query.to_math/1.

to_math_inline(query)

See Mq.Query.to_math_inline/1.

to_md_list(query, list_level)

See Mq.Query.to_md_list/2.

to_md_name(query, node_name)

See Mq.Query.to_md_name/2.

to_md_table_cell(query, content, r, c)

See Mq.Query.to_md_table_cell/4.

to_md_table_row(query, cells)

See Mq.Query.to_md_table_row/2.

to_md_text(query)

See Mq.Query.to_md_text/1.

to_mdx(query)

See Mq.Query.to_mdx/1.

to_number(query)

See Mq.Query.to_number/1.

to_query_string(query)

See Mq.Query.to_query_string/1.

to_strong(query)

See Mq.Query.to_strong/1.

to_text(query)

See Mq.Query.to_text/1.

todo()

See Mq.Query.todo/0.

toml()

See Mq.Query.toml/0.

trim(query)

See Mq.Query.trim/1.

trunc(query)

See Mq.Query.trunc/1.

type(query)

See Mq.Query.type/1.

uniq(query)

See Mq.Query.uniq/1.

upcase(query)

See Mq.Query.upcase/1.

update(query, content)

See Mq.Query.update/2.

url()

See Mq.Query.url/0.

url(query)

See Mq.Query.url/1.

url_encode(query)

See Mq.Query.url_encode/1.

utf8bytelen(query)

See Mq.Query.utf8bytelen/1.

value()

See Mq.Query.value/0.

value(query)

See Mq.Query.value/1.

values(query)

See Mq.Query.values/1.

yaml()

See Mq.Query.yaml/0.