Ejemplo n.º 1
0
    def convert(self):
        if len(self.cargs) < 3:
            raise CommandError("Convert requires 2 arguments")

        xml_path = self.cargs[1]
        xslt_path = self.cargs[2]
        out_file = self.cargs[3] if len(self.cargs) > 3 else None

        xml_string = utils.readFile(xml_path)
        xml_string = re.sub(ur"\bxmlns=", ur"xmlns2=", xml_string)

        # TODO: remove this hack, only for odt conversion
        # position 33% is like 'super' style
        xml_string = re.sub(ur'"-33%', ur'"sub', xml_string)
        xml_string = re.sub(ur'"33%', ur'"super', xml_string)

        xslt_string = utils.readFile(xslt_path)

        # replacements in the XSLT
        comments, xslt_string = self.parse_xslt_directives(xslt_string, xml_string)

        ret = str(dputils.get_xslt_transform(xml_string, xslt_string))

        if out_file:
            dputils.write_file(out_file, str(comments) + ret, encoding=None)
        else:
            print str(comments) + ret

        return ret
Ejemplo n.º 2
0
    def convert(self):
        if len(self.cargs) < 3:
            raise CommandError('Convert requires 2 arguments')

        xml_path = self.cargs[1]
        xslt_path = self.cargs[2]
        out_file = self.cargs[3] if len(self.cargs) > 3 else None 

        xml_string = utils.readFile(xml_path)
        xml_string = re.sub(ur'\bxmlns=', ur'xmlns2=', xml_string)

        # TODO: remove this hack, only for odt conversion
        # position 33% is like 'super' style
        xml_string = re.sub(ur'"-33%', ur'"sub', xml_string)
        xml_string = re.sub(ur'"33%', ur'"super', xml_string)

        xslt_string = utils.readFile(xslt_path)

        # replacements in the XSLT
        comments, xslt_string = self.parse_xslt_directives(xslt_string, xml_string)

        ret = str(dputils.get_xslt_transform(xml_string, xslt_string))

        if out_file:
            dputils.write_file(out_file, str(comments) + ret, encoding=None)
        else:
            print str(comments) + ret

        return ret
Ejemplo n.º 3
0
    def convert_response(cls,
                         data,
                         format=None,
                         jsonpcallback=None,
                         xslt=None):
        '''Convert a json response (data) into another format
           Allowed formats:
            * json
            * jsonp (jsonpcallback must also be provided)
            * xml
        '''
        mimetype = 'application/json'
        is_webpage = False

        if format == 'jsonp':
            data = u';%s(%s);' % (jsonpcallback, data)
            mimetype = 'text/javascript'

        if xslt:
            format = 'xml'

        if format == 'xml':
            from django.utils.html import escape

            def get_xml_from_entry(entry=None):
                ret = u''
                if isinstance(entry, dict):
                    for k, v in entry.iteritems():
                        ret += u'<%s>%s</%s>' % (k, get_xml_from_entry(v), k)
                elif isinstance(entry, list) or isinstance(entry, tuple):
                    ret = u''
                    for v in entry:
                        ret += u'<item>%s</item>' % get_xml_from_entry(v)
                elif isinstance(entry, bool):
                    ret += '1' if entry else '0'
                elif entry is None:
                    ret += ''
                else:
                    ret += u'%s' % escape(entry)
                return ret

            prolog = u'<?xml version="1.0" encoding="UTF-8"?>'
            data = u'%s<response>%s</response>' % (
                prolog, get_xml_from_entry(json.loads(data)))
            mimetype = 'text/xml'

        if xslt:
            from digipal.models import ApiTransform
            transforms = ApiTransform.objects.filter(slug=xslt.lower().strip())
            if transforms.count():
                transform = transforms[0]
                template = transform.template
                # apply the transform
                data = utils.get_xslt_transform(data, template)
                mimetype = transform.mimetype
                is_webpage = transform.webpage

        return data, mimetype, is_webpage
Ejemplo n.º 4
0
    def convert_response(cls, data, format=None, jsonpcallback=None, xslt=None):
        '''Convert a json response (data) into another format
           Allowed formats:
            * json
            * jsonp (jsonpcallback must also be provided)
            * xml
        '''
        mimetype = 'application/json'
        is_webpage = False

        if format == 'jsonp':
            data = u';%s(%s);' % (jsonpcallback, data)
            mimetype = 'text/javascript'

        if xslt:
            format = 'xml'

        if format == 'xml':
            from django.utils.html import escape

            def get_xml_from_entry(entry=None):
                ret = u''
                if isinstance(entry, dict):
                    for k, v in entry.iteritems():
                        ret += u'<%s>%s</%s>' % (k, get_xml_from_entry(v), k)
                elif isinstance(entry, list) or isinstance(entry, tuple):
                    ret = u''
                    for v in entry:
                        ret += u'<item>%s</item>' % get_xml_from_entry(v)
                elif isinstance(entry, bool):
                    ret += '1' if entry else '0'
                elif entry is None:
                    ret += ''
                else:
                    ret += u'%s' % escape(entry)
                return ret
            prolog = u'<?xml version="1.0" encoding="UTF-8"?>'
            data = u'%s<response>%s</response>' % (
                prolog, get_xml_from_entry(json.loads(data)))
            mimetype = 'text/xml'

        if xslt:
            from digipal.models import ApiTransform
            transforms = ApiTransform.objects.filter(slug=xslt.lower().strip())
            if transforms.count():
                transform = transforms[0]
                template = transform.template
                # apply the transform
                data = utils.get_xslt_transform(data, template)
                mimetype = transform.mimetype
                is_webpage = transform.webpage

        return data, mimetype, is_webpage
Ejemplo n.º 5
0
def get_tei_from_text_response(response, item_partid, content_type):
    ret = response.get('content', '')

    # decode entities (e.g. &rsquo;)
    # TODO: make sure we keep core XML entities otherwise it may cause
    # parsing errors down the line
    from HTMLParser import HTMLParser
    parser = HTMLParser()
    ret = parser.unescape(ret)
    # convert & back to &amp; to keep XML well-formed
    ret = ret.replace(u'&', u'&amp;')

    # convert to XML object
    #xml = dputils.get_xml_from_unicode(ret, ishtml=True, add_root=True)
    #print repr(response)
    from digipal.models import ItemPart
    itempart = ItemPart.objects.filter(id=item_partid).first()

    tcx = TextContentXML.objects.filter(text_content__type__slug='translation', text_content__item_part__id=item_partid).first()

    #
    #print ret
    from django.template.loader import render_to_string
    context = {
        'meta': {
            'title': '%s of %s' % (content_type.title(), itempart),
            'ms': {
                'place': itempart.current_item.repository.place.name,
                'repository': itempart.current_item.repository.name,
                'shelfmark': itempart.current_item.shelfmark,
            },
            'edition': {
                'date': tcx.modified
            },
            'project': settings.SITE_TITLE,
            'authority': settings.SITE_TITLE,
        },
    }
    template = render_to_string('digipal_text/tei_from_xhtml.xslt', context)
    ret = dputils.get_xslt_transform('<root>%s</root>' % ret, template)

    ret = dputils.get_unicode_from_xml(xmltree=ret).replace('xmlns=""', '')

    # convert XML to string
    #ret = dputils.get_unicode_from_xml(xml, remove_root=True)

    return ret
Ejemplo n.º 6
0
def get_tei_from_text_response(response, item_partid, content_type):
    ret = response.get('content', '')

    # decode entities (e.g. &rsquo;)
    # TODO: make sure we keep core XML entities otherwise it may cause
    # parsing errors down the line
    from HTMLParser import HTMLParser
    parser = HTMLParser()
    ret = parser.unescape(ret)
    # convert & back to &amp; to keep XML well-formed
    ret = ret.replace(u'&', u'&amp;')

    # convert to XML object
    #xml = dputils.get_xml_from_unicode(ret, ishtml=True, add_root=True)
    from digipal.models import ItemPart
    itempart = ItemPart.objects.filter(id=item_partid).first()

    tcx = TextContentXML.objects.filter(
        text_content__type__slug='translation',
        text_content__item_part__id=item_partid).first()

    #
    from django.template.loader import render_to_string
    context = {
        'meta': {
            'title': '%s of %s' % (content_type.title(), itempart),
            'ms': {
                'place': itempart.current_item.repository.place.name,
                'repository': itempart.current_item.repository.name,
                'shelfmark': itempart.current_item.shelfmark,
            },
            'edition': {
                'date': tcx.modified
            },
            'project': settings.SITE_TITLE,
            'authority': settings.SITE_TITLE,
        },
    }
    template = render_to_string('digipal_text/tei_from_xhtml.xslt', context)
    ret = dputils.get_xslt_transform('<root>%s</root>' % ret, template)

    ret = dputils.get_unicode_from_xml(xmltree=ret).replace('xmlns=""', '')

    # convert XML to string
    #ret = dputils.get_unicode_from_xml(xml, remove_root=True)

    return ret
Ejemplo n.º 7
0
 def convert(self):
     if len(self.cargs) < 3:
         raise CommandError('Convert requires 2 arguments')
     
     xml_path = self.cargs[1]
     xslt_path = self.cargs[2]
     
     xml_string = utils.readFile(xml_path)
     xml_string = re.sub(ur'\bxmlns=', ur'xmlns2=', xml_string)
     xslt_string = utils.readFile(xslt_path)
     
     # replacements in the XSLT
     xslt_string = self.parse_xslt_directives(xslt_string, xml_string)
     
     ret = dputils.get_xslt_transform(xml_string, xslt_string)
     
     print str(ret)
         
     return ret