Select Git revision
Properties.hs
Properties.hs 30.87 KiB
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
-- | Contains checks for custom ties of the map json
module Properties (checkMap, checkTileset, checkLayer) where
import Universum hiding (intercalate, isPrefixOf)
import Data.Text (intercalate, isPrefixOf)
import qualified Data.Text as T
import Data.Tiled (Layer (..), Object (..), Property (..),
PropertyValue (..), Tile (..),
Tiledmap (..), Tileset (..))
import Data.Tiled.Abstract (HasData (..), HasName (..),
HasProperties (..), HasTypeName (..),
IsProperty (..), layerIsEmpty)
import qualified Data.Vector as V
import Util (mkProxy, naiveEscapeHTML, prettyprint)
import Badges (Badge (Badge),
BadgeArea (BadgePoint, BadgeRect),
BadgeToken, parseToken)
import Data.List ((\\))
import qualified Data.Set as S
import Data.Text.Metrics (damerauLevenshtein)
import GHC.TypeLits (KnownSymbol)
import LayerData (Collision, layerOverlaps)
import LintConfig (LintConfig (..))
import LintWriter (LintWriter, adjust, askContext,
askFileDepth, complain, dependsOn, forbid,
lintConfig, offersBadge, offersEntrypoint,
suggest, warn, zoom, offersCWs, offersJitsi)
import Paths (PathResult (..), RelPath (..),
getExtension, isOldStyle, parsePath)
import Types (Dep (Link, Local, LocalMap, MapLink))
import Uris (SubstError (..), applySubsts)
knownMapProperties :: Vector Text
knownMapProperties = V.fromList
[ "mapName", "mapDescription", "mapCopyright", "mapLink", "script"
, "contentWarnings" ]
knownTilesetProperties :: Vector Text
knownTilesetProperties = V.fromList
[ "tilesetCopyright", "collides"]
knownObjectProperties :: Vector Text
knownObjectProperties = V.fromList
[ "name", "url", "getBadge", "soundRadius", "default", "persist", "openLayer"
, "closeLayer", "door", "bell", "openSound", "closeSound", "bellSound"
, "allowapi"]
knownTileLayerProperites :: Vector Text
knownTileLayerProperites = V.fromList
[ "jitsiRoom", "jitsiTrigger", "jitsiTriggerMessage", "jitsiWidth"
, "playAudio", "audioLoop", "audioVolumne"
, "openWebsite", "openWebsiteTrigger", "openWebsiteTriggerMessage", "openTag"
, "exitUrl", "startLayer", "silent", "getBadge", "zone", "name", "doorVariable"
, "bindVariable", "bellVariable", "code", "openTriggerMessage"
, "closeTriggerMessage", "autoOpen", "autoClose", "bellButtonText", "bellPopup"