parser.html
来自「perl教程」· HTML 代码 · 共 967 行 · 第 1/5 页
HTML
967 行
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>Pod::Parser - base class for creating POD filters and translators</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>
<body>
<script>writelinks('__top__',2);</script>
<h1><a>Pod::Parser - base class for creating POD filters and translators</a></h1>
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#requires">REQUIRES</a></li>
<li><a href="#exports">EXPORTS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#quick_overview">QUICK OVERVIEW</a></li>
<li><a href="#parsing_options">PARSING OPTIONS</a></li>
<li><a href="#recommended_subroutine_method_overrides">RECOMMENDED SUBROUTINE/METHOD OVERRIDES</a></li>
<li><a href="#command__"><strong>command()</strong></a></li>
<li><a href="#verbatim__"><strong>verbatim()</strong></a></li>
<li><a href="#textblock__"><strong>textblock()</strong></a></li>
<li><a href="#interior_sequence__"><strong>interior_sequence()</strong></a></li>
<li><a href="#optional_subroutine_method_overrides">OPTIONAL SUBROUTINE/METHOD OVERRIDES</a></li>
<li><a href="#new__"><strong>new()</strong></a></li>
<li><a href="#initialize__"><strong>initialize()</strong></a></li>
<li><a href="#begin_pod__"><strong>begin_pod()</strong></a></li>
<li><a href="#begin_input__"><strong>begin_input()</strong></a></li>
<li><a href="#end_input__"><strong>end_input()</strong></a></li>
<li><a href="#end_pod__"><strong>end_pod()</strong></a></li>
<li><a href="#preprocess_line__"><strong>preprocess_line()</strong></a></li>
<li><a href="#preprocess_paragraph__"><strong>preprocess_paragraph()</strong></a></li>
<li><a href="#methods_for_parsing_and_processing">METHODS FOR PARSING AND PROCESSING</a></li>
<li><a href="#parse_text__"><strong>parse_text()</strong></a></li>
<li><a href="#interpolate__"><strong>interpolate()</strong></a></li>
<li><a href="#parse_paragraph__"><strong>parse_paragraph()</strong></a></li>
<li><a href="#parse_from_filehandle__"><strong>parse_from_filehandle()</strong></a></li>
<li><a href="#parse_from_file__"><strong>parse_from_file()</strong></a></li>
<li><a href="#accessor_methods">ACCESSOR METHODS</a></li>
<li><a href="#errorsub__"><strong>errorsub()</strong></a></li>
<li><a href="#cutting__"><strong>cutting()</strong></a></li>
<li><a href="#parseopts__"><strong>parseopts()</strong></a></li>
<li><a href="#output_file__"><strong>output_file()</strong></a></li>
<li><a href="#output_handle__"><strong>output_handle()</strong></a></li>
<li><a href="#input_file__"><strong>input_file()</strong></a></li>
<li><a href="#input_handle__"><strong>input_handle()</strong></a></li>
<li><a href="#input_streams__"><strong>input_streams()</strong></a></li>
<li><a href="#top_stream__"><strong>top_stream()</strong></a></li>
<li><a href="#private_methods_and_data">PRIVATE METHODS AND DATA</a></li>
<li><a href="#_push_input_stream__"><strong>_push_input_stream()</strong></a></li>
<li><a href="#_pop_input_stream__"><strong>_pop_input_stream()</strong></a></li>
<li><a href="#treebased_parsing">TREE-BASED PARSING</a></li>
<li><a href="#see_also">SEE ALSO</a></li>
<li><a href="#author">AUTHOR</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Pod::Parser - base class for creating POD filters and translators</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
<span class="keyword">use</span> <span class="variable">Pod::Parser</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">package</span> <span class="variable">MyParser</span><span class="operator">;</span>
<span class="variable">@ISA</span> <span class="operator">=</span> <span class="string">qw(Pod::Parser)</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">sub</span><span class="variable"> command </span><span class="operator">{</span>
<span class="keyword">my</span> <span class="operator">(</span><span class="variable">$parser</span><span class="operator">,</span> <span class="variable">$command</span><span class="operator">,</span> <span class="variable">$paragraph</span><span class="operator">,</span> <span class="variable">$line_num</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
<span class="comment">## Interpret the command and its text; sample actions might be:</span>
<span class="keyword">if</span> <span class="operator">(</span><span class="variable">$command</span> <span class="keyword">eq</span> <span class="string">'head1'</span><span class="operator">)</span> <span class="operator">{</span> <span class="operator">...</span> <span class="operator">}</span>
<span class="keyword">elsif</span> <span class="operator">(</span><span class="variable">$command</span> <span class="keyword">eq</span> <span class="string">'head2'</span><span class="operator">)</span> <span class="operator">{</span> <span class="operator">...</span> <span class="operator">}</span>
<span class="comment">## ... other commands and their actions</span>
<span class="keyword">my</span> <span class="variable">$out_fh</span> <span class="operator">=</span> <span class="variable">$parser</span><span class="operator">-></span><span class="variable">output_handle</span><span class="operator">();</span>
<span class="keyword">my</span> <span class="variable">$expansion</span> <span class="operator">=</span> <span class="variable">$parser</span><span class="operator">-></span><span class="variable">interpolate</span><span class="operator">(</span><span class="variable">$paragraph</span><span class="operator">,</span> <span class="variable">$line_num</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$out_fh</span> <span class="variable">$expansion</span><span class="operator">;</span>
<span class="operator">}</span>
</pre>
<pre>
<span class="keyword">sub</span><span class="variable"> verbatim </span><span class="operator">{</span>
<span class="keyword">my</span> <span class="operator">(</span><span class="variable">$parser</span><span class="operator">,</span> <span class="variable">$paragraph</span><span class="operator">,</span> <span class="variable">$line_num</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
<span class="comment">## Format verbatim paragraph; sample actions might be:</span>
<span class="keyword">my</span> <span class="variable">$out_fh</span> <span class="operator">=</span> <span class="variable">$parser</span><span class="operator">-></span><span class="variable">output_handle</span><span class="operator">();</span>
<span class="keyword">print</span> <span class="variable">$out_fh</span> <span class="variable">$paragraph</span><span class="operator">;</span>
<span class="operator">}</span>
</pre>
<pre>
<span class="keyword">sub</span><span class="variable"> textblock </span><span class="operator">{</span>
<span class="keyword">my</span> <span class="operator">(</span><span class="variable">$parser</span><span class="operator">,</span> <span class="variable">$paragraph</span><span class="operator">,</span> <span class="variable">$line_num</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
<span class="comment">## Translate/Format this block of text; sample actions might be:</span>
<span class="keyword">my</span> <span class="variable">$out_fh</span> <span class="operator">=</span> <span class="variable">$parser</span><span class="operator">-></span><span class="variable">output_handle</span><span class="operator">();</span>
<span class="keyword">my</span> <span class="variable">$expansion</span> <span class="operator">=</span> <span class="variable">$parser</span><span class="operator">-></span><span class="variable">interpolate</span><span class="operator">(</span><span class="variable">$paragraph</span><span class="operator">,</span> <span class="variable">$line_num</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$out_fh</span> <span class="variable">$expansion</span><span class="operator">;</span>
<span class="operator">}</span>
</pre>
<pre>
<span class="keyword">sub</span><span class="variable"> interior_sequence </span><span class="operator">{</span>
<span class="keyword">my</span> <span class="operator">(</span><span class="variable">$parser</span><span class="operator">,</span> <span class="variable">$seq_command</span><span class="operator">,</span> <span class="variable">$seq_argument</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
<span class="comment">## Expand an interior sequence; sample actions might be:</span>
<span class="keyword">return</span> <span class="string">"*$seq_argument*"</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$seq_command</span> <span class="keyword">eq</span> <span class="string">'B'</span><span class="operator">);</span>
<span class="keyword">return</span> <span class="string">"`$seq_argument'"</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$seq_command</span> <span class="keyword">eq</span> <span class="string">'C'</span><span class="operator">);</span>
<span class="keyword">return</span> <span class="string">"_${seq_argument}_'"</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$seq_command</span> <span class="keyword">eq</span> <span class="string">'I'</span><span class="operator">);</span>
<span class="comment">## ... other sequence commands and their resulting text</span>
<span class="operator">}</span>
</pre>
<pre>
<span class="keyword">package</span> <span class="variable">main</span><span class="operator">;</span>
</pre>
<pre>
<span class="comment">## Create a parser object and have it parse file whose name was</span>
<span class="comment">## given on the command-line (use STDIN if no files were given).</span>
<span class="variable">$parser</span> <span class="operator">=</span> <span class="variable">new</span> <span class="variable">MyParser</span><span class="operator">();</span>
<span class="variable">$parser</span><span class="operator">-></span><span class="variable">parse_from_filehandle</span><span class="operator">(\</span><span class="variable">*STDIN</span><span class="operator">)</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">@ARGV</span> <span class="operator">==</span> <span class="number">0</span><span class="operator">);</span>
<span class="keyword">for</span> <span class="operator">(</span><span class="variable">@ARGV</span><span class="operator">)</span> <span class="operator">{</span> <span class="variable">$parser</span><span class="operator">-></span><span class="variable">parse_from_file</span><span class="operator">(</span><span class="variable">$_</span><span class="operator">);</span> <span class="operator">}</span>
</pre>
<p>
</p>
<hr />
<h1><a name="requires">REQUIRES</a></h1>
<p>perl5.005, Pod::InputObjects, Exporter, Symbol, Carp</p>
<p>
</p>
<hr />
<h1><a name="exports">EXPORTS</a></h1>
<p>Nothing.</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p><strong>Pod::Parser</strong> is a base class for creating POD filters and translators.
It handles most of the effort involved with parsing the POD sections
from an input stream, leaving subclasses free to be concerned only with
performing the actual translation of text.</p>
<p><strong>Pod::Parser</strong> parses PODs, and makes method calls to handle the various
components of the POD. Subclasses of <strong>Pod::Parser</strong> override these methods
to translate the POD into whatever output format they desire.</p>
<p>
</p>
<hr />
<h1><a name="quick_overview">QUICK OVERVIEW</a></h1>
<p>To create a POD filter for translating POD documentation into some other
format, you create a subclass of <strong>Pod::Parser</strong> which typically overrides
just the base class implementation for the following methods:</p>
<ul>
<li>
<p><strong>command()</strong></p>
</li>
<li>
<p><strong>verbatim()</strong></p>
</li>
<li>
<p><strong>textblock()</strong></p>
</li>
<li>
<p><strong>interior_sequence()</strong></p>
</li>
</ul>
<p>You may also want to override the <strong>begin_input()</strong> and <strong>end_input()</strong>
methods for your subclass (to perform any needed per-file and/or
per-document initialization or cleanup).</p>
<p>If you need to perform any preprocesssing of input before it is parsed
you may want to override one or more of <strong>preprocess_line()</strong> and/or
<strong>preprocess_paragraph()</strong>.</p>
<p>Sometimes it may be necessary to make more than one pass over the input
files. If this is the case you have several options. You can make the
first pass using <strong>Pod::Parser</strong> and override your methods to store the
intermediate results in memory somewhere for the <strong>end_pod()</strong> method to
process. You could use <strong>Pod::Parser</strong> for several passes with an
appropriate state variable to control the operation for each pass. If
your input source can't be reset to start at the beginning, you can
store it in some other structure as a string or an array and have that
structure implement a <strong>getline()</strong> method (which is all that
<strong>parse_from_filehandle()</strong> uses to read input).</p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?