mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-27 12:24:43 +03:00
lib,web: Replace regex functions with simple text replacement.
This commit is contained in:
parent
2cd7877c46
commit
8dfffb1e61
@ -39,14 +39,14 @@ module Hledger.Data.AccountName (
|
|||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
import Data.List
|
|
||||||
import Data.List.Extra (nubSort)
|
import Data.List.Extra (nubSort)
|
||||||
|
import qualified Data.List.NonEmpty as NE
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
import Data.Monoid
|
import Data.Semigroup ((<>))
|
||||||
#endif
|
#endif
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Tree
|
import Data.Tree (Tree(..))
|
||||||
|
|
||||||
import Hledger.Data.Types
|
import Hledger.Data.Types
|
||||||
import Hledger.Utils
|
import Hledger.Utils
|
||||||
@ -115,7 +115,7 @@ expandAccountNames as = nubSort $ concatMap expandAccountName as
|
|||||||
|
|
||||||
-- | "a:b:c" -> ["a","a:b","a:b:c"]
|
-- | "a:b:c" -> ["a","a:b","a:b:c"]
|
||||||
expandAccountName :: AccountName -> [AccountName]
|
expandAccountName :: AccountName -> [AccountName]
|
||||||
expandAccountName = map accountNameFromComponents . tail . inits . accountNameComponents
|
expandAccountName = map accountNameFromComponents . NE.tail . NE.inits . accountNameComponents
|
||||||
|
|
||||||
-- | ["a:b:c","d:e"] -> ["a","d"]
|
-- | ["a:b:c","d:e"] -> ["a","d"]
|
||||||
topAccountNames :: [AccountName] -> [AccountName]
|
topAccountNames :: [AccountName] -> [AccountName]
|
||||||
@ -209,8 +209,10 @@ clipOrEllipsifyAccountName n = clipAccountName n
|
|||||||
-- >>> putStr $ escapeName "First?!#$*?$(*) !@^#*? %)*!@#"
|
-- >>> putStr $ escapeName "First?!#$*?$(*) !@^#*? %)*!@#"
|
||||||
-- First\?!#\$\*\?\$\(\*\) !@\^#\*\? %\)\*!@#
|
-- First\?!#\$\*\?\$\(\*\) !@\^#\*\? %\)\*!@#
|
||||||
escapeName :: AccountName -> String
|
escapeName :: AccountName -> String
|
||||||
escapeName = replaceAllBy (toRegex' "[[?+|()*\\\\^$]") ("\\" <>) -- PARTIAL: should not happen
|
escapeName = T.unpack . T.concatMap escapeChar
|
||||||
. T.unpack
|
where
|
||||||
|
escapeChar c = if c `elem` escapedChars then T.snoc "\\" c else T.singleton c
|
||||||
|
escapedChars = ['[', '?', '+', '|', '(', ')', '*', '$', '^', '\\']
|
||||||
|
|
||||||
-- | Convert an account name to a regular expression matching it and its subaccounts.
|
-- | Convert an account name to a regular expression matching it and its subaccounts.
|
||||||
accountNameToAccountRegex :: AccountName -> Regexp
|
accountNameToAccountRegex :: AccountName -> Regexp
|
||||||
|
@ -106,16 +106,13 @@ addForm j today = identifyForm "add" $ \extra -> do
|
|||||||
intercalate "," $ map (
|
intercalate "," $ map (
|
||||||
("{\"value\":" ++).
|
("{\"value\":" ++).
|
||||||
(++"}").
|
(++"}").
|
||||||
escapeJSSpecialChars .
|
|
||||||
drop 7 . -- "String "
|
|
||||||
show .
|
show .
|
||||||
toJSON
|
-- avoid https://github.com/simonmichael/hledger/issues/236
|
||||||
|
T.replace "</script>" "<\\/script>"
|
||||||
) ts,
|
) ts,
|
||||||
"]"
|
"]"
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
-- avoid https://github.com/simonmichael/hledger/issues/236
|
|
||||||
escapeJSSpecialChars = regexReplace (toRegexCI' "</script>") "<\\/script>"
|
|
||||||
|
|
||||||
validateTransaction ::
|
validateTransaction ::
|
||||||
FormResult Day
|
FormResult Day
|
||||||
|
@ -72,7 +72,7 @@ writeJournalTextIfValidAndChanged f t = do
|
|||||||
-- Ensure unix line endings, since both readJournal (cf
|
-- Ensure unix line endings, since both readJournal (cf
|
||||||
-- formatdirectivep, #1194) writeFileWithBackupIfChanged require them.
|
-- formatdirectivep, #1194) writeFileWithBackupIfChanged require them.
|
||||||
-- XXX klunky. Any equivalent of "hSetNewlineMode h universalNewlineMode" for form posts ?
|
-- XXX klunky. Any equivalent of "hSetNewlineMode h universalNewlineMode" for form posts ?
|
||||||
let t' = T.pack $ regexReplace (toRegex' "\r") "" $ T.unpack t
|
let t' = T.replace "\r" "" t
|
||||||
liftIO (readJournal def (Just f) t') >>= \case
|
liftIO (readJournal def (Just f) t') >>= \case
|
||||||
Left e -> return (Left e)
|
Left e -> return (Left e)
|
||||||
Right _ -> do
|
Right _ -> do
|
||||||
|
Loading…
Reference in New Issue
Block a user