blocks

package
v4.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2022 License: Apache-2.0 Imports: 6 Imported by: 1

Documentation

Overview

Package blocks provides some of the Mycomarkup's blocks.

Index

Constants

This section is empty.

Variables

View Source
var SpanTable = []SpanTableEntry{
	{SpanItalic, "//", "em"},
	{SpanBold, "**", "strong"},
	{SpanMono, "`", "code"},
	{SpanSuper, "^^", "sup"},
	{SpanSub, ",,", "sub"},
	{SpanMark, "++", "mark"},
	{SpanStrike, "~~", "s"},
	{SpanUnderline, "__", "u"},
}

SpanTable is a table for easier span lexing, its entries are also Span too.

Functions

func CleanStyleState

func CleanStyleState() map[SpanKind]bool

CleanStyleState returns a map where keys are SpanKind representing inline style and values are booleans. Mutate this map to keep track of active and inactive styles.

Values: `false`: the style is not active `true`: the style is active

For example, for a Formatted line like that:

**Welcome** to //California

`CleanStyleState()SpanItalic == true` at the end of string.

func TagFromState

func TagFromState(stt SpanKind, tagState map[SpanKind]bool) string

TagFromState returns an appropriate tag half (<left> or </right>) depending on tagState and also mutates it. V3

TODO: get rid of.

Types

type Block

type Block interface {
	// ID returns an id for the block. It should be unique when possible. The block should increment a value in the counter depending on its type.
	ID(counter *IDCounter) string
}

Block is a unit of Mycomarkup. It is somewhat analogous to HTML's tags.

type CodeBlock

type CodeBlock struct {
	// contains filtered or unexported fields
}

CodeBlock represents a block of preformatted text.

func NewCodeBlock

func NewCodeBlock(language, contents string) CodeBlock

NewCodeBlock returns a code block with the given language and contents.

func (CodeBlock) Contents

func (cb CodeBlock) Contents() string

Contents returns the code block's contents.

func (CodeBlock) ID

func (cb CodeBlock) ID(counter *IDCounter) string

ID returns the code block's id which is "codeblock-" and a number.

func (CodeBlock) Language

func (cb CodeBlock) Language() string

Language returns what kind of formal language the code block is written in. It returns "plain" if the language is not specified. Returns escaped text otherwise.

type Formatted

type Formatted struct {
	// HyphaName is the name of the hypha that contains the Formatted text.
	HyphaName string
	// Lines are parsed lines of the Formatted text.
	Lines [][]Span
}

Formatted is a piece of formatted text. It is always part of a bigger block, such as Paragraph.

func (*Formatted) AddLine

func (p *Formatted) AddLine(line []Span)

AddLine stores an additional line of the formatted text. V3

func (Formatted) ID

func (p Formatted) ID(_ *IDCounter) string

ID returns an empty string because Formatted is always part of a bigger block that has a meaningful ID.

type Heading

type Heading struct {
	// contains filtered or unexported fields
}

Heading is a formatted heading in the document.

func NewHeading

func NewHeading(level uint, contents Formatted, srcLine string) Heading

NewHeading returns a Heading with the given data.

func (Heading) Contents

func (h Heading) Contents() Formatted

Contents returns the Heading's contents.

func (Heading) ID

func (h Heading) ID(_ *IDCounter) string

ID returns the Heading's id which is basically a stripped version of its contents. See util.StringID.

func (Heading) Level

func (h Heading) Level() uint

Level returns the Heading's level, 1 from 6.

Prefix  | Level
=      | 2
==     | 3
===    | 4
====   | 5
#      | 1
##     | 2
###    | 3
####   | 4
#####  | 5
###### | 6

type IDCounter

type IDCounter struct {
	// contains filtered or unexported fields
}

IDCounter is a struct with counters of how many times some blocks have appeared. Block's ID depends on these counters. IDCounter is not a Block.

func NewIDCounter

func NewIDCounter() *IDCounter

NewIDCounter returns a pointer to an IDCounter. ShouldUseResults is true for this counter.

func (IDCounter) ShouldUseResults

func (c IDCounter) ShouldUseResults() bool

ShouldUseResults is true if you should use generated IDs.

func (IDCounter) UnusableCopy

func (c IDCounter) UnusableCopy() *IDCounter

UnusableCopy returns a pointer to a copy of the counter with shouldUseResults set to false.

type Img

type Img struct {
	Entries []ImgEntry
	// contains filtered or unexported fields
}

Img is an image gallery, consisting of zero or more images.

func NewImg

func NewImg(entries []ImgEntry, layout ImgLayout) Img

NewImg returns a new Img.

func (Img) HasOneImage

func (img Img) HasOneImage() bool

HasOneImage returns true if img has exactly one image. The image may have a description.

TODO: get rid of the concept.

func (Img) ID

func (img Img) ID(counter *IDCounter) string

ID returns the gallery's id which is img- and a number.

func (Img) Layout

func (img Img) Layout() ImgLayout

Layout returns Img's layout.

func (Img) WithExistingTargetsMarked

func (img Img) WithExistingTargetsMarked(ctx mycocontext.Context) Img

WithExistingTargetsMarked returns a new Img with its ImgEntries colored according to their existence.

This functions iterates over hyphae once.

type ImgEntry

type ImgEntry struct {
	Target links.Link
	// contains filtered or unexported fields
}

ImgEntry is an entry of an image gallery. It can only be nested into Img. V3: proper readers, encapsulate

func NewImgEntry

func NewImgEntry(target links.Link, hyphaName, width, height, description string) ImgEntry

NewImgEntry returns a new ImgEntry.

func (ImgEntry) Description

func (entry ImgEntry) Description() string

Description returns the description of the entry. The description is unparsed Mycomarkup string.

func (ImgEntry) Height

func (entry ImgEntry) Height() string

Height returns the height property of the entry.

func (ImgEntry) ID

func (entry ImgEntry) ID(_ *IDCounter) string

ID returns an empty string because images do not have ids. Image galleries do have them, by the way, see Img.

func (ImgEntry) Width

func (entry ImgEntry) Width() string

Width returns the width property of the entry.

type ImgLayout

type ImgLayout int

ImgLayout represents the layout of the Img element

const (
	// ImgLayoutNormal is a main-column-wide one-column stack of images.
	ImgLayoutNormal ImgLayout = iota
	// ImgLayoutGrid is main-column-wide two-column stack of images.
	ImgLayoutGrid
	// ImgLayoutSide is a thin right-floating stack of images.
	ImgLayoutSide
)

func (ImgLayout) String

func (l ImgLayout) String() string
type InlineLink struct {
	links.LegacyLink
}

InlineLink is a link that is part of a Formatted text. Basically a wrapper over links.LegacyLink.

func (InlineLink) Kind

func (il InlineLink) Kind() SpanKind

Kind returns SpanLink.

type InlineText

type InlineText struct {
	Contents string
}

InlineText is the most wholesome thing in Mycomarkup, just a bunch of characters with no formatting or any other special meaning.

func (InlineText) Kind

func (it InlineText) Kind() SpanKind

Kind returns SpanText.

type LaunchPad

type LaunchPad struct {
	Rockets []RocketLink
}

LaunchPad is a container for RocketLinks.

func NewLaunchPad

func NewLaunchPad(rockets []RocketLink) LaunchPad

NewLaunchPad returns a launchpad with the given RocketLinks inside

func (LaunchPad) ID

func (lp LaunchPad) ID(counter *IDCounter) string

ID returns the launchpad's id which is rocket- and a number. Note that it does not say launchpad.

func (LaunchPad) LinksColored added in v4.3.1

func (lp LaunchPad) LinksColored(ctx mycocontext.Context) LaunchPad

LinksColored marks links to existing hyphae as existing. V3

type List

type List struct {
	// Items are the entries of the List. There should be at least one.
	Items []ListItem
	// Marker is the type of the list. All entries have the same type. See SameAs for information about same types.
	Marker ListMarker
}

List is the block representing a set of related elements. It must be the same as all ListItem.Marker.

func (List) ID

func (l List) ID(counter *IDCounter) string

ID returns this list's id. It is list- and the list's number.

type ListItem

type ListItem struct {
	Marker ListMarker
	// Level is equal to amount of asterisks.
	//     *    -> Level = 1
	//     **.  -> Level = 2
	Level uint
	// Contents are Mycomarkup blocks contained in this list item.
	Contents []Block
}

ListItem is an entry in a List.

func (ListItem) ID

func (l ListItem) ID(_ *IDCounter) string

ID returns an empty string because list items don't have ids.

type ListMarker

type ListMarker int

ListMarker is the type of a ListItem or a List.

const (
	// MarkerUnordered is for bullets like * (no point).
	MarkerUnordered ListMarker = iota
	// MarkerOrdered is for bullets like *. (with point).
	MarkerOrdered
	// MarkerTodoDone is for bullets like *v (with tick).
	MarkerTodoDone
	// MarkerTodo is for bullets like *x (with cross).
	MarkerTodo
)

func (ListMarker) SameAs

func (m1 ListMarker) SameAs(m2 ListMarker) bool

SameAs is true if both list markers are of the same type. MarkerTodoDone and MarkerTodo are considered same to each other. All other markers are different from each other.

type Paragraph

type Paragraph struct {
	Formatted
}

Paragraph is a block of formatted text.

func (Paragraph) ID

func (p Paragraph) ID(counter *IDCounter) string

ID returns the paragraph's id which is paragraph- and a number.

type Quote

type Quote struct {
	// contains filtered or unexported fields
}

Quote is the block representing a quote.

func NewQuote

func NewQuote(contents []Block) Quote

NewQuote returns Quote with the given contents.

func (*Quote) Contents

func (q *Quote) Contents() []Block

Contents returns the quote's contents.

func (Quote) ID

func (q Quote) ID(counter *IDCounter) string

ID returns the quote's id which is quote- and a number.

type RocketLink struct {
	IsEmpty bool
	links.Link
}

RocketLink is a rocket link which is meant to be nested inside LaunchPad.

func (RocketLink) ID

func (r RocketLink) ID(_ *IDCounter) string

ID returns an empty string because rocket links do not have ids on their own.

type Span

type Span interface {
	Kind() SpanKind
}

Span is a piece of Formatted text. There are three implementors of this interface: SpanTableEntry (styles), InlineLink ([links]), InlineText (usual text).

type SpanKind

type SpanKind int

SpanKind is a kind of a span, such as italic, bold, etc.

const (
	SpanItalic SpanKind = iota
	SpanBold
	SpanMono
	SpanSuper
	SpanSub
	SpanMark
	SpanStrike
	SpanUnderline

	SpanLink
	SpanText
)

type SpanTableEntry

type SpanTableEntry struct {
	Token string
	// contains filtered or unexported fields
}

SpanTableEntry is an entry of SpanTable and simultaneously a Span.

func (SpanTableEntry) Kind

func (ste SpanTableEntry) Kind() SpanKind

Kind returns one of SpanKind. See the first column of SpanTable to learn what values are possible.

type Table

type Table struct {
	// contains filtered or unexported fields
}

Table is a table, which consists of several rows and has a caption.

func NewTable

func NewTable(caption string, rows []TableRow) Table

NewTable returns a new Table with the given rows and caption.

func (Table) Caption

func (t Table) Caption() string

Caption returns Table's caption. It may be empty.

func (Table) ID

func (t Table) ID(counter *IDCounter) string

ID returns table's id which is table- and its number.

func (Table) Rows

func (t Table) Rows() []TableRow

Rows returns Table's rows.

func (Table) WithNewRow

func (t Table) WithNewRow(row TableRow) Table

WithNewRow returns a new table but with a new row.

type TableCell

type TableCell struct {
	// contains filtered or unexported fields
}

TableCell is a cell in TableRow.

func NewTableCell

func NewTableCell(isHeaderCell bool, colspan uint, contents []Block) TableCell

NewTableCell returns TableCell with the given data. Parameter isHeaderCell should be true when the cell starts with !. Colspans 0 and 1 are the same: they mean that the cell does not span columns.

func (TableCell) Colspan

func (tc TableCell) Colspan() uint

Colspan returns how many columns the cell spans.

func (TableCell) Contents

func (tc TableCell) Contents() []Block

Contents returns the cell's contents, which may be any Mycomarkup blocks.

func (TableCell) ID

func (tc TableCell) ID(_ *IDCounter) string

ID returns and empty string because table cells do not have ids.

func (TableCell) IsHeaderCell

func (tc TableCell) IsHeaderCell() bool

IsHeaderCell is true for header cells, i/e cells starting with !.

type TableRow

type TableRow struct {
	// contains filtered or unexported fields
}

TableRow is a row in a table. Thus, it can only be nested inside a table.

func NewTableRow

func NewTableRow(cells []TableCell) TableRow

NewTableRow returns a new TableRow. It gets the hypha name from ctx.

func (TableRow) Cells

func (tr TableRow) Cells() []TableCell

Cells returns the row's cells.

func (TableRow) ID

func (tr TableRow) ID(_ *IDCounter) string

ID returns and empty string because table rows do not have ids.

func (TableRow) LooksLikeThead

func (tr TableRow) LooksLikeThead() bool

LooksLikeThead is true if the table row looks like it might as well be a thead row.

Most likely, rows with more than two header cells are theads. I allow one extra datum cell for tables like this: | ! a ! b ! c | d | e ! f | g | h

type ThematicBreak

type ThematicBreak struct {
	// contains filtered or unexported fields
}

ThematicBreak represents the thematic line block, represented by a horizontal line.

In Mycomarkup it is written like that:

----

func NewThematicBreak

func NewThematicBreak(line string) ThematicBreak

NewThematicBreak parses the horizontal line block on the given text line and returns it.

func (ThematicBreak) ID

func (h ThematicBreak) ID(counter *IDCounter) string

ID returns the line's id. By default, it is hr- and a number. If the line was written like that:

----id

, the specified id is returned instead.

type Transclusion

type Transclusion struct {
	// Target is the name of the hypha to be transcluded.
	Target   string
	Blend    bool
	Selector TransclusionSelector
	TransclusionError
}

Transclusion is the block representing an extract from a different document.

func MakeTransclusion

func MakeTransclusion(ctx mycocontext.Context, line string) Transclusion

MakeTransclusion parses the line and returns a transclusion block. V3

func (Transclusion) ID

func (t Transclusion) ID(counter *IDCounter) string

ID returns the transclusion's id which is transclusion- and a number.

type TransclusionError

type TransclusionError struct {
	Reason TransclusionErrorReason
}

TransclusionError is the error that occurred during transclusion.

func (*TransclusionError) HasError

func (te *TransclusionError) HasError() bool

HasError is true if there is indeed an error.

type TransclusionErrorReason

type TransclusionErrorReason int

TransclusionErrorReason is the reason why the transclusion failed during parsing.

const (
	// TransclusionNoError means there is no error.
	TransclusionNoError TransclusionErrorReason = iota
	// TransclusionNotSupported means that transclusion is not supported.
	TransclusionNotSupported
	// TransclusionErrorNoTarget means that no target hypha was specified.
	TransclusionErrorNoTarget
	// TransclusionErrorOldSyntax means : was found in the target.
	TransclusionErrorOldSyntax
	// TransclusionErrorNotExists means the target hypha does not exist.
	TransclusionErrorNotExists
)

type TransclusionSelector

type TransclusionSelector int

TransclusionSelector is the thing that specifies what parts of the document shall be transcluded.

const (
	// SelectorOverview is SelectorAttachment and SelectorDescription combined.
	SelectorOverview TransclusionSelector = iota
	// SelectorAttachment selects the attachment of the target hypha.
	SelectorAttachment
	// SelectorDescription selects the description of the target hypha. The first paragraph of the text part of the hypha is considered its description.
	SelectorDescription
	// SelectorText selects all of the text in the hypha, but not the attachment.
	SelectorText
	// SelectorFull selects everything in the hypha, including the attachment.
	SelectorFull
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL