mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 11:42:49 -06:00
Allow quoted strings for shell command arguments.
This commit is contained in:
@@ -5,9 +5,9 @@
|
|||||||
-- Stability : (stable)
|
-- Stability : (stable)
|
||||||
-- Portability : (portable)
|
-- Portability : (portable)
|
||||||
--
|
--
|
||||||
-- > CVS $Date: 2005/05/17 12:37:17 $
|
-- > CVS $Date: 2005/05/20 14:18:15 $
|
||||||
-- > CVS $Author: aarne $
|
-- > CVS $Author: bringert $
|
||||||
-- > CVS $Revision: 1.22 $
|
-- > CVS $Revision: 1.23 $
|
||||||
--
|
--
|
||||||
-- parsing GF shell commands. AR 11\/11\/2001
|
-- parsing GF shell commands. AR 11\/11\/2001
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
@@ -24,7 +24,7 @@ import GF.Compile.PGrammar (pzIdent, pTrm) --- (string2formsAndTerm)
|
|||||||
import GF.API
|
import GF.API
|
||||||
import GF.System.Arch (fetchCommand)
|
import GF.System.Arch (fetchCommand)
|
||||||
|
|
||||||
import Data.Char (isDigit)
|
import Data.Char (isDigit, isSpace)
|
||||||
import System.IO.Error
|
import System.IO.Error
|
||||||
|
|
||||||
-- parsing GF shell commands. AR 11/11/2001
|
-- parsing GF shell commands. AR 11/11/2001
|
||||||
@@ -41,7 +41,19 @@ getCommandLinesBatch = do
|
|||||||
return $ (s,pCommandLines s)
|
return $ (s,pCommandLines s)
|
||||||
|
|
||||||
pCommandLines :: String -> [CommandLine]
|
pCommandLines :: String -> [CommandLine]
|
||||||
pCommandLines = map pCommandLine . concatMap (chunks ";;" . words) . lines
|
pCommandLines = map pCommandLine . concatMap (chunks ";;" . wordsLits) . lines
|
||||||
|
|
||||||
|
-- | Like 'words', but does not split on whitespace inside
|
||||||
|
-- double quotes.
|
||||||
|
wordsLits :: String -> [String]
|
||||||
|
wordsLits [] = []
|
||||||
|
wordsLits (c:cs) | isSpace c = wordsLits (dropWhile isSpace cs)
|
||||||
|
| c == '\'' || c == '"'
|
||||||
|
= let (l,rs) = break (==c) cs
|
||||||
|
rs' = drop 1 rs
|
||||||
|
in ([c]++l++[c]):wordsLits rs'
|
||||||
|
| otherwise = let (w,rs) = break isSpace cs
|
||||||
|
in (c:w):wordsLits rs
|
||||||
|
|
||||||
pCommandLine :: [String] -> CommandLine
|
pCommandLine :: [String] -> CommandLine
|
||||||
pCommandLine s = pFirst (chks s) where
|
pCommandLine s = pFirst (chks s) where
|
||||||
|
|||||||
Reference in New Issue
Block a user