from django import template from django.template.defaultfilters import stringfilter from django.utils.safestring import mark_safe import string import re register = template.Library() @stringfilter @register.filter(name='jumptime') def jumptime(text): ''' Finds timecodes in a chunk of text and turns them into links with value attribute set to where the second of the spot to jump Returned links also have a class of "jumpToTime" set ''' # our regular expression to find times r = re.compile('((\d{1,2}:)?\d{1,3}:\d{2})',re.DOTALL) offset = 0 #used to caclulate how much text we're adding for m in re.finditer(r,text): timecode = m.group(1) tc = timecode.split(':') if len(tc) == 2: seconds = int(tc[1]) + (int(tc[0]) * 60) elif len(tc) == 3: seconds = int(tc[2]) + (int(tc[1]) * 60) + (int(tc[0]) * 60 * 60) else: seconds = 0 if seconds != 0: # replaces the text at the exact position it needs to be replaced, keeps track of offset newText = "%s" % (seconds, timecode) start = m.start() + offset end = m.end() + offset text = text[:start] + newText + text[end:] offset += len(newText) - len(timecode) return mark_safe(text)