add remarkable wkhtmltopdf

This commit is contained in:
joborun linux 2023-03-28 00:26:50 +03:00
parent 92fdd265ed
commit fa6617423d
13 changed files with 549 additions and 0 deletions

34
remarkable/369.patch Normal file
View File

@ -0,0 +1,34 @@
From 2482e9ccf2eac4a24919d053d51588d8aa09db94 Mon Sep 17 00:00:00 2001
From: Markus Neteler <neteler@gmail.com>
Date: Mon, 30 Nov 2020 21:57:57 +0100
Subject: [PATCH] tree.getiterator - update for Python 3.9+
tree.getiterator() has been deprecated in Python 2.7 and removed in Python 3.9 (see https://docs.python.org/3/whatsnew/3.9.html).
This PR provides the needed changes.
---
remarkable_lib/Builder.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/remarkable_lib/Builder.py b/remarkable_lib/Builder.py
index 4dd8a18..4998537 100755
--- a/remarkable_lib/Builder.py
+++ b/remarkable_lib/Builder.py
@@ -89,7 +89,7 @@ def add_from_file(self, filename):
tree = ElementTree()
tree.parse(filename)
- ele_widgets = tree.getiterator("object")
+ ele_widgets = tree.iter("object")
for ele_widget in ele_widgets:
name = ele_widget.attrib['id']
widget = self.get_object(name)
@@ -111,7 +111,7 @@ def add_from_file(self, filename):
if connections:
self.connections.extend(connections)
- ele_signals = tree.getiterator("signal")
+ ele_signals = tree.iter("signal")
for ele_signal in ele_signals:
self.glade_handler_dict.update(
{ele_signal.attrib["handler"]: None})

67
remarkable/PKGBUILD Normal file
View File

@ -0,0 +1,67 @@
#!/usr/bin/bash
# JOBoRun : Jwm OpenBox Obarun RUNit
# Maintainer : Joe Bo Run <joborun@disroot.org>
# PkgSource : url="https://gittea.disroot.org/joborun-pkg/jobcomm/$pkgname"
# Website : https://pozol.eu
#-----------------------------------------| DESCRIPTION |---------------------------------------
pkgname=remarkable
pkgver=1.87
pkgrel=08
pkgdesc="A free fully featured markdown editor for Linux."
url="http://remarkableapp.github.io"
depends=('python' 'python-cairo' 'python-gobject' 'python-markdown' 'python-beautifulsoup4' 'python-lxml' 'python-setuptools' 'webkit2gtk' 'wkhtmltopdf' 'gtksourceview3' )
makedepends=('python')
optdepends=('python-lxml: export to HTML format support'
'python-gtkspellcheck: Spellcheck (might cause problems)')
install="remarkable.install"
source=("https://github.com/jamiemcg/Remarkable/archive/v${pkgver}.tar.gz"
"stable.patch::https://github.com/jamiemcg/Remarkable/compare/v1.87...mbloms:stable.patch"
"https://patch-diff.githubusercontent.com/raw/jamiemcg/Remarkable/pull/369.patch"
"remarkable.install")
prepare() {
msg2 "Applying patches for webkit2gtk..."
cat *.patch | patch -p1 -d "${srcdir}/Remarkable-${pkgver}"
}
package() {
_python_site=$(python -c 'import site; print(site.getsitepackages()[0]);')
[ -z ${_python_site} ] && echo "error: could not identify python site_packages directory" && return 1
cd "Remarkable-${pkgver}"
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm 755 "bin/remarkable" "${pkgdir}/usr/bin/remarkable"
install -D "debian/remarkable.mime" "${pkgdir}/usr/lib/mime/packages/remarkable"
install -D "data/media/remarkable.svg" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/remarkable.svg"
install -D remarkable.desktop "${pkgdir}/usr/share/applications/remarkable.desktop"
mv data/glib-2.0 "${pkgdir}/usr/share/"
install -d "${pkgdir}/${_python_site}"
mv markdown pdfkit remarkable remarkable_lib "${pkgdir}/${_python_site}/"
mv data "${pkgdir}/usr/share/remarkable/"
}
#---- arch license gpg-key & sha256sums ----
arch=(x86_64)
license=('MIT')
sha1sums=('a492dc5d0a276f36846a99287ae93c02e22a5cd8'
'8c052787c16a81b9d4c325d2270cdd3412951f6c'
'0011947d35909e001e24b13f2f65d3e25061c9c2'
'bdbfb750df9e5fb3022f47a46a80555259628cd1')
sha256sums=(b77cd936bce74c7c34eb4a16c0e634111117361ef588e6dff154b53bf85ec7ca # v1.87.tar.gz
ede70f222c95d916558ebb43a4016bb4113c025542475ad1b3cd26320c988968 # stable.patch
70a9b9512f05af7ca3a037f8e5b9fea0dbb8df7db592b7eed98c711098aabbe5 # 369.patch
4dec596dfa2427f5f0517bf261826e50a0e7fc4afed448d26ac4f2c6b2373847) # remarkable.install
## a6bd38993e520e447143f3e41091165fa75c94c182f35acb14284f4df2f226d3 remarkable-1.87-08-x86_64.pkg.tar.lz

63
remarkable/PKGBUILD-aur Normal file
View File

@ -0,0 +1,63 @@
# Maintainer: Mikael Blomstrand <gmail: kmbloms>
# Contributor: MaryJaneInChain <gmail.com@maryjaneinchain>
# Contributor: Michael Goehler <somebody dot here at gmx dot de>
pkgname=remarkable
pkgver=1.87
pkgrel=7
pkgdesc="A free fully featured markdown editor for Linux."
arch=('any')
url="http://remarkableapp.github.io"
license=('MIT')
depends=('python'
'python-cairo'
'python-gobject'
'python-markdown'
'python-beautifulsoup4'
'python-lxml'
'python-setuptools'
'webkit2gtk'
'wkhtmltopdf'
'gtksourceview3'
)
makedepends=('python')
optdepends=('python-lxml: export to HTML format support'
'python-gtkspellcheck: Spellcheck (might cause problems)')
install="remarkable.install"
source=("https://github.com/jamiemcg/Remarkable/archive/v${pkgver}.tar.gz"
"stable.patch::https://github.com/jamiemcg/Remarkable/compare/v1.87...mbloms:stable.patch"
"https://patch-diff.githubusercontent.com/raw/jamiemcg/Remarkable/pull/369.patch"
"remarkable.install")
sha1sums=('a492dc5d0a276f36846a99287ae93c02e22a5cd8'
'8c052787c16a81b9d4c325d2270cdd3412951f6c'
'0011947d35909e001e24b13f2f65d3e25061c9c2'
'bdbfb750df9e5fb3022f47a46a80555259628cd1')
prepare() {
msg2 "Applying patches for webkit2gtk..."
cat *.patch | patch -p1 -d "${srcdir}/Remarkable-${pkgver}"
}
package() {
_python_site=$(python -c 'import site; print(site.getsitepackages()[0]);')
[ -z ${_python_site} ] && echo "error: could not identify python site_packages directory" && return 1
cd "Remarkable-${pkgver}"
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm 755 "bin/remarkable" "${pkgdir}/usr/bin/remarkable"
install -D "debian/remarkable.mime" "${pkgdir}/usr/lib/mime/packages/remarkable"
install -D "data/media/remarkable.svg" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/remarkable.svg"
install -D remarkable.desktop "${pkgdir}/usr/share/applications/remarkable.desktop"
mv data/glib-2.0 "${pkgdir}/usr/share/"
install -d "${pkgdir}/${_python_site}"
mv markdown pdfkit remarkable remarkable_lib "${pkgdir}/${_python_site}/"
mv data "${pkgdir}/usr/share/remarkable/"
}

1
remarkable/clean Normal file
View File

@ -0,0 +1 @@
rm -rf {src,pkg,v1*tar.gz}

12
remarkable/deps Normal file
View File

@ -0,0 +1,12 @@
python
python-cairo
python-gobject
python-markdown
python-beautifulsoup4
python-lxml
python-setuptools
webkit2gtk
wkhtmltopdf
gtksourceview3
libgit2

View File

@ -0,0 +1,7 @@
post_install() {
/usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas
}
post_upgrade() {
post_install
}

272
remarkable/stable.patch Normal file
View File

@ -0,0 +1,272 @@
From 926171f6343b6420b532140dd2f4dc2e43fd9d2c Mon Sep 17 00:00:00 2001
From: Harald Weiner <timeraider@gmx.at>
Date: Sun, 23 Jul 2017 02:14:23 +0200
Subject: [PATCH 1/4] fixes #184 (port to WebKit2Gtk)
---
remarkable/RemarkableWindow.py | 63 +++++++++++++++++++++++++---------
1 file changed, 47 insertions(+), 16 deletions(-)
diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
index ffbc70b..893dc27 100644
--- a/remarkable/RemarkableWindow.py
+++ b/remarkable/RemarkableWindow.py
@@ -24,10 +24,10 @@
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('GtkSource', '3.0')
-gi.require_version('WebKit', '3.0')
+gi.require_version('WebKit2', '4.0')
from bs4 import BeautifulSoup
-from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit
+from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit2
from locale import gettext as _
from urllib.request import urlopen
import markdown
@@ -113,10 +113,10 @@ def finish_initializing(self, builder): # pylint: disable=E1002
self.text_buffer.connect("changed", self.on_text_view_changed)
self.text_view.set_buffer(self.text_buffer)
self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
-
- self.live_preview = WebKit.WebView()
- self.live_preview.connect("console-message", self._javascript_console_message) # Suppress .js output
- self.live_preview.zoom_out()
+
+ my_settings = self.create_webkit_settings()
+ self.live_preview = WebKit2.WebView.new_with_settings(my_settings)
+ self.zoom_out(self.live_preview)
self.scrolledwindow_text_view = Gtk.ScrolledWindow()
self.scrolledwindow_text_view.add(self.text_view)
@@ -624,11 +624,11 @@ def on_toolbutton_redo_clicked(self, widget):
self.redo(self)
def on_toolbutton_zoom_in_clicked(self, widget):
- self.live_preview.zoom_in()
+ self.zoom_in(self.live_preview)
self.scrollPreviewToFix(self)
def on_toolbutton_zoom_out_clicked(self, widget):
- self.live_preview.zoom_out()
+ self.zoom_out(self.live_preview)
self.scrollPreviewToFix(self)
def redo(self, widget):
@@ -1249,7 +1249,7 @@ def on_menuitem_handwritten_activate(self, widget):
styles.css = styles.handwriting_css
self.update_style(self)
self.update_live_preview(self)
- self.live_preview.zoom_in()
+ self.zoom_in(self.live_preview)
self.remarkable_settings['style'] = "handwriting_css"
self.write_settings()
@@ -1347,12 +1347,12 @@ def on_menuitem_feedback_activate(self, widget):
window_feedback.set_title("Feedback Form")
window_feedback.set_default_size(640, 640)
window_feedback.set_position(Gtk.WindowPosition.CENTER)
- feedback_browser = WebKit.WebView()
- feedback_browser.connect("console-message", self._javascript_console_message) # Suppress .js output
+ my_settings = self.create_webkit_settings()
+ feedback_browser = WebKit2.WebView.new_with_settings(my_settings)
feedback_scroller = Gtk.ScrolledWindow()
feedback_scroller.add(feedback_browser)
window_feedback.add(feedback_scroller)
- feedback_browser.open("https://jamiemcgowan.typeform.com/to/ng5Lhc")
+ feedback_browser.load_uri("https://jamiemcgowan.typeform.com/to/ng5Lhc")
window_feedback.show_all()
def on_menuitem_about_activate(self, widget):
@@ -1443,14 +1443,45 @@ def update_live_preview(self, widet):
html = self.default_html_start + html_middle + self.default_html_end
# Update the display, supporting relative paths to local images
- self.live_preview.load_string(html, "text/html", "utf-8", "file://{}".format(os.path.abspath(self.name)))
+ self.live_preview.load_html(html, "file://{}".format(os.path.abspath(self.name)))
"""
- This function suppresses the messages from the WebKit (live preview) console
+ This function returns WebKit settings instance to suppress
+ the messages from the WebKit (live preview) console
"""
- def _javascript_console_message(self, view, message, line, sourceid):
- return True
+ def create_webkit_settings(self):
+ result = WebKit2.Settings()
+ result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output
+ return result
+ """
+ This function implements zoom_in for WebKit2.WebView
+ """
+ def zoom_in(self, webView):
+ zoom_level = webView.get_zoom_level()
+ zoom_level = zoom_level + self.get_zoom_step()
+ webView.set_zoom_level(zoom_level)
+
+ """
+ This function implements zoom_out for WebKit2.WebView
+ """
+ def zoom_out(self, webView):
+ zoom_level = webView.get_zoom_level()
+ zoom_level = zoom_level - self.get_zoom_step()
+ webView.set_zoom_level(zoom_level)
+
+ """
+ This function returns the same magic number as in previous WebKit API:
+ https://lazka.github.io/pgi-docs/WebKit-3.0/classes/WebSettings.html#WebKit.WebSettings.props.zoom_step
+ """
+ def get_zoom_step(self):
+ return 0.10000000149011612
+
+ """
+ This function resets the zoom_level to the default value
+ """
+ def reset_zoom_level(self, webView):
+ webView.set_zoom_level(1.0)
"""
This function deletes any temporary files that were created during execution
From 63dc24917dfd36d7c4a7265dc3a0020deb75593c Mon Sep 17 00:00:00 2001
From: Harald Weiner <timeraider@gmx.at>
Date: Fri, 28 Jul 2017 07:07:57 +0200
Subject: [PATCH 2/4] fixes #175 (Live Preview Mode Executes JavaScript)
---
data/ui/RemarkableWindow.ui | 9 +++++++++
remarkable/RemarkableWindow.py | 26 ++++++++++++++++++++++----
2 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/data/ui/RemarkableWindow.ui b/data/ui/RemarkableWindow.ui
index ab0007c..ca2396e 100644
--- a/data/ui/RemarkableWindow.ui
+++ b/data/ui/RemarkableWindow.ui
@@ -405,6 +405,15 @@
<property name="active">True</property>
</object>
</child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem_js">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Enable Java-Script</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ </object>
+ </child>
<child>
<object class="GtkCheckMenuItem" id="menuitem_vertical_layout">
<property name="visible">True</property>
diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
index 893dc27..6856042 100644
--- a/remarkable/RemarkableWindow.py
+++ b/remarkable/RemarkableWindow.py
@@ -114,8 +114,8 @@ def finish_initializing(self, builder): # pylint: disable=E1002
self.text_view.set_buffer(self.text_buffer)
self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
- my_settings = self.create_webkit_settings()
- self.live_preview = WebKit2.WebView.new_with_settings(my_settings)
+ self.webkit_settings = self.create_webkit_settings()
+ self.live_preview = WebKit2.WebView.new_with_settings(self.webkit_settings)
self.zoom_out(self.live_preview)
self.scrolledwindow_text_view = Gtk.ScrolledWindow()
@@ -199,7 +199,8 @@ def check_settings(self):
if not os.path.isfile(self.settings_path):
self.remarkable_settings = {}
self.remarkable_settings['css'] = ''
- self.remarkable_settings['font'] = "Sans 10"
+ self.remarkable_settings['font'] = "Sans 10"
+ self.remarkable_settings['js'] = True
self.remarkable_settings['line-numbers'] = True
self.remarkable_settings['live-preview'] = True
self.remarkable_settings['nightmode'] = False
@@ -234,6 +235,12 @@ def load_settings(self):
# Disable word wrap on startup
self.builder.get_object("menuitem_word_wrap").set_active(False)
self.on_menuitem_word_wrap_activate(self)
+
+ if not 'js' in self.remarkable_settings:
+ self.remarkable_settings['js'] = True
+ if self.remarkable_settings['js'] == False:
+ # Disable Live Preview on startup
+ self.builder.get_object("menuitem_js").set_active(False)
if self.remarkable_settings['live-preview'] == False:
# Disable Live Preview on startup
@@ -810,7 +817,16 @@ def toggle_live_preview(self, widget):
self.builder.get_object("toolbar1").set_visible(True)
self.update_live_preview(self)
self.write_settings()
-
+
+ def on_menuitem_js_activate(self, widget):
+ self.toggle_js(self)
+
+ def toggle_js(self, widget):
+ state = self.webkit_settings.get_enable_javascript()
+ state = not state
+ self.remarkable_settings['js'] = state
+ self.webkit_settings.set_enable_javascript(state)
+ self.write_settings()
def on_menuitem_swap_activate(self, widget):
if self.live_preview.get_visible():
@@ -1452,6 +1468,8 @@ def update_live_preview(self, widet):
def create_webkit_settings(self):
result = WebKit2.Settings()
result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output
+ #js = self.remarkable_settings['js']
+ result.set_enable_javascript(True) # JS-Kill-Switch for issue #175
return result
"""
From 1b05770885a1bbfc8b21fdb877267b4bf9fb5e88 Mon Sep 17 00:00:00 2001
From: Mikael Blomstrand <mbloms@kth.se>
Date: Wed, 4 Apr 2018 13:07:30 +0200
Subject: [PATCH 3/4] Spellcheck error message adapted to arch.
---
remarkable/RemarkableWindow.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
index 6856042..a77f74c 100644
--- a/remarkable/RemarkableWindow.py
+++ b/remarkable/RemarkableWindow.py
@@ -47,7 +47,7 @@
from gtkspellcheck import SpellChecker
spellcheck_enabled = True
except:
- print("*Spellchecking not enabled.\n*To enable spellchecking install pygtkspellcheck\n*https://pypi.python.org/pypi/pygtkspellcheck/")
+ print("*Spellchecking not enabled.\n*To enable spellchecking install python-gtkspellcheck.\npacman -S --asdeps python-gtkspellcheck")
spellcheck_enabled = False
import logging
From eb33c22a6bf4100443b75e33e9897a85ad09d014 Mon Sep 17 00:00:00 2001
From: Mikael Blomstrand <mbloms@kth.se>
Date: Wed, 4 Apr 2018 13:12:26 +0200
Subject: [PATCH 4/4] `import styles` correctly
---
remarkable/RemarkableWindow.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
index a77f74c..e838330 100644
--- a/remarkable/RemarkableWindow.py
+++ b/remarkable/RemarkableWindow.py
@@ -36,7 +36,7 @@
import re, subprocess, datetime, os, webbrowser, _thread, sys, locale
import tempfile
import traceback
-import styles
+from remarkable import styles
import unicodedata
import warnings
import datetime

45
wkhtmltopdf/PKGBUILD Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/bash
# JOBoRun : Jwm OpenBox Obarun RUNit
# Maintainer : Joe Bo Run <joborun@disroot.org>
# PkgSource : url="https://gittea.disroot.org/joborun-pkg/jobcomm/$pkgname"
# Website : https://pozol.eu
#-----------------------------------------| DESCRIPTION |---------------------------------------
pkgname=wkhtmltopdf
pkgver=0.12.6
pkgrel=02
pkgdesc="Command line tools to render HTML into PDF and various image formats"
url="https://wkhtmltopdf.org/"
depends=('qt5-webkit' 'qt5-svg' 'qt5-xmlpatterns')
makedepends=('git')
optdepends=('xorg-server: wkhtmltopdf needs X or Xvfb to operate')
source=("git+https://github.com/wkhtmltopdf/wkhtmltopdf.git#tag=$pkgver?signed")
build() {
cd $pkgname
qmake-qt5 wkhtmltopdf.pro
make
}
package() {
cd $pkgname
make INSTALL_ROOT="$pkgdir/usr" install
# Generate and install man pages
install -d "$pkgdir/usr/share/man/man1"
LD_LIBRARY_PATH=bin ./bin/wkhtmltopdf --manpage \
>"$pkgdir/usr/share/man/man1/wkhtmltopdf.1"
LD_LIBRARY_PATH=bin ./bin/wkhtmltoimage --manpage \
>"$pkgdir/usr/share/man/man1/wkhtmltoimage.1"
}
#---- arch license gpg-key & sha256sums ----
arch=(x86_64)
license=('LGPL3')
validpgpkeys=('76C0969C076A23EC4849F462D3E3E8ACF99DE8EA') # Ashish Kulkarni (Open Source) <ashish@kulkarni.dev>
sha256sums=('SKIP')
## 1fd8c8fa661b5355210e33ad8dec0add7cc3352c0ce367f9eceeb8d0cd6ad052 wkhtmltopdf-0.12.6-02-x86_64.pkg.tar.lz

35
wkhtmltopdf/PKGBUILD-aur Normal file
View File

@ -0,0 +1,35 @@
# Maintainer:
pkgname=wkhtmltopdf
pkgver=0.12.6
pkgrel=1
pkgdesc="Command line tools to render HTML into PDF and various image formats"
arch=('x86_64')
url="https://wkhtmltopdf.org/"
license=('LGPL3')
depends=('qt5-webkit' 'qt5-svg' 'qt5-xmlpatterns')
makedepends=('git')
optdepends=('xorg-server: wkhtmltopdf needs X or Xvfb to operate')
source=("git+https://github.com/wkhtmltopdf/wkhtmltopdf.git#tag=$pkgver?signed")
sha256sums=('SKIP')
validpgpkeys=('76C0969C076A23EC4849F462D3E3E8ACF99DE8EA') # Ashish Kulkarni (Open Source) <ashish@kulkarni.dev>
build() {
cd $pkgname
qmake-qt5 wkhtmltopdf.pro
make
}
package() {
cd $pkgname
make INSTALL_ROOT="$pkgdir/usr" install
# Generate and install man pages
install -d "$pkgdir/usr/share/man/man1"
LD_LIBRARY_PATH=bin ./bin/wkhtmltopdf --manpage \
>"$pkgdir/usr/share/man/man1/wkhtmltopdf.1"
LD_LIBRARY_PATH=bin ./bin/wkhtmltoimage --manpage \
>"$pkgdir/usr/share/man/man1/wkhtmltoimage.1"
}
# vim:set ts=2 sw=2 et:

1
wkhtmltopdf/clean Normal file
View File

@ -0,0 +1 @@
rm -rf {src,pkg,wkhtmltopdf}

5
wkhtmltopdf/deps Normal file
View File

@ -0,0 +1,5 @@
git
qt5-webkit
qt5-svg
qt5-xmlpatterns

1
wkhtmltopdf/key Normal file
View File

@ -0,0 +1 @@
gpg -v --recv-key D3E3E8ACF99DE8EA

6
wkhtmltopdf/time Normal file
View File

@ -0,0 +1,6 @@
real 1m58.053s
user 1m54.649s
sys 0m6.765s