[alt.sources] replacing " with `` and ''

djm@eng.umd.edu (David J. MacKenzie) (05/04/91)

Here's a little script I wrote when I needed to typeset some documents
that had been written with a word processor.  Anyone have a better way
to do this in perl?

#!/usr/local/bin/perl
# Change " to `` and '' for typesetting.
# Leave unchanged lines that start with `.', `'', or `\"',
# because they are probably troff code.
# David MacKenzie, djm@eng.umd.edu

$leftquote = 1;
while (<>) {
    if (!(/^[.\']/ || /^\\\"/)) {
	while (/\"/) {
	    if ($leftquote) {
		s/\"/\`\`/;
	    } else {
		s/\"/\'\'/;
	    }
	    $leftquote = !$leftquote;
	}
    }
    print;
}
--
David J. MacKenzie <djm@eng.umd.edu> <djm@ai.mit.edu>

bjaspan@athena.mit.edu (Barr3y Jaspan) (05/05/91)

In article <DJM.91May3235942@egypt.eng.umd.edu>, djm@eng.umd.edu (David J. MacKenzie) writes:
|> Here's a little script I wrote when I needed to typeset some documents
|> that had been written with a word processor.  Anyone have a better way
|> to do this in perl?

Well, I won't say this is necessarily ``better,'' but it is how I would have
done it.  Note that instead of keeping track of the $leftquote state, I just
assume some rules about how quotes are used in text (in fact, nearly the same
rules that emacs TeX mode uses).  A " that is followed by a "special symbol"
(which i've defined to be [ \n\t.?,], probably there are others) is assumed to
be a close-quote, and all others are open-quotes.


#!/afs/athena/contrib/perl/perl

$follow_end = "[ \n\t.!?,]";
while (<>) {
	if (! (/^[.\']/ || /^\"/)) {
		s/\"($follow_end)/\'\'$1/g;
		s/\"/\`\`/g;
	}
	print;
}


-- 
Barr3y Jaspan, bjaspan@mit.edu