{-# LANGUAGE OverloadedStrings     #-}
{- |
   Module      : Text.Pandoc.Readers.HTML.TagCategories
   Copyright   : Copyright (C) 2006-2024 John MacFarlane
   License     : GNU GPL, version 2 or above

   Maintainer  : John MacFarlane <jgm@berkeley.edu>
   Stability   : alpha
   Portability : portable

Categories of tags.
-}
module Text.Pandoc.Readers.HTML.TagCategories
  ( blockHtmlTags
  , blockDocBookTags
  , eitherBlockOrInline
  , epubTags
  , blockTags
  , sectioningContent
  , groupingContent
  )
where

import Data.Set (Set, fromList, unions)
import Data.Text (Text)

eitherBlockOrInline :: Set Text
eitherBlockOrInline :: Set Text
eitherBlockOrInline = [Text] -> Set Text
forall a. Ord a => [a] -> Set a
fromList
  [Text
"audio", Text
"applet", Text
"button", Text
"iframe", Text
"embed",
   Text
"del", Text
"ins", Text
"progress", Text
"map", Text
"area", Text
"noscript", Text
"script",
   Text
"object", Text
"svg", Text
"video", Text
"source", Text
"track"]

blockHtmlTags :: Set Text
blockHtmlTags :: Set Text
blockHtmlTags = [Text] -> Set Text
forall a. Ord a => [a] -> Set a
fromList
   [Text
"?xml", Text
"!DOCTYPE", Text
"address", Text
"article", Text
"aside",
    Text
"blockquote", Text
"body", Text
"canvas",
    Text
"caption", Text
"center", Text
"col", Text
"colgroup", Text
"dd", Text
"details",
    Text
"dir", Text
"div", Text
"dl", Text
"dt", Text
"fieldset", Text
"figcaption", Text
"figure",
    Text
"footer", Text
"form", Text
"h1", Text
"h2", Text
"h3", Text
"h4",
    Text
"h5", Text
"h6", Text
"head", Text
"header", Text
"hgroup", Text
"hr", Text
"html",
    Text
"isindex", Text
"main", Text
"menu", Text
"meta", Text
"noframes", Text
"nav",
    Text
"ol", Text
"output", Text
"p", Text
"pre",
    Text
"section", Text
"summary", Text
"table", Text
"tbody", Text
"textarea",
    Text
"thead", Text
"tfoot", Text
"ul", Text
"dd",
    Text
"dt", Text
"frameset", Text
"li", Text
"tbody", Text
"td", Text
"tfoot",
    Text
"th", Text
"thead", Text
"tr", Text
"script", Text
"style"]

-- We want to allow raw docbook in markdown documents, so we
-- include docbook block tags here too.
blockDocBookTags :: Set Text
blockDocBookTags :: Set Text
blockDocBookTags = [Text] -> Set Text
forall a. Ord a => [a] -> Set a
fromList
   [Text
"calloutlist", Text
"bibliolist", Text
"glosslist", Text
"itemizedlist",
    Text
"orderedlist", Text
"segmentedlist", Text
"simplelist",
    Text
"variablelist", Text
"caution", Text
"important", Text
"note", Text
"tip",
    Text
"warning", Text
"address", Text
"literallayout", Text
"programlisting",
    Text
"programlistingco", Text
"screen", Text
"screenco", Text
"screenshot",
    Text
"synopsis", Text
"example", Text
"informalexample", Text
"figure",
    Text
"informalfigure", Text
"table", Text
"informaltable", Text
"para",
    Text
"simpara", Text
"formalpara", Text
"equation", Text
"informalequation",
    Text
"figure", Text
"screenshot", Text
"mediaobject", Text
"qandaset",
    Text
"procedure", Text
"task", Text
"cmdsynopsis", Text
"funcsynopsis",
    Text
"classsynopsis", Text
"blockquote", Text
"epigraph", Text
"msgset",
    Text
"sidebar", Text
"title"]

epubTags :: Set Text
epubTags :: Set Text
epubTags = [Text] -> Set Text
forall a. Ord a => [a] -> Set a
fromList [Text
"case", Text
"switch", Text
"default"]

blockTags :: Set Text
blockTags :: Set Text
blockTags = [Set Text] -> Set Text
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
unions [Set Text
blockHtmlTags, Set Text
blockDocBookTags, Set Text
epubTags]

sectioningContent :: [Text]
sectioningContent :: [Text]
sectioningContent = [Text
"article", Text
"aside", Text
"nav", Text
"section"]


groupingContent :: [Text]
groupingContent :: [Text]
groupingContent = [Text
"p", Text
"hr", Text
"pre", Text
"blockquote", Text
"ol"
                  , Text
"ul", Text
"li", Text
"dl", Text
"dt", Text
"dt", Text
"dd"
                  , Text
"figure", Text
"figcaption", Text
"div", Text
"main"]