# HG changeset patch # User Paul Boddie # Date 1353194240 -3600 # Node ID 95d68ee34d9d70cfad10cf2903760e27bebf0284 # Parent 5cc8a34d878310d9b4a84c009756f506f1e31b91 Added retention of raw event details so that these can be used to format events in Wiki pages without losing formatting information. diff -r 5cc8a34d8783 -r 95d68ee34d9d EventAggregatorSupport.py --- a/EventAggregatorSupport.py Sun Nov 18 00:15:57 2012 +0100 +++ b/EventAggregatorSupport.py Sun Nov 18 00:17:20 2012 +0100 @@ -149,7 +149,8 @@ details = {} details.update(template_details) - events = [Event(event_page, details)] + raw_details = {} + events = [Event(event_page, details, raw_details)] for match in definition_list_regexp.finditer(text): @@ -161,25 +162,25 @@ # Permit case-insensitive list terms. term = match.group("term").lower() - desc = match.group("desc") + raw_desc = match.group("desc") # Special value type handling. # Dates. if term in Event.date_terms: - desc = getDateTime(desc) + desc = getDateTime(raw_desc) # Lists (whose elements may be quoted). elif term in Event.list_terms: - desc = map(getSimpleWikiText, to_list(desc, ",")) + desc = map(getSimpleWikiText, to_list(raw_desc, ",")) # Position details. elif term == "geo": try: - desc = map(getMapReference, to_list(desc, None)) + desc = map(getMapReference, to_list(raw_desc, None)) if len(desc) != 2: continue except (KeyError, ValueError): @@ -188,12 +189,15 @@ # Labels which may well be quoted. elif term in Event.title_terms: - desc = getSimpleWikiText(desc.strip()) + desc = getSimpleWikiText(raw_desc.strip()) # Plain Wiki text terms. elif term in Event.other_terms: - desc = desc.strip() + desc = raw_desc.strip() + + else: + desc = raw_desc if desc is not None: @@ -206,9 +210,11 @@ details = {} details.update(template_details) - events.append(Event(event_page, details)) + raw_details = {} + events.append(Event(event_page, details, raw_details)) details[term] = desc + raw_details[term] = raw_desc return events @@ -610,9 +616,10 @@ geo_terms = "geo", all_terms = title_terms + date_terms + list_terms + other_terms + geo_terms - def __init__(self, page, details): + def __init__(self, page, details, raw_details=None): self.page = page self.details = details + self.raw_details = raw_details # Permit omission of the end of the event by duplicating the start. @@ -719,6 +726,12 @@ self.details = event_details + def getRawDetails(self): + + "Return the details for this event as they were written in a page." + + return self.raw_details + # Timespan-related methods. def __contains__(self, other): @@ -3216,27 +3229,40 @@ 'write' parameter is specified, use it to write output. """ - event_details = event.getDetails() + details = event.getDetails() + raw_details = event.getRawDetails() write = write or request.write - if event_details.has_key("fragment"): - write(fmt.anchordef(event_details["fragment"])) + if details.has_key("fragment"): + write(fmt.anchordef(details["fragment"])) write(fmt.definition_list(on=1)) for term in event.all_terms: - if event_details.has_key(term): - value = event_details[term] - if value: - write(fmt.definition_term(on=1)) - write(fmt.text(term)) - write(fmt.definition_term(on=0)) - write(fmt.definition_desc(on=1)) + + raw_value = raw_details.get(term) + value = details.get(term) + + if raw_value or value: + write(fmt.definition_term(on=1)) + write(fmt.text(term)) + write(fmt.definition_term(on=0)) + write(fmt.definition_desc(on=1)) + + # Try and use the raw details, if available. + + if raw_value: + write(formatText(raw_value, request, fmt)) + + # Otherwise, format the processed details. + + else: if term in event.list_terms: write(", ".join([formatText(str(v), request, fmt) for v in value])) else: - write(formatText(str(value), request, fmt)) - write(fmt.definition_desc(on=0)) + write(fmt.text(str(value))) + + write(fmt.definition_desc(on=0)) write(fmt.definition_list(on=0))