@@ -844,24 +844,12 @@ notAfterForbiddenBorderChar = do
844844
845845-- | Read a sub- or superscript expression
846846subOrSuperExpr :: OrgParser Inlines
847−subOrSuperExpr = try $ do
848− choice [ balancedSexp '{' '}'
849− , balancedSexp '(' ')' >>= return . enclosing ('(', ')')
847+subOrSuperExpr = try $
848+ choice [ id <$> charsInBalanced '{' '}' (noneOf "\n\r")
849+ , enclosing ('(', ')') <$> charsInBalanced '(' ')' (noneOf "\n\r")
850850 , simpleSubOrSuperString
851851 ] >>= parseFromString (mconcat <$> many inline)
852−
853−-- | Read a balanced sexp
854−balancedSexp :: Char
855− -> Char
856− -> OrgParser String
857−balancedSexp l r = try $ do
858− char l
859− res <- concat <$> many ( many1 (noneOf ([l, r] ++ "\n\r"))
860− <|> try (string [l, r])
861− <|> enclosing (l, r) <$> balancedSexp l r
862− )
863− char r
864− return res
852+ where enclosing (left, right) s = left : s ++ [right]
865853
866854simpleSubOrSuperString :: OrgParser String
867855simpleSubOrSuperString = try $
@@ -869,8 +857,3 @@ simpleSubOrSuperString = try $
869857 , mappend <$> option [] ((:[]) <$> oneOf "+-")
870858 <*> many1 alphaNum
871859 ]
872−
873−enclosing :: (a, a)
874− -> [a]
875− -> [a]
876−enclosing (left, right) s = left : s ++ [right]