📄 text.pm
字号:
# Pod::Text -- Convert POD data to formatted ASCII text.# $Id: Text.pm,v 2.21 2002/08/04 03:34:58 eagle Exp $## Copyright 1999, 2000, 2001, 2002 by Russ Allbery <rra@stanford.edu>## This program is free software; you may redistribute it and/or modify it# under the same terms as Perl itself.## This module converts POD to formatted text. It replaces the old Pod::Text# module that came with versions of Perl prior to 5.6.0 and attempts to match# its output except for some specific circumstances where other decisions# seemed to produce better output. It uses Pod::Parser and is designed to be# very easy to subclass.## Perl core hackers, please note that this module is also separately# maintained outside of the Perl core as part of the podlators. Please send# me any patches at the address above in addition to sending them to the# standard Perl mailing lists.############################################################################### Modules and declarations##############################################################################package Pod::Text;require 5.004;use Carp qw(carp croak);use Exporter ();use Pod::ParseLink qw(parselink);use Pod::Select ();use strict;use vars qw(@ISA @EXPORT %ESCAPES $VERSION);# We inherit from Pod::Select instead of Pod::Parser so that we can be used by# Pod::Usage.@ISA = qw(Pod::Select Exporter);# We have to export pod2text for backward compatibility.@EXPORT = qw(pod2text);# Don't use the CVS revision as the version, since this module is also in Perl# core and too many things could munge CVS magic revision strings. This# number should ideally be the same as the CVS revision in podlators, however.$VERSION = 2.21;############################################################################### Table of supported E<> escapes############################################################################### This table is taken near verbatim from Pod::PlainText in Pod::Parser, which# got it near verbatim from the original Pod::Text. It is therefore credited# to Tom Christiansen, and I'm glad I didn't have to write it. :) "iexcl" to# "divide" added by Tim Jenness.%ESCAPES = ( 'amp' => '&', # ampersand 'apos' => "'", # apostrophe 'lt' => '<', # left chevron, less-than 'gt' => '>', # right chevron, greater-than 'quot' => '"', # double quote 'sol' => '/', # solidus (forward slash) 'verbar' => '|', # vertical bar "Aacute" => "\xC1", # capital A, acute accent "aacute" => "\xE1", # small a, acute accent "Acirc" => "\xC2", # capital A, circumflex accent "acirc" => "\xE2", # small a, circumflex accent "AElig" => "\xC6", # capital AE diphthong (ligature) "aelig" => "\xE6", # small ae diphthong (ligature) "Agrave" => "\xC0", # capital A, grave accent "agrave" => "\xE0", # small a, grave accent "Aring" => "\xC5", # capital A, ring "aring" => "\xE5", # small a, ring "Atilde" => "\xC3", # capital A, tilde "atilde" => "\xE3", # small a, tilde "Auml" => "\xC4", # capital A, dieresis or umlaut mark "auml" => "\xE4", # small a, dieresis or umlaut mark "Ccedil" => "\xC7", # capital C, cedilla "ccedil" => "\xE7", # small c, cedilla "Eacute" => "\xC9", # capital E, acute accent "eacute" => "\xE9", # small e, acute accent "Ecirc" => "\xCA", # capital E, circumflex accent "ecirc" => "\xEA", # small e, circumflex accent "Egrave" => "\xC8", # capital E, grave accent "egrave" => "\xE8", # small e, grave accent "ETH" => "\xD0", # capital Eth, Icelandic "eth" => "\xF0", # small eth, Icelandic "Euml" => "\xCB", # capital E, dieresis or umlaut mark "euml" => "\xEB", # small e, dieresis or umlaut mark "Iacute" => "\xCD", # capital I, acute accent "iacute" => "\xED", # small i, acute accent "Icirc" => "\xCE", # capital I, circumflex accent "icirc" => "\xEE", # small i, circumflex accent "Igrave" => "\xCC", # capital I, grave accent "igrave" => "\xEC", # small i, grave accent "Iuml" => "\xCF", # capital I, dieresis or umlaut mark "iuml" => "\xEF", # small i, dieresis or umlaut mark "Ntilde" => "\xD1", # capital N, tilde "ntilde" => "\xF1", # small n, tilde "Oacute" => "\xD3", # capital O, acute accent "oacute" => "\xF3", # small o, acute accent "Ocirc" => "\xD4", # capital O, circumflex accent "ocirc" => "\xF4", # small o, circumflex accent "Ograve" => "\xD2", # capital O, grave accent "ograve" => "\xF2", # small o, grave accent "Oslash" => "\xD8", # capital O, slash "oslash" => "\xF8", # small o, slash "Otilde" => "\xD5", # capital O, tilde "otilde" => "\xF5", # small o, tilde "Ouml" => "\xD6", # capital O, dieresis or umlaut mark "ouml" => "\xF6", # small o, dieresis or umlaut mark "szlig" => "\xDF", # small sharp s, German (sz ligature) "THORN" => "\xDE", # capital THORN, Icelandic "thorn" => "\xFE", # small thorn, Icelandic "Uacute" => "\xDA", # capital U, acute accent "uacute" => "\xFA", # small u, acute accent "Ucirc" => "\xDB", # capital U, circumflex accent "ucirc" => "\xFB", # small u, circumflex accent "Ugrave" => "\xD9", # capital U, grave accent "ugrave" => "\xF9", # small u, grave accent "Uuml" => "\xDC", # capital U, dieresis or umlaut mark "uuml" => "\xFC", # small u, dieresis or umlaut mark "Yacute" => "\xDD", # capital Y, acute accent "yacute" => "\xFD", # small y, acute accent "yuml" => "\xFF", # small y, dieresis or umlaut mark "laquo" => "\xAB", # left pointing double angle quotation mark "lchevron" => "\xAB", # synonym (backwards compatibility) "raquo" => "\xBB", # right pointing double angle quotation mark "rchevron" => "\xBB", # synonym (backwards compatibility) "iexcl" => "\xA1", # inverted exclamation mark "cent" => "\xA2", # cent sign "pound" => "\xA3", # (UK) pound sign "curren" => "\xA4", # currency sign "yen" => "\xA5", # yen sign "brvbar" => "\xA6", # broken vertical bar "sect" => "\xA7", # section sign "uml" => "\xA8", # diaresis "copy" => "\xA9", # Copyright symbol "ordf" => "\xAA", # feminine ordinal indicator "not" => "\xAC", # not sign "shy" => '', # soft (discretionary) hyphen "reg" => "\xAE", # registered trademark "macr" => "\xAF", # macron, overline "deg" => "\xB0", # degree sign "plusmn" => "\xB1", # plus-minus sign "sup2" => "\xB2", # superscript 2 "sup3" => "\xB3", # superscript 3 "acute" => "\xB4", # acute accent "micro" => "\xB5", # micro sign "para" => "\xB6", # pilcrow sign = paragraph sign "middot" => "\xB7", # middle dot = Georgian comma "cedil" => "\xB8", # cedilla "sup1" => "\xB9", # superscript 1 "ordm" => "\xBA", # masculine ordinal indicator "frac14" => "\xBC", # vulgar fraction one quarter "frac12" => "\xBD", # vulgar fraction one half "frac34" => "\xBE", # vulgar fraction three quarters "iquest" => "\xBF", # inverted question mark "times" => "\xD7", # multiplication sign "divide" => "\xF7", # division sign "nbsp" => "\x01", # non-breaking space);############################################################################### Initialization############################################################################### Initialize the object. Must be sure to call our parent initializer.sub initialize { my $self = shift; $$self{alt} = 0 unless defined $$self{alt}; $$self{indent} = 4 unless defined $$self{indent}; $$self{margin} = 0 unless defined $$self{margin}; $$self{loose} = 0 unless defined $$self{loose}; $$self{sentence} = 0 unless defined $$self{sentence}; $$self{width} = 76 unless defined $$self{width}; # Figure out what quotes we'll be using for C<> text. $$self{quotes} ||= '"'; if ($$self{quotes} eq 'none') { $$self{LQUOTE} = $$self{RQUOTE} = ''; } elsif (length ($$self{quotes}) == 1) { $$self{LQUOTE} = $$self{RQUOTE} = $$self{quotes}; } elsif ($$self{quotes} =~ /^(.)(.)$/ || $$self{quotes} =~ /^(..)(..)$/) { $$self{LQUOTE} = $1; $$self{RQUOTE} = $2; } else { croak qq(Invalid quote specification "$$self{quotes}"); } # Stack of indentations. $$self{INDENTS} = []; # Current left margin. $$self{MARGIN} = $$self{indent} + $$self{margin}; $self->SUPER::initialize; # Tell Pod::Parser that we want the non-POD stuff too if code was set. $self->parseopts ('-want_nonPODs' => 1) if $$self{code};}############################################################################### Core overrides############################################################################### Called for each command paragraph. Gets the command, the associated# paragraph, the line number, and a Pod::Paragraph object. Just dispatches# the command to a method named the same as the command. =cut is handled# internally by Pod::Parser.sub command { my $self = shift; my $command = shift; return if $command eq 'pod'; return if ($$self{EXCLUDE} && $command ne 'end'); if ($self->can ('cmd_' . $command)) { $command = 'cmd_' . $command; $self->$command (@_); } else { my ($text, $line, $paragraph) = @_; my $file; ($file, $line) = $paragraph->file_line; $text =~ s/\n+\z//; $text = " $text" if ($text =~ /^\S/); warn qq($file:$line: Unknown command paragraph: =$command$text\n); return; }}# Called for a verbatim paragraph. Gets the paragraph, the line number, and a# Pod::Paragraph object. Just output it verbatim, but with tabs converted to# spaces.sub verbatim { my $self = shift; return if $$self{EXCLUDE}; $self->item if defined $$self{ITEM}; local $_ = shift; return if /^\s*$/; s/^(\s*\S+)/(' ' x $$self{MARGIN}) . $1/gme; $self->output ($_);}# Called for a regular text block. Gets the paragraph, the line number, and a# Pod::Paragraph object. Perform interpolation and output the results.sub textblock { my $self = shift; return if $$self{EXCLUDE}; $self->output ($_[0]), return if $$self{VERBATIM}; local $_ = shift; my $line = shift; # Interpolate and output the paragraph. $_ = $self->interpolate ($_, $line); s/\s+$/\n/; if (defined $$self{ITEM}) { $self->item ($_ . "\n"); } else { $self->output ($self->reformat ($_ . "\n")); }}# Called for a formatting code. Gets the command, argument, and a# Pod::InteriorSequence object and is expected to return the resulting text.# Calls methods for code, bold, italic, file, and link to handle those types# of codes, and handles S<>, E<>, X<>, and Z<> directly.sub interior_sequence { local $_; my ($self, $command, $seq); ($self, $command, $_, $seq) = @_; # We have to defer processing of the inside of an L<> formatting code. If # this code is nested inside an L<> code, return the literal raw text of # it. my $parent = $seq->nested;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -