diff options
Diffstat (limited to 'src/Zettel/Links.hs')
-rw-r--r-- | src/Zettel/Links.hs | 40 |
1 files changed, 10 insertions, 30 deletions
diff --git a/src/Zettel/Links.hs b/src/Zettel/Links.hs index 6857d45..05659cf 100644 --- a/src/Zettel/Links.hs +++ b/src/Zettel/Links.hs @@ -8,10 +8,10 @@ import qualified Data.Map.Strict as Map import qualified Data.Text as T import Data.Text.Read (decimal) import Numeric (readInt, showIntAtBase) -import Text.Pandoc.Builder (HasMeta (..)) import Text.Pandoc.Definition (Inline (..), Pandoc (..)) import Text.Pandoc.Shared (stringify) import Text.Pandoc.Walk (query, walk) +import Zettel.Common import Zettel.Types parseIds :: Text -> Text @@ -90,12 +90,12 @@ addIdPresent zg (Just ident) = [ident | ident `elem` Map.keys (unZettelGraph zg)] addIdPresent _ Nothing = [] -forwardLinkNode :: ZettelGraph -> ZettelId -> ZettelNode -> ZettelNode +forwardLinkNode :: ZettelGraph -> ZettelId -> Zettel -> Zettel forwardLinkNode zg ident zn = zn - { zettelNodeNext = + { zettelNext = nub - ( query gatherForwardIds (zn.zettelNodeZettel.zettelBody) + ( query gatherForwardIds zn.zettelBody <> addIdPresent zg (defNextId ident) <> addIdPresent zg (defBranchId ident) ) @@ -104,13 +104,13 @@ forwardLinkNode zg ident zn = forwardLink :: ZettelGraph -> ZettelGraph forwardLink zg = ZettelGraph . Map.mapWithKey (forwardLinkNode zg) $ unZettelGraph zg -backwardLinkNode :: ZettelGraph -> ZettelId -> ZettelNode -> ZettelNode +backwardLinkNode :: ZettelGraph -> ZettelId -> Zettel -> Zettel backwardLinkNode graph ident node = Map.foldlWithKey' f node (unZettelGraph graph) where - f :: ZettelNode -> ZettelId -> ZettelNode -> ZettelNode + f :: Zettel -> ZettelId -> Zettel -> Zettel f l ident' zg - | ident `elem` zg.zettelNodeNext = - l {zettelNodePrev = ident' : l.zettelNodePrev} + | ident `elem` zg.zettelNext = + l {zettelPrev = ident' : l.zettelPrev} | otherwise = l backwardLink :: ZettelGraph -> ZettelGraph @@ -127,32 +127,12 @@ updatePandocLinksInline i = i updatePandocLinksPandoc :: Pandoc -> Pandoc updatePandocLinksPandoc = walk updatePandocLinksInline -updatePandocLinksAttr :: [ZettelId] -> [ZettelId] -> Pandoc -> Pandoc -updatePandocLinksAttr back forw = - setMeta "backlinks" back - . setMeta "forwardlinks" forw - updatePandocLinksZettel :: Zettel -> Zettel updatePandocLinksZettel zg = zg {zettelBody = updatePandocLinksPandoc (zettelBody zg)} -updatePandocLinksZettelNode :: ZettelNode -> ZettelNode -updatePandocLinksZettelNode zg = - zg {zettelNodeZettel = updatePandocLinksZettel (zettelNodeZettel zg)} - -updatePandocAttrZettel :: [ZettelId] -> [ZettelId] -> Zettel -> Zettel -updatePandocAttrZettel back forw zg = - zg {zettelBody = updatePandocLinksAttr back forw (zettelBody zg)} - -updatePandocAttrZettelNode :: ZettelNode -> ZettelNode -updatePandocAttrZettelNode zg = - zg {zettelNodeZettel = updatePandocAttrZettel (zettelNodePrev zg) (zettelNodeNext zg) (zettelNodeZettel zg)} - updatePandocLinks :: ZettelGraph -> ZettelGraph -updatePandocLinks zg = ZettelGraph $ updatePandocLinksZettelNode <$> unZettelGraph zg - -updatePandocAttrL :: ZettelGraph -> ZettelGraph -updatePandocAttrL zg = ZettelGraph $ updatePandocAttrZettelNode <$> unZettelGraph zg +updatePandocLinks zg = ZettelGraph $ updatePandocLinksZettel <$> unZettelGraph zg linkAll :: ZettelGraph -> ZettelGraph -linkAll = updatePandocAttrL . backwardLink . forwardLink . updatePandocLinks +linkAll = refreshPandocMeta . backwardLink . forwardLink . updatePandocLinks |