QScintilla/Exporters/ExporterPDF.py

changeset 25
5163e6f94ba5
parent 13
1af94a91f439
child 429
dcc623c99907
child 792
a13346916170
equal deleted inserted replaced
24:9233b51b54d1 25:5163e6f94ba5
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

eric ide

mercurial