[commit: haddock] ghc-7.6: Simplify lexing/parsing of properties (dfbe1c4)

Simon Hengel <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/haddock

On branch  : ghc-7.6

http://hackage.haskell.org/trac/ghc/changeset/dfbe1c45879d8ae32845c72e5ae241fb1c6fe502

>---------------------------------------------------------------

commit dfbe1c45879d8ae32845c72e5ae241fb1c6fe502
Author: Simon Hengel <[email protected]>
Date:   Tue Oct 9 12:41:25 2012 +0200

    Simplify lexing/parsing of properties
    
    In contrast to what we do for examples, we do not really need to capture
    the "prompt" here.

>---------------------------------------------------------------

 src/Haddock/Lex.x   |   10 ++--------
 src/Haddock/Parse.y |   16 +++++++++++-----
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/Haddock/Lex.x b/src/Haddock/Lex.x
index 35e6dd8..aec4c64 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 c8a1a55..0befe39 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 =
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.