All Downloads are FREE. Search and download functionalities are using the official Maven repository.

laika.markdown.ast.elements.scala Maven / Gradle / Ivy

/*
 * Copyright 2013-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package laika.markdown.ast

import laika.ast._


/** A top level HTML block as defined by the Markdown syntaxt description. It is surrounded by blank lines
  *  and has a block-level element (one that is not classified as "phrasing content" in the HTML specification)
  *  as its root element. It may contain other nested HTML elements and tags, but no spans produced by standard
  *  Markdown markup.
  */
case class HTMLBlock (root: HTMLElement, options: Options = NoOpt) extends Block

/** Base class for all verbatim HTML span elements.
  */
abstract class HTMLSpan extends Span


/** Represents a full HTML element with matching start and end tags. The content of this span container
  *  may contain further nested HTML elements and tags as well as simple text elements.
  */
case class HTMLElement (startTag: HTMLStartTag, content: List[Span], options: Options = NoOpt) extends HTMLSpan with SpanContainer[HTMLElement]

/** Represent a start tag. When this element is part of a final document tree, it represents
  *  an orphaned start tag without matching end tag. In HTML this may be legal (some tags like the p
  *  tag are defined as "auto-closing" under certain circumstances). This library however does not
  *  implement the full logic of a proper HTML parser to distinguish between legal and faulty
  *  occurrences of unmatched start tags.
  */
case class HTMLStartTag (name: String, attributes: List[HTMLAttribute], options: Options = NoOpt) extends HTMLSpan with Block

/** Represents an empty element (like `<br/>` or `<hr/>`) in case it contains the explicit
  *  slash to mark it as closed. Otherwise it will be classified as a start tag.
  */
case class HTMLEmptyElement (name: String, attributes: List[HTMLAttribute], options: Options = NoOpt) extends HTMLSpan with Block

/** Represents an orphaned end tag without matching start tag.
  */
case class HTMLEndTag (name: String, options: Options = NoOpt) extends HTMLSpan

/** Represents a standard HTML comment.
  */
case class HTMLComment (content: String, options: Options = NoOpt) extends HTMLSpan with Block with TextContainer

/** Represents a numerical or named character reference.
  */
case class HTMLCharacterReference (content: String, options: Options = NoOpt) extends HTMLSpan with TextContainer

/** Represents a single HTML attribute. The value is provided as a list of TextContainers
  *  as it may contain HTML character references alongside regular Text elements.
  */
case class HTMLAttribute (name: String, value: List[Span with TextContainer], quotedWith: Option[Char])




© 2015 - 2025 Weber Informatics LLC | Privacy Policy