From dccc645430f081360e8f3a19b43d2b5ad0ea3991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Fri, 19 Apr 2019 11:20:47 +0100 Subject: [PATCH] Add paragraphs stat --- data/de.wolfvollprecht.UberWriter.gschema.xml | 5 ++-- uberwriter/stats_counter.py | 9 +++++- uberwriter/stats_handler.py | 29 ++++++++----------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/data/de.wolfvollprecht.UberWriter.gschema.xml b/data/de.wolfvollprecht.UberWriter.gschema.xml index 6d2b13a..e7d4bfc 100644 --- a/data/de.wolfvollprecht.UberWriter.gschema.xml +++ b/data/de.wolfvollprecht.UberWriter.gschema.xml @@ -1,14 +1,15 @@ + - + + - diff --git a/uberwriter/stats_counter.py b/uberwriter/stats_counter.py index b753143..fa4b103 100644 --- a/uberwriter/stats_counter.py +++ b/uberwriter/stats_counter.py @@ -22,6 +22,9 @@ class StatsCounter: # exclamation mark, paragraph, and variants. SENTENCES = re.compile(r"[^\n][.。।෴۔።?՞;⸮؟?፧꘏⳺⳻⁇﹖⁈⁉‽!﹗!՜߹႟᥄\n]+") + # Regexp that matches paragraphs, ie. anything separated by newlines. + PARAGRAPHS = re.compile(r".+\n?") + def __init__(self): super().__init__() @@ -61,8 +64,12 @@ class StatsCounter: sentence_count = len(re.findall(self.SENTENCES, text)) + paragraph_count = len(re.findall(self.PARAGRAPHS, text)) + read_m, read_s = divmod(word_count / 200 * 60, 60) read_h, read_m = divmod(read_m, 60) read_time = (int(read_h), int(read_m), int(read_s)) - GLib.idle_add(callback, (character_count, word_count, sentence_count, read_time)) + GLib.idle_add( + callback, + (character_count, word_count, sentence_count, paragraph_count, read_time)) diff --git a/uberwriter/stats_handler.py b/uberwriter/stats_handler.py index ec9f40a..8fce782 100644 --- a/uberwriter/stats_handler.py +++ b/uberwriter/stats_handler.py @@ -30,6 +30,7 @@ class StatsHandler: self.characters = 0 self.words = 0 self.sentences = 0 + self.paragraphs = 0 self.read_time = (0, 0, 0) self.settings = Settings.new() @@ -43,22 +44,11 @@ class StatsHandler: self.stats_button.set_state_flags(Gtk.StateFlags.CHECKED, False) menu = Gio.Menu() - characters_menu_item = Gio.MenuItem.new(self.get_text_for_stat(0), None) - characters_menu_item.set_action_and_target_value( - "app.stat_default", GLib.Variant.new_string("characters")) - menu.append_item(characters_menu_item) - words_menu_item = Gio.MenuItem.new(self.get_text_for_stat(1), None) - words_menu_item.set_action_and_target_value( - "app.stat_default", GLib.Variant.new_string("words")) - menu.append_item(words_menu_item) - sentences_menu_item = Gio.MenuItem.new(self.get_text_for_stat(2), None) - sentences_menu_item.set_action_and_target_value( - "app.stat_default", GLib.Variant.new_string("sentences")) - menu.append_item(sentences_menu_item) - read_time_menu_item = Gio.MenuItem.new(self.get_text_for_stat(3), None) - read_time_menu_item.set_action_and_target_value( - "app.stat_default", GLib.Variant.new_string("read_time")) - menu.append_item(read_time_menu_item) + stats = self.settings.props.settings_schema.get_key("stat-default").get_range()[1] + for i, stat in enumerate(stats): + menu_item = Gio.MenuItem.new(self.get_text_for_stat(i), None) + menu_item.set_action_and_target_value("app.stat_default", GLib.Variant.new_string(stat)) + menu.append_item(menu_item) self.popover = Gtk.Popover.new_from_model(self.stats_button, menu) self.popover.connect('closed', self.on_popover_closed) self.popover.popup() @@ -82,13 +72,18 @@ class StatsHandler: elif stat == 2: return _("{:n} Sentences".format(self.sentences)) elif stat == 3: + return _("{:n} Paragraphs".format(self.paragraphs)) + elif stat == 4: return _("{:d}:{:02d}:{:02d} Read Time".format(*self.read_time)) + else: + raise ValueError("Unknown stat {}".format(stat)) def update_stats(self, stats): - (characters, words, sentences, read_time) = stats + (characters, words, sentences, paragraphs, read_time) = stats self.characters = characters self.words = words self.sentences = sentences + self.paragraphs = paragraphs self.read_time = read_time self.update_default_stat(False)