Example #1
0
def xmlevents_from_hwp5file(hwp5file):
    version = '%d.%d.%d.%d' % hwp5file.fileheader.version
    hexversion = '%02x%02x%02x%02x' % hwp5file.fileheader.version
    yield STARTEVENT, ('Hwp5Doc', {
        'version': version,
        'hexversion': hexversion
    })

    with hwp5file.fileheader.open() as f:
        yield STARTEVENT, ('FileHeader', {})
        resolve_values = resolve_values_from_stream(f)
        from hwp5.filestructure import FileHeader
        model_events = resolve_type_events(FileHeader, {}, resolve_values)
        for x in xmlevents_from_modelevents(model_events):
            yield x
        yield ENDEVENT, 'FileHeader'

    yield STARTEVENT, ('DocInfo', {})
    model_events = hwp5file.docinfo.parse_model_events()
    for x in xmlevents_from_modelevents(model_events):
        yield x
    yield ENDEVENT, 'DocInfo'

    for section_name in hwp5file.bodytext:
        section = hwp5file.bodytext[section_name]
        yield STARTEVENT, ('Section', {'name': section_name})
        model_events = section.parse_model_events()
        for x in xmlevents_from_modelevents(model_events):
            yield x
        yield ENDEVENT, 'Section'

    yield ENDEVENT, 'Hwp5Doc'
Example #2
0
def resolve_model_events(context, model):

    resolve_values = context['resolve_values']

    model['type'] = model_type = tag_models.get(model['tagid'],
                                                UnknownTagModel)

    for ev, item in resolve_type_events(model_type, context, resolve_values):
        yield ev, item

    model['content'] = item['value']

    extension_types = getattr(model['type'], 'extension_types', None)
    if extension_types:
        key = model['type'].get_extension_key(context, model)
        extension = extension_types.get(key)
        if extension is not None:
            # 예: Control -> TableControl로 바뀌는 경우,
            # Control의 member들은 이미 읽은 상태이고
            # CommonControl, TableControl에서 각각 정의한
            # 멤버들을 읽어들여야 함
            for cls in get_extension_mro(extension, model['type']):
                extension_type_events = resolve_type_events(cls, context,
                                                            resolve_values)
                for ev, item in extension_type_events:
                    yield ev, item
                content = item['value']
                model['content'].update(content)
            model['type'] = extension

    if 'parent' in context:
        parent = context['parent']
        parent_context, parent_model = parent
        parent_type = parent_model.get('type')
        parent_content = parent_model.get('content')

        on_child = getattr(parent_type, 'on_child', None)
        if on_child:
            on_child(parent_content, parent_context, (context, model))
Example #3
0
def resolve_model_events(context, model):

    resolve_values = context['resolve_values']

    model['type'] = model_type = tag_models.get(model['tagid'],
                                                UnknownTagModel)

    for ev, item in resolve_type_events(model_type, context, resolve_values):
        yield ev, item

    model['content'] = item['value']

    extension_types = getattr(model['type'], 'extension_types', None)
    if extension_types:
        key = model['type'].get_extension_key(context, model)
        extension = extension_types.get(key)
        if extension is not None:
            # 예: Control -> TableControl로 바뀌는 경우,
            # Control의 member들은 이미 읽은 상태이고
            # CommonControl, TableControl에서 각각 정의한
            # 멤버들을 읽어들여야 함
            for cls in get_extension_mro(extension, model['type']):
                extension_type_events = resolve_type_events(
                    cls, context, resolve_values)
                for ev, item in extension_type_events:
                    yield ev, item
                content = item['value']
                model['content'].update(content)
            model['type'] = extension

    if 'parent' in context:
        parent = context['parent']
        parent_context, parent_model = parent
        parent_type = parent_model.get('type')
        parent_content = parent_model.get('content')

        on_child = getattr(parent_type, 'on_child', None)
        if on_child:
            on_child(parent_content, parent_context, (context, model))
Example #4
0
def xmlevents_from_hwp5file(hwp5file):
    version = '%d.%d.%d.%d' % hwp5file.fileheader.version
    hexversion = '%02x%02x%02x%02x' % hwp5file.fileheader.version
    yield STARTEVENT, ('Hwp5Doc', {
        'version': version,
        'hexversion': hexversion
    })

    with hwp5file.fileheader.open() as f:
        yield STARTEVENT, ('FileHeader', {
        })
        resolve_values = resolve_values_from_stream(f)
        from hwp5.filestructure import FileHeader
        model_events = resolve_type_events(FileHeader, {}, resolve_values)
        for x in xmlevents_from_modelevents(model_events):
            yield x
        yield ENDEVENT, 'FileHeader'

    yield STARTEVENT, ('DocInfo', {
    })
    model_events = hwp5file.docinfo.parse_model_events()
    for x in xmlevents_from_modelevents(model_events):
        yield x
    yield ENDEVENT, 'DocInfo'

    for section_name in hwp5file.bodytext:
        section = hwp5file.bodytext[section_name]
        yield STARTEVENT, ('Section', {
            'name': section_name
        })
        model_events = section.parse_model_events()
        for x in xmlevents_from_modelevents(model_events):
            yield x
        yield ENDEVENT, 'Section'

    yield ENDEVENT, 'Hwp5Doc'