From: Sam S. <sd...@gn...> - 2007-11-18 21:46:36
|
> * David Tolpin <qi...@qn...g> [2005-06-05 00:28:12 +0500]: > > (princ "xxx") > (terpri *standard-output*) > (princ #\Tab *standard-output*) > (fresh-line *standard-output*) > (princ "yyy") > > > prints two lines in CLISP, both 2.33.2, and current CVS. > > xxx > yyy > > It should print three lines > > xxx > > yyy > > because while #\Tab is a semi-standard character, if an implementation > recognizes it, it is a character on the line, and the printer and not at > the start of a new line anymore. CMUCL, Lispworks, Allegro Common Lisp, > Open MCL and ABCL print three lines. this problem boils down to (char-width #\tab) ==> 0 which comes from gnulib/uniwidth/width.c:uc_width which returns -1 because (apparently) it thinks tab is a control character. without UNICODE, char_width goes by graphic_char_p, which is required to return false for tab by <http://www.lisp.org/HyperSpec/Body/sec_13-1-4-1.html> and thus this behavior is NOT unicode-specific. the fresh-line contract <http://www.lisp.org/HyperSpec/Body/fun_terpricm_fresh-line.html>: fresh-line ... outputs a newline only if the output-stream is not already at the start of a line. If for some reason this cannot be determined, then a newline is output anyway. so, the question is: what does "at the start of a line" mean? please reply in https://sourceforge.net/tracker/index.php?func=detail&aid=1834193&group_id=1355&atid=101355 -- Sam Steingold (http://sds.podval.org/) on Fedora release 8 (Werewolf) http://memri.org http://palestinefacts.org http://israelunderattack.slide.com http://truepeace.org http://camera.org http://dhimmi.com http://ffii.org Good programmers treat Microsoft products as damage and route around it. |