📄 reflow
字号:
#!/usr/local/bin/perl -w# Version 7.0# Original script written by Michael Larsen, larsen@edu.upenn.math # Modified by Martin Ward, Martin.Ward@uk.ac.durham# Copyright 1994 Michael Larsen and Martin Ward# Email: Martin.Ward@durham.ac.uk## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.## Usage: reflow [-skipto stuff] [-fast|-slow|-veryslow] [-skipindented] src>out## Uses Knuth's paragraphing algorithm (as used in TeX) to "reflow"# text files by picking "good" places to break the line. ## It takes an ascii text file (with paragraphs separated by blank lines)# and reflows the paragraphs. If two or more lines in a row are "indented"# then they are assumed to be a quoted poem and are passed through unchanged.# (The -skipindented causes ALL indented lines to be passed unchanged)## The "reflow" operation tries to keep the lines the same length but also# tries to break at punctuation, and avoid breaking within a proper name# or after certain "connectives" ("a", "the", etc.).## The "-veryslow" option reflows each paragraph 16 times with different# optimal line widths and picks the "best" result -- with this option# the paragraphs are easier to read, but the line width may vary from# one paragraph to the next.### Recent version history:# 5.1: Fixed a bug with hyphens at end of lines# (caught by check-punct!)# 5.2: Avoid turning ". . ." into ". . ."# 5.3: Added an option "-skipto stuff"# which skips lines up to and including a line starting with "stuff"# 5.4: Added an option "-skipindented" which treats ALL indented lines# as "poetry" (i.e. not reflow-ed), rather than requiring two# indented lines.# 5.5: Fixed a bug when a paragraph starts with "--"# 5.6: Tweaked some parameters, and modified to break before rather# than after a word which starts with an opening parenthesis# 5.7: Delete spaces at the end of lines in output.# 5.8: Added an option "-slow" which tries a list of "optimum" line lengths,# picking the one which gives the least total penalties.# 5.9: Tweaked the parameters a bit more!# 6.0: Added a "-veryslow" option which uses a LONG list of "optimum" lengths,# -veryslow is about 7 times slower than with no options (or -fast)# 6.1: Added a penalty for paragraphs with 1 or 2 words on the last line.# 6.2: Fixed a bug in calculating $bestsofar.# 6.3: Modified to work with perl5beta1 (gaining a 20% speed improvement).# 6.4: Added "-w" and fixed warnings and a bug with v long first word in para.# 6.5: Fix 5.1 could leave @linewords empty# -- check for hyphen at end of line before checking @linewords# 6.6: Trim spaces from the ends of lines before printing.# 6.7: Tweaked "optimum" parameters and reduced maximum to 75# 6.8: Speed optimisations, including converting all penalties to integers# -- now 37% faster on -veryslow# 7.0: Converted to a module with an XSUB for reflow_trial# -- Vast speed improvement!use Text::Reflow (reflow_file);use strict;my @slow_optimum = (65, 70, 60); # List of best line lengths for -slow optionmy @veryslow_optimum = (60..70); # ditto for -veryslow optionmy @fast_optimum = (65); # The defaultmy $Usage = "reflow [-fast|-slow|-veryslow] [-skipto patt] [-skipindented] ...\n";$| = 1; # unbuffer outputmy @opts = ();# Check for options -skipindented, -fast, -slow, -veryslow for backwards compatibility:while (($#ARGV >= 0) && ($ARGV[0] =~ /^-/)) { if ($ARGV[0] eq "-skipindented") { shift; if (@ARGV && ($ARGV[0] =~ /^[012]$/)) { push(@opts, "skipindented", shift); } else { push(@opts, "skipindented", 1); } } elsif ($ARGV[0] eq "-fast") { shift; push(@opts, "optimum", \@fast_optimum); } elsif ($ARGV[0] eq "-slow") { shift; push(@opts, "optimum", \@slow_optimum); } elsif ($ARGV[0] eq "-veryslow") { shift; push(@opts, "optimum", \@veryslow_optimum); } else { my $key = shift; $key =~ s/^-//; my $value = shift; push(@opts, $key, $value); }}push(@ARGV, "") unless (@ARGV); # Read STDIN if no file givenforeach my $file (@ARGV) { reflow_file($file, "", @opts);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -