Packages
livebook
0.1.2
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook/live_markdown.ex
defmodule Livebook.LiveMarkdown do
@moduledoc false
# Notebook file format used by Livebook.
#
# The format is based off of Markdown and preserves compatibility,
# in the sense that every LiveMarkdown file is a valid Markdown file.
# LiveMarkdown uses HTML comments for storing metadata, so a Markdown standard
# supporting such comments is assumed. Not every Markdown file is a valid LiveMarkdown file,
# but may be converted to such by applying tiny changes, which the import function does.
#
# Currently the format is straightforward and specifies the following:
#
# 1. The file should have a leading *Heading 1* holding the notebook name.
# 2. Every *Heading 2* starts a new section.
# 3. Every Elixir code block maps to an Elixir cell.
# 4. Adjacent regular Markdown text maps to a Markdown cell.
# 5. Comments of the form `<!-- livebook:json_object -->` hold metadata
# and apply to the element they directly precede (e.g. an Elixir cell).
# Such comments may appear anywhere, for instance `<!-- livebook:{"force_markdown":true} -->`
# forces the next Markdown block to be treated as part of Markdown cell (even if it's Elixir code block).
#
# ## Example
#
# Here's an example LiveMarkdown file:
#
# # My Notebook
#
# ## Section 1
#
# Make sure to install:
#
# * Erlang
# * Elixir
# * PostgreSQL
#
# <!-- livebook:{"readonly":true} -->
#
# ```elixir
# Enum.to_list(1..10)
# ```
#
# This is it for this section.
#
# ## Section 2
#
# ```elixir
# # More Elixir code
# ```
#
# This file defines a notebook named *My Notebook* with two sections.
# The first section includes 3 cells and the second section includes 1 Elixir cell.
def extension(), do: ".livemd"
end