removed several deprecations, added experimental features option

experimental
Wolf Vollprecht 2014-10-02 19:02:59 +02:00
parent 9b662dac77
commit 8fdc9f465a
14 changed files with 480 additions and 372 deletions

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="uberwriter"> <schemalist gettext-domain="uberwriter">
<schema id="net.launchpad.uberwriter" path="/net/launchpad/uberwriter/"> <schema id="net.launchpad.uberwriter" path="/net/launchpad/uberwriter/">
<key name="example" type="s"> <key name="ehasdjahd" type="s">
<default>''</default> <default>''</default>
<summary>Sample setting</summary> <summary>Sample setting</summary>
<description>Longer description of this sample setting. Talk about allowed values and what it does.</description> <description>Yolo.</description>
</key> </key>
</schema> </schema>
</schemalist> </schemalist>

View File

@ -18,6 +18,7 @@
bind "<ctl><shift>r" { "toggle-search-replace" () }; bind "<ctl><shift>r" { "toggle-search-replace" () };
bind "<ctl><shift>f" { "toggle-search-replace" () }; bind "<ctl><shift>f" { "toggle-search-replace" () };
bind "F11" { "toggle-fullscreen" () }; bind "F11" { "toggle-fullscreen" () };
bind "F7" { "toggle-spellcheck" () };
} }
@binding-set editor-bindings { @binding-set editor-bindings {
@ -28,6 +29,7 @@
bind "<ctl>h" { "insert-heading" () }; bind "<ctl>h" { "insert-heading" () };
bind "<ctl>z" { "undo" () }; bind "<ctl>z" { "undo" () };
bind "<ctl>y" { "redo" () }; bind "<ctl>y" { "redo" () };
/*bind "<ctl>t" { "insert-at-cursor" ('[ ] ') };*/
bind "<ctl><shift>z" { "redo" () }; bind "<ctl><shift>z" { "redo" () };
} }
@ -53,7 +55,10 @@
font: initial; font: initial;
} }
#UberwriterWindow GtkAlignment {
margin-top: 30px;
margin-bottom: 60px;
}
#UberwriterWindow.dark_mode { #UberwriterWindow.dark_mode {
background: #333; background: #333;
@ -132,7 +137,6 @@
transition: 500ms ease-in; transition: 500ms ease-in;
} }
#status_bar_box GtkButton:hover, #status_bar_box GtkButton:hover,
#status_bar_box GtkButton:active:hover { #status_bar_box GtkButton:active:hover {
transition: 0s ease-in; transition: 0s ease-in;
@ -140,7 +144,6 @@
background: #EEE; background: #EEE;
} }
#status_bar_box GtkButton:active { #status_bar_box GtkButton:active {
color: #EEE; color: #EEE;
background-color: #EEE; background-color: #EEE;
@ -175,15 +178,55 @@
#LexikonBubble { #LexikonBubble {
font: serif 12; font: serif 12;
background: #FFF;
border-radius: 4px;
margin: 5px;
padding: 5px;
}
#QuickPreviewPopup {
padding: 5px;
margin: 5px;
border: 1px solid #333;
/*background: #FFF;*/
border-radius: 3px;
}
#LexikonBubble GtkLabel {
/*padding: 5px;*/
}
#LexikonBubble {
border: 5px solid #FFF;
} }
#LexikonBubble .lexikon_heading { #LexikonBubble .lexikon_heading {
font: serif 12; font: serif 12;
padding-bottom: 5px; padding-bottom: 5px;
padding-top: 3px; padding-top: 5px;
font-weight: bold; font-weight: bold;
padding-left: 10px;
} }
#LexikonBubble .lexikon_num { #LexikonBubble .lexikon_num {
padding-right: 5px; padding-right: 5px;
} padding-left: 20px;
}
#UberwriterWindow #AutoCorrect {
padding: 10px;
background: #FFF;
/*box-shadow: 0 0 5px #000;*/
border: 1px solid #BCD1EB;
border-radius: 3px 10px 10px 3px;
color: #333;
}
#UberwriterWindow #AutoCorrect GtkLabel {
padding: 3px 5px;
font: sans-serif;
}
#UberwriterWindow #AutoCorrect GtkImage {
padding: 3px 5px;
}

View File

@ -21,22 +21,6 @@
<property name="tooltip_text" translatable="yes">Activate Regex</property> <property name="tooltip_text" translatable="yes">Activate Regex</property>
<property name="pixbuf">icon-regex-off.png</property> <property name="pixbuf">icon-regex-off.png</property>
</object> </object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="yalign">0.49000000953674316</property>
<property name="stock">gtk-help</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
<object class="UberwriterWindow" id="uberwriter_window"> <object class="UberwriterWindow" id="uberwriter_window">
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="title">UberWriter</property> <property name="title">UberWriter</property>
@ -63,22 +47,20 @@
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkImageMenuItem" id="mnu_new"> <object class="GtkImageMenuItem" id="mnu_new">
<property name="label">gtk-new</property> <property name="label">_New</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="new_document" swapped="no"/> <signal name="activate" handler="new_document" swapped="no"/>
<accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/> <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkImageMenuItem" id="mnu_open"> <object class="GtkImageMenuItem" id="mnu_open">
<property name="label">gtk-open</property> <property name="label">_Open</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="open_document" swapped="no"/> <signal name="activate" handler="open_document" swapped="no"/>
<accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/> <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object> </object>
@ -99,22 +81,20 @@
</child> </child>
<child> <child>
<object class="GtkImageMenuItem" id="mnu_save"> <object class="GtkImageMenuItem" id="mnu_save">
<property name="label">gtk-save</property> <property name="label">_Save</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="save_document" swapped="no"/> <signal name="activate" handler="save_document" swapped="no"/>
<accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/> <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkImageMenuItem" id="mnu_save_as"> <object class="GtkImageMenuItem" id="mnu_save_as">
<property name="label">gtk-save-as</property> <property name="label">Save _As</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="save_document_as" swapped="no"/> <signal name="activate" handler="save_document_as" swapped="no"/>
<accelerator key="s" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/> <accelerator key="s" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</object> </object>
@ -130,8 +110,6 @@
<property name="label">Export as HTML</property> <property name="label">Export as HTML</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="image">image4</property>
<property name="use_stock">False</property>
<signal name="activate" handler="export_as_html" swapped="no"/> <signal name="activate" handler="export_as_html" swapped="no"/>
</object> </object>
</child> </child>
@ -140,8 +118,6 @@
<property name="label">Export as PDF</property> <property name="label">Export as PDF</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="image">image3</property>
<property name="use_stock">False</property>
<signal name="activate" handler="export_as_pdf" swapped="no"/> <signal name="activate" handler="export_as_pdf" swapped="no"/>
</object> </object>
</child> </child>
@ -150,8 +126,6 @@
<property name="label" translatable="yes">Export as ODT</property> <property name="label" translatable="yes">Export as ODT</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="image">image1</property>
<property name="use_stock">False</property>
<signal name="activate" handler="export_as_odt" swapped="no"/> <signal name="activate" handler="export_as_odt" swapped="no"/>
</object> </object>
</child> </child>
@ -174,7 +148,7 @@
<object class="GtkMenuItem" id="copy-html-to-clipboard"> <object class="GtkMenuItem" id="copy-html-to-clipboard">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Copy raw HTML to clipboard</property> <property name="label" translatable="yes">Copy Raw HTML to Clipboard</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<signal name="activate" handler="copy_html_to_clipboard" swapped="no"/> <signal name="activate" handler="copy_html_to_clipboard" swapped="no"/>
</object> </object>
@ -187,11 +161,10 @@
</child> </child>
<child> <child>
<object class="GtkImageMenuItem" id="mnu_close"> <object class="GtkImageMenuItem" id="mnu_close">
<property name="label">gtk-close</property> <property name="label">_Quit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
<accelerator key="w" signal="activate" modifiers="GDK_CONTROL_MASK"/> <accelerator key="w" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object> </object>
</child> </child>
@ -243,7 +216,7 @@
<property name="tooltip_text" translatable="yes">Light text on a dark background</property> <property name="tooltip_text" translatable="yes">Light text on a dark background</property>
<property name="label" translatable="yes">Dark Mode</property> <property name="label" translatable="yes">Dark Mode</property>
<property name="draw_as_radio">True</property> <property name="draw_as_radio">True</property>
<signal name="toggled" handler="dark_mode_toggled" swapped="no"/> <signal name="activate" handler="dark_mode_toggled" swapped="no"/>
</object> </object>
</child> </child>
<child> <child>
@ -253,7 +226,7 @@
<property name="tooltip_text" translatable="yes">Switch to preview mode</property> <property name="tooltip_text" translatable="yes">Switch to preview mode</property>
<property name="label" translatable="yes">Preview</property> <property name="label" translatable="yes">Preview</property>
<property name="draw_as_radio">True</property> <property name="draw_as_radio">True</property>
<signal name="toggled" handler="menu_activate_preview" swapped="no"/> <signal name="activate" handler="menu_activate_preview" swapped="no"/>
<accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/> <accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object> </object>
</child> </child>
@ -279,7 +252,7 @@
<property name="label">Use Typewritermode (experimental)</property> <property name="label">Use Typewritermode (experimental)</property>
<property name="active">True</property> <property name="active">True</property>
<property name="draw_as_radio">True</property> <property name="draw_as_radio">True</property>
<signal name="toggled" handler="toggle_typewriter" swapped="no"/> <!-- <signal name="toggled" handler="toggle_typewriter" swapped="no"/> -->
<accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/> <accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object> </object>
</child> </child>
@ -296,7 +269,7 @@
<property name="label" translatable="yes">Auto _Spellcheck</property> <property name="label" translatable="yes">Auto _Spellcheck</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="active">True</property> <property name="active">True</property>
<signal name="toggled" handler="toggle_spellcheck" swapped="no"/> <signal name="activate" handler="toggle_spellcheck" swapped="no"/>
<accelerator key="F7" signal="activate"/> <accelerator key="F7" signal="activate"/>
</object> </object>
</child> </child>
@ -374,7 +347,6 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
</object> </object>
</child> </child>
</object> </object>
@ -403,7 +375,7 @@
<property name="width_request">100</property> <property name="width_request">100</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">5</property> <property name="margin_start">5</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Search</property> <property name="label" translatable="yes">Search</property>
</object> </object>
@ -533,7 +505,7 @@
<property name="width_request">100</property> <property name="width_request">100</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">5</property> <property name="margin_start">5</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Replace with</property> <property name="label" translatable="yes">Replace with</property>
</object> </object>
@ -655,9 +627,7 @@
<object class="GtkAlignment" id="editor_alignment"> <object class="GtkAlignment" id="editor_alignment">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="xscale">0</property> <property name="halign">center</property>
<property name="top_padding">30</property>
<property name="bottom_padding">60</property>
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
@ -692,7 +662,7 @@
<property name="has_tooltip">True</property> <property name="has_tooltip">True</property>
<property name="tooltip_markup" translatable="yes">Go into focus mode</property> <property name="tooltip_markup" translatable="yes">Go into focus mode</property>
<property name="tooltip_text" translatable="yes">Go into focus mode</property> <property name="tooltip_text" translatable="yes">Go into focus mode</property>
<property name="halign">start</property> <property name="halign">center</property>
<property name="relief">none</property> <property name="relief">none</property>
<property name="focus_on_click">False</property> <property name="focus_on_click">False</property>
<signal name="toggled" handler="set_focusmode" swapped="no"/> <signal name="toggled" handler="set_focusmode" swapped="no"/>
@ -773,8 +743,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="margin_left">10</property> <property name="margin_start">10</property>
<property name="margin_right">10</property> <property name="margin_end">10</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
</object> </object>
<packing> <packing>
@ -799,7 +769,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="margin_right">11</property> <property name="margin_end">11</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="label">0</property> <property name="label">0</property>
<property name="width_chars">6</property> <property name="width_chars">6</property>

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-15 14:02+0200\n" "POT-Creation-Date: 2014-09-30 01:49+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,6 +17,10 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../uberwriter/__init__.py:35
msgid "Show debug messages (-vv debugs uberwriter_lib also)"
msgstr ""
#: ../data/ui/AboutUberwriterDialog.ui.h:1 #: ../data/ui/AboutUberwriterDialog.ui.h:1
msgid "" msgid ""
"# Copyright (C) 2012, Wolf Vollprecht <w.vollprecht@gmail.com>\n" "# Copyright (C) 2012, Wolf Vollprecht <w.vollprecht@gmail.com>\n"
@ -38,171 +42,6 @@ msgstr ""
msgid "Copyright (C) 2012, Wolf Vollprecht <w.vollprecht@gmail.com>" msgid "Copyright (C) 2012, Wolf Vollprecht <w.vollprecht@gmail.com>"
msgstr "" msgstr ""
#: ../uberwriter/__init__.py:35
msgid "Show debug messages (-vv debugs uberwriter_lib also)"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:85
msgid "emphasized text"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:87
msgid "strong text"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:101
msgid "List item"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:182
msgid "Heading"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:1
msgid "Export"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:2
msgid "Smart"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:3
msgid "Pandoc can automatically make \"--\" to a long dash and more"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:4
msgid "Normalize"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:5
msgid ""
"Removes things like double spaces or spaces at the beginning of a paragraph"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:6
msgid "Table of Contents"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:7
msgid "Standalone"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:8
msgid ""
"Use a header and footer to include things like stylesheets and meta "
"information"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:9
msgid "Number Sections"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:10
msgid "Strict Markdown"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:11
msgid "Use \"strict\" markdown instead of \"pandoc\" markdown"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:12
msgid "Slideshow incremental bullets"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:13
msgid "Show one bullet point after another in a slideshow"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:14
msgid "<b>General Options</b>"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:15
msgid "Highlight syntax"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:16
msgid "Choose a color theme for syntax highlighting"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:17
msgid "Highlight style "
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:18
msgid "<b>Syntax highlighting</b> (HTML, LaTeX)"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:19
msgid "Self Contained"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:20
msgid ""
"Produces a HTML that has no external dependencies (all images and "
"stylesheets are included)"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:21
msgid "HTML 5"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:22
msgid "Use HTML 5 syntax"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:23
msgid "Choose a CSS File that you want to use"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:24
msgid "CSS File"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:25
msgid "<b>HTML Options</b>"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:26
msgid "<b>Bibliography File</b>"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:27
msgid "Commandline Reference"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:475
msgid "(no suggestions)"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:499
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:502
msgid "Add \"{}\" to Dictionary"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:506
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:508
msgid "Ignore All"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:523
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:525
msgid "Languages"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:541
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:544
msgid "Suggestions"
msgstr ""
#: ../uberwriter.desktop.in.h:1
msgid "UberWriter"
msgstr ""
#: ../uberwriter.desktop.in.h:2
msgid "UberWriter, a simple and distraction free Markdown Editor"
msgstr ""
#: ../data/ui/UberwriterWindow.ui.h:1 #: ../data/ui/UberwriterWindow.ui.h:1
msgid "Case Sensitive" msgid "Case Sensitive"
msgstr "" msgstr ""
@ -355,57 +194,6 @@ msgstr ""
msgid "Characters:" msgid "Characters:"
msgstr "" msgstr ""
#: ../uberwriter/UberwriterWindow.py:338
msgid "Save your File"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:484
msgid "You can not export to PDF."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:486
msgid ""
"Please install <a href=\"apt:texlive\">texlive</a> from the software center."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:516
msgid "MarkDown or Plain Text"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:519
msgid "Open a .md-File"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:541
msgid "You have not saved your changes."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:543
msgid "Close without Saving"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:544
msgid "Cancel"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:545
msgid "Save now"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:546
msgid "Unsaved changes"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:611
msgid "You can not enable the Spell Checker."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:613
msgid ""
"Please install 'hunspell' or 'aspell' dictionarys for your language from the "
"software center."
msgstr ""
#: ../uberwriter/UberwriterInlinePreview.py:174 #: ../uberwriter/UberwriterInlinePreview.py:174
msgid "Website is not available" msgid "Website is not available"
msgstr "" msgstr ""
@ -414,10 +202,222 @@ msgstr ""
msgid "Website is available" msgid "Website is available"
msgstr "" msgstr ""
#: ../uberwriter/UberwriterInlinePreview.py:385 #: ../uberwriter/UberwriterInlinePreview.py:419
msgid "Open Link in Webbrowser" msgid "Open Link in Webbrowser"
msgstr "" msgstr ""
#: ../uberwriter/UberwriterInlinePreview.py:443 #: ../uberwriter/UberwriterInlinePreview.py:475
msgid "No matching footnote found" msgid "No matching footnote found"
msgstr "" msgstr ""
#: ../uberwriter/UberwriterWindow.py:344
msgid "Save your File"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:490
msgid "You can not export to PDF."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:492
msgid ""
"Please install <a href=\"apt:texlive\">texlive</a> from the software center."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:522
msgid "MarkDown or Plain Text"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:525
msgid "Open a .md-File"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:547
msgid "You have not saved your changes."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:549
msgid "Close without Saving"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:550
msgid "Cancel"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:551
msgid "Save now"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:552
msgid "Unsaved changes"
msgstr ""
#: ../uberwriter/UberwriterWindow.py:617
msgid "You can not enable the Spell Checker."
msgstr ""
#: ../uberwriter/UberwriterWindow.py:619
msgid ""
"Please install 'hunspell' or 'aspell' dictionarys for your language from the "
"software center."
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:499
msgid "(no suggestions)"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:533
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:536
msgid "Add \"{}\" to Dictionary"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:540
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:542
msgid "Ignore All"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:557
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:559
msgid "Languages"
msgstr ""
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:575
#: ../uberwriter_lib/gtkspellcheck/spellcheck.py:578
msgid "Suggestions"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:85
msgid "emphasized text"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:87
msgid "strong text"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:101
msgid "List item"
msgstr ""
#: ../uberwriter/FormatShortcuts.py:182
msgid "Heading"
msgstr ""
#: ../uberwriter.desktop.in.h:1
msgid "UberWriter"
msgstr ""
#: ../uberwriter.desktop.in.h:2
msgid "UberWriter, a simple and distraction free Markdown Editor"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:1
msgid "Export"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:2
msgid "Smart"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:3
msgid "Pandoc can automatically make \"--\" to a long dash and more"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:4
msgid "Normalize"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:5
msgid ""
"Removes things like double spaces or spaces at the beginning of a paragraph"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:6
msgid "Table of Contents"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:7
msgid "Standalone"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:8
msgid ""
"Use a header and footer to include things like stylesheets and meta "
"information"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:9
msgid "Number Sections"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:10
msgid "Strict Markdown"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:11
msgid "Use \"strict\" markdown instead of \"pandoc\" markdown"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:12
msgid "Slideshow incremental bullets"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:13
msgid "Show one bullet point after another in a slideshow"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:14
msgid "<b>General Options</b>"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:15
msgid "Highlight syntax"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:16
msgid "Choose a color theme for syntax highlighting"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:17
msgid "Highlight style "
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:18
msgid "<b>Syntax highlighting</b> (HTML, LaTeX)"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:19
msgid "Self Contained"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:20
msgid ""
"Produces a HTML that has no external dependencies (all images and "
"stylesheets are included)"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:21
msgid "HTML 5"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:22
msgid "Use HTML 5 syntax"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:23
msgid "Choose a CSS File that you want to use"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:24
msgid "CSS File"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:25
msgid "<b>HTML Options</b>"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:26
msgid "<b>Bibliography File</b>"
msgstr ""
#: ../data/ui/UberwriterAdvancedExportDialog.ui.h:27
msgid "Commandline Reference"
msgstr ""

View File

@ -104,14 +104,13 @@ def update_desktop_file(filename, target_pkgdata, target_scripts):
fout.close() fout.close()
fin.close() fin.close()
os.rename(fout.name, fin.name) os.rename(fout.name, fin.name)
except (OSError, IOError) as e: except (OSError, IOError) as e:
print ("ERROR: Can't find %s" % filename) print ("ERROR: Can't find %s" % filename)
sys.exit(1) sys.exit(1)
def compile_schemas(root, target_data): def compile_schemas(root, target_data):
if target_data == '/usr/': schemadir = os.path.normpath('usr/share/glib-2.0/schemas')
return # /usr paths don't need this, they will be handled by dpkg
schemadir = os.path.normpath(root + target_data + 'share/glib-2.0/schemas')
if (os.path.isdir(schemadir) and if (os.path.isdir(schemadir) and
os.path.isfile('/usr/bin/glib-compile-schemas')): os.path.isfile('/usr/bin/glib-compile-schemas')):
os.system('/usr/bin/glib-compile-schemas "%s"' % schemadir) os.system('/usr/bin/glib-compile-schemas "%s"' % schemadir)
@ -166,5 +165,7 @@ DistUtilsExtra.auto.setup(
package_data={ package_data={
'uberwriter_lib.pylocales' : ['locales.db'] 'uberwriter_lib.pylocales' : ['locales.db']
}, },
data_files=[('uberwriter_lib/pylocales', ['uberwriter_lib/pylocales/locales.db'])] data_files=[
('uberwriter_lib/pylocales', ['uberwriter_lib/pylocales/locales.db']),
('/usr/share/glib-2.0/schemas', ['data/glib-2.0/schemas/net.launchpad.uberwriter.gschema.xml'])]
) )

View File

@ -306,11 +306,13 @@ class MarkupBuffer():
def recalculate(self, lm): def recalculate(self, lm):
multiplier = self.multiplier multiplier = self.multiplier
for i in range(0, 6): for i in range(0, 6):
self.rev_leftmargin[i].set_property("left-margin", (lm - multiplier) - multiplier * (i + 1)) new_margin = (lm - multiplier) - multiplier * (i + 1)
self.rev_leftmargin[i].set_property("left-margin", 0 if new_margin < 0 else new_margin)
self.rev_leftmargin[i].set_property("indent", - multiplier * (i + 1) - multiplier) self.rev_leftmargin[i].set_property("indent", - multiplier * (i + 1) - multiplier)
for i in range(0, 6): for i in range(0, 6):
self.leftmargin[i].set_property("left-margin", (lm - multiplier) + multiplier + multiplier * (i + 1)) new_margin = (lm - multiplier) + multiplier + multiplier * (i + 1)
self.leftmargin[i].set_property("left-margin", 0 if new_margin < 0 else new_margin)
self.leftmargin[i].set_property("indent", - (multiplier - 1) * (i + 1) - multiplier) self.leftmargin[i].set_property("indent", - (multiplier - 1) * (i + 1) - multiplier)
def dark_mode(self, active=False): def dark_mode(self, active=False):

View File

@ -125,10 +125,8 @@ class DictAccessor(object):
act_res['class'] = l act_res['class'] = l
else: else:
ll = re.split('(?: |^)(\d): ', l) ll = re.split('(?: |^)(\d): ', l)
# print(ll)
act_def = {} act_def = {}
for lll in ll: for lll in ll:
# print (lll)
if lll.strip().isdigit() or not lll.strip(): if lll.strip().isdigit() or not lll.strip():
if 'description' in act_def and act_def['description']: if 'description' in act_def and act_def['description']:
act_res['defs'].append(act_def.copy()) act_res['defs'].append(act_def.copy())
@ -181,8 +179,10 @@ def check_url(url, item, spinner):
def get_dictionary(term): def get_dictionary(term):
da = DictAccessor() da = DictAccessor()
output = da.getDefinition('wn', term) output = da.getDefinition('wn', term)
output = output[0] if(len(output)):
print(output) output = output[0]
else:
return None
return da.parse_wordnet(output.decode(encoding='UTF-8')) return da.parse_wordnet(output.decode(encoding='UTF-8'))
def get_web_thumbnail(url, item, spinner): def get_web_thumbnail(url, item, spinner):
@ -220,11 +220,15 @@ def fill_lexikon_bubble(vocab, lexikon_dict):
for entry in lexikon_dict: for entry in lexikon_dict:
vocab_label = Gtk.Label.new(vocab + ' ~ ' + entry['class']) vocab_label = Gtk.Label.new(vocab + ' ~ ' + entry['class'])
vocab_label.get_style_context().add_class('lexikon_heading') vocab_label.get_style_context().add_class('lexikon_heading')
vocab_label.set_halign(Gtk.Align.START)
vocab_label.set_justify(Gtk.Justification.LEFT)
grid.attach(vocab_label, 0, i, 3, 1) grid.attach(vocab_label, 0, i, 3, 1)
for definition in entry['defs']: for definition in entry['defs']:
i = i + 1 i = i + 1
num_label = Gtk.Label.new(definition['num']) num_label = Gtk.Label.new(definition['num'])
num_label.get_style_context().add_class('lexikon_num') num_label.get_style_context().add_class('lexikon_num')
num_label.set_justify(Gtk.Justification.RIGHT)
grid.attach(num_label, 0, i, 1, 1) grid.attach(num_label, 0, i, 1, 1)
def_label = Gtk.Label.new(' '.join(definition['description'])) def_label = Gtk.Label.new(' '.join(definition['description']))
@ -254,19 +258,44 @@ class UberwriterInlinePreview():
self.TextView.connect_after('populate-popup', self.populate_popup) self.TextView.connect_after('populate-popup', self.populate_popup)
self.TextView.connect_after('popup-menu', self.move_popup) self.TextView.connect_after('popup-menu', self.move_popup)
self.TextView.connect('button-press-event', self.click_move_button) self.TextView.connect('button-press-event', self.click_move_button)
self.popover = None
def open_popover_with_widget(self, widget): def open_popover_with_widget(self, widget):
a = self.TextBuffer.create_child_anchor(self.TextBuffer.get_iter_at_mark(self.ClickMark)) # a = self.TextBuffer.create_child_anchor(self.TextBuffer.get_iter_at_mark(self.ClickMark))
a = Gtk.Window.new(Gtk.WindowType.POPUP)
a.set_transient_for(self.TextView.get_toplevel())
a.grab_focus()
a.set_name("QuickPreviewPopup")
# a.set_attached_to(self.TextView)
a.move(300, 300)
a.set_modal(True)
def close(widget, event, *args):
if(event.keyval == Gdk.KEY_Escape):
widget.destroy()
a.connect('key-press-event', close)
b = Gtk.Grid.new() b = Gtk.Grid.new()
self.TextView.add_child_at_anchor(b, a) alignment = Gtk.Alignment()
b.show() alignment.props.margin_bottom = 5
popover = Gtk.Popover.new(b) alignment.props.margin_top = 5
dismiss, rect = popover.get_pointing_to() alignment.props.margin_left = 4
rect.y = rect.y - 20 alignment.add(widget)
popover.set_pointing_to(rect) a.add(alignment)
popover.add(widget) # self.TextView.add_child_in_window(b, Gtk.TextWindowType.WIDGET, 200, 200)
popover.show_all() # b.attach(Gtk.Label.new("test 123"), 0, 0, 1, 1)
popover.set_property('width-request', 50) # b.show_all()
a.show_all()
# self.popover = Gtk.Popover.new(b)
# dismiss, rect = popover.get_pointing_to()
# rect.y = rect.y - 20
# popover.set_pointing_to(rect)
# widget = Gtk.Label.new("testasds a;12j3 21 lk3j213")
# widget.show_all()
# b.attach(widget, 0, 1, 1, 1)
# self.popover.set_modal(False)
# self.popover.show_all()
# print(self.popover)
# popover.set_property('width-request', 50)
def click_move_button(self, widget, event): def click_move_button(self, widget, event):
if event.button == 3: if event.button == 3:
@ -408,10 +437,8 @@ class UberwriterInlinePreview():
pb = GdkPixbuf.Pixbuf.new_from_file_at_size(path, 400, 300) pb = GdkPixbuf.Pixbuf.new_from_file_at_size(path, 400, 300)
image = Gtk.Image.new_from_pixbuf(pb) image = Gtk.Image.new_from_pixbuf(pb)
image.show() image.show()
popover.add(image) self.open_popover_with_widget(image)
popover.show_all()
item.set_property('width-request', 50) item.set_property('width-request', 50)
popover.set_property('width-request', 50)
# item.add(image) # item.add(image)
# item.set_property('width-request', 50) # item.set_property('width-request', 50)
@ -461,19 +488,14 @@ class UberwriterInlinePreview():
end_iter = start_iter.copy() end_iter = start_iter.copy()
end_iter.forward_word_end() end_iter.forward_word_end()
word = self.TextBuffer.get_text(start_iter, end_iter, False) word = self.TextBuffer.get_text(start_iter, end_iter, False)
print(word)
terms = get_dictionary(word) terms = get_dictionary(word)
sc = Gtk.ScrolledWindow.new() if terms:
# tv = Gtk.TextView.new() sc = Gtk.ScrolledWindow.new()
# tv.set_editable(False) sc.add(fill_lexikon_bubble(word, terms))
# tv.set_name('LexikonBubble') sc.props.width_request = 500
sc.props.height_request = 400
sc.add(fill_lexikon_bubble(word, get_dictionary(word))) sc.show_all()
sc.props.width_request = 500 self.open_popover_with_widget(sc)
sc.props.height_request = 400
# tv.get_buffer().set_text(terms)
sc.show_all()
self.open_popover_with_widget(sc)
return return

View File

@ -251,8 +251,8 @@ class TextEditor(Gtk.TextView):
stop = buf.get_iter_at_offset( stop = buf.get_iter_at_offset(
offset + undo_action.length offset + undo_action.length
) )
buf.delete(start, stop)
buf.place_cursor(start) buf.place_cursor(start)
buf.delete(start, stop)
else: else:
start = buf.get_iter_at_offset(undo_action.start) start = buf.get_iter_at_offset(undo_action.start)
buf.insert(start, undo_action.text) buf.insert(start, undo_action.text)
@ -318,8 +318,6 @@ class TextEditor(Gtk.TextView):
if self.not_undoable_action: if self.not_undoable_action:
return return
logger.debug(text)
logger.debug("b: %i, l: %i" % (length, len(text)))
undo_action = UndoableInsert(text_iter, text, len(text)) undo_action = UndoableInsert(text_iter, text, len(text))
try: try:
prev_insert = self.undo_stack.pop() prev_insert = self.undo_stack.pop()
@ -336,7 +334,7 @@ class TextEditor(Gtk.TextView):
self.undo_stack.append(prev_insert) self.undo_stack.append(prev_insert)
else: else:
self.undo_stack.append(prev_insert) self.undo_stack.append(prev_insert)
self.undo_stack.append(undo_action) self.undo_stack.append(undo_action)
def on_delete_range(self, text_buffer, start_iter, end_iter): def on_delete_range(self, text_buffer, start_iter, end_iter):
""" """
@ -477,8 +475,6 @@ class TestWindow(Gtk.Window):
redo_button.show() redo_button.show()
windowbox.pack_start(redo_button, False, False, 0) windowbox.pack_start(redo_button, False, False, 0)
print(self.editor.text)
if __name__== "__main__": if __name__== "__main__":
test = TestWindow() test = TestWindow()

View File

@ -40,6 +40,7 @@ from .UberwriterTextEditor import TextEditor
from .UberwriterInlinePreview import UberwriterInlinePreview from .UberwriterInlinePreview import UberwriterInlinePreview
from .UberwriterSidebar import UberwriterSidebar from .UberwriterSidebar import UberwriterSidebar
from .UberwriterSearchAndReplace import UberwriterSearchAndReplace from .UberwriterSearchAndReplace import UberwriterSearchAndReplace
from .UberwriterAutoCorrect import UberwriterAutoCorrect
import logging import logging
logger = logging.getLogger('uberwriter') logger = logging.getLogger('uberwriter')
@ -48,10 +49,7 @@ logger = logging.getLogger('uberwriter')
import locale import locale
try: from uberwriter_lib.gtkspellcheck import SpellChecker
from gtkspellcheck import SpellChecker
except ImportError:
from uberwriter_lib.gtkspellcheck import SpellChecker
try: try:
import apt import apt
@ -108,13 +106,13 @@ class UberwriterWindow(Window):
self.MarkupBuffer.markup_buffer(0) self.MarkupBuffer.markup_buffer(0)
def init_typewriter(self): def init_typewriter(self):
self.EditorAlignment.props.top_padding = self.window_height / 2 self.EditorAlignment.props.margin_top = self.window_height / 2
self.EditorAlignment.props.bottom_padding = self.window_height / 2 self.EditorAlignment.props.margin_bottom = self.window_height / 2
self.typewriter_initiated = True self.typewriter_initiated = True
def remove_typewriter(self): def remove_typewriter(self):
self.EditorAlignment.props.top_padding = self.alignment_padding self.EditorAlignment.props.margin_top = self.alignment_padding
self.EditorAlignment.props.bottom_padding = self.alignment_padding self.EditorAlignment.props.margin_bottom = 250
self.text_change_event = self.TextBuffer.connect('changed', self.text_changed) self.text_change_event = self.TextBuffer.connect('changed', self.text_changed)
def get_text(self): def get_text(self):
@ -207,6 +205,7 @@ class UberwriterWindow(Window):
def ease_out_cubic(t): def ease_out_cubic(t):
p = t - 1; p = t - 1;
return p * p * p + 1; return p * p * p + 1;
now = frame_clock.get_frame_time() now = frame_clock.get_frame_time()
if self.smooth_scroll_acttarget != self.smooth_scroll_data['target_pos']: if self.smooth_scroll_acttarget != self.smooth_scroll_data['target_pos']:
self.smooth_scroll_starttime = now self.smooth_scroll_starttime = now
@ -217,9 +216,13 @@ class UberwriterWindow(Window):
t = float(now - self.smooth_scroll_starttime) / float(self.smooth_scroll_endtime - self.smooth_scroll_starttime) t = float(now - self.smooth_scroll_starttime) / float(self.smooth_scroll_endtime - self.smooth_scroll_starttime)
else: else:
t = 1 t = 1
pos = self.smooth_scroll_data['source_pos'] + (t * (self.smooth_scroll_data['target_pos'] - self.smooth_scroll_data['source_pos']))
widget.get_vadjustment().props.value = pos
self.smooth_scroll_data['target_pos'] = -1
return True
t = ease_out_cubic(t) t = ease_out_cubic(t)
pos = self.smooth_scroll_data['source_pos'] + (t * (self.smooth_scroll_data['target_pos'] - self.smooth_scroll_data['source_pos'])) pos = self.smooth_scroll_data['source_pos'] + (t * (self.smooth_scroll_data['target_pos'] - self.smooth_scroll_data['source_pos']))
# print("n %i, t %f, p %i, st %i, et %i" % (now, t, pos, self.smooth_scroll_starttime, self.smooth_scroll_endtime))
widget.get_vadjustment().props.value = pos widget.get_vadjustment().props.value = pos
return True # continue ticking return True # continue ticking
@ -230,7 +233,7 @@ class UberwriterWindow(Window):
loc_rect = self.TextEditor.get_iter_location(ins_it) loc_rect = self.TextEditor.get_iter_location(ins_it)
# alignment offset added from top # alignment offset added from top
pos_y = loc_rect.y + loc_rect.height + self.EditorAlignment.props.top_padding pos_y = loc_rect.y + loc_rect.height + self.EditorAlignment.props.margin_top
ha = self.ScrolledWindow.get_vadjustment() ha = self.ScrolledWindow.get_vadjustment()
if ha.props.page_size < gradient_offset: if ha.props.page_size < gradient_offset:
@ -244,7 +247,7 @@ class UberwriterWindow(Window):
if pos != (ha.props.page_size * 0.5): if pos != (ha.props.page_size * 0.5):
target_pos = pos_y - (ha.props.page_size * 0.5) target_pos = pos_y - (ha.props.page_size * 0.5)
elif pos > ha.props.page_size - gradient_offset - 60: elif pos > ha.props.page_size - gradient_offset - 60:
target_pos = pos_y - ha.props.page_size + gradient_offset + 60 target_pos = pos_y - ha.props.page_size + gradient_offset + 40
elif pos < gradient_offset: elif pos < gradient_offset:
target_pos = pos_y - gradient_offset target_pos = pos_y - gradient_offset
self.smooth_scroll_data = { self.smooth_scroll_data = {
@ -291,8 +294,8 @@ class UberwriterWindow(Window):
self.get_style_context().add_class("large") self.get_style_context().add_class("large")
self.EditorAlignment.props.top_padding = self.alignment_padding self.EditorAlignment.props.margin_bottom = self.alignment_padding + 30
self.EditorAlignment.props.bottom_padding = self.alignment_padding self.EditorAlignment.props.margin_top = self.alignment_padding
self.TextEditor.set_left_margin(lm) self.TextEditor.set_left_margin(lm)
self.TextEditor.set_right_margin(lm) self.TextEditor.set_right_margin(lm)
@ -312,7 +315,6 @@ class UberwriterWindow(Window):
pgc = self.TextEditor.get_pango_context() pgc = self.TextEditor.get_pango_context()
mets = pgc.get_metrics() mets = pgc.get_metrics()
self.MarkupBuffer.set_multiplier(Pango.units_to_double(mets.get_approximate_char_width()) + 1) self.MarkupBuffer.set_multiplier(Pango.units_to_double(mets.get_approximate_char_width()) + 1)
print(Pango.units_to_double(mets.get_approximate_char_width()))
def save_document(self, widget, data=None): def save_document(self, widget, data=None):
@ -338,8 +340,8 @@ class UberwriterWindow(Window):
_("Save your File"), _("Save your File"),
self, self,
Gtk.FileChooserAction.SAVE, Gtk.FileChooserAction.SAVE,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, ("_Cancel", Gtk.ResponseType.CANCEL,
Gtk.STOCK_SAVE, Gtk.ResponseType.OK) "_Save", Gtk.ResponseType.OK)
) )
filechooser.set_do_overwrite_confirmation(True) filechooser.set_do_overwrite_confirmation(True)
@ -376,8 +378,8 @@ class UberwriterWindow(Window):
"Save your File", "Save your File",
self, self,
Gtk.FileChooserAction.SAVE, Gtk.FileChooserAction.SAVE,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, ("_Cancel", Gtk.ResponseType.CANCEL,
Gtk.STOCK_SAVE, Gtk.ResponseType.OK) "_Save", Gtk.ResponseType.OK)
) )
filechooser.set_do_overwrite_confirmation(True) filechooser.set_do_overwrite_confirmation(True)
if self.filename: if self.filename:
@ -418,8 +420,8 @@ class UberwriterWindow(Window):
"Export as %s" % export_type.upper(), "Export as %s" % export_type.upper(),
self, self,
Gtk.FileChooserAction.SAVE, Gtk.FileChooserAction.SAVE,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, ("_Cancel", Gtk.ResponseType.CANCEL,
Gtk.STOCK_SAVE, Gtk.ResponseType.OK) "_Save", Gtk.ResponseType.OK)
) )
filechooser.set_do_overwrite_confirmation(True) filechooser.set_do_overwrite_confirmation(True)
@ -519,8 +521,8 @@ class UberwriterWindow(Window):
_("Open a .md-File"), _("Open a .md-File"),
self, self,
Gtk.FileChooserAction.OPEN, Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, ("_Cancel", Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK) "_Open", Gtk.ResponseType.OK)
) )
filechooser.add_filter(filefilter) filechooser.add_filter(filefilter)
response = filechooser.run() response = filechooser.run()
@ -587,32 +589,42 @@ class UberwriterWindow(Window):
def menu_activate_preview(self, widget=None): def menu_activate_preview(self, widget=None):
self.preview_button.emit('activate') self.preview_button.emit('activate')
# # Not added as menu button as of now. Standard is typewriter active. def toggle_spellcheck(self, widget=None, data=None):
# def toggle_typewriter(self, widget, data=None): if widget:
# self.typewriter_active = widget.get_active() if self.spellcheck:
if widget.get_active():
self.SpellChecker.enable()
else:
self.SpellChecker.disable()
def toggle_spellcheck(self, widget, data=None): elif widget.get_active():
if self.spellcheck: self.SpellChecker = SpellChecker(self.TextEditor, self, locale.getdefaultlocale()[0], collapse=False)
if widget.get_active(): if self.auto_correct:
self.SpellChecker.enable() self.auto_correct.set_language(self.SpellChecker.language)
else: self.SpellChecker.connect_language_change(self.auto_correct.set_language)
try:
self.spellcheck = True
except:
self.SpellChecker = None
self.spellcheck = False
dialog = Gtk.MessageDialog(self,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.INFO,
Gtk.ButtonsType.NONE,
_("You can not enable the Spell Checker.")
)
dialog.format_secondary_text(_("Please install 'hunspell' or 'aspell' dictionarys for your language from the software center."))
response = dialog.run()
return
else:
widget = self.spellcheck_button
if self.spellcheck and self.SpellChecker.enabled():
self.SpellChecker.disable() self.SpellChecker.disable()
elif widget.get_active(): widget.set_active(False)
try: else:
self.SpellChecker = SpellChecker(self.TextEditor, locale.getdefaultlocale()[0], collapse=False) self.SpellChecker.enable()
self.spellcheck = True widget.set_active(True)
except:
self.SpellChecker = None
self.spellcheck = False
dialog = Gtk.MessageDialog(self,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.INFO,
Gtk.ButtonsType.NONE,
_("You can not enable the Spell Checker.")
)
dialog.format_secondary_text(_("Please install 'hunspell' or 'aspell' dictionarys for your language from the software center."))
response = dialog.run()
return
return return
def on_drag_data_received(self, widget, drag_context, x, y, def on_drag_data_received(self, widget, drag_context, x, y,
@ -621,7 +633,6 @@ class UberwriterWindow(Window):
if info == 1: if info == 1:
# uri target # uri target
uris = data.get_uris() uris = data.get_uris()
print(uris)
for uri in uris: for uri in uris:
uri = urllib.parse.unquote_plus(uri) uri = urllib.parse.unquote_plus(uri)
mime = mimetypes.guess_type(uri) mime = mimetypes.guess_type(uri)
@ -643,11 +654,9 @@ class UberwriterWindow(Window):
selection_bound = self.TextBuffer.get_selection_bound() selection_bound = self.TextBuffer.get_selection_bound()
cursor_iter = self.TextBuffer.get_iter_at_mark(insert_mark) cursor_iter = self.TextBuffer.get_iter_at_mark(insert_mark)
cursor_iter.backward_chars(len(text) - ll) cursor_iter.backward_chars(len(text) - ll)
print('move_cursor')
self.TextBuffer.move_mark(insert_mark, cursor_iter) self.TextBuffer.move_mark(insert_mark, cursor_iter)
cursor_iter.forward_chars(lr) cursor_iter.forward_chars(lr)
self.TextBuffer.move_mark(selection_bound, cursor_iter) self.TextBuffer.move_mark(selection_bound, cursor_iter)
print('move selection')
elif info == 2: elif info == 2:
# Text target # Text target
@ -656,7 +665,6 @@ class UberwriterWindow(Window):
self.TextBuffer.insert_at_cursor(data.get_text()) self.TextBuffer.insert_at_cursor(data.get_text())
Gtk.drag_finish(drag_context, True, True, time) Gtk.drag_finish(drag_context, True, True, time)
self.present() self.present()
print("returning true")
return False return False
def toggle_preview(self, widget, data=None): def toggle_preview(self, widget, data=None):
@ -898,6 +906,10 @@ class UberwriterWindow(Window):
cr.set_source(lg_btm) cr.set_source(lg_btm)
cr.fill() cr.fill()
def use_experimental_features(self, val):
self.auto_correct = UberwriterAutoCorrect(self.TextEditor, self.TextBuffer)
def finish_initializing(self, builder): # pylint: disable=E1002 def finish_initializing(self, builder): # pylint: disable=E1002
"""Set up the main window""" """Set up the main window"""
super(UberwriterWindow, self).finish_initializing(builder) super(UberwriterWindow, self).finish_initializing(builder)
@ -942,10 +954,10 @@ class UberwriterWindow(Window):
bbtn = Gtk.MenuButton() bbtn = Gtk.MenuButton()
btn_settings = Gtk.MenuButton() btn_settings = Gtk.MenuButton()
btn_settings.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON) btn_settings.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON)
self.builder.get_object("menu4").detach()
btn_settings.set_popup(self.builder.get_object("menu4")) btn_settings.set_popup(self.builder.get_object("menu4"))
# icon = Gio.ThemedIcon(name="mail-sendm receive-symbolic")
# image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) self.builder.get_object("menu1").detach()
# bbtn.add(image)
bbtn.set_popup(self.builder.get_object("menu1")) bbtn.set_popup(self.builder.get_object("menu1"))
self.hb.pack_start(bbtn) self.hb.pack_start(bbtn)
self.hb.pack_end(btn_settings) self.hb.pack_end(btn_settings)
@ -1093,10 +1105,17 @@ class UberwriterWindow(Window):
self.vadjustment = self.ScrolledWindow.get_vadjustment() self.vadjustment = self.ScrolledWindow.get_vadjustment()
self.vadjustment.connect('value-changed', self.scrolled) self.vadjustment.connect('value-changed', self.scrolled)
self.spellcheck_button = builder.get_object("disable_spellcheck")
# Setting up spellcheck # Setting up spellcheck
self.auto_correct = None
try: try:
self.SpellChecker = SpellChecker(self.TextEditor, self.SpellChecker = SpellChecker(self.TextEditor,
locale.getdefaultlocale()[0], collapse=False) locale.getdefaultlocale()[0], collapse=False)
if self.auto_correct:
self.auto_correct.set_language(self.SpellChecker.language)
self.SpellChecker.connect_language_change(self.auto_correct.set_language)
self.spellcheck = True self.spellcheck = True
except: except:
self.SpellChecker = None self.SpellChecker = None
@ -1122,6 +1141,7 @@ class UberwriterWindow(Window):
### ###
self.searchreplace = UberwriterSearchAndReplace(self) self.searchreplace = UberwriterSearchAndReplace(self)
# Window resize # Window resize
self.window_resize(self) self.window_resize(self)
self.connect("configure-event", self.window_resize) self.connect("configure-event", self.window_resize)

View File

@ -33,6 +33,10 @@ def parse_options():
parser.add_option( parser.add_option(
"-v", "--verbose", action="count", dest="verbose", "-v", "--verbose", action="count", dest="verbose",
help=_("Show debug messages (-vv debugs uberwriter_lib also)")) help=_("Show debug messages (-vv debugs uberwriter_lib also)"))
parser.add_option(
"-e", "--experimental-features", help="Use experimental features",
action='store_true'
)
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
set_up_logging(options) set_up_logging(options)
@ -45,12 +49,14 @@ def main():
'constructor for your class instances' 'constructor for your class instances'
(options, args) = parse_options() (options, args) = parse_options()
# Run the application. # Run the application.
if args: if args:
for arg in args: for arg in args:
window = UberwriterWindow.UberwriterWindow() window = UberwriterWindow.UberwriterWindow()
window.load_file(arg) window.load_file(arg)
else: else:
window = UberwriterWindow.UberwriterWindow() window = UberwriterWindow.UberwriterWindow()
if options.experimental_features:
window.use_experimental_features(True)
window.show() window.show()
Gtk.main() Gtk.main()

View File

@ -45,7 +45,6 @@ class Window(Gtk.Window):
""" """
builder = get_builder('UberwriterWindow') builder = get_builder('UberwriterWindow')
new_object = builder.get_object("uberwriter_window") new_object = builder.get_object("uberwriter_window")
print(new_object)
new_object.finish_initializing(builder) new_object.finish_initializing(builder)
return new_object return new_object

View File

@ -28,7 +28,10 @@ import gettext
import logging import logging
import re import re
import sys import sys
import pickle
import os
from ..helpers import get_media_path
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from ..pylocales import code_to_name from ..pylocales import code_to_name
@ -216,6 +219,26 @@ class SpellChecker(object):
self._enabled = True self._enabled = True
self.buffer_initialize() self.buffer_initialize()
self.notify_language_change_functions = []
self.frequency_dict = {}
pp_pickled = 'pickled_dict'
if pp_pickled and os.path.isfile(pp_pickled):
f = open(pp_pickled, 'rb')
self.frequency_dict = pickle.load(f)
f.close()
else:
pp = get_media_path('wordlists/en_us_wordlist.xml')
frequencies = ET.parse(pp)
root = frequencies.getroot()
for child in root:
self.frequency_dict[child.text] = int(child.attrib['f'])
f = open('pickled_dict', 'wb+')
pickle.dump(self.frequency_dict, f)
f.close()
# print(self.frequency_dict)
@property @property
def language(self): def language(self):
""" """
@ -428,15 +451,24 @@ class SpellChecker(object):
else: else:
self._check_word(word_start, word_end) self._check_word(word_start, word_end)
self._deferred_check = False self._deferred_check = False
word_end.forward_word_end() word_end.forward_word_end()
word_end.backward_word_start() word_end.backward_word_start()
word_start = word_end.copy()
if word_start.equal(word_end): if word_start.equal(word_end):
break break
word_start = word_end.copy()
def connect_language_change(self, fn):
self.notify_language_change_functions.append(fn)
def _languages_menu(self): def _languages_menu(self):
def _set_language(item, code): def _set_language(item, code):
self.language = code self.language = code
for fn in self.notify_language_change_functions:
fn(code)
if _pygobject: if _pygobject:
menu = gtk.Menu.new() menu = gtk.Menu.new()
group = [] group = []
@ -477,7 +509,20 @@ class SpellChecker(object):
menu.append(item) menu.append(item)
else: else:
# add sorting here # add sorting here
# suggestions_map = []
# print(suggestions)
# for suggestion in suggestions:
# if suggestion in self.frequency_dict:
# suggestions_map.append({'suggestion': suggestion, 'freq': self.frequency_dict[suggestion]})
# else:
# suggestions_map.append({'suggestion': suggestion, 'freq': 0})
# suggestions_map.sort(key= lambda x: x['freq'])
# suggestions_map.reverse()
# print(suggestions_map)
# suggestions = []
# for suggestion in suggestions_map:
# suggestions.append(suggestion["suggestion"])
for suggestion in suggestions: for suggestion in suggestions:
if _pygobject: if _pygobject:
item = gtk.MenuItem.new() item = gtk.MenuItem.new()
@ -639,5 +684,9 @@ class SpellChecker(object):
end = self._buffer.get_iter_at_offset(match.end()) end = self._buffer.get_iter_at_offset(match.end())
self._buffer.remove_tag(self._misspelled, start, end) self._buffer.remove_tag(self._misspelled, start, end)
return return
# Somehow needed now, checking for zero length (happens on double space)
if len(word) == 0:
return
if not self._dictionary.check(word): if not self._dictionary.check(word):
self._buffer.apply_tag(self._misspelled, start, end) self._buffer.apply_tag(self._misspelled, start, end)

View File

@ -55,7 +55,7 @@ def get_media_path(media_file_name):
media_filename = get_data_file('media', '%s' % (media_file_name,)) media_filename = get_data_file('media', '%s' % (media_file_name,))
if not os.path.exists(media_filename): if not os.path.exists(media_filename):
media_filename = None media_filename = None
return "/"+media_filename return media_filename
class NullHandler(logging.Handler): class NullHandler(logging.Handler):
def emit(self, record): def emit(self, record):