/usr/share/pyshared/PyritePublisher/plugin_Text.py is in pyrite-publisher 2.1.1-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #
#  $Id: plugin_Text.py,v 1.5 2002/02/05 12:06:14 rob Exp $
#
#  Copyright 1999-2001 Rob Tillotson <rob@pyrite.org>
#  All Rights Reserved
#
#  Permission to use, copy, modify, and distribute this software and
#  its documentation for any purpose and without fee or royalty is
#  hereby granted, provided that the above copyright notice appear in
#  all copies and that both the copyright notice and this permission
#  notice appear in supporting documentation or portions thereof,
#  including modifications, that you you make.
#
#  THE AUTHOR ROB TILLOTSON DISCLAIMS ALL WARRANTIES WITH REGARD TO
#  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
#  AND FITNESS.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
#  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
#  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
#  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
#  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE!
#
"""
"""
__version__ = '$Id: plugin_Text.py,v 1.5 2002/02/05 12:06:14 rob Exp $'
__copyright__ = 'Copyright 1999-2001 Rob Tillotson <rob@pyrite.org>'
import formatter, string, re
import dtkplugins
_re_indent = re.compile('^(\s+)')
class Plugin(dtkplugins.ParserPlugin):
    name = 'Text'
    description = 'Processes text input.'
    links = [ (0, "text/plain", "doc-assembler"),
	      (-10, "application/x-dtk-raw-stream", "doc-assembler") ]
    
    def __init__(self, *a, **kw):
	apply(dtkplugins.ParserPlugin.__init__, (self,)+a, kw)
        self.api.register_wildcard('*.txt', 'Text files')
        
	self.indented_paragraphs = 0
	self._add_property('indented_paragraphs', 'Use indentation to find paragraphs',
                           boolean=1)
	self._add_cli_option('indented_paragraphs', None, 'indented-paragraphs',
			     'Use indentation to find paragraphs',
			     boolean=1)
        self.bookmark_regexps = []
        self._add_property('bookmark_regexps', 'Regular expressions to bookmark', indexed=1)
        self._add_cli_option('bookmark_regexps', 'r', None,
                             'Regular expression to bookmark.',
                             vtype='REGEXP', multiple=1)
        
    def open(self, chain, next, *a, **kw):
	apply(dtkplugins.ParserPlugin.open, (self,chain,next)+a, kw)
	self.fmt = formatter.AbstractFormatter(next)
	self.in_para = 0
	self.use_indent = self.indented_paragraphs
	self.indent_level = None
	self.buf = ''
        self.bookmark_regexps = map(re.compile, self.bookmark_regexps)
	return self
    def feed(self, data):
	# in case we have multiple lines
	b = self.buf + data
	self.buf = ''
	if not b: return
	lines = string.split(b, '\n')
	self.buf = lines[-1]
	lines = lines[:-1]
	for l in map(lambda x: x + '\n', lines):
            re_matches = filter(None, map(lambda x,s=l: x.search(s), self.bookmark_regexps))
            if re_matches:
                g = re_matches[0].groups()
                if g: bm = g[0]
                else: bm = re_matches[0].group(0)
                self.fmt.writer.set_bookmark(bm)
                
	    if not string.strip(l):
		if self.in_para:
		    self.in_para = 0
		    self.fmt.end_paragraph(1)
	    else:
		if self.use_indent:
		    m = _re_indent.match(l)
		    if m:
			self.fmt.end_paragraph(1)
			
		self.in_para = 1
		self.fmt.add_flowing_data(l)
		    
 |