Esempio n. 1
0
def read_char_strings(tokenizer):
    char_strings = {}
    next = tokenizer.next
    read = tokenizer.read

    while 1:
        token, value = next()
        if token == NAME:
            token, length = next()
            next() # discard RD operator
            read(1) # discard space character
            data = read(length)
            char_strings[value] = decode(data)[0][4:]
        elif token == END or (token == OPERATOR and value == 'end'):
            break

    return char_strings
Esempio n. 2
0
def read_char_strings(tokenizer):
    char_strings = {}
    next = tokenizer.next
    read = tokenizer.read

    while 1:
        token, value = next()
        if token == NAME:
            token, length = next()
            next()  # discard RD operator
            read(1)  # discard space character
            data = read(length)
            char_strings[value] = decode(data)[0][4:]
        elif token == END or (token == OPERATOR and value == 'end'):
            break

    return char_strings
Esempio n. 3
0
def read_subrs(tokenizer, num):
    if not num:
        return []
    subrs = [''] * num
    next = tokenizer.next
    read = tokenizer.read

    while not subrs[-1]:
        token, value = next()
        if token == OPERATOR and value == 'dup':
            token, index = next()
            token, length = next()
            next() # discard RD operator
            read(1) # discard space character
            data = read(length)
            subrs[index] = decode(data)[0][4:]
        elif token == END:
            break
    return subrs
Esempio n. 4
0
def read_subrs(tokenizer, num):
    if not num:
        return []
    subrs = [''] * num
    next = tokenizer.next
    read = tokenizer.read

    while not subrs[-1]:
        token, value = next()
        if token == OPERATOR and value == 'dup':
            token, index = next()
            token, length = next()
            next()  # discard RD operator
            read(1)  # discard space character
            data = read(length)
            subrs[index] = decode(data)[0][4:]
        elif token == END:
            break
    return subrs
Esempio n. 5
0
def read_type1_file(filename):
    data = StringIO()
    file = open(filename, 'rb')
    head = file.read(6)
    if head[:2] == '%!':
        line = file.readline()
        while line:
            line = file.readline()
            pos = find(line, 'eexec')
            if pos >= 0:
                data.write(line[:pos + 5] + '\n')
                line = line[pos + 5:]
                break
            data.write(line)

        try:
            buf = line + file.read(200)
            buf, extra = hexdecode(buf)
            buf, r = decode(buf, 55665)
            data.write(buf[4:])
            buf = extra + file.read(200)
            while buf:
                buf, extra = hexdecode(buf)
                buf, r = decode(buf, r)
                data.write(buf)
                buf = extra + file.read(200)
        except:
            pass
    else:
        while 1:
            if ord(head[0]) != 128:
                raise TypeError, 'not a pfb file'
            data_type = ord(head[1])
            if data_type == 3:
                # EOF
                break

            data_length = ord(head[2]) + 256 * ord(head[3]) \
                          + 65536 * ord(head[4]) + 16777216 * ord(head[5])
            if data_type == 1: # ASCII
                data.write(file.read(data_length))
            elif data_type == 2: #Binary
                # decode and discard the first 4 bytes
                buf = file.read(4)
                if len(buf) < 4:
                    raise IOError, "insufficient data"
                buf, r = decode(buf, 55665)
                data_length = data_length - 4
                if data_length < 0:
                    raise IOError, "invalid data"
                while data_length:
                    buf = file.read(min(1000, data_length))
                    if not buf:
                        raise IOError, "insufficient data"
                    buf, r = decode(buf, r)
                    data.write(buf)
                    data_length = data_length - len(buf)
            else:
                raise RuntimeError, "Invalid data type"
            head = file.read(6)


    data = data.getvalue()
    return data
Esempio n. 6
0
def read_type1_file(filename):
    data = StringIO()
    file = open(filename, 'rb')
    head = file.read(6)
    if head[:2] == '%!':
        line = file.readline()
        while line:
            line = file.readline()
            pos = find(line, 'eexec')
            if pos >= 0:
                data.write(line[:pos + 5] + '\n')
                line = line[pos + 5:]
                break
            data.write(line)

        try:
            buf = line + file.read(200)
            buf, extra = hexdecode(buf)
            buf, r = decode(buf, 55665)
            data.write(buf[4:])
            buf = extra + file.read(200)
            while buf:
                buf, extra = hexdecode(buf)
                buf, r = decode(buf, r)
                data.write(buf)
                buf = extra + file.read(200)
        except:
            pass
    else:
        while 1:
            if ord(head[0]) != 128:
                raise TypeError, 'not a pfb file'
            data_type = ord(head[1])
            if data_type == 3:
                # EOF
                break

            data_length = ord(head[2]) + 256 * ord(head[3]) \
                          + 65536 * ord(head[4]) + 16777216 * ord(head[5])
            if data_type == 1:  # ASCII
                data.write(file.read(data_length))
            elif data_type == 2:  #Binary
                # decode and discard the first 4 bytes
                buf = file.read(4)
                if len(buf) < 4:
                    raise IOError, "insufficient data"
                buf, r = decode(buf, 55665)
                data_length = data_length - 4
                if data_length < 0:
                    raise IOError, "invalid data"
                while data_length:
                    buf = file.read(min(1000, data_length))
                    if not buf:
                        raise IOError, "insufficient data"
                    buf, r = decode(buf, r)
                    data.write(buf)
                    data_length = data_length - len(buf)
            else:
                raise RuntimeError, "Invalid data type"
            head = file.read(6)

    data = data.getvalue()
    return data