# HG changeset patch
# User casties
# Date 1384361575 -3600
# Node ID 649f74b167e6c85ba4ab9fefa902b4ede7538160
# Parent feb2cb6241be40c7257ee7a3db171b9957252d8b
extract getPlaintext to SrvTxtUtils. add character count to project description editor.
diff -r feb2cb6241be -r 649f74b167e6 MPIWGProjects.py
--- a/MPIWGProjects.py Tue Nov 12 13:04:38 2013 +0100
+++ b/MPIWGProjects.py Wed Nov 13 17:52:55 2013 +0100
@@ -22,7 +22,7 @@
import xml.etree.ElementTree as ET
-from SrvTxtUtils import getInt, unicodify, utf8ify, serialize, refreshingImageFileIndexHtml, shortenString
+from SrvTxtUtils import getInt, unicodify, utf8ify, serialize, refreshingImageFileIndexHtml, shortenString, getPlaintext
from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder
import xmlhelper # Methoden zur Verwaltung der projekt xml
@@ -617,34 +617,7 @@
if filter == 'plaintext':
# filter out any tags, keep only text
- try:
- xmltext = utf8ify("
%s
"%text)
- dom = ET.fromstring(xmltext)
- plaintext = ""
- for elem in dom.iter():
- if elem.tag == 'style':
- # ignore tag
- continue
-
- if elem.text:
- plaintext += elem.text
- if elem.tail:
- plaintext += elem.tail
-
- if length > 0 and len(plaintext) > length:
- break
-
- text = plaintext
- except Exception, e:
- logging.warn("getDesciption: error parsing description! Returning everything. %s"%e)
-
- if length > 0 and len(text) > length:
- # try to not break words
- if text[length] not in [' ', '.', '?', '!']:
- # search the last blank
- length = text.rfind(' ', 0, length)
-
- return text[:length] + '...'
+ text = getPlaintext(text, length=length, wordwrap=True, ignoretags=['style'])
return text
diff -r feb2cb6241be -r 649f74b167e6 SrvTxtUtils.py
--- a/SrvTxtUtils.py Tue Nov 12 13:04:38 2013 +0100
+++ b/SrvTxtUtils.py Wed Nov 13 17:52:55 2013 +0100
@@ -21,34 +21,54 @@
import xml.etree.ElementTree as ET
-srvTxtUtilsVersion = "1.12.0"
+srvTxtUtilsVersion = "1.12.3"
map_months = {'en': [u"",
- u"January",
- u"February",
- u"March",
- u"April",
- u"May",
- u"June",
- u"July",
- u"August",
- u"September",
- u"October",
- u"November",
- u"December"],
+ u"January",
+ u"February",
+ u"March",
+ u"April",
+ u"May",
+ u"June",
+ u"July",
+ u"August",
+ u"September",
+ u"October",
+ u"November",
+ u"December"],
'de': [u"",
- u"Januar",
- u"Februar",
- u"M\u00e4rz",
- u"April",
- u"Mai",
- u"Juni",
- u"Juli",
- u"August",
- u"September",
- u"Oktober",
- u"November",
- u"Dezember"]}
+ u"Januar",
+ u"Februar",
+ u"M\u00e4rz",
+ u"April",
+ u"Mai",
+ u"Juni",
+ u"Juli",
+ u"August",
+ u"September",
+ u"Oktober",
+ u"November",
+ u"Dezember"]}
+
+map_weekdays_short = {'en': [
+ u"Mo",
+ u"Tu",
+ u"We",
+ u"Th",
+ u"Fr",
+ u"Sa",
+ u"Su",
+ ],
+ 'de': [
+ u"Mo",
+ u"Di",
+ u"Mi",
+ u"Do",
+ u"Fr",
+ u"Sa",
+ u"So",
+ ]}
+
def getInt(number, default=0):
"""returns always an int (0 in case of problems)"""
@@ -86,8 +106,14 @@
else:
return s.encode('utf-8')
-def getText(node, recursive=0):
- """returns all text content of a (etree) node and its subnodes"""
+
+def getTextFromNode(node, recursive=False, length=0):
+ """Return all text content of a (etree) node.
+
+ :param recursive: descend subnodes
+
+ :returns: text string
+ """
if node is None:
return ''
@@ -110,6 +136,55 @@
return text
+getText = getTextFromNode
+
+def getPlaintext(text, length=0, wordwrap=False, ignoretags=[]):
+ """Return plain text content by filtering out XML tags.
+
+ :param text: string or etree node
+ :param length: length of text to return (0=all)
+ :param wordwrap: try not to break the last word (may return shorter string)
+ :returns: text string
+ """
+ if text is None:
+ return ''
+
+ try:
+ if isinstance(text, basestring):
+ xmltext = utf8ify("%s
"%text)
+ dom = ET.fromstring(xmltext)
+ else:
+ dom = text
+
+ plaintext = ''
+ for elem in dom.iter():
+ if elem.tag in ignoretags:
+ # ignore tag
+ continue
+
+ if elem.text:
+ plaintext += elem.text
+ if elem.tail:
+ plaintext += elem.tail
+
+ if length > 0 and len(plaintext) > length:
+ break
+
+ text = plaintext
+
+ except Exception, e:
+ logging.warn("getPlaintext: error parsing text! Returning everything. %s"%e)
+
+ if length > 0 and len(text) > length:
+ # try to not break words
+ if wordwrap and text[length] not in [' ', '.', '?', '!']:
+ # search the last blank
+ length = text.rfind(' ', 0, length)
+
+ return text[:length] + '...'
+
+ return text
+
def serialize(node):
"""returns a string containing an XML snippet of (etree) node"""
@@ -124,10 +199,15 @@
def getMonthName(mon, lang):
"""returns the name of the month mon in the language lang"""
- return map_months[lang][mon]
+ return map_months[lang.lower()][mon]
-def getDateString(date=None, lang='en', withYear=True, monthNames=True, abbrev=False):
+def getWeekdayName(day, lang, short=True):
+ """returns the name of the weekday day in the language lang"""
+ return map_weekdays_short[lang.lower()][day]
+
+
+def getDateString(date=None, lang='en', short=False, withYear=True, monthNames=True, abbrev=False):
"""Return formatted date string."""
if date is None:
return None
@@ -145,14 +225,20 @@
year = date.year
if lang.lower() == 'en':
- ds = "%s %s"%(getMonthName(month, lang), day)
- if withYear:
- ds += ", %s"%year
+ if short:
+ ds = "%s/%s/%s"%(year,month,day)
+ else:
+ ds = "%s %s"%(getMonthName(month, lang), day)
+ if withYear:
+ ds += ", %s"%year
elif lang.lower() == 'de':
- ds = "%s. %s"%(day, getMonthName(month, lang))
- if withYear:
- ds += " %s"%year
+ if short:
+ ds = "%s.%s.%s"%(day,month,year)
+ else:
+ ds = "%s. %s"%(day, getMonthName(month, lang))
+ if withYear:
+ ds += " %s"%year
elif lang.lower() == 'iso':
ds = date.isoformat()
diff -r feb2cb6241be -r 649f74b167e6 zpt/project/edit_description.zpt
--- a/zpt/project/edit_description.zpt Tue Nov 12 13:04:38 2013 +0100
+++ b/zpt/project/edit_description.zpt Wed Nov 13 17:52:55 2013 +0100
@@ -23,6 +23,7 @@
+ (currently published: characters)
saveEditedContent