@@ -102,18 +102,27 @@ dateToMetaValue date =
102102 | otherwise -> printf "%04d" y
103103 _ -> mempty
104104
105−metaValueToReference :: MetaValue -> Maybe (Reference Inlines)
106−metaValueToReference (MetaMap m) = do
105+metaValueToReference :: (Text -> Bool) -- ^ predicate on IDs to include
106+ -> MetaValue
107+ -> Maybe (Reference Inlines)
108+metaValueToReference idpred (MetaMap m) = do
107109 let m' = M.mapKeys normalizeKey m
108110 id' <- M.lookup "id" m' >>= metaValueToText
109− type' <- (M.lookup "type" m' >>= metaValueToText) <|> pure ""
110− let m'' = M.delete "id" $ M.delete "type" m'
111− let vars = M.mapKeys toVariable $ M.mapWithKey metaValueToVal m''
112− return $ Reference { referenceId = ItemId id'
113− , referenceType = type'
114− , referenceDisambiguation = Nothing
115− , referenceVariables = vars }
116−metaValueToReference _ = Nothing
111+ let mbotherids =
112+ case M.lookup "other-ids" m' of
113+ Just (MetaList xs) -> map metaValueToText xs
114+ _ -> []
115+ if idpred id' || any (maybe False idpred) mbotherids
116+ then do
117+ type' <- (M.lookup "type" m' >>= metaValueToText) <|> pure ""
118+ let m'' = M.delete "id" $ M.delete "type" m'
119+ let vars = M.mapKeys toVariable $ M.mapWithKey metaValueToVal m''
120+ return $ Reference { referenceId = ItemId id'
121+ , referenceType = type'
122+ , referenceDisambiguation = Nothing
123+ , referenceVariables = vars }
124+ else Nothing
125+metaValueToReference _ _ = Nothing
117126
118127metaValueToVal :: Text -> MetaValue -> Val Inlines
119128metaValueToVal k v