diff --git a/.gitignore b/.gitignore index fffc64d..aef719b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,12 @@ __pycache__ *.swp +.pybuild/ +calcool.egg-info/ +debian/.debhelper/ +debian/calcool.postinst.debhelper +debian/calcool.prerm.debhelper +debian/calcool.substvars +debian/calcool/ +debian/debhelper-build-stamp +debian/files +build/ diff --git a/.quickly b/.quickly deleted file mode 100644 index 93de0e2..0000000 --- a/.quickly +++ /dev/null @@ -1,4 +0,0 @@ -project = calcool -template = ubuntu-application -lp_id = calcool -version = 12.06 diff --git a/bin/calcool b/bin/calcool index 821a5a3..0b67979 100755 --- a/bin/calcool +++ b/bin/calcool @@ -1,4 +1,4 @@ -#!/usr/bin/python +#! /usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (C) 2010 jan gerber @@ -14,12 +14,15 @@ # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE -from __future__ import division import sys import os -import gtk -from gtksourceview2 import View as GtkSourceView +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk as gtk +gi.require_version("GtkSource", "4") +from gi.repository import GtkSource +GtkSourceView = GtkSource.View() from math import * safe_list = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', @@ -51,7 +54,6 @@ from calcool.calcoolconfig import getdatapath class CalcoolWindow(gtk.Window): __gtype_name__ = "CalcoolWindow" - record_type = "http://wiki.ubuntu.com/Quickly/CalcoolDocument" database_name = "calcool" filename = '' @@ -96,19 +98,19 @@ class CalcoolWindow(gtk.Window): def update_output(self): self.builder.get_object('status').set_text('Calculating...') txt = self.builder.get_object('input').get_buffer() - text = txt.get_text(txt.get_start_iter(), txt.get_end_iter()) + text = txt.get_text(txt.get_start_iter(), txt.get_end_iter(), 0) rows = text.split('\n') otxt = [] computed_values = [] def expand_lines(line): - return re.sub('line(\d+)', lambda m: 'line%010d'%int(m.groups(0)[0]), line) + return re.sub(r'line(\d+)', lambda m: 'line%010d'%int(m.groups(0)[0]), line) def resolve_row(r, line): #if r not in self._results: try: r_ = r r_ = expand_lines(r_) - match = re.compile('line(\d+)').findall(r) + match = re.compile(r'line(\d+)').findall(r) match = filter(lambda l: int(l) <= len(rows), match) if match: for l in match: @@ -117,7 +119,7 @@ class CalcoolWindow(gtk.Window): value = '(%s)' % expand_lines(rows[l-1]) r_ = r_.replace('line%010d' % l, value) r_ = resolve_row(r_, line) - #print r, r_ + #print (r, r_) result = str(eval(r_, {"__builtins__":None}, safe_dict)) #highlight computed values @@ -134,9 +136,9 @@ class CalcoolWindow(gtk.Window): output.set_text('\n'.join(otxt)) tagTable = output.get_tag_table() - computed = tagTable.lookup('computed') + computed = tagTable.lookup(name='computed') if not computed: - computed = gtk.TextTag('computed') + computed = gtk.TextTag(name='computed') computed.set_property('weight', 700) # pango.WEIGHT_BOLD = 700 tagTable.add(computed) @@ -158,7 +160,7 @@ class CalcoolWindow(gtk.Window): def load_file(self, filename): with open(filename) as f: - text = f.read().decode('utf-8') + text = f.read() #set the UI to display the string buff = self.builder.get_object("input").get_buffer() buff.set_text(text) @@ -166,10 +168,9 @@ class CalcoolWindow(gtk.Window): self.filename = filename def open_file(self, widget, data=None): - dialog = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_OPEN, - buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) - - dialog.set_default_response(gtk.RESPONSE_OK) + dialog = gtk.FileChooserDialog(title=None,action=gtk.FileChooserAction.OPEN) + dialog.add_buttons(gtk.STOCK_CANCEL,gtk.ResponseType.CANCEL,gtk.STOCK_OPEN,gtk.ResponseType.OK) + dialog.set_default_response(gtk.ResponseType.OK) filter = gtk.FileFilter() filter.set_name("Calcool Documents") @@ -183,7 +184,7 @@ class CalcoolWindow(gtk.Window): dialog.add_filter(filter) response = dialog.run() - if response == gtk.RESPONSE_OK: + if response == gtk.ResponseType.OK: filename = dialog.get_filename() dialog.destroy() self.load_file(filename) @@ -201,13 +202,13 @@ class CalcoolWindow(gtk.Window): start_iter = buff.get_start_iter() end_iter = buff.get_end_iter() - text = buff.get_text(start_iter,end_iter) - with open(self.filename, "w") as f: + text = buff.get_text(start_iter,end_iter, 0) + with open(self.filename, "wb") as f: f.write(text.encode('utf-8')) def save_as_file(self, widget, data=None): - dialog = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_SAVE, - buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) + dialog = gtk.FileChooserDialog(title=None,action=gtk.FileChooserAction.SAVE) + dialog.add_buttons(gtk.STOCK_CANCEL,gtk.ResponseType.CANCEL,gtk.STOCK_OPEN,gtk.ResponseType.OK) filter = gtk.FileFilter() filter.set_name("Calcool Documents") filter.add_mime_type("text/x-calcool") @@ -220,8 +221,10 @@ class CalcoolWindow(gtk.Window): dialog.add_filter(filter) response = dialog.run() - if response == gtk.RESPONSE_OK: + if response == gtk.ResponseType.OK: self.filename = dialog.get_filename() + if not self.filename.endswith(".calc"): + self.filename += ".calc" self.save_file(widget) dialog.destroy() @@ -270,4 +273,4 @@ if __name__ == "__main__": window.load_file(args[0]) gtk.main() def save_file(self, widget, data=None): - print "save" + print("save") diff --git a/calcool/AboutCalcoolDialog.py b/calcool/AboutCalcoolDialog.py index 6d56ce1..dd56a5c 100644 --- a/calcool/AboutCalcoolDialog.py +++ b/calcool/AboutCalcoolDialog.py @@ -16,7 +16,9 @@ import sys import os -import gtk +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk as gtk from calcool.calcoolconfig import getdatapath diff --git a/data/media/icon.png b/data/media/icon.png index b080e14..d8e5fa7 100644 Binary files a/data/media/icon.png and b/data/media/icon.png differ diff --git a/data/media/large.png b/data/media/large.png index a5287fa..d2b073e 100644 Binary files a/data/media/large.png and b/data/media/large.png differ diff --git a/data/media/logo.png b/data/media/logo.png index 71d29ec..91a2140 100644 Binary files a/data/media/logo.png and b/data/media/logo.png differ diff --git a/data/ui/AboutCalcoolDialog.ui b/data/ui/AboutCalcoolDialog.ui index 23250cf..87b33d5 100644 --- a/data/ui/AboutCalcoolDialog.ui +++ b/data/ui/AboutCalcoolDialog.ui @@ -6,9 +6,8 @@ Copyright (C) 2010 jan gerber <j@mailb.org>5 ../media/icon.png normal - False Calcool - 12.06 + 25.02 Calcool allows you to do calculations in a document, on the right you have the result for each line. If you ever used bc and wanted to edit a previous @@ -49,4 +48,4 @@ calcool might be what you are looking for. - \ No newline at end of file + diff --git a/data/ui/CalcoolWindow.ui b/data/ui/CalcoolWindow.ui index 8bdb9f1..1e7d8f2 100644 --- a/data/ui/CalcoolWindow.ui +++ b/data/ui/CalcoolWindow.ui @@ -1,10 +1,6 @@ - - - - 600 500 @@ -173,6 +169,7 @@ True True + True 2 2 True diff --git a/debian/changelog b/debian/changelog index 0be1e0e..ceaab3c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +calcool (25.00) unstable; urgency=low + + * migreate to python3 + + -- Jan Gerber Fri, 31 Jan 2025 19:01:32 +0430 + calcool (12.06) precise; urgency=low * resolved lines in lines diff --git a/debian/compat b/debian/compat index 1e8b314..f599e28 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -6 +10 diff --git a/debian/control b/debian/control index bb2e48a..b9da5db 100644 --- a/debian/control +++ b/debian/control @@ -1,21 +1,14 @@ Source: calcool +Maintainer: Jan Gerber Section: python -Priority: extra -Build-Depends: cdbs (>= 0.4.43), - debhelper (>= 6), - python (>= 2.6.6-3~), - python-distutils-extra (>= 2.10) -Maintainer: j^ -Standards-Version: 3.8.2 -XS-Python-Version: current +Priority: optional +Build-Depends: python3-all, python3-distutils-extra, debhelper (>= 7.4.3), dh-python +Standards-Version: 3.9.1 Package: calcool Architecture: all -XB-Python-Version: ${python:Versions} -Depends: ${misc:Depends}, - ${python:Depends}, - python-gtksourceview2, - python-gtk2 +XB-Python-Version: ${python3:Versions} +Depends: python3, ${misc:Depends}, ${python3:Depends}, gir1.2-gtksource-4 Description: A document based calculator tool Calcool allows you to do calculations in a document, on the right you have the result for each line. If you ever used bc and wanted to edit a diff --git a/debian/copyright b/debian/copyright index 9dfe699..251df20 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,13 +1,10 @@ Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 Name: calcool -Maintainer: j^ -Source: https://launchpad.net/calcool +Maintainer: Jan Gerber +Source: https://code.0x2620.org/j/calcool Files: * -Copyright: (C) 2010 jan gerber -Copyright: (C) 2010 jan gerber <j@mailb.org> -Copyright: (C) 2010 jan gerber <j@mailb.org> -Copyright: (C) 2010 jan gerber <j@mailb.org>5 +Copyright: (C) 2010-2025 Jan Gerber License: GPL-3 The full text of the GPL is distributed in /usr/share/common-licenses/GPL-3 on Debian systems. diff --git a/debian/pycompat b/debian/pycompat index 0cfbf08..00750ed 100644 --- a/debian/pycompat +++ b/debian/pycompat @@ -1 +1 @@ -2 +3 diff --git a/debian/rules b/debian/rules index 2c0fe5e..641186e 100755 --- a/debian/rules +++ b/debian/rules @@ -1,9 +1,4 @@ #!/usr/bin/make -f + %: -ifneq ($(shell dh -l | grep -xF translations),) - dh $@ --with python2,translations -else - dh $@ --with python2 -endif - - + dh $@ --with python3 --buildsystem=pybuild diff --git a/etc/apport/crashdb.conf.d/calcool-crashdb.conf b/etc/apport/crashdb.conf.d/calcool-crashdb.conf deleted file mode 100644 index 48ef7ed..0000000 --- a/etc/apport/crashdb.conf.d/calcool-crashdb.conf +++ /dev/null @@ -1,9 +0,0 @@ -### BEGIN LICENSE -# This file is in the public domain -### END LICENSE - -calcool = { - 'impl' : 'launchpad', - 'project' : 'calcool', - 'bug_pattern_base' : None, -} diff --git a/po/calcool.pot b/po/calcool.pot index f7f9116..66a01fc 100644 --- a/po/calcool.pot +++ b/po/calcool.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-24 22:20+0200\n" +"POT-Creation-Date: 2025-01-31 19:23+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,10 +18,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../data/ui/AboutCalcoolDialog.ui.h:1 +#: ../debian/calcool/usr/share/calcool/ui/AboutCalcoolDialog.ui.h:1 msgid "Copyright (C) 2010 jan gerber " msgstr "" #: ../data/ui/AboutCalcoolDialog.ui.h:2 +#: ../debian/calcool/usr/share/calcool/ui/AboutCalcoolDialog.ui.h:2 msgid "" "Calcool allows you to do calculations in a document,\n" "on the right you have the result for each line.\n" @@ -31,6 +33,7 @@ msgid "" msgstr "" #: ../data/ui/AboutCalcoolDialog.ui.h:7 +#: ../debian/calcool/usr/share/calcool/ui/AboutCalcoolDialog.ui.h:7 msgid "" "# Copyright (C) 2010 jan gerber \n" "# This program is free software: you can redistribute it and/or modify it \n" @@ -48,17 +51,21 @@ msgid "" msgstr "" #: ../data/ui/CalcoolWindow.ui.h:1 +#: ../debian/calcool/usr/share/calcool/ui/CalcoolWindow.ui.h:1 msgid "Calcool" msgstr "" #: ../data/ui/CalcoolWindow.ui.h:2 +#: ../debian/calcool/usr/share/calcool/ui/CalcoolWindow.ui.h:2 msgid "_File" msgstr "" #: ../data/ui/CalcoolWindow.ui.h:3 +#: ../debian/calcool/usr/share/calcool/ui/CalcoolWindow.ui.h:3 msgid "_Edit" msgstr "" #: ../data/ui/CalcoolWindow.ui.h:4 +#: ../debian/calcool/usr/share/calcool/ui/CalcoolWindow.ui.h:4 msgid "_Help" msgstr "" diff --git a/setup.py b/setup.py index 1b8d823..367255f 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (C) 2010 jan gerber @@ -17,12 +17,7 @@ ###################### DO NOT TOUCH THIS (HEAD TO THE SECOND PART) ###################### -try: - import DistUtilsExtra.auto -except ImportError: - import sys - print >> sys.stderr, 'To build calcool you need https://launchpad.net/python-distutils-extra' - sys.exit(1) +import DistUtilsExtra.auto assert DistUtilsExtra.auto.__version__ >= '2.10', 'needs DistUtilsExtra.auto >= 2.10' import os @@ -31,25 +26,21 @@ import os def update_data_path(prefix, oldvalue=None): try: - fin = file('calcool/calcoolconfig.py', 'r') - fout = file(fin.name + '.new', 'w') - - for line in fin: - fields = line.split(' = ') # Separate variable from value - if fields[0] == '__calcool_data_directory__': - # update to prefix, store oldvalue - if not oldvalue: - oldvalue = fields[1] - line = "%s = '%s'\n" % (fields[0], prefix) - else: # restore oldvalue - line = "%s = %s" % (fields[0], oldvalue) - fout.write(line) - - fout.flush() - fout.close() - fin.close() + with open('calcool/calcoolconfig.py', 'r') as fin: + with open(fin.name + '.new', 'w') as fout: + for line in fin: + fields = line.split(' = ') # Separate variable from value + if fields[0] == '__calcool_data_directory__': + # update to prefix, store oldvalue + if not oldvalue: + oldvalue = fields[1] + line = "%s = '%s'\n" % (fields[0], prefix) + else: # restore oldvalue + line = "%s = %s" % (fields[0], oldvalue) + fout.write(line) + fout.flush() os.rename(fout.name, fin.name) - except (OSError, IOError), e: + except (OSError, IOError) as e: print ("ERROR: Can't find calcool/calcoolconfig.py") sys.exit(1) return oldvalue @@ -58,18 +49,15 @@ def update_data_path(prefix, oldvalue=None): def update_desktop_file(datadir): try: - fin = file('calcool.desktop.in', 'r') - fout = file(fin.name + '.new', 'w') - - for line in fin: - if 'Icon=' in line: - line = "Icon=%s\n" % (datadir + 'media/logo.png') - fout.write(line) - fout.flush() - fout.close() - fin.close() + with open('calcool.desktop.in', 'r') as fin: + with open(fin.name + '.new', 'w') as fout: + for line in fin: + if 'Icon=' in line: + line = "Icon=%s\n" % (datadir + 'media/logo.png') + fout.write(line) + fout.flush() os.rename(fout.name, fin.name) - except (OSError, IOError), e: + except (OSError, IOError) as e: print ("ERROR: Can't find calcool.desktop.in") sys.exit(1) @@ -77,9 +65,9 @@ def update_desktop_file(datadir): class InstallAndUpdateDataDirectory(DistUtilsExtra.auto.install_auto): def run(self): if self.root or self.home: - print "WARNING: You don't use a standard --prefix installation, take care that you eventually " \ + print("WARNING: You don't use a standard --prefix installation, take care that you eventually " \ "need to update quickly/quicklyconfig.py file to adjust __quickly_data_directory__. You can " \ - "ignore this warning if you are packaging and uses --prefix." + "ignore this warning if you are packaging and uses --prefix.") previous_value = update_data_path(self.prefix + '/share/calcool/') update_desktop_file(self.prefix + '/share/calcool/') DistUtilsExtra.auto.install_auto.run(self) @@ -93,13 +81,13 @@ class InstallAndUpdateDataDirectory(DistUtilsExtra.auto.install_auto): DistUtilsExtra.auto.setup( name='calcool', - version='12.06', + version='25.02', license='GPL-3', - author='j^', + author='Jan Gerber', author_email='j@mailb.org', description='A document based calculator tool', long_description='Calcool allows you to do calculations in a document, on the right you have the result for each line. If you ever used bc and wanted to edit a previous line or tried to reference the result of line 3, calcool might be what you are looking for.', - url='https://launchpad.net/calcool', + url='https://code.0x2620.org/j/calcool', cmdclass={'install': InstallAndUpdateDataDirectory}, data_files=[ ('share/mime/packages', ['calcool.xml']),