Ejemplo n.º 1
0
class ColumnsDef(Control):
    ''' 4.2.10.2. 단 정의 '''
    chid = CHID.COLD

    Kind = Enum('normal', 'distribute', 'parallel')
    Direction = Enum('l2r', 'r2l', 'both')
    Flags = Flags(UINT16, 0, 1, Kind, 'kind', 2, 9, 'count', 10, 11, Direction,
                  'direction', 12, 'same_widths')

    def attributes(cls):
        yield cls.Flags, 'flags'
        yield HWPUNIT16, 'spacing'

        def not_same_widths(context, values):
            ''' flags.same_widths == 0 '''
            return not values['flags'].same_widths

        def n_entries(member_ref):
            def n_entries(context, values):
                n_columns = member_ref(context, values)
                return n_columns - 1

            return n_entries

        yield dict(name='column0', type=Column0, condition=not_same_widths)
        yield dict(name='columns',
                   type=X_ARRAY(Column,
                                n_entries(ref_member_flag('flags', 'count'))),
                   condition=not_same_widths)
        yield UINT16, 'attr2'
        yield Border, 'splitter'

    attributes = classmethod(attributes)
Ejemplo n.º 2
0
class FillImage(Fill):
    FillImageEnum = Enum(TILE_ALL=0,
                         TILE_HORIZONTAL_TOP=1,
                         TILE_HORIZONTAL_BOTTOM=2,
                         TILE_VERTICAL_LEFT=3,
                         TILE_VERTICAL_RIGHT=4,
                         RESIZE=5,
                         CENTER=6,
                         CENTER_TOP=7,
                         CENTER_BOTTOM=8,
                         LEFT_MIDDLE=9,
                         LEFT_TOP=10,
                         LEFT_BOTTOM=11,
                         RIGHT_MIDDLE=12,
                         RIGHT_TOP=13,
                         RIGHT_BOTTOM=14,
                         NONE=15)
    FillImageFlags = Flags(BYTE, 0, 16, FillImageEnum, 'fillimage_type')

    EffectEnum = Enum(REAL_PIC=0, GRAY_SCALE=1, BLACK_WHITE=2, PATTERN8x8=3)
    EffectFlags = Flags(UINT8, 0, 8, EffectEnum, 'effect_type')

    def attributes(cls):
        yield cls.FillImageFlags, 'flags'
        yield INT8, 'brightness'
        yield INT8, 'contrast'
        yield cls.EffectFlags, 'effect'
        yield UINT16, 'bindata_id'

    attributes = classmethod(attributes)
Ejemplo n.º 3
0
class Panose1(Struct):
    ''' 표 17 글꼴 유형 정보 '''

    FamilyType = Enum('any', 'no_fit', 'text_display', 'script', 'decorative',
                      'pictorial')

    SerifStyle = Enum('any', 'no_fit', 'cove', 'obtuse_cove', 'square_cove',
                      'obtuse_square_cove', 'square', 'thin', 'bone',
                      'exaggerated', 'triangle', 'normal_sans', 'obtuse_sans',
                      'perp_sans', 'flared', 'rounded')

    Weight = Enum('any', 'no_fit', 'very_light', 'light', 'thin', 'book',
                  'medium', 'demi', 'bold', 'heavy', 'black', 'nord')

    Proportion = Enum('any', 'no_fit', 'old_style', 'modern', 'even_width',
                      'expanded', 'condensed', 'very_expanded',
                      'very_condensed', 'monospaced')

    Contrast = Enum('any', 'no_fit', 'none', 'very_low', 'low', 'medium_low',
                    'medium', 'medium_high', 'high', 'very_high')

    StrokeVariation = Enum('any', 'no_fit', 'gradual_diag', 'gradual_tran',
                           'gradual_vert', 'gradual_horz', 'rapid_vert',
                           'rapid_horz', 'instant_vert')

    ArmStyle = Enum('any', 'no_fit', 'straight_horz', 'straight_wedge',
                    'straight_vert', 'straight_single_serif',
                    'straight_double_serif', 'bent_horz', 'bent_wedge',
                    'bent_vert', 'bent_single_serif', 'bent_double_serif')

    Letterform = Enum('any', 'no_fit', 'normal_contact', 'normal_weighted',
                      'normal_boxed', 'normal_flattened', 'normal_rounded',
                      'normal_off_center', 'normal_square', 'oblique_contact',
                      'oblique_weighted', 'oblique_boxed', 'oblique_flattened',
                      'oblique_rounded', 'oblique_off_center',
                      'oblique_square')

    Midline = Enum('any', 'no_fit', 'standard_trimmed', 'standard_pointed',
                   'standard_serifed', 'high_trimmed', 'high_pointed',
                   'high_serifed', 'constant_trimmed', 'constant_pointed',
                   'constant_serifed', 'low_trimmed', 'low_pointed',
                   'low_serifed')

    XHeight = Enum('any', 'no_fit', 'constant_small', 'constant_std',
                   'constant_large', 'ducking_small', 'ducking_std',
                   'ducking_large')

    def attributes():
        yield BYTE, 'family_type',
        yield BYTE, 'serif_style',
        yield BYTE, 'weight',
        yield BYTE, 'proportion',
        yield BYTE, 'contrast',
        yield BYTE, 'stroke_variation',
        yield BYTE, 'arm_style',
        yield BYTE, 'letterform',
        yield BYTE, 'midline',
        yield BYTE, 'x_height',

    attributes = staticmethod(attributes)
Ejemplo n.º 4
0
class BorderLine(Struct):
    ''' 표 81 테두리 선 정보 '''

    LineEnd = Enum('round', 'flat')
    ArrowShape = Enum('none', 'arrow', 'arrow2', 'diamond', 'circle', 'rect',
                      'diamondfilled', 'disc', 'rectfilled')
    ArrowSize = Enum('smallest', 'smaller', 'small', 'abitsmall', 'normal',
                     'abitlarge', 'large', 'larger', 'largest')

    ''' 표 82 테두리 선 정보 속성 '''
    Flags = Flags(UINT32,
                  0, 5, Border.StrokeEnum, 'stroke',
                  6, 9, LineEnd, 'line_end',
                  10, 15, ArrowShape, 'arrow_start',
                  16, 21, ArrowShape, 'arrow_end',
                  22, 25, ArrowSize, 'arrow_start_size',
                  26, 29, ArrowSize, 'arrow_end_size',
                  30, 'arrow_start_fill',
                  31, 'arrow_end_fill')

    def attributes(cls):
        yield COLORREF, 'color'
        yield INT32, 'width'
        yield cls.Flags, 'flags'
    attributes = classmethod(attributes)
Ejemplo n.º 5
0
class PageDef(RecordModel):
    tagid = HWPTAG_PAGE_DEF
    Orientation = Enum(PORTRAIT=0, LANDSCAPE=1)
    BookBinding = Enum(LEFT=0, RIGHT=1, TOP=2, BOTTOM=3)
    Flags = Flags(UINT32, 0, Orientation, 'orientation', 1, 2, BookBinding,
                  'bookbinding')

    def attributes(cls):
        yield HWPUNIT, 'width',
        yield HWPUNIT, 'height',
        yield HWPUNIT, 'left_offset',
        yield HWPUNIT, 'right_offset',
        yield HWPUNIT, 'top_offset',
        yield HWPUNIT, 'bottom_offset',
        yield HWPUNIT, 'header_offset',
        yield HWPUNIT, 'footer_offset',
        yield HWPUNIT, 'bookbinding_offset',
        yield cls.Flags, 'attr',
        # yield UINT32, 'attr',

    attributes = classmethod(attributes)

    def getDimension(self):
        width = HWPUNIT(self.paper_width - self.offsetLeft - self.offsetRight)
        height = HWPUNIT(self.paper_height -
                         (self.offsetTop + self.offsetHeader) -
                         (self.offsetBottom + self.offsetFooter))
        if self.attr.landscape:
            return (height, width)
        else:
            return (width, height)

    dimension = property(getDimension)

    def getHeight(self):
        if self.attr.landscape:
            width = HWPUNIT(self.paper_width - self.offsetLeft -
                            self.offsetRight)
            return width
        else:
            height = HWPUNIT(self.paper_height -
                             (self.offsetTop + self.offsetHeader) -
                             (self.offsetBottom + self.offsetFooter))
            return height

    height = property(getHeight)

    def getWidth(self):
        if self.attr.landscape:
            height = HWPUNIT(self.paper_height -
                             (self.offsetTop + self.offsetHeader) -
                             (self.offsetBottom + self.offsetFooter))
            return height
        else:
            width = HWPUNIT(self.paper_width - self.offsetLeft -
                            self.offsetRight)
            return width

    width = property(getWidth)
Ejemplo n.º 6
0
class PageBorderFill(RecordModel):
    tagid = HWPTAG_PAGE_BORDER_FILL
    RelativeTo = Enum(BODY=0, PAPER=1)
    FillArea = Enum(PAPER=0, PAGE=1, BORDER=2)
    Flags = Flags(UINT32, 0, RelativeTo, 'relative_to', 1, 'include_header', 2,
                  'include_footer', 3, 4, FillArea, 'fill')

    def attributes(cls):
        yield cls.Flags, 'flags'
        yield Margin, 'margin'
        yield UINT16, 'borderfill_id'

    attributes = classmethod(attributes)
Ejemplo n.º 7
0
class TableCaption(ListHeader):
    ''' 표 66 캡션 리스트 '''
    parent_model_type = TableControl
    before_tablebody = False

    # 표 68 캡션 속성
    Position = Enum(LEFT=0, RIGHT=1, TOP=2, BOTTOM=3)
    Flags = Flags(
        UINT32,
        0,
        1,
        Position,
        'position',
        # 캡션이 긴 경우 테이블 여백 영역까지 확장
        2,
        'expand_to_margin')

    def attributes(cls):
        ''' 표 67 캡션 '''
        yield cls.Flags, 'flags',
        yield HWPUNIT, 'width',
        yield HWPUNIT16, 'separation',  # 캡션과 틀 사이 간격
        yield HWPUNIT, 'max_width',  # expand_to_margin 고려한 최대 너비

    attributes = classmethod(attributes)
Ejemplo n.º 8
0
class NumberingLevel(Struct):

    # 표 35 문단 머리 정보 속성
    Align = Enum(LEFT=0, CENTER=1, RIGHT=2, UNKNOWN=3)
    DistanceType = Enum(RATIO=0, VALUE=1)
    Flags = Flags(UINT32, 0, 1, Align, 'paragraph_align', 2, 'auto_width', 3,
                  'auto_dedent', 4, DistanceType, 'distance_to_body_type')

    @classmethod
    def attributes(cls):
        ''' 표 34 문단 머리 정보 '''
        yield cls.Flags, 'flags'
        yield HWPUNIT16, 'width_correction'
        yield HWPUNIT16, 'distance_to_body'
        yield INT32, 'charshape_id'
        yield BSTR, 'numbering_format'  # see 표 36 문단 번호 형식
class TableBody(RecordModel):
    ''' 4.2.9.1. 표 개체 '''
    tagid = HWPTAG_TABLE

    # 표 71 표 속성의 속성
    Split = Enum(NONE=0, BY_CELL=1, SPLIT=2)
    Flags = Flags(UINT32, 0, 1, Split, 'split_page', 2, 'repeat_header')

    def attributes(cls):
        ''' 표 70 표 개체 속성 '''
        yield cls.Flags, 'flags'
        yield UINT16, 'rows'
        yield UINT16, 'cols'
        yield HWPUNIT16, 'cellspacing'

        # 표 72 안쪽 여백 정보
        yield Margin, 'padding'

        yield dict(type=X_ARRAY(UINT16, ref_member('rows')), name='rowcols')
        yield UINT16, 'borderfill_id'
        yield dict(type=N_ARRAY(UINT16, ZoneInfo),
                   name='validZones',
                   version=(5, 0, 0, 7))

    attributes = classmethod(attributes)
Ejemplo n.º 10
0
class CharShape(RecordModel):
    ''' 4.1.6. 글자 모양 '''

    tagid = HWPTAG_CHAR_SHAPE

    # 표 30 글자 모양 속성
    Underline = Enum(NONE=0, UNDERLINE=1, UNKNOWN=2, UPPERLINE=3)
    Flags = Flags(UINT32, 0, 'italic', 1, 'bold', 2, 3, Underline, 'underline',
                  4, 7, 'underline_style', 8, 10, 'outline', 11, 13, 'shadow')

    def attributes(cls):
        ''' 표 28 글자 모양 '''
        yield LanguageStruct('FontFace', WORD), 'font_face',
        yield (LanguageStruct('LetterWidthExpansion',
                              UINT8), 'letter_width_expansion')
        yield LanguageStruct('LetterSpacing', INT8), 'letter_spacing'
        yield LanguageStruct('RelativeSize', INT8), 'relative_size'
        yield LanguageStruct('Position', INT8), 'position'
        yield INT32, 'basesize',
        yield cls.Flags, 'charshapeflags',
        yield ShadowSpace, 'shadow_space'
        yield COLORREF, 'text_color',
        yield COLORREF, 'underline_color',
        yield COLORREF, 'shade_color',
        yield COLORREF, 'shadow_color',
        # yield UINT16, 'borderfill_id',        # DIFFSPEC
        # yield COLORREF, 'strikeoutColor',    # DIFFSPEC

    attributes = classmethod(attributes)
Ejemplo n.º 11
0
class ListHeader(RecordModel):
    ''' 4.2.7. 문단 리스트 헤더 '''

    __metaclass__ = ListHeaderType
    tagid = HWPTAG_LIST_HEADER

    VAlign = Enum(TOP=0, MIDDLE=1, BOTTOM=2)
    Flags = Flags(UINT32, 0, 2, 'textdirection', 3, 4, 'linebreak', 5, 6,
                  VAlign, 'valign')

    def attributes(cls):
        ''' 표 60 문단 리스트 헤더 '''
        yield UINT16, 'paragraphs',
        yield UINT16, 'unknown1',
        yield cls.Flags, 'listflags',

    attributes = classmethod(attributes)

    extension_types = list_header_models

    def get_extension_key(context, model):
        ''' (parent model type, after TableBody) '''
        if 'parent' in context:
            context, model = context['parent']
            seen_table_body = context.get('seen_table_body', False)
            return model['type'], seen_table_body

    get_extension_key = staticmethod(get_extension_key)
Ejemplo n.º 12
0
 def test_bitfields(self):
     MyEnum = Enum(a=1, b=2)
     MyFlags = Flags(UINT32, 0, 1, 'field0', 2, 4, MyEnum, 'field2')
     bitfields = MyFlags.bitfields
     f = bitfields['field0']
     self.assertEqual((0, 1, int), (f.lsb, f.msb, f.valuetype))
     f = bitfields['field2']
     self.assertEqual((2, 4, MyEnum), (f.lsb, f.msb, f.valuetype))
Ejemplo n.º 13
0
class HeaderFooter(Control):
    ''' 4.2.10.3. 머리말/꼬리말 '''
    Places = Enum(BOTH_PAGES=0, EVEN_PAGE=1, ODD_PAGE=2)
    Flags = Flags(UINT32, 0, 1, Places, 'places')

    def attributes(cls):
        yield cls.Flags, 'flags'

    attributes = classmethod(attributes)
class Tab(Struct):

    Kind = Enum(LEFT=0, RIGHT=1, CENTER=2, FLOAT=3)

    Flags = Flags(UINT32, 0, 7, Kind, 'kind', 8, 15, 'fill_type')

    @classmethod
    def attributes(cls):
        yield HWPUNIT, 'pos',
        yield cls.Flags, 'flags'
class NumberingControl(Control):
    Kind = Enum(PAGE=0, FOOTNOTE=1, ENDNOTE=2, PICTURE=3, TABLE=4, EQUATION=5)
    Flags = Flags(UINT32, 0, 3, Kind, 'kind', 4, 11, 'footnoteshape', 12,
                  'superscript')

    def attributes(cls):
        yield cls.Flags, 'flags',
        yield UINT16, 'number',

    attributes = classmethod(attributes)
Ejemplo n.º 16
0
class PageOddEven(Control):
    ''' 4.2.10.8 홀/짝수 조정 '''
    chid = CHID.PGCT
    OddEven = Enum(BOTH_PAGES=0, EVEN_PAGE=1, ODD_PAGE=2)
    Flags = Flags(UINT32, 0, 1, OddEven, 'pages')

    def attributes(cls):
        yield cls.Flags, 'flags'

    attributes = classmethod(attributes)
Ejemplo n.º 17
0
 def test_bitfields(self):
     from hwp5.dataio import UINT32
     from hwp5.dataio import Flags
     from hwp5.dataio import Enum
     MyEnum = Enum(a=1, b=2)
     MyFlags = Flags(UINT32, 0, 1, 'field0', 2, 4, MyEnum, 'field2')
     bitfields = MyFlags.bitfields
     f = bitfields['field0']
     self.assertEquals((0, 1, int), (f.lsb, f.msb, f.valuetype))
     f = bitfields['field2']
     self.assertEquals((2, 4, MyEnum), (f.lsb, f.msb, f.valuetype))
Ejemplo n.º 18
0
class CharShape(RecordModel):
    ''' 4.1.6. 글자 모양 '''

    tagid = HWPTAG_CHAR_SHAPE

    # 표 30 글자 모양 속성
    Underline = Enum(NONE=0, UNDERLINE=1, LINE_THROUGH=2, OVERLINE=3)
    UnderlineStyle = Enum(SOLID=0,
                          DASHED=1,
                          DOTTED=2,
                          DASH_DOT=3,
                          DASH_DOT_DOT=4,
                          LONG_DASHED=5,
                          LARGE_DOTTED=6,
                          DOUBLE=7,
                          LOWER_WEIGHTED=8,
                          UPPER_WEIGHTED=9,
                          MIDDLE_WEIGHTED=10)
    Flags = Flags(UINT32, 0, 'italic', 1, 'bold', 2, 3, Underline, 'underline',
                  4, 7, UnderlineStyle, 'underline_style', 8, 10, 'outline',
                  11, 13, 'shadow')

    def attributes(cls):
        ''' 표 28 글자 모양 '''
        yield LanguageStruct('FontFace', WORD), 'font_face',
        yield (LanguageStruct('LetterWidthExpansion',
                              UINT8), 'letter_width_expansion')
        yield LanguageStruct('LetterSpacing', INT8), 'letter_spacing'
        yield LanguageStruct('RelativeSize', INT8), 'relative_size'
        yield LanguageStruct('Position', INT8), 'position'
        yield INT32, 'basesize',
        yield cls.Flags, 'charshapeflags',
        yield ShadowSpace, 'shadow_space'
        yield COLORREF, 'text_color',
        yield COLORREF, 'underline_color',
        yield COLORREF, 'shade_color',
        yield COLORREF, 'shadow_color',
        # yield UINT16, 'borderfill_id',        # DIFFSPEC
        # yield COLORREF, 'strikeoutColor',    # DIFFSPEC

    attributes = classmethod(attributes)
Ejemplo n.º 19
0
class Dutmal(Control):
    ''' 4.2.10.13. 덧말 '''
    chid = CHID.TDUT
    Position = Enum(ABOVE=0, BELOW=1, CENTER=2)
    Align = Enum(BOTH=0,
                 LEFT=1,
                 RIGHT=2,
                 CENTER=3,
                 DISTRIBUTE=4,
                 DISTRIBUTE_SPACE=5)

    def attributes(cls):
        yield BSTR, 'maintext'
        yield BSTR, 'subtext'
        yield Flags(UINT32, 0, 31, cls.Position, 'position'), 'position'
        yield UINT32, 'fsizeratio'
        yield UINT32, 'option'
        yield UINT32, 'stylenumber'
        yield Flags(UINT32, 0, 31, cls.Align, 'align'), 'align'

    attributes = classmethod(attributes)
Ejemplo n.º 20
0
class FillColorPattern(Fill):
    ''' 표 23 채우기 정보 '''
    PatternTypeEnum = Enum(NONE=255, HORIZONTAL=0, VERTICAL=1, BACKSLASH=2,
                           SLASH=3, GRID=4, CROSS=5)
    PatternTypeFlags = Flags(UINT32,
                             0, 7, PatternTypeEnum, 'pattern_type')

    def attributes(cls):
        yield COLORREF, 'background_color',
        yield COLORREF, 'pattern_color',
        yield cls.PatternTypeFlags, 'pattern_type_flags',
    attributes = classmethod(attributes)
Ejemplo n.º 21
0
class CompatibleDocument(RecordModel):
    ''' 4.1.14. 호환 문서 '''
    tagid = HWPTAG_COMPATIBLE_DOCUMENT

    # 표 50 대상 프로그램
    Target = Enum(DEFAULT=0, HWP2007=1, MSWORD=2)
    Flags = Flags(UINT32, 0, 1, 'target')

    def attributes(cls):
        ''' 표 49 호환 문서 '''
        yield cls.Flags, 'flags'

    attributes = classmethod(attributes)
Ejemplo n.º 22
0
class Border(Struct):

    # 표 20 테두리선 종류
    StrokeEnum = Enum('none', 'solid',
                      'dashed', 'dotted', 'dash-dot', 'dash-dot-dot',
                      'long-dash', 'large-dot',
                      'double', 'double-2', 'double-3', 'triple',
                      'wave', 'double-wave',
                      'inset', 'outset', 'groove', 'ridge')
    StrokeType = Flags(UINT8,
                       0, 4, StrokeEnum, 'stroke_type')

    # 표 21 테두리선 굵기
    widths = {'0.1mm': 0,
              '0.12mm': 1,
              '0.15mm': 2,
              '0.2mm': 3,
              '0.25mm': 4,
              '0.3mm': 5,
              '0.4mm': 6,
              '0.5mm': 7,
              '0.6mm': 8,
              '0.7mm': 9,
              '1.0mm': 10,
              '1.5mm': 11,
              '2.0mm': 12,
              '3.0mm': 13,
              '4.0mm': 14,
              '5.0mm': 15}
    WidthEnum = Enum(**widths)
    Width = Flags(UINT8,
                  0, 4, WidthEnum, 'width')

    def attributes(cls):
        yield cls.StrokeType, 'stroke_flags',
        yield cls.Width, 'width_flags',
        yield COLORREF, 'color',
    attributes = classmethod(attributes)
Ejemplo n.º 23
0
class BinData(RecordModel):
    ''' 4.1.3. 바이너리 데이터 '''

    tagid = HWPTAG_BIN_DATA

    # 표 13 바이너리 데이터 속성
    StorageType = Enum(LINK=0, EMBEDDING=1, STORAGE=2)
    CompressionType = Enum(STORAGE_DEFAULT=0, YES=1, NO=2)
    AccessState = Enum(NEVER=0, OK=1, FAILED=2, FAILED_IGNORED=3)
    Flags = Flags(UINT16,
                  0, 3, StorageType, 'storage',
                  4, 5, CompressionType, 'compression',
                  16, 17, AccessState, 'access')

    def attributes(cls):
        ''' 표 12 바이너리 데이터 '''
        yield cls.Flags, 'flags'
        yield (SelectiveType(ref_member_flag('flags', 'storage'),
                             {cls.StorageType.LINK: BinDataLink,
                              cls.StorageType.EMBEDDING: BinDataEmbedding,
                              cls.StorageType.STORAGE: BinDataStorage}),
               'bindata')
    attributes = classmethod(attributes)
class EqEdit(RecordModel):
    ''' 4.2.9.3. 한글 스크립트 수식 (한글 97 방식 수식) '''
    tagid = HWPTAG_CTRL_EQEDIT

    ScriptScope = Enum(CHAR=0, LINE=1)
    Flags = Flags(UINT32, 0, ScriptScope, 'script_scope')

    @classmethod
    def attributes(cls):
        ''' 표 100 수식 개체 속성 '''

        # TODO: followings are not tested against real files
        if False:
            yield
class CommonControl(Control):

    # 표 65 개체 공통 속성의 속성
    Flow = Enum(FLOAT=0, BLOCK=1, BACK=2, FRONT=3)
    TextSide = Enum(BOTH=0, LEFT=1, RIGHT=2, LARGER=3)
    VRelTo = Enum(PAPER=0, PAGE=1, PARAGRAPH=2)
    HRelTo = Enum(PAPER=0, PAGE=1, COLUMN=2, PARAGRAPH=3)
    VAlign = Enum(TOP=0, MIDDLE=1, BOTTOM=2)
    HAlign = Enum(LEFT=0, CENTER=1, RIGHT=2, INSIDE=3, OUTSIDE=4)
    WidthRelTo = Enum(PAPER=0, PAGE=1, COLUMN=2, PARAGRAPH=3, ABSOLUTE=4)
    HeightRelTo = Enum(PAPER=0, PAGE=1, ABSOLUTE=2)
    NumberCategory = Enum(NONE=0, FIGURE=1, TABLE=2, EQUATION=3)

    CommonControlFlags = Flags(
        UINT32, 0, 'inline', 2, 'affect_line_spacing', 3, 4, VRelTo, 'vrelto',
        5, 7, VAlign, 'valign', 8, 9, HRelTo, 'hrelto', 10, 12, HAlign,
        'halign', 13, 'restrict_in_page', 14, 'overlap_others', 15, 17,
        WidthRelTo, 'width_relto', 18, 19, HeightRelTo, 'height_relto', 20,
        'protect_size_when_vrelto_paragraph', 21, 23, Flow, 'flow', 24, 25,
        TextSide, 'text_side', 26, 27, NumberCategory, 'number_category')

    MARGIN_LEFT = 0
    MARGIN_RIGHT = 1
    MARGIN_TOP = 2
    MARGIN_BOTTOM = 3

    def attributes(cls):
        ''' 표 64 개체 공통 속성 '''
        yield cls.CommonControlFlags, 'flags',
        yield SHWPUNIT, 'y',  # DIFFSPEC
        yield SHWPUNIT, 'x',  # DIFFSPEC
        yield HWPUNIT, 'width',
        yield HWPUNIT, 'height',
        yield INT16, 'z_order',
        yield INT16, 'unknown1',
        yield Margin, 'margin',
        yield UINT32, 'instance_id',
        yield dict(type=INT16, name='unknown2', version=(5, 0, 0, 5))
        yield dict(type=BSTR, name='description', version=(5, 0, 0, 5))

    attributes = classmethod(attributes)
Ejemplo n.º 26
0
class PageNumberPosition(Control):
    ''' 4.2.10.9. 쪽 번호 위치 '''
    chid = CHID.PGNP
    Position = Enum(NONE=0,
                    TOP_LEFT=1, TOP_CENTER=2, TOP_RIGHT=3,
                    BOTTOM_LEFT=4, BOTTOM_CENTER=5, BOTTOM_RIGHT=6,
                    OUTSIDE_TOP=7, OUTSIDE_BOTTOM=8,
                    INSIDE_TOP=9, INSIDE_BOTTOM=10)
    Flags = Flags(UINT32,
                  0, 7, 'shape',
                  8, 11, Position, 'position')

    def attributes(cls):
        yield cls.Flags, 'flags'
        yield WCHAR, 'usersymbol'
        yield WCHAR, 'prefix'
        yield WCHAR, 'suffix'
        yield WCHAR, 'dash'
    attributes = classmethod(attributes)
class Style(RecordModel):
    ''' 4.1.11. 스타일 '''
    tagid = HWPTAG_STYLE

    # 표 43 스타일 종류
    Kind = Enum(PARAGRAPH=0, CHAR=1)
    Flags = Flags(BYTE, 0, 1, Kind, 'kind')

    def attributes(cls):
        ''' 표 42 스타일 '''
        yield BSTR, 'local_name',
        yield BSTR, 'name',
        yield cls.Flags, 'flags',
        yield BYTE, 'next_style_id',
        yield INT16, 'lang_id',
        yield UINT16, 'parashape_id',
        yield UINT16, 'charshape_id',

        # unknown fields
        # following fields are found from 5.0.0.0
        yield UINT16, 'unknown'

    attributes = classmethod(attributes)
Ejemplo n.º 28
0
class FaceName(RecordModel):
    ''' 4.1.4. 글꼴 '''

    tagid = HWPTAG_FACE_NAME

    # 표 16 대체 글꼴 유형
    FontFileType = Enum(UNKNOWN=0, TTF=1, HFT=2)

    # 표 15 글꼴 속성
    Flags = Flags(BYTE,
                  0, 1, FontFileType, 'font_file_type',
                  5, 'default',
                  6, 'metric',
                  7, 'alternate')

    def attributes(cls):
        ''' 표 14 글꼴 '''
        yield cls.Flags, 'flags'
        yield BSTR, 'name'

        def has_alternate(context, values):
            ''' flags.alternate == 1 '''
            return values['flags'].alternate

        def has_metric(context, values):
            ''' flags.metric == 1 '''
            return values['flags'].metric

        def has_default(context, values):
            ''' flags.default == 1 '''
            return values['flags'].default

        yield dict(type=AlternateFont, name='alternate_font',
                   condition=has_alternate)
        yield dict(type=Panose1, name='panose1', condition=has_metric)
        yield dict(type=BSTR, name='default_font', condition=has_default)
    attributes = classmethod(attributes)
Ejemplo n.º 29
0
 class FooRecord(RecordModel):
     Bar = Flags(UINT32)
     Baz = Enum()
Ejemplo n.º 30
0
class ParaShape(RecordModel):
    ''' 4.1.10. 문단 모양 '''
    tagid = HWPTAG_PARA_SHAPE

    # 표 39 문단 모양 속성1
    LineSpacingType = Enum(RATIO=0, FIXED=1, SPACEONLY=2, MINIMUM=3)
    Align = Enum(BOTH=0, LEFT=1, RIGHT=2, CENTER=3, DISTRIBUTE=4,
                 DISTRIBUTE_SPACE=5)
    VAlign = Enum(FONT=0, TOP=1, CENTER=2, BOTTOM=3)
    LineBreakAlphabet = Enum(WORD=0, HYPHEN=1, CHAR=2)
    LineBreakHangul = Enum(WORD=0, CHAR=1)
    HeadShape = Enum(NONE=0, OUTLINE=1, NUMBER=2, BULLET=3)
    Flags1 = Flags(UINT32,
                   0, 1, LineSpacingType, 'linespacing_type',
                   2, 4, Align, 'align',
                   5, 6, LineBreakAlphabet, 'linebreak_alphabet',
                   7, LineBreakHangul, 'linebreak_hangul',
                   8, 'use_paper_grid',
                   9, 15, 'minimum_space',  # 공백 최소값
                   16, 'protect_single_line',  # 외톨이줄 보호
                   17, 'with_next_paragraph',  # 다음 문단과 함께
                   18, 'protect',  # 문단 보호
                   19, 'start_new_page',  # 문단 앞에서 항상 쪽 나눔
                   20, 21, VAlign, 'valign',
                   22, 'lineheight_along_fontsize',  # 글꼴에 어울리는 줄 높이
                   23, 24, HeadShape, 'head_shape',  # 문단 머리 모양
                   25, 27, 'level',  # 문단 수준
                   28, 'linked_border',  # 문단 테두리 연결 여부
                   29, 'ignore_margin',  # 문단 여백 무시
                   30, 'tail_shape')  # 문단 꼬리 모양

    # 표 40 문단 모양 속성2
    Flags2 = Flags(UINT32,
                   0, 1, 'in_single_line',
                   2, 3, 'reserved',
                   4, 'autospace_alphabet',
                   5, 'autospace_number')

    # 표 41 줄 간격 종류
    Flags3 = Flags(UINT32,
                   0, 4, LineSpacingType, 'linespacing_type3')

    Flags = Flags1

    def attributes(cls):
        ''' 표 38 문단 모양 '''
        yield cls.Flags, 'parashapeflags',
        yield INT32,  'doubled_margin_left',   # 1/7200 * 2 # DIFFSPEC
        yield INT32,  'doubled_margin_right',  # 1/7200 * 2
        yield SHWPUNIT,  'indent',
        yield INT32,  'doubled_margin_top',    # 1/7200 * 2
        yield INT32,  'doubled_margin_bottom',  # 1/7200 * 2
        yield SHWPUNIT,  'linespacing',
        yield UINT16, 'tabdef_id',
        yield UINT16, 'numbering_bullet_id',
        yield UINT16, 'borderfill_id',
        yield HWPUNIT16,  'border_left',
        yield HWPUNIT16,  'border_right',
        yield HWPUNIT16,  'border_top',
        yield HWPUNIT16,  'border_bottom',
        yield dict(type=cls.Flags2, name='flags2', version=(5, 0, 1, 7))
        # yield cls.Flags3, 'flags3',   # DIFFSPEC
        # yield UINT32, 'lineSpacing',  # DIFFSPEC
    attributes = classmethod(attributes)