aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Hengel <sol@typeful.net>2012-10-09 12:41:25 +0200
committerSimon Hengel <sol@typeful.net>2012-10-09 12:45:31 +0200
commitdfbe1c45879d8ae32845c72e5ae241fb1c6fe502 (patch)
treef32417c55bfeb4d2fa420e5fe688ad4a1eda5808
parent72675c1bf281b81041a19014b1b7df03a0de9488 (diff)
Simplify lexing/parsing of properties
In contrast to what we do for examples, we do not really need to capture the "prompt" here.
-rw-r--r--src/Haddock/Lex.x10
-rw-r--r--src/Haddock/Parse.y16
2 files changed, 13 insertions, 13 deletions
diff --git a/src/Haddock/Lex.x b/src/Haddock/Lex.x
index 35e6dd8a..aec4c647 100644
--- a/src/Haddock/Lex.x
+++ b/src/Haddock/Lex.x
@@ -50,7 +50,7 @@ $ident = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]
<0,para> {
$ws* \n ;
$ws* \> { begin birdtrack }
- $ws* prop\> { strtoken TokPropertyPrompt `andBegin` propertyexpr }
+ $ws* prop \> .* \n { strtoken TokProperty }
$ws* \>\>\> { strtoken TokExamplePrompt `andBegin` exampleexpr }
$ws* [\*\-] { token TokBullet `andBegin` string }
$ws* \[ { token TokDefStart `andBegin` def }
@@ -62,7 +62,6 @@ $ident = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]
-- beginning of a line
<line> {
$ws* \> { begin birdtrack }
- $ws* prop\> { strtoken TokPropertyPrompt `andBegin` propertyexpr }
$ws* \>\>\> { strtoken TokExamplePrompt `andBegin` exampleexpr }
$ws* \n { token TokPara `andBegin` para }
-- Here, we really want to be able to say
@@ -86,10 +85,6 @@ $ident = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]
<exampleresult> .* \n { strtokenNL TokExampleResult `andBegin` example }
-<propertyexpr> .* \n { strtokenNL TokPropertyExpression `andBegin` property }
-
-<property> () { token TokPara `andBegin` para }
-
<string,def> {
$special { strtoken $ \s -> TokSpecial (head s) }
\<\< [^\>]* \>\> { strtoken $ \s -> TokPic (init $ init $ tail $ tail s) }
@@ -135,8 +130,7 @@ data Token
| TokEmphasis String
| TokAName String
| TokBirdTrack String
- | TokPropertyPrompt String
- | TokPropertyExpression String
+ | TokProperty String
| TokExamplePrompt String
| TokExampleExpression String
| TokExampleResult String
diff --git a/src/Haddock/Parse.y b/src/Haddock/Parse.y
index c8a1a558..0befe395 100644
--- a/src/Haddock/Parse.y
+++ b/src/Haddock/Parse.y
@@ -35,8 +35,7 @@ import Data.List (stripPrefix)
'-' { (TokBullet,_) }
'(n)' { (TokNumber,_) }
'>..' { (TokBirdTrack $$,_) }
- PPROMPT { (TokPropertyPrompt $$,_) }
- PEXP { (TokPropertyExpression $$,_) }
+ PROP { (TokProperty $$,_) }
PROMPT { (TokExamplePrompt $$,_) }
RESULT { (TokExampleResult $$,_) }
EXP { (TokExampleExpression $$,_) }
@@ -75,15 +74,15 @@ defpara :: { (Doc RdrName, Doc RdrName) }
para :: { Doc RdrName }
: seq { docParagraph $1 }
| codepara { DocCodeBlock $1 }
- | property { DocProperty $1 }
+ | property { $1 }
| examples { DocExamples $1 }
codepara :: { Doc RdrName }
: '>..' codepara { docAppend (DocString $1) $2 }
| '>..' { DocString $1 }
-property :: { String }
- : PPROMPT PEXP { strip $2 }
+property :: { Doc RdrName }
+ : PROP { makeProperty $1 }
examples :: { [Example] }
: example examples { $1 : $2 }
@@ -136,6 +135,13 @@ makeHyperlink input = case break isSpace $ strip input of
(url, "") -> Hyperlink url Nothing
(url, label) -> Hyperlink url (Just . dropWhile isSpace $ label)
+makeProperty :: String -> Doc RdrName
+makeProperty s = case strip s of
+ 'p':'r':'o':'p':'>':xs ->
+ DocProperty (dropWhile isSpace xs)
+ xs ->
+ error $ "makeProperty: invalid input " ++ show xs
+
-- | Create an 'Example', stripping superfluous characters as appropriate
makeExample :: String -> String -> [String] -> Example
makeExample prompt expression result =