]> git.lyx.org Git - features.git/blob - lib/lyx2lyx/lyxconvert_227.py
move minipage->box conversion from 224 to 227
[features.git] / lib / lyx2lyx / lyxconvert_227.py
1 # This file is part of lyx2lyx
2 # Copyright (C) 2003 José Matos <jamatos@fep.up.pt>
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17
18 import sys
19 from parser_tools import find_token, find_tokens
20
21 def convert_collapsable(lines):
22     i = 0
23     while 1:
24         i = find_tokens(lines, ["\\begin_inset Box",
25                                 "\\begin_inset Branch",
26                                 "\\begin_inset CharStyle",
27                                 "\\begin_inset Float",
28                                 "\\begin_inset Foot",
29                                 "\\begin_inset Marginal",
30                                 "\\begin_inset Note",
31                                 "\\begin_inset OptArg",
32                                 "\\begin_inset Wrap"], i)
33         if i == -1:
34             break
35
36         # Seach for a line starting 'collapsed'
37         # If, however, we find a line starting '\layout' (_always_ present)
38         # then break with a warning message
39         i = i + 1
40         while 1:
41             if (lines[i] == "collapsed false"):
42                 lines[i] = "status open"
43                 break
44             elif (lines[i] == "collapsed true"):
45                 lines[i] = "status collapsed"
46                 break
47             elif (lines[i][:7] == "\\layout"):
48                 sys.stderr.write("Malformed lyx file\n")
49                 break
50             i = i + 1
51
52         i = i + 1
53
54
55 def convert_minipage(lines):
56     """ Convert minipages to the box inset.
57     We try to use the same order of arguments as lyx does.
58     """
59     pos = ["t","c","b"]
60     inner_pos = ["c","t","b","s"]
61
62     i = 0
63     while 1:
64         i = find_token(lines, "\\begin_inset Minipage", i)
65         if i == -1:
66             return
67
68         lines[i] = "\\begin_inset Box Frameless"
69         i = i + 1
70
71         # convert old to new position using the pos list
72         if lines[i][:8] == "position":
73             lines[i] = 'position "%s"' % pos[int(lines[i][9])]
74         else:
75             lines.insert(i, 'position "%s"' % pos[0])
76         i = i + 1
77
78         lines.insert(i, 'hor_pos "c"')
79         i = i + 1
80         lines.insert(i, 'has_inner_box 1')
81         i = i + 1
82
83         # convert the inner_position
84         if lines[i][:14] == "inner_position":
85             lines[i] = 'inner_pos "%s"' %  inner_pos[int(lines[i][15])]
86         else:
87             lines.insert('inner_pos "%s"' % inner_pos[0])
88         i = i + 1
89
90         # We need this since the new file format has a height and width
91         # in a different order.
92         if lines[i][:6] == "height":
93             height = lines[i][6:]
94             # test for default value of 221 and convert it accordingly
95             if height == ' "0pt"':
96                 height = ' "1pt"'
97             del lines[i]
98         else:
99             height = ' "1pt"'
100
101         if lines[i][:5] == "width":
102             width = lines[i][5:]
103             del lines[i]
104         else:
105             width = ' "0"'
106
107         lines.insert(i, 'use_parbox 0')
108         i = i + 1
109         lines.insert(i, 'width' + width)
110         i = i + 1
111         lines.insert(i, 'special "none"')
112         i = i + 1
113         lines.insert(i, 'height' + height)
114         i = i + 1
115         lines.insert(i, 'height_special "totalheight"')
116         i = i + 1
117
118 def convert(header, body):
119     convert_collapsable(body)
120     convert_minipage(body)
121
122 if __name__ == "__main__":
123     pass