-- |
-- Module      : Docs.Common
-- Description : Common Functions for the Document Management
-- License     : AGPL-3
-- Maintainer  : stu235271@mail.uni-kiel.de
--               stu236925@mail.uni-kiel.de
--
-- This module contains some common utility functions for the
-- Document Management.
module Docs.Common (nodeWithoutText, treeWithoutText) where

import Docs.TextElement (TextElement (TextElement), TextElementID)
import Docs.TextRevision (TextElementRevision (TextElementRevision))
import Docs.Tree (Node (Node), Tree (Leaf, Tree))

-- | Takes a node of a full tree revision and throws the text element revisions away
nodeWithoutText :: Node TextElementRevision -> Node TextElementID
nodeWithoutText :: Node TextElementRevision -> Node TextElementID
nodeWithoutText (Node NodeHeader
header [Tree TextElementRevision]
children) =
    NodeHeader -> [Tree TextElementID] -> Node TextElementID
forall a. NodeHeader -> [Tree a] -> Node a
Node NodeHeader
header ([Tree TextElementID] -> Node TextElementID)
-> [Tree TextElementID] -> Node TextElementID
forall a b. (a -> b) -> a -> b
$ Tree TextElementRevision -> Tree TextElementID
treeWithoutText (Tree TextElementRevision -> Tree TextElementID)
-> [Tree TextElementRevision] -> [Tree TextElementID]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Tree TextElementRevision]
children

-- | Takes a full tree revision and throws the text element revision away
treeWithoutText :: Tree TextElementRevision -> Tree TextElementID
treeWithoutText :: Tree TextElementRevision -> Tree TextElementID
treeWithoutText (Tree Node TextElementRevision
node) = Node TextElementID -> Tree TextElementID
forall a. Node a -> Tree a
Tree (Node TextElementID -> Tree TextElementID)
-> Node TextElementID -> Tree TextElementID
forall a b. (a -> b) -> a -> b
$ Node TextElementRevision -> Node TextElementID
nodeWithoutText Node TextElementRevision
node
treeWithoutText (Leaf (TextElementRevision (TextElement TextElementID
id_ TextElementKind
_ TextElementKind
_) Maybe TextRevision
_)) = TextElementID -> Tree TextElementID
forall a. a -> Tree a
Leaf TextElementID
id_