summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrennan Vincent <brennanv@email.arizona.edu>2012-08-17 19:07:59 -0700
committerBrennan Vincent <brennanv@email.arizona.edu>2012-08-17 19:07:59 -0700
commit50969a51e88cb424bc9b54a8b1ef49a34b53f209 (patch)
tree948dc198afe8cb85f5977e8f331c1e0846fdbaea
parent4f5603348014922919780dbbf7b252e6d11b4863 (diff)
Parse tab stops (may need to work on the API before they can be output)
-rw-r--r--src/lib/MSPUBBlockID.h6
-rw-r--r--src/lib/MSPUBParser.cpp24
-rw-r--r--src/lib/MSPUBTypes.h3
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()
{
}
};