Ticket #4949: lilypond.2.patch

File lilypond.2.patch, 6.3 KB (added by Link Mauve <linkmauve@…>, 8 years ago)

The patch.

  • conversation_textview.py

    diff -ru /usr/share/gajim/src/conversation_textview.py gajim/conversation_textview.py
    old new  
    10121012
    10131013                return result
    10141014
     1015        def lily_to_image(self, str_):
     1016                result = None
     1017
     1018                str_ = str_[2:len(str_)-2]
     1019
     1020                random.seed()
     1021                tmpfile = os.path.join(gettempdir(), 'gajimlily_' + random.randint(0,
     1022                        100).__str__())
     1023
     1024                # build lilypond string
     1025                lilystr = '\\include"italiano.ly"\\header{tagline=""}'
     1026                lilystr += '\\relative do\'{'
     1027                lilystr += str_
     1028                lilystr += '\\bar"|."}'
     1029
     1030                file = open(os.path.join(tmpfile + '.ly'), 'w+')
     1031                file.write(lilystr)
     1032                file.flush()
     1033                file.close()
     1034
     1035                try:
     1036                        if os.name == 'nt':
     1037                                # CREATE_NO_WINDOW
     1038                                p = Popen(['lilypond', '-f', 'ps',
     1039                                        tmpfile + '.ly'], creationflags=0x08000000, cwd=gettempdir())
     1040                        else:
     1041                                p = Popen(['lilypond', '-f', 'ps',
     1042                                        tmpfile + '.ly'], cwd=gettempdir())
     1043                        exitcode = p.wait()
     1044                except Exception, e:
     1045                        exitcode = _('Error executing "%(command)s": %(error)s') % {
     1046                                'command': 'lilypond -f ps %s.ly' % tmpfile,
     1047                                'error': str(e)}
     1048
     1049                if exitcode == 0:
     1050                        try:
     1051                                if os.name == 'nt':
     1052                                        # CREATE_NO_WINDOW
     1053                                        p = Popen(['convert', '-trim', tmpfile + '.ps',
     1054                                                tmpfile + '.png'], creationflags=0x08000000, cwd=gettempdir())
     1055                                else:
     1056                                        p = Popen(['convert', '-trim', tmpfile + '.ps',
     1057                                                tmpfile + '.png'], cwd=gettempdir())
     1058                                exitcode = p.wait()
     1059                        except Exception, e:
     1060                                exitcode = _('Error executing "%(command)s": %(error)s') % {
     1061                                        'command': 'convert -trim %s.ps -o '
     1062                                        '%s.png' % (tmpfile, tmpfile), 'error': str(e)}
     1063
     1064                extensions = ['.ly', '.ps']
     1065                for ext in extensions:
     1066                        try:
     1067                                os.remove(tmpfile + ext)
     1068                        except Exception:
     1069                                pass
     1070
     1071                if isinstance(exitcode, (unicode, str)):
     1072                        raise LatexError(exitcode)
     1073
     1074                if exitcode == 0:
     1075                        result = tmpfile + '.png'
     1076
     1077                return result
     1078
    10151079        def print_special_text(self, special_text, other_tags):
    10161080                '''is called by detect_and_print_special_text and prints
    10171081                special text (emots, links, formatting)'''
     
    11241188                        else:
    11251189                                buffer.insert(end_iter, special_text)
    11261190                        use_other_tags = False
     1191                elif special_text.startswith('%%') and special_text.endswith('%%'):
     1192                        try:
     1193                                imagepath = self.lily_to_image(special_text)
     1194                        except LatexError, e:
     1195                                # print the error after the line has been written
     1196                                gobject.idle_add(self.print_conversation_line, str(e), '', 'info',
     1197                                        '', None)
     1198                                imagepath = None
     1199                        end_iter = buffer.get_end_iter()
     1200                        anchor = buffer.create_child_anchor(end_iter)
     1201                        if imagepath is not None:
     1202                                img = gtk.Image()
     1203                                img.set_from_file(imagepath)
     1204                                img.show()
     1205                                # add
     1206                                self.tv.add_child_at_anchor(img, anchor)
     1207                                # delete old file
     1208                                try:
     1209                                        os.remove(imagepath)
     1210                                except Exception:
     1211                                        pass
     1212                        else:
     1213                                buffer.insert(end_iter, special_text)
     1214                        use_other_tags = False
    11271215                else:
    11281216                        # It's nothing special
    11291217                        if use_other_tags:
  • features_window.py

    Seulement dans /usr/share/gajim/src: .conversation_textview.py.swp
    diff -ru /usr/share/gajim/src/features_window.py gajim/features_window.py
    old new  
    100100                                _('Transform LaTeX expressions between $$ $$.'),
    101101                                _('Requires texlive-latex-base and dvipng. You have to set \'use_latex\' to True in the Advanced Configuration Editor.'),
    102102                                _('Requires texlive-latex-base and dvipng (All is in MikTeX). You have to set \'use_latex\' to True in the Advanced Configuration Editor.')),
     103                        _('LilyPond'): (self.lily_available,
     104                                _('Transform LilyPond expressions between %% %%.'),
     105                                _('Requires lilypond and convert from ImageMagick. You have to set \'use_lily\' to True in the Advanced Configuration Editor.'),
     106                                _('Requires lilypond and convert from ImageMagick. You have to set \'use_lily\' to True in the Advanced Configuration Editor.')),
    103107                        _('End to End Encryption'): (self.pycrypto_available,
    104108                                _('Encrypting chatmessages.'),
    105109                                _('Requires python-crypto.'),
     
    310314                        return True
    311315                return False
    312316
     317        def latex_available(self):
     318                '''check is lilypond is available and if it can create a picture.'''
     319
     320                exitcode = 0
     321                random.seed()
     322                tmpfile = os.path.join(gettempdir(), "gajimlily_" + \
     323                        random.randint(0,100).__str__())
     324
     325                # build lilypond string
     326                lilystr = '\\include"italiano.ly"\\header{tagline=""}'
     327                lilystr += '\\relative do\'{do re mi fa}'
     328
     329                file = open(os.path.join(tmpfile + ".ly"), "w+")
     330                file.write(lilystr)
     331                file.flush()
     332                file.close()
     333                try:
     334                        if os.name == 'nt':
     335                                # CREATE_NO_WINDOW
     336                                p = Popen(['lilypond', '-f', 'ps', tmpfile + '.ly'],
     337                                        creationflags=0x08000000, cwd=gettempdir())
     338                        else:
     339                                p = Popen(['lilypond', '-f', 'ps', tmpfile + '.ly'],
     340                                        cwd=gettempdir())
     341                        exitcode = p.wait()
     342                except Exception:
     343                        exitcode = 1
     344                if exitcode == 0:
     345                        try:
     346                                if os.name == 'nt':
     347                                        # CREATE_NO_WINDOW
     348                                        p = Popen(['convert', '-trim', tmpfile + '.ps', tmpfile + '.png'],
     349                                                creationflags=0x08000000, cwd=gettempdir())
     350                                else:
     351                                        p = Popen(['convert', '-trim', tmpfile + '.ps', tmpfile + '.png'],
     352                                                cwd=gettempdir())
     353                                exitcode = p.wait()
     354                        except Exception:
     355                                exitcode = 1
     356                extensions = ['.ly', '.ps', '.png']
     357                for ext in extensions:
     358                        try:
     359                                os.remove(tmpfile + ext)
     360                        except Exception:
     361                                pass
     362                if exitcode == 0:
     363                        return True
     364                return False
     365
    313366        def pycrypto_available(self):
    314367                from common import gajim
    315368                return gajim.HAVE_PYCRYPTO
  • gajim.py

    diff -ru /usr/share/gajim/src/gajim.py gajim/gajim.py
    old new  
    24542454                        r'(?<!\w)' r'_[^\s_]' r'([^_]*[^\s_])?' r'_(?!\w)'
    24552455
    24562456                latex = r'|\$\$[^$\\]*?([\]\[0-9A-Za-z()|+*/-]|[\\][\]\[0-9A-Za-z()|{}$])(.*?[^\\])?\$\$'
     2457                lily = r'|\%\%[^$\\]*?([\]\[0-9A-Za-z()|+*/-]|[\\][\]\[0-9A-Za-z()|{}$])(.*?[^\\])?\%\%'
    24572458
    24582459                basic_pattern = links + '|' + mail + '|' + legacy_prefixes
    24592460
    24602461                if gajim.config.get('use_latex'):
    24612462                        basic_pattern += latex
    24622463
     2464                basic_pattern += lily
     2465
    24632466                if gajim.config.get('ascii_formatting'):
    24642467                        basic_pattern += formatting
    24652468                self.basic_pattern = basic_pattern