LINUX.ORG.RU

solution: qcad шрифты 2 (cp1251)


0

0

[ В продолжение старой темы "qcad шрифты"
http://www.linux.org.ru/view-message.jsp?msgid=2248982
в которую уже нельзя добавить коментарий ]

Freek (05.11.2007 15:58:16)
> при открытии чертежа, на нем нет ни текста ни цифр, а русские слои
> отобоажаются кракозябрами. Видио шрифтов не видит, а во как их
> прикрутить к нему и какие? желательно чтобы ГОСТу соответствовали

Недавно столкнулся с этой проблемой, перерыл весь интернет и решения не нашел. Поэтому привожу свой хак который позволяет просматривать .dxf сделанные под win.


---- 8< ---- (qcad_cxf_unicode2cp1251)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Утилита для конвертирования шрифтов QCad в кодировку CP1251. Использовать так:

$ mkdir ~/.qcad/fonts
$ qcad_cxf_unicode2cp1251 \
< /usr/share/qcad/fonts/cyrillic_ii.cxf \
> ~/.qcad/fonts/arial_cyr.cxf

После этого, документы созданные нашими конструкторами (только .dxf, .dwg не
поддерживается qcad) будут открываться без кракозябр на месте русских надписей.
"""

from sys import stdin, stdout
import re

Ure = '^\[[0123456789ABCDEF]{4,4}\]' # [042B]
Urex = re.compile(Ure, re.IGNORECASE)


def main():
for line in stdin.readlines():
if Urex.match(line) is None:
# not a char-def line
stdout.write(line)
continue

ucode = int(line[1:5], 16)
u = unichr(ucode)

try:
sym = u.encode('cp1251')
except UnicodeEncodeError:
# no such symbol in destination encoding
stdout.write(line)
continue

# qcad treats input stream as latin1, so we 'remap' it back
u2 = sym.decode('latin-1')

line = '[%04X]' % ord(u2) + line[6:]
stdout.write(line)



if __name__ == '__main__':
main()

---- 8< ----


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.