On Mon, Jul 22, 2002 at 07:11:41PM +0000, [EMAIL PROTECTED] wrote:
> CVSROOT:      /usr/local/lyx/cvsroot
> Module name:  lyx-devel
> Repository:   lyx-devel/src/support/
> Changes by:   [EMAIL PROTECTED]  02/07/22 19:11:41
> 
> Modified files:
>       lyx-devel/src/: ChangeLog buffer.C 
>       lyx-devel/src/support/: ChangeLog filetools.C filetools.h 
> 
> Log message:
>       Use lyxconvert script for reading old files

I did not put the lyxconvert script in CVS since
1) I am not sure about the name for this script.
2) I am not sure about where to put it.
I think that the lyxconvert script should be installed in /usr/bin/
(the other option is to keep it in LYXDIR/scripts).
How should I do it ?
#!/usr/bin/python
import sys,string

def check_token(lines, token, i):
    if lines[i][:len(token)] == token:
        return 1
    return 0

def find_token(lines, token, start):
    n = len(lines)
    m = len(token)
    i = start
    while i < n:
        line = lines[i]
        if line[:m] == token:
            return i
        i = i+1
    return -1

def find_token2(lines, token1, token2, start):
    n = len(lines)
    m1 = len(token1)
    m2 = len(token2)
    i = start
    while i < n:
        line = lines[i]
        if line[:m1] == token1 or line[:m2] == token2:
            return i
        i = i+1
    return -1

def find_token_backwards(lines, token, start):
    n = len(lines)
    m = len(token)
    i = start
    while i >= 0:
        line = lines[i]
        if line[:m] == token:
            return i
        i = i-1
    return -1

floats = {
    "footnote": ["\\begin_inset Foot\n",
                 "collapsed true\n"],
    "margin":   ["\\begin_inset Marginal\n",
                 "collapsed true\n"],
    "fig":      ["\\begin_inset Float figure\n",
                 "placement htbp\n",
                 "wide false\n",
                 "collapsed false\n"],
    "tab":      ["\\begin_inset Float table\n",
                 "placement htbp\n",
                 "wide false\n",
                 "collapsed false\n"],
    "alg":      ["\\begin_inset Float algorithm\n",
                 "placement htbp\n",
                 "wide false\n",
                 "collapsed false\n"],
    "wide-fig": ["\\begin_inset Float figure\n",
                 "placement htbp\n",
                 "wide true\n",
                 "collapsed false\n"],
    "wide-tab": ["\\begin_inset Float table\n",
                 "placement htbp\n",
                 "wide true\n",
                 "collapsed false\n"]
}

def remove_oldfloat(lines):
    i = 0
    while 1:
        i = find_token(lines, "\\begin_float", i)
        if i == -1:
            break
        j = find_token(lines, "\\end_float", i+1)
        floattype = string.split(lines[i])[1]
        #print floattype
        start = floats[floattype]+["\n"]
        mid = lines[i+1:j]
        lines[i:j+1]= start+mid+["\\end_inset \n"]
        i = i+1

def remove_oldminipage(lines):
    i = 0
    flag = 0
    while 1:
        i = find_token(lines, "\\pextra_type 2", i)
        if i == -1:
            break
        hfill = 0
        line = string.split(lines[i])
        if line[4] == "\\pextra_hfill":
            line[4:6] = []
            hfill = 1
        if line[4] == "\\pextra_start_minipage":
            line[4:6] = []
        width = line[5]
        if line[4] == "\\pextra_widthp":
            width = line[5]+"col%"

        start = ["\\begin_inset Minipage\n",
                 "position %s\n" % line[3],
                 "inner_position 0\n",
                 'height "0pt"\n',
                 'width "%s"\n' % width,
                 "collapsed false\n"
                 ]
        if flag:
            flag = 0
            if hfill:
                start = ["\n","\hfill\n","\n"]+start
        else:
            start = ["\\layout Standard\n"] + start

        j = find_token_backwards(lines,"\\layout", i-1)
        j0 = j
        mid = lines[j:i]

        j = find_token2(lines,"\\layout", "\\end_float", i+1)
        mid = mid+lines[i+1:j]

        while 1:
            i = find_token2(lines,"\\layout", "\\pextra_type", j+1)
            if i == -1 or not check_token(lines,  "\\pextra_type", i):
                break
            line = string.split(lines[i])
            if line[4] == "\\pextra_hfill":
                line[4:6] = []
            if line[4] == "\\pextra_start_minipage" and line[5] == "1":
                flag = 1
                break
            j = find_token_backwards(lines,"\\layout", i-1)
            mid = mid+lines[j:i]
            j = find_token2(lines,"\\layout", "\\end_float", i+1)
            mid = mid+lines[i+1:j]

        end = ["\\end_inset \n"]

        lines[j0:j] = start+mid+end
        i = i+1


def convert_116_to_120():
    remove_oldminipage(lines)
    remove_oldfloat(lines)

def set_formatnumber(number):
    i = find_token(lines, "\\lyxformat", 0)
    lines[i] = "\\lyxformat %s\n" % number


in_file = sys.argv[1]
fh = open(in_file)
lines = fh.readlines()
fh.close()

convert_116_to_120()
set_formatnumber(220)

if len(sys.argv) < 3:
    fh = sys.stdout
else:
    out_file = sys.argv[2]
    fh = open(out_file, "w")

for line in lines:
    fh.write(line)
fh.close()
sys.exit(0)

Reply via email to