class Luce::DelimiterRun

Overview

An implementation of Delimiter which uses concepts of "left-flanking" and "right-flanking" to determine the values of #openable? and closeable?.

This is primarily used when parsing emphasis and strong emphasis, but can also be used by other extensions of DelimiterSyntax.

Defined in:

luce/inline_syntaxes/delimiter_syntax.cr

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class Luce::Delimiter

active=(active : Bool) : Nil active=, active? : Bool active?, char : Int32 char, closable? : Bool closable?, node : Text node, node=(node : Text) node=, openable? : Bool openable?, size : Int32 size, syntax : DelimiterSyntax syntax

Constructor Detail

def self.new(node : Text, char : Int32, syntax : DelimiterSyntax, tags : Array(DelimiterTag), is_left_flanking : Bool, is_right_flanking : Bool, is_preceded_by_punctuation : Bool, is_followed_by_punctuation : Bool, allow_intra_word : Bool) #

Class Method Detail

def self.parse?(parser : InlineParser, run_start : Int32, run_end : Int32, syntax : DelimiterSyntax, tags : Array(DelimiterTag), node : Text, allow_intra_word : Bool = false) : DelimiterRun | Nil #

Attempt to parse a delimiter run from run_start (inclusive) to run_end (exclusive).


def self.punctuation : Regex #

According to CommonMark:

A punctuation character is an ASCII punctuation character or anything in the general Unicode categories Pc, Pd, Pe, Pf, Pi, Po, or Ps.

This Regex is inspired by https://github.com/commonmark/commonmark.js/blob/1f7d09099/lib/inlines.js#L39. I don't know if there is any way to simplify it or maintain it.


def self.whitespace : String #

TODO Unicode whitespace


Instance Method Detail

def active=(active : Bool) : Nil #
Description copied from class Luce::Delimiter

Whether the delimiter is active

Links cannot be nested, so we must "deactivate" any pending ones. For example, take the following text:

Text [link and [more](links)](links).

Once we have parsed Text [, there is one (pending) link in the state stack. It is, by default, active. Once we parse the next possible link, [more](links), as a real link, we must deactivate the pending links (just the one, in this case).


def active? : Bool #
Description copied from class Luce::Delimiter

Whether the delimiter is active

Links cannot be nested, so we must "deactivate" any pending ones. For example, take the following text:

Text [link and [more](links)](links).

Once we have parsed Text [, there is one (pending) link in the state stack. It is, by default, active. Once we parse the next possible link, [more](links), as a real link, we must deactivate the pending links (just the one, in this case).


def allow_intra_word? : Bool #

def char : Int32 #
Description copied from class Luce::Delimiter

The type of delimiter

For the two-character image delimiter, ![, this is !.


def closable? : Bool #
Description copied from class Luce::Delimiter

Whether this delimiter can close emphasis or strong emphasis.


def node : Text #
Description copied from class Luce::Delimiter

The Text ndoe representing the plain text representing this delimiter


def node=(node : Text) #
Description copied from class Luce::Delimiter

The Text ndoe representing the plain text representing this delimiter


def openable? : Bool #
Description copied from class Luce::Delimiter

Whether this delimiter can open emphasis or strong emphasis.


def size : Int32 #
Description copied from class Luce::Delimiter

The number of delimiters


def syntax : DelimiterSyntax #
Description copied from class Luce::Delimiter

The syntax which uses this delimiter to parse a tag.


def tags : Array(DelimiterTag) #

def to_s : String #
Description copied from class Object

Returns a nicely readable and concise string representation of this object, typically intended for users.

This method should usually not be overridden. It delegates to #to_s(IO) which can be overridden for custom implementations.

Also see #inspect.