509 self.pr.fontSize += fontSize |
509 self.pr.fontSize += fontSize |
510 else: |
510 else: |
511 self.pr.fontSize = PDF_FONTSIZE_DEFAULT |
511 self.pr.fontSize = PDF_FONTSIZE_DEFAULT |
512 |
512 |
513 try: |
513 try: |
514 f = open(filename, "w") |
514 # save file in win ansi using cp1250 |
|
515 f = open(filename, "w", encoding = "cp1250", errors = "backslashreplace") |
515 |
516 |
516 # initialise PDF rendering |
517 # initialise PDF rendering |
517 ot = PDFObjectTracker(f) |
518 ot = PDFObjectTracker(f) |
518 self.pr.oT = ot |
519 self.pr.oT = ot |
519 self.pr.startPDF() |
520 self.pr.startPDF() |
525 self.pr.nextLine() # enable zero length docs |
526 self.pr.nextLine() # enable zero length docs |
526 else: |
527 else: |
527 pos = 0 |
528 pos = 0 |
528 column = 0 |
529 column = 0 |
529 utf8 = self.editor.isUtf8() |
530 utf8 = self.editor.isUtf8() |
530 utf8Ch = "" |
531 utf8Ch = b"" |
531 utf8Len = 0 |
532 utf8Len = 0 |
532 |
533 |
533 while pos < lengthDoc: |
534 while pos < lengthDoc: |
534 ch = self.editor.rawCharAt(pos) |
535 ch = self.editor.byteAt(pos) |
535 style = self.editor.styleAt(pos) |
536 style = self.editor.styleAt(pos) |
536 |
537 |
537 if ch == '\t': |
538 if ch == b'\t': |
538 # expand tabs |
539 # expand tabs |
539 ts = tabSize - (column % tabSize) |
540 ts = tabSize - (column % tabSize) |
540 column += ts |
541 column += ts |
541 self.pr.add(' ' * ts, style) |
542 self.pr.add(' ' * ts, style) |
542 elif ch == '\r' or ch == '\n': |
543 elif ch == b'\r' or ch == b'\n': |
543 if ch == '\r' and self.editor.rawCharAt(pos + 1) == '\n': |
544 if ch == b'\r' and self.editor.byteAt(pos + 1) == b'\n': |
544 pos += 1 |
545 pos += 1 |
545 # close and begin a newline... |
546 # close and begin a newline... |
546 self.pr.nextLine() |
547 self.pr.nextLine() |
547 column = 0 |
548 column = 0 |
548 else: |
549 else: |
549 # write the character normally... |
550 # write the character normally... |
550 if ord(ch) > 127 and utf8: |
551 if ord(ch) > 127 and utf8: |
551 utf8Ch += ch |
552 utf8Ch += ch |
552 if utf8Len == 0: |
553 if utf8Len == 0: |
553 if (ord(utf8Ch[0]) & 0xF0) == 0xF0: |
554 if (utf8Ch[0] & 0xF0) == 0xF0: |
554 utf8Len = 4 |
555 utf8Len = 4 |
555 elif (ord(utf8Ch[0]) & 0xE0) == 0xE0: |
556 elif (utf8Ch[0] & 0xE0) == 0xE0: |
556 utf8Len = 3 |
557 utf8Len = 3 |
557 elif (ord(utf8Ch[0]) & 0xC0) == 0xC0: |
558 elif (utf8Ch[0] & 0xC0) == 0xC0: |
558 utf8Len = 2 |
559 utf8Len = 2 |
559 column -= 1 # will be incremented again later |
560 column -= 1 # will be incremented again later |
560 elif len(utf8Ch) == utf8Len: |
561 elif len(utf8Ch) == utf8Len: |
561 # convert utf-8 character to win ansi using cp1250 |
562 ch = utf8Ch.decode('utf8') |
562 ch = utf8Ch.decode('utf8')\ |
|
563 .encode('cp1250', 'replace') |
|
564 self.pr.add(ch, style) |
563 self.pr.add(ch, style) |
565 utf8Ch = "" |
564 utf8Ch = b"" |
566 utf8Len = 0 |
565 utf8Len = 0 |
567 else: |
566 else: |
568 column -= 1 # will be incremented again later |
567 column -= 1 # will be incremented again later |
569 else: |
568 else: |
570 self.pr.add(ch, style) |
569 self.pr.add(ch.decode(), style) |
571 column += 1 |
570 column += 1 |
572 |
571 |
573 pos += 1 |
572 pos += 1 |
574 |
573 |
575 # write required stuff and close the PDF file |
574 # write required stuff and close the PDF file |