diff --git a/modules/bibformat/lib/elements/bfe_abstract.py b/modules/bibformat/lib/elements/bfe_abstract.py index 20fc4247e..1942eed5f 100644 --- a/modules/bibformat/lib/elements/bfe_abstract.py +++ b/modules/bibformat/lib/elements/bfe_abstract.py @@ -1,165 +1,171 @@ # -*- coding: utf-8 -*- ## ## $Id$ ## ## This file is part of CDS Invenio. ## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 CERN. ## ## CDS Invenio is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation; either version 2 of the ## License, or (at your option) any later version. ## ## CDS Invenio is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with CDS Invenio; if not, write to the Free Software Foundation, Inc., ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. """BibFormat element - Prints English and French abstract. """ __revision__ = "$Id$" #import cgi from invenio import bibformat_utils from urllib import quote from invenio.config import CFG_SITE_URL import re def format(bfo, prefix_en, prefix_fr, suffix_en, suffix_fr, limit, max_chars, extension_en="[...] ",extension_fr="[...] ", contextual="no", highlight='no', print_lang='en,fr', escape="3", separator_en="<br/>", separator_fr="<br/>"): """ Prints the abstract of a record in HTML. By default prints English and French versions. Printed languages can be chosen with the 'print_lang' parameter. @param prefix_en a prefix for english abstract (printed only if english abstract exists) @param prefix_fr a prefix for french abstract (printed only if french abstract exists) @param limit the maximum number of sentences of the abstract to display (for each language) @param max_chars the maximum number of chars of the abstract to display (for each language) @param extension_en a text printed after english abstracts longer than parameter 'limit' @param extension_fr a text printed after french abstracts longer than parameter 'limit' @param suffix_en a suffix for english abstract(printed only if english abstract exists) @param suffix_fr a suffix for french abstract(printed only if french abstract exists) @parmm contextual if 'yes' prints sentences the most relative to user search keyword (if limit < abstract) @param highlight if 'yes' highlights words from user search keyword @param print_lang the comma-separated list of languages to print. Now restricted to 'en' and 'fr' @param escape escaping method @param separator_en a separator between each english abstract @param separator_fr a separator between each french abstract """ out = '' if print_lang == 'auto': print_lang = bfo.lang languages = print_lang.split(',') abstract_en = bfo.fields('520__a', escape=int(escape)) abstract_en.extend(bfo.fields('520__b', escape=int(escape))) #abstract_en = [cgi.escape(val) for val in abstract_en] abstract_en = separator_en.join(abstract_en) abstract_fr = bfo.fields('590__a', escape=int(escape)) abstract_fr.extend(bfo.fields('590__b', escape=int(escape))) #abstract_fr = [cgi.escape(val) for val in abstract_fr] abstract_fr = separator_fr.join(abstract_fr) if contextual == 'yes' and limit != "" and \ limit.isdigit() and int(limit) > 0: context_en = bibformat_utils.get_contextual_content(abstract_en, bfo.search_pattern, max_lines=int(limit)) #FIXME add something like [...] before and after #contextual sentences when not at beginning/end of abstract #if not abstract_en.strip().startswith(context_en[0].strip()): # out += '[...]' abstract_en = "<br/>".join(context_en) context_fr = bibformat_utils.get_contextual_content(abstract_fr, bfo.search_pattern, max_lines=int(limit)) abstract_fr = "<br/>".join(context_fr) if len(abstract_en) > 0 and 'en' in languages: out += prefix_en print_extension = False if max_chars != "" and max_chars.isdigit() and \ int(max_chars) < len(abstract_en): print_extension = True abstract_en = abstract_en[:int(max_chars)] if limit != "" and limit.isdigit(): - s_abstract = abstract_en.split(".") + s_abstract = abstract_en.split(". ") # Split around + # DOTSPACE so that we + # don't split html + # links if int(limit) < len(s_abstract): print_extension = True s_abstract = s_abstract[:int(limit)] #for sentence in s_abstract: # out += sentence + "." - out = '.'.join(s_abstract) + out = '. '.join(s_abstract) # Add final dot if needed if abstract_en.endswith('.'): out += '.' if print_extension: out += " " + extension_en else: out += abstract_en out += suffix_en if len(abstract_fr) > 0 and 'fr' in languages: out += prefix_fr print_extension = False if max_chars != "" and max_chars.isdigit() and \ int(max_chars) < len(abstract_fr): print_extension = True abstract_fr = abstract_fr[:int(max_chars)] if limit != "" and limit.isdigit(): - s_abstract = abstract_fr.split(".") + s_abstract = abstract_fr.split(". ") # Split around + # DOTSPACE so that we + # don't split html + # links if int(limit) < len(s_abstract): print_extension = True s_abstract = s_abstract[:int(limit)] #for sentence in s_abstract: # out += sentence + "." - out = '.'.join(s_abstract) + out = '. '.join(s_abstract) # Add final dot if needed if abstract_fr.endswith('.'): out += '.' if print_extension: out += " "+extension_fr else: out += abstract_fr out += suffix_fr if highlight == 'yes': out = bibformat_utils.highlight(out, bfo.search_pattern) return out def escape_values(bfo): """ Called by BibFormat in order to check if output of this element should be escaped. """ return 0