[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: New TextRider & oo2c patch



> > If we assume that a text file will only contain one of the three EOL
> > conventions and if ASCII.CR ASCII.LF cannot be used in any other way
> > (reasonable assumptions), we can distinguish the convention being used
> > without attempting a (possibly blocking) lookahead. 
> 
> I don't think your proposal works.  Here are three examples:

I was wrong.  Here is the updated TextRider featuring eol auto
detection.  The specs for Reader.SetEol:

PROCEDURE (r: Reader) SetEol* (marker: ARRAY OF CHAR; markerLen: INTEGER);
(* Sets new end of line marker.  If the passed string marker does not fit into
   the field `eol', or it does contain a character >= " ", then 
   `r.Res()' is set to `invalidFormat'. 
   
   A marker length `markerLen=-1' enables auto detection of the end-of-line
   convention used by the channel.  The channel is required to use one of the
   following eol markers:
     LF      used by Unix
     CR      used by MacOS
     CR/LF   used by MS-DOS and Windows
     
   Enabling auto detection introduces a (small) inconsistency: if the first line
   of the channel ends with a CR, then skipping over the complete eol marker
   of this line is not done at once iff the next character is a LF. 
   Example: 
     Input is "line1<CR><LF>line2".
     The first ReadLine leaves the reading position between <CR> and <LF>,
     the second ReadLine skips automagically the <LF> and returns "line2".
   
   pre: (r.Res() = done) & 
        ((markerLen = -1) OR (1 <= markerLen < LEN (marker))) &
        (markerLen < maxLengthEol) & (for all i: marker[i] < 20X) *)

ChangeLog:
  revision 1.13
  date: 1998/06/29 18:58:50;  author: acken;  state: Exp;  lines: +117 -33
  Renamed `SetEOL' to `SetEol'.

  (Reader.SetEol): Added auto detection to the specs again.

  (Lookahead, Consume, Reader.Eol, ReaderReadLine):
  Added eol auto detection magic.

  (Reader.ClearError,Reader.SetPos):
  Reset ongoing auto detection if called.

I only checked that auto detection works under Unix.  I have not tried
the CR or CR+LF combination.  This is left as an excercise to the user
:-)

Note that the generalized eol rule (any of CR, LF, and CR+LF is
possible for eol), as suggested by Eric, will probably not simplify
the code very much.

-- mva

begin 440 TextRider.Mod.gz
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
@*Q#^I%@"8JDWX80JS0EB,EMPV4>(;OT'AOS==%.K````
`
end