def test_replaces_html_markup_from_string_with_space(self): s = tools.Stripper() for mem in (("", ""), ("abc", "abc"), ("<b>abc</b>", " abc "), ("abc<br />", "abc "), ("abc <b>def</b> ghi", "abc def ghi"), ("abc <b>español</b> ghi", "abc español ghi")): self.eq_(self._strip(mem[0]), mem[1])
def _processEntry(self, entry, current_date): """ Main workhorse of pyblosxom stories, comments and other miscelany goes here @param entry: either a dict or an Entry object @type entry: dict or Entry object """ data = self._request.getData() config = self._request.getConfiguration() output = [] if data["content-type"].endswith("xml"): quotes = {"'": "'", '"': """} entry['title'] = escape(entry['title'], quotes) entry.setData(escape(entry.getData(), quotes)) elif data['content-type'] == 'text/plain': s = tools.Stripper() s.feed(entry.getData()) s.close() p = [' ' + line for line in s.gettext().split('\n')] entry.setData('\n'.join(p)) entry.update(data) entry.update(config) if entry['date'] != current_date: current_date = entry['date'] if not self.dayFlag: self.outputTemplate(output, entry, 'date_foot') self.dayFlag = 0 self.outputTemplate(output, entry, 'date_head') self.outputTemplate(output, entry, 'story', override=1) template = u"" args = self._run_callback("story_end", { "entry": entry, "template": template }) return "".join(output) + args['template'], current_date
def _strip(self, text): s = tools.Stripper() s.feed(text) s.close() return s.gettext()
def render_content(self, content): """ Processes the content for the story portion of a page. :param content: the content to be rendered :returns: the content string """ data = self._request.get_data() outputbuffer = [] if callable(content): # if the content is a callable function, then we just spit out # whatever it returns as a string outputbuffer.append(content()) elif isinstance(content, dict): # if the content is a dict, then we parse it as if it were an # entry--except it's distinctly not an EntryBase derivative var_dict = self.get_parse_vars() var_dict.update(content) output = tools.parse(self._request, var_dict, self.flavour['story']) outputbuffer.append(output) elif isinstance(content, list): if len(content) > 0: current_date = content[0]["date"] if current_date and "date_head" in self.flavour: parse_vars = self.get_parse_vars() parse_vars.update({"date": current_date, "yr": content[0]["yr"], "mo": content[0]["mo"], "da": content[0]["da"]}) outputbuffer.append( self.render_template(parse_vars, "date_head")) for entry in content: if entry["date"] and entry["date"] != current_date: if "date_foot" in self.flavour: parse_vars = self.get_parse_vars() parse_vars.update({"date": current_date, "yr": content[0]["yr"], "mo": content[0]["mo"], "da": content[0]["da"]}) outputbuffer.append( self.render_template(parse_vars, "date_foot")) if "date_head" in self.flavour: current_date = entry["date"] parse_vars = self.get_parse_vars() parse_vars.update({"date": current_date, "yr": content[0]["yr"], "mo": content[0]["mo"], "da": content[0]["da"]}) outputbuffer.append( self.render_template(parse_vars, "date_head")) if data['content-type'] == 'text/plain': s = tools.Stripper() s.feed(entry.get_data()) s.close() p = [' ' + line for line in s.gettext().split('\n')] entry.set_data('\n'.join(p)) parse_vars = self.get_parse_vars() parse_vars.update(entry) outputbuffer.append( self.render_template(parse_vars, "story", override=1)) args = {"entry": parse_vars, "template": ""} args = self._run_callback("story_end", args) outputbuffer.append(args["template"]) if current_date and "date_foot" in self.flavour: parse_vars = self.get_parse_vars() parse_vars.update({"date": current_date}) outputbuffer.append( self.render_template(parse_vars, "date_foot")) return outputbuffer