Re: [GHC] #3549: unlit does not follow H98 spec

#3549: unlit does not follow H98 spec -------------------------------------+------------------------------------- Reporter: duncan | Owner: Type: bug | Status: new Priority: normal | Milestone: ⊥ Component: Compiler | Version: 6.10.4 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by lenish): I recently ran into this bug when trying to learn Haskell. I always indent my LaTeX blocks to improve readability, but that doesn't work properly with unlit. The readline function handles prefixed whitespace properly. It's when we get to checking for `\end{code}` after `\begin{code}` that things break. The file I'm working with: {{{ \documentclass[12pt]{article} \begin{document} \maketitle \section{Type Declaration} \begin{code} data Thingy = Thing \end{code} \end{document} }}} Unfortunately, from the original report, it sounds as though the specification requires these lines to not be indented? Being new to Haskell & GHC I've no idea how to go about changing things like that or if such a change is possible. My general impression is that the 'correct' way to do this would be to parse the file, locate `\begin{code}` and `\end{code}` sections that TeX would treat as such (not in comments, etc), and then strip out everything but those blocks. That it does not work this way currently makes this feature way less enticing to me, as I won't be able to create maintainable and readable LaTeX files without proper indentation. If there were a desire for this to be reimplemented in Haskell with proper (or a reasonable approximation of proper) TeX parsing then I wouldn't mind trying to figure out how to do that as part of my learning how to program in Haskell project. Again, not sure what the situation is with the specification or even if such a patch would be accepted? I have a relatively simple, hacky patch which prevents leading whitespace from causing `\end{code}` to fail to match. I also modified the PSEUDOCODE section, as it seems to have the same issue. There may be issues with this patch in the event someone had a 1000 character line, but that seems... excessive. {{{#!diff diff --git a/utils/unlit/unlit.c b/utils/unlit/unlit.c index a367a0a..dff43bc 100644 --- a/utils/unlit/unlit.c +++ b/utils/unlit/unlit.c @@ -273,7 +273,15 @@ void unlit(char *file, FILE *istream, FILE *ostream) exit(1); } linesread++; - if (strncmp(lineb,ENDCODE,LENENDCODE) == 0) { + + size_t offset = 0; + for(offset = 0; offset < sizeof lineb; ++offset) { + if (!isWhitespace(lineb[offset])) { + break; + } + } + + if (strncmp(&lineb[offset],ENDCODE,LENENDCODE) == 0) { myputc('\n', ostream); break; } @@ -289,9 +297,17 @@ void unlit(char *file, FILE *istream, FILE *ostream) complain(file, linesread, MISSINGENDPSEUDOCODE); exit(1); } + + size_t offset = 0; + for(offset = 0; offset < sizeof lineb; ++offset) { + if (!isWhitespace(lineb[offset])) { + break; + } + } + linesread++; myputc('\n', ostream); - if (strncmp(lineb,ENDPSEUDOCODE,LENENDPSEUDOCODE) == 0) { + if (strncmp(&lineb[offset],ENDPSEUDOCODE,LENENDPSEUDOCODE) == 0) { break; } } }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/3549#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC