Plan 9 from Bell Labs’s /usr/web/sources/contrib/bichued/root/sys/lib/python/distutils/text_file.pyc

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


�
��c@sFdZdZddkTddkZddkZddkZdfd��YZedjo�dZe	d	�ei
ed
�dd!�Zd
dd
gZdddd
gZ
ddgZdgZdgZd�ZdZeed�Zeie�ei�eedddddddd�Zeddee�eedddddddd�Zeddee�eedddddddd�Zedd ee
�ee�Zed!d"ee�eeddddd#ddd�Zed$d%ee�eeddddd#dddd&d�Zed'd(ee�eie�ndS()s�text_file

provides the TextFile class, which gives an interface to text files
that (optionally) takes care of stripping comments, ignoring blank
lines, and joining lines with backslashes.s8$Id: text_file.py 29687 2002-11-14 02:25:42Z akuchling $i�(t*NtTextFilecBs�eZdZhdd<dd<dd<dd<dd<dd<Zddd	�Zd
�Zd�Zdd�Zdd
�Z	dd�Z
d�Zd�Zd�Z
RS(s�Provides a file-like object that takes care of all the things you
       commonly want to do when processing a text file that has some
       line-by-line syntax: strip comments (as long as "#" is your
       comment character), skip blank lines, join adjacent lines by
       escaping the newline (ie. backslash at end of line), strip
       leading and/or trailing whitespace.  All of these are optional
       and independently controllable.

       Provides a 'warn()' method so you can generate warning messages that
       report physical line number, even if the logical line in question
       spans multiple physical lines.  Also provides 'unreadline()' for
       implementing line-at-a-time lookahead.

       Constructor is called as:

           TextFile (filename=None, file=None, **options)

       It bombs (RuntimeError) if both 'filename' and 'file' are None;
       'filename' should be a string, and 'file' a file object (or
       something that provides 'readline()' and 'close()' methods).  It is
       recommended that you supply at least 'filename', so that TextFile
       can include it in warning messages.  If 'file' is not supplied,
       TextFile creates its own using the 'open()' builtin.

       The options are all boolean, and affect the value returned by
       'readline()':
         strip_comments [default: true]
           strip from "#" to end-of-line, as well as any whitespace
           leading up to the "#" -- unless it is escaped by a backslash
         lstrip_ws [default: false]
           strip leading whitespace from each line before returning it
         rstrip_ws [default: true]
           strip trailing whitespace (including line terminator!) from
           each line before returning it
         skip_blanks [default: true}
           skip lines that are empty *after* stripping comments and
           whitespace.  (If both lstrip_ws and rstrip_ws are false,
           then some lines may consist of solely whitespace: these will
           *not* be skipped, even if 'skip_blanks' is true.)
         join_lines [default: false]
           if a backslash is the last non-newline character on a line
           after stripping comments and whitespace, join the following line
           to it to form one "logical line"; if N consecutive lines end
           with a backslash, then N+1 physical lines will be joined to
           form one logical line.
         collapse_join [default: false]
           strip leading whitespace from lines that are joined to their
           predecessor; only matters if (join_lines and not lstrip_ws)

       Note that since 'rstrip_ws' can strip the trailing newline, the
       semantics of 'readline()' must differ from those of the builtin file
       object's 'readline()' method!  In particular, 'readline()' returns
       None for end-of-file: an empty string might just be a blank line (or
       an all-whitespace line), if 'rstrip_ws' is true but 'skip_blanks' is
       not.itstrip_commentstskip_blanksit	lstrip_wst	rstrip_wst
join_linest
collapse_joincKs|djo|djo
td�nxV|ii�D]E}|i|�ot||||�q7t|||i|�q7Wx8|i�D]*}|ii|�ptd|�q�q�W|djo|i|�n||_||_	d|_
g|_dS(s�Construct a new TextFile object.  At least one of 'filename'
           (a string) and 'file' (a file-like object) must be supplied.
           They keyword argument options are described above and affect
           the values returned by 'readline()'.s7you must supply either or both of 'filename' and 'file'sinvalid TextFile option '%s'iN(tNonetRuntimeErrortdefault_optionstkeysthas_keytsetattrtKeyErrortopentfilenametfiletcurrent_linetlinebuf(tselfRRtoptionstopt((s&/sys/lib/python/distutils/text_file.pyt__init__Os$


			cCs+||_t|id�|_d|_dS(syOpen a new file named 'filename'.  This overrides both the
           'filename' and 'file' arguments to the constructor.triN(RRRR(RR((s&/sys/lib/python/distutils/text_file.pyRts	cCs,|ii�d|_d|_d|_dS(siClose the current file and forget everything we know about it
           (filename, current line number).N(RtcloseRRR(R((s&/sys/lib/python/distutils/text_file.pyR}s
		cCs�g}|djo
|i}n|i|id�t|�ttfjo|idt|��n|id|�|it|��t	i
|d�S(Ns, s
lines %d-%d: s	line %d: t(RRtappendRttypetListTypet	TupleTypettupletstrtstringtjoin(Rtmsgtlinetoutmsg((s&/sys/lib/python/distutils/text_file.pyt	gen_error�s

cCstd|i||��dS(Nserror: (t
ValueErrorR&(RR#R$((s&/sys/lib/python/distutils/text_file.pyterror�scCs(tiid|i||�d�dS(s�Print (to stderr) a warning message tied to the current logical
           line in the current file.  If the current logical line in the
           file spans multiple physical lines, the warning refers to the
           whole range, eg. "lines 3-5".  If 'line' supplied, it overrides
           the current line number; it may be a list or tuple to indicate a
           range of physical lines, or an integer for a single physical
           line.s	warning: s
N(tsyststderrtwriteR&(RR#R$((s&/sys/lib/python/distutils/text_file.pytwarn�scCs|io|id}|id=|Snd}x�|ii�}|djo
d}n|io�|o�ti|d�}|djoq|djp||ddjoP|ddjodpd}|d|!|}ti|�djoq2qqti|dd�}n|i	o�|o�|djo|i
d	�|Sn|ioti|�}n||}t
|i�tjo|idd|id<q|i|idg|_nT|djodSnt
|i�tjo|idd|_n|id|_|io|ioti|�}n;|ioti|�}n|ioti|�}n|djp
|djo|ioq2n|i	oO|ddjo|d }q2n|d
djo|dd
!d}q2q�|Sq2dS(
sURead and return a single logical line from the current file (or
           from an internal buffer if lines have previously been "unread"
           with 'unreadline()').  If the 'join_lines' option is true, this
           may involve reading multiple physical lines concatenated into a
           single string.  Updates the current line number, so calling
           'warn()' after 'readline()' emits a warning about the physical
           line(s) just read.  Returns None on end-of-file, since the empty
           string can occur if 'rstrip_ws' is true but 'strip_blanks' is
           not.i�Rt#iis\s
s\#s2continuation line immediately precedes end-of-filei�s\
N(RRtreadlineRRR!tfindtstriptreplaceRR,RtlstripRRRRRtrstripR(RR$tbuildup_linetposteol((s&/sys/lib/python/distutils/text_file.pyR.�sd




"	






$

cCs>g}x1|i�}|djo|Sn|i|�q	dS(sWRead and return the list of all logical lines remaining in the
           current file.N(R.RR(RtlinesR$((s&/sys/lib/python/distutils/text_file.pyt	readlines s
cCs|ii|�dS(s�Push 'line' (a string) onto an internal buffer that will be
           checked by future 'readline()' calls.  Handy for implementing
           a parser with line-at-a-time lookahead.N(RR(RR$((s&/sys/lib/python/distutils/text_file.pyt
unreadline,sN(t__name__t
__module__t__doc__R
RRRRR&R(R,R.R8R9(((s&/sys/lib/python/distutils/text_file.pyR
s 8
				%			

	~	t__main__sE# test file

line 3 \
# intervening comment
  continues on next line
cCs|dS(s
((tx((s&/sys/lib/python/distutils/text_file.pyt<lambda><ss
is	line 3 \
s  continues on next line
s# test file
s# intervening comment
sline 3 \s  continues on next linesline 3   continues on next linesline 3 continues on next linecCsS|i�}||jod||fGHn$d||fGHdGH|GHdGH|GHdS(Ns
ok %d (%s)snot ok %d (%s):s** expected:s** received:(R8(tcounttdescriptionRtexpected_resulttresult((s&/sys/lib/python/distutils/text_file.pyt
test_inputUs
stest.txttwRRRRis
no processingisstrip commentsisstrip blanksisdefault processingRisjoin lines without collapsingRisjoin lines with collapsing(R<t__revision__ttypesR)tosR!RR:t	test_datatmaptsplittresult1tresult2tresult3tresult4tresult5tresult6RDRRtout_fileR+Rtin_filetremove(((s&/sys/lib/python/distutils/text_file.pys<module>sT
$�%						




Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].