diff options
author | Brennan Vincent <brennanv@email.arizona.edu> | 2012-08-17 19:07:59 -0700 |
---|---|---|
committer | Brennan Vincent <brennanv@email.arizona.edu> | 2012-08-17 19:07:59 -0700 |
commit | 50969a51e88cb424bc9b54a8b1ef49a34b53f209 (patch) | |
tree | 948dc198afe8cb85f5977e8f331c1e0846fdbaea | |
parent | 4f5603348014922919780dbbf7b252e6d11b4863 (diff) |
Parse tab stops (may need to work on the API before they can be output)
-rw-r--r-- | src/lib/MSPUBBlockID.h | 6 | ||||
-rw-r--r-- | src/lib/MSPUBParser.cpp | 24 | ||||
-rw-r--r-- | src/lib/MSPUBTypes.h | 3 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/lib/MSPUBBlockID.h b/src/lib/MSPUBBlockID.h index 34140b9..9ea0f5e 100644 --- a/src/lib/MSPUBBlockID.h +++ b/src/lib/MSPUBBlockID.h @@ -90,7 +90,11 @@ enum MSPUBBlockID // Don't be alarmed by multiple elements with the same value; TABLE_ROWCOL_OFFSET = 0x01, FONT_CONTAINER_ARRAY = 0x02, EMBEDDED_EOT = 0x0C, - EMBEDDED_FONT_NAME = 0x04 + EMBEDDED_FONT_NAME = 0x04, + PARAGRAPH_TABS = 0x32, + TAB_ARRAY = 0x28, + TAB_ENTRY = 0x0, + TAB_AMOUNT = 0x0 }; } // namespace libmspub diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 8553b70..c4356ca 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1202,6 +1202,30 @@ libmspub::ParagraphStyle libmspub::MSPUBParser::getParagraphStyle(WPXInputStream case PARAGRAPH_RIGHT_INDENT: ret.m_rightIndentEmu = info.data; break; + case PARAGRAPH_TABS: + input->seek(info.dataOffset + 4, WPX_SEEK_SET); + while(stillReading(input, info.dataOffset + info.dataLength)) + { + MSPUBBlockInfo tabArrayInfo = parseBlock(input, true); + if (tabArrayInfo.id == TAB_ARRAY) + { + input->seek(tabArrayInfo.dataOffset + 4, WPX_SEEK_SET); + while (stillReading(input, tabArrayInfo.dataOffset + tabArrayInfo.dataLength)) + { + MSPUBBlockInfo tabEntryInfo = parseBlock(input, true); + if (tabEntryInfo.type == GENERAL_CONTAINER) + { + input->seek(tabEntryInfo.dataOffset + 4, WPX_SEEK_SET); + MSPUBBlockInfo tabInfo = parseBlock(input, true); + if (tabInfo.id == TAB_AMOUNT) + { + ret.m_tabStopsInEmu.push_back(tabInfo.data); + } + } + } + } + } + break; case PARAGRAPH_LIST_INFO: { isList = true; diff --git a/src/lib/MSPUBTypes.h b/src/lib/MSPUBTypes.h index 61e5b56..e565f10 100644 --- a/src/lib/MSPUBTypes.h +++ b/src/lib/MSPUBTypes.h @@ -157,10 +157,11 @@ struct ParagraphStyle boost::optional<unsigned> m_leftIndentEmu; boost::optional<unsigned> m_rightIndentEmu; boost::optional<ListInfo> m_listInfo; + std::vector<unsigned> m_tabStopsInEmu; ParagraphStyle() : m_align(), m_defaultCharStyleIndex(), m_lineSpacing(), m_spaceBeforeEmu(), m_spaceAfterEmu(), m_firstLineIndentEmu(), m_leftIndentEmu(), - m_rightIndentEmu(), m_listInfo() + m_rightIndentEmu(), m_listInfo(), m_tabStopsInEmu() { } }; |