Lotus AmiPro File Format (NOT FINISHED YET) Ariya Hidayat Last rev: March 16, 2002 1 Foreword ----------- This is solely based on my reverse-engineering work whilst I work on AmiPro import filter for KWord. 2 Structure of AmiPro document ------------------------------- An AmiPro document consists of (in order of appearance): - header - content, i.e the text - embedded objects (frame, image, ...) 3 Formatting ------------- Basic text formatting, such as bold, italic, and so on is done inline by enclosing the text in a form of tag (like HTML tag). A tag is something like: <+$> The following list summarizes known formmating tags: <+!> bold on <-!> bold off <+"> italic on <-"> italic off <+#> underline on <-#> underline off <+)> double underline on <-)> double underline off <+$> word underline on <-$> word underline off <+&> superscript on <-&> superscript off <+'> subscript on <-'> subscript off <+%> strikethrough on <-%> strikethrough off Note: Word underline is just like underline, except that spaces between words are not underlined. Paragraph align is also encoded using tag, here it the list: <+@> left alignment <+A> right alignment <+B> center alignment <+C> justified Linespacing is encoded using tag: <:S+-1> single <:S+-2> one-and-half <:S+-3> double <:S+480> custom, 480/20 = 24 pt Font: tag <:f...> Example: <:f240,2Arial,255,0,0> means "Arial" font of size 240/20 = 12 pt, with red color (R=255,G=0,B=0). Simple tag <:f> means back to default font. Special characters are escaped or encoded because they have special meaning. Known so far: < encoded as << [ <[> @ @@ > <;> 4 Styles --------- Styles are defined in the header, precisely in section [tag]. The format for this section is shown with an example below: [tag] Title style name 8 shortcut key ("F8") [fnt] Arial font family ("Arial") 360 font size, 360/20 = 18 pt 0 font color (see below) 16385 formatting flag (see below) [algn] 4 alignment flag (see below) 1 216 indent, 216/20 = 10.8 pt 144 first line indent, 144/20 = 7.2 pt 288 rest indent, 288/20 = 14.4 pt [spc] 33 linespace flag (see below) 400 custom spacing, 400/20 = 20 pt 1 144 space before, 144/20 = 7.2 pt 72 space after, 72/20 = 3.6 pt 1 115 text tightness (90%=tight,115%=loose) [brk] 16 break flag (see below) [line] 8 0 1 0 1 1 1 10 10 1 [spec] 0 1 0 1 1 0 0 0 0 [nfmt] 272 1 2 . , Title style followed (see also break flag) 0 0 Color Representation: bit 0-7 : red bit 8-15 : green bit 16-23 : blue Note about AmiPro flags: although many things are set per bit, sometimes they are mutually exclusive, e.g left-aligned vs right-aligned. This must be taken into consideration. Formatting flag (16 bit) bit 0 : bold bit 1 : italic bit 2 : underline bit 3 : word underline bit 4 : all caps bit 6 : double underline bit 11 : initial caps bit 12 : first line bold bit 14 & 15 always set (??) Alignment flag bit 0 : left aligned bit 1 : right aligned bit 2 : centered bit 3 : justified bit 4 : all indent (left & right) bit 9 : hanging indent Linespace flag bit 0 : single bit 1 : one-and-half bit 2 : double bit 3 : custom bit 4 : always add in bit 5 : add in when not a break Break flag: bit 0 : page break before bit 1 : page break after bit 2 : allow break within bit 3 : keep with previous bit 4 : keep with next bit 5 : bit 6 : specifiy following style bit 7 : column break before bit 8 : column break after Styles are applied using the following sequences: @StyleName@, which put inline (within the text/content). Normally this appears in beginning of paragraph. 5 Page Layout ------------- Page layout is defined in section [lay]. Here is the format, along with an example: [lay] Standard 516 [rght] 16833 paper height, 16833/20 = 841.65 pt 11906 paper width, 11906/20 = 595.3 pt 4 1440 1440 1 1440 1440 0 1 0 1 0 2 1 1440 10465 12 6 Frame, Image, Table ---------------------- still pretty much a mystery :-P 7 Equation ----------- Equation or mathematical formula is represented in a language similar to TeX or LaTeX. Each equation is however put in a separate frame, so it is not really part of the document. Think of equation as embedded object within the document.