diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-05-24 09:37:52 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-05-24 15:37:08 +0200 |
commit | a5f20f40840a0cbc1580261bff3d3a7fd2cdc29b (patch) | |
tree | 49a26ca92417e1d9151ea2c5508f7dbc46a6e45f /src/Job | |
parent | 76370492c9c0cdbb51b4f7c14e082c04b0b223d5 (diff) |
Parse parentheses in job reference
Diffstat (limited to 'src/Job')
-rw-r--r-- | src/Job/Types.hs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/Job/Types.hs b/src/Job/Types.hs index 7e7a4b8..1ac329e 100644 --- a/src/Job/Types.hs +++ b/src/Job/Types.hs @@ -86,3 +86,17 @@ textJobIdPart = \case textJobId :: JobId -> Text textJobId (JobId ids) = T.intercalate "." $ map textJobIdPart ids + +parseJobRef :: Text -> JobRef +parseJobRef = JobRef . go 0 "" + where + go :: Int -> Text -> Text -> [ Text ] + go plevel cur s = do + let bchars | plevel > 0 = [ '(', ')' ] + | otherwise = [ '.', '(', ')' ] + let ( part, rest ) = T.break (`elem` bchars) s + case T.uncons rest of + Just ( '.', rest' ) -> (cur <> part) : go plevel "" rest' + Just ( '(', rest' ) -> go (plevel + 1) (cur <> part) rest' + Just ( ')', rest' ) -> go (plevel - 1) (cur <> part) rest' + _ -> [ cur <> part ] |