|
NAMEString::BufferStack - Nested buffers for templating systemsSYNOPSISmy $stack = String::BufferStack->new; $stack->push( filter => sub {return uc shift} ); $stack->append("content"); $stack->flush_output; DESCRIPTION"String::BufferStack" provides a framework for storing nested buffers. By default, all of the buffers flow directly to the output method, but individual levels of the stack can apply filters, or store their output in a scalar reference.METHODSnew PARAMHASHCreates a new buffer stack and returns it. Possible arguments include:
push PARAMHASHPushes a new frame onto the buffer stack. By default, the output from this new frame connects to the input of the previous frame. There are a number of possible options:
depthReturns the current depth of the stack. This starts at 0, when no frames have been pushed, and increases by one for each frame pushed.append STRING [, STRING, ...]Appends the given strings to the input side of the topmost buffer. This will call all pre-append hooks attached to it, as well. Note that if the frame has a filter, the filter will not immediately run, but will be delayed until the frame is "pop"'d, or "flush_filters" is called.When called with no frames on the stack, appends the stringins directly to the "output_buffer". direct_append STRING [, STRING, ...]Similar to "append", but appends the strings to the output side of the frame, skipping pre-append callbacks and filters.When called with no frames on the stack, appends the strings directly to the "output_buffer". popRemoves the topmost frame on the stack, flushing the topmost filters in the process. Returns the output buffer of the frame -- note that this may not contain only strings appended in the current frame, but also those from before, as a speed optimization. That is:$stack->append("one"); $stack->push; $stack->append(" two"); $stack->pop; # returns "one two" This operation is a no-op if there are no frames on the stack. set_pre_append CALLBACKAlters the pre-append callback on the topmost frame. The callback will be called before text is appended to the input buffer of the frame, and will be passed the "String::BufferStack" and the arguments to "append".set_filter FILTERAlters the filter on the topmost frame. Doing this flushes the filters on the topmost frame.filterFilters the topmost stack frame, if it has outstanding unfiltered data. This will propagate content to lower frames, possibly calling their pre-append hooks.flushIf there are no frames on the stack, calls "flush_output". Otherwise, calls "flush_filters".flush_filtersFlushes all filters. This does not flush output from the output buffer; see "flush_output".bufferReturns the contents of the output buffer of the topmost frame; if there are no frames, returns the output buffer.buffer_refReturns a reference to the output buffer of the topmost frame; if there are no frames, returns a reference to the output buffer. Note that adjusting this skips pre-append and filter hooks.lengthIf "use_length" was enabled in the buffer stack's constructor, returns the number of characters appended to the current frame; if there are no frames, returns the length of the output buffer.If "use_length" was not enabled, warns and returns 0. flush_outputFlushes all filters using "flush_filters", then flushes output from the output buffer, using the configured "out_method".output_bufferReturns the pending output buffer, which sits below all existing frames.output_buffer_refReturns a reference to the pending output buffer, allowing you to modify it.clearClears all buffers in the stack, including the output buffer.clear_topClears the topmost buffer in the stack; if there are no frames on the stack, clears the output buffer.out_method [CALLBACK]Gets or sets the output method callback, which is given content from the pending output buffer, which sits below all frames.SEE ALSOMany concepts were originally taken from HTML::Mason's internal buffer stack.AUTHORSAlex Vandiver "alexmv@bestpractical.com"LICENSECopyright 2008-2009, Best Practical Solutions.This package is distributed under the same terms as Perl itself.
Visit the GSP FreeBSD Man Page Interface. |