mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-26 18:20:53 +12:00
Compare commits
275 commits
Author | SHA1 | Date | |
---|---|---|---|
|
50b9fd4980 | ||
|
5a109250bb | ||
|
8beea301ec | ||
|
f274cd489f | ||
|
41e59d71c1 | ||
|
98d6eb4975 | ||
|
530352c78b | ||
|
82fe3262af | ||
|
3707d9e0ee | ||
|
d0e4c81132 | ||
|
4d79bef20c | ||
|
a7abc68f8e | ||
|
3d4eef2b49 | ||
|
1fd8762f5a | ||
|
d93e8eb544 | ||
|
79ba7b59ed | ||
|
892f8f0592 | ||
|
14392909c3 | ||
|
5f3933bde2 | ||
|
cf4ff9f35a | ||
|
b963186071 | ||
|
1c7b246e80 | ||
|
56dac84932 | ||
|
161290686b | ||
|
7d31628977 | ||
|
919df53b5f | ||
|
fbab930c44 | ||
|
87da52efd4 | ||
|
d149ae45e7 | ||
|
18089ae44f | ||
|
11294a5914 | ||
|
dccfa85d1f | ||
|
f25b47149b | ||
|
6f6abc6f65 | ||
|
80e90b5ddc | ||
|
8a5dd11075 | ||
|
e267699667 | ||
|
6ee7e881be | ||
|
42245d38c3 | ||
|
cc0fc29b28 | ||
|
1933d53c1c | ||
|
13486ad083 | ||
|
4ebbf5efd6 | ||
|
40a9cabece | ||
|
14dd845e4c | ||
|
e36c31f3a9 | ||
|
15b9d6f0e1 | ||
|
0ce2ae61a0 | ||
|
b05377b417 | ||
|
8932adf635 | ||
|
549a089eb0 | ||
|
4abc6cacfd | ||
|
e8199931d9 | ||
|
69fec580cb | ||
|
8e298c0788 | ||
|
2f93c2f6fe | ||
|
e84056ecbe | ||
|
8ffdeefbdf | ||
|
d8fbea13ba | ||
|
5f9335cc91 | ||
|
cdad1aa2d4 | ||
|
131bdc5505 | ||
|
7de81a96f3 | ||
|
1dc709fa20 | ||
|
fe213894cb | ||
|
60ea5f9e14 | ||
|
7d4151328c | ||
|
863e8df483 | ||
|
9b372eac73 | ||
|
389cb19f55 | ||
|
1164c3c988 | ||
|
3faaf1187a | ||
|
5e068c0603 | ||
|
7d76bd6726 | ||
|
b1e23fd9fc | ||
|
e62432307f | ||
|
5f8569718d | ||
|
66f6aecf1c | ||
|
763d9284f0 | ||
|
91b22292cc | ||
|
92b1e0b648 | ||
|
1fd45ba1d2 | ||
|
2ead298b00 | ||
|
953ce4bd15 | ||
|
06f8ab3519 | ||
|
66df68af69 | ||
|
b5dfee59d7 | ||
|
5d0a9d3019 | ||
|
77f7018cb2 | ||
|
fc7a716c76 | ||
|
25b64ad971 | ||
|
d55e88599d | ||
|
49fb32deab | ||
|
fc86ed5df6 | ||
|
eaebfa9dfa | ||
|
a046656acf | ||
|
041fda5b74 | ||
|
2ca25a06f6 | ||
|
7358a7add5 | ||
|
8ad2652cf5 | ||
|
4d625182ad | ||
|
75425665de | ||
|
ab4761e9c8 | ||
|
9d65811eed | ||
|
935811717b | ||
|
452279a8ae | ||
|
d68f332ef8 | ||
|
6a4137215f | ||
|
910f569c2e | ||
|
d936d4a348 | ||
|
785fa8c77f | ||
|
e72cd06842 | ||
|
4b64271ae4 | ||
|
3b226658a6 | ||
|
035db18598 | ||
|
035b6222cf | ||
|
e9b3873934 | ||
|
525e0d1f00 | ||
|
94b6d88657 | ||
|
ea3bf4979c | ||
|
9203e0cc83 | ||
|
6ea209e523 | ||
|
a6ac2705d5 | ||
|
3e811c75d1 | ||
|
cc8924ada6 | ||
|
16f6ecc8bc | ||
|
eeb98a8ccd | ||
|
3ac87d9125 | ||
|
72933c9978 | ||
|
19cbe7fdf6 | ||
|
ee76b2d84e | ||
|
35d4a2171e | ||
|
a88b61fbcd | ||
|
7293db7c40 | ||
|
380354bdf8 | ||
|
414cd0f8a3 | ||
|
b0ac44f6fc | ||
|
606df9843c | ||
|
acd23e9651 | ||
|
dba35f15d7 | ||
|
a36bc55bf2 | ||
|
0a67fd793b | ||
|
542459da69 | ||
|
0fc0291809 | ||
|
4d8adaaffb | ||
|
9412b88513 | ||
|
0203872cd3 | ||
|
fd73fcc8e8 | ||
|
e22f304e6b | ||
|
00aca6a0e1 | ||
|
34c1590401 | ||
|
0a81ff4960 | ||
|
f218e26a4a | ||
|
7f75b13131 | ||
|
a58e9503c1 | ||
|
5d21141034 | ||
|
0de1c1c69d | ||
|
0cbc2cf5cd | ||
|
8180414641 | ||
|
65efd968a5 | ||
|
701ce676ba | ||
|
db1f898a25 | ||
|
032c3444bc | ||
|
9f5515764d | ||
|
9de9f78129 | ||
|
094095e2cd | ||
|
c2b8e7827a | ||
|
6fb040d12c | ||
|
f3e7708a7d | ||
|
cf77cc7604 | ||
|
38e4335a5d | ||
|
1fc570e8a0 | ||
|
74036b668c | ||
|
0c12838610 | ||
|
22609fa1fd | ||
|
1274baa9aa | ||
|
0a5201ab4f | ||
|
48af930b11 | ||
|
c656911996 | ||
|
bdc07dbfbd | ||
|
029dfe2056 | ||
|
b802ae9784 | ||
|
671a5f9d19 | ||
|
6916f27d60 | ||
|
2877670a53 | ||
|
bcc92c5e72 | ||
|
9e10e9323f | ||
|
0e342337dd | ||
|
1a7b156fd4 | ||
|
584e4591f7 | ||
|
84a0fd52dd | ||
|
abf2eafabc | ||
|
f0bd76b7b9 | ||
|
ecf4d6b0b4 | ||
|
7a9ec9dcdf | ||
|
d8d771949f | ||
|
928cf8914f | ||
|
a2dfed7bc1 | ||
|
aecdc21c0d | ||
|
4bbd5dfe68 | ||
|
b94d40c0dc | ||
|
276d9dbabc | ||
|
51688c52c1 | ||
|
00bb86ae16 | ||
|
934205c46e | ||
|
6e0fa09a29 | ||
|
d4bedd5003 | ||
|
692995f51c | ||
|
2580e9224b | ||
|
e780963891 | ||
|
9c5d24de20 | ||
|
2528856144 | ||
|
de712dd299 | ||
|
a33249fc9d | ||
|
fa44b505de | ||
|
96a06f48ee | ||
|
b3c966dec4 | ||
|
e45314ba2d | ||
|
fc6b6d044b | ||
|
9a4aa314e8 | ||
|
09199d9263 | ||
|
76cdab9838 | ||
|
dc5b3bceca | ||
|
cb5ee702d3 | ||
|
daf456e11a | ||
|
b859631a50 | ||
|
7bfd6de720 | ||
|
e626ca2980 | ||
|
9f8c424b9e | ||
|
bd956aba32 | ||
|
783a96f7ae | ||
|
5639eefd24 | ||
|
4ff68f121d | ||
|
6fd6a68d9d | ||
|
d6f0199ed0 | ||
|
750b96e18e | ||
|
8a14fbc060 | ||
|
06ea9eda7d | ||
|
80490b34ce | ||
|
9e8e7a234f | ||
|
5a6d68e139 | ||
|
f63acafe4e | ||
|
1d62915520 | ||
|
50e305aa2f | ||
|
23ded19d58 | ||
|
e0a3d01091 | ||
|
1db1ef6414 | ||
|
36d48c8669 | ||
|
37667ed70f | ||
|
795e1fa9c0 | ||
|
14980cb821 | ||
|
0330336311 | ||
|
47b55ba164 | ||
|
b66208791a | ||
|
0182a43b8e | ||
|
01036e4540 | ||
|
f67680ae1e | ||
|
75f1d9e9a6 | ||
|
be8f20838e | ||
|
4b06b40dac | ||
|
c9b5842958 | ||
|
05e132d87f | ||
|
13709bd375 | ||
|
a86558644c | ||
|
b0de29ddf4 | ||
|
abf6a09c88 | ||
|
2b992e70c6 | ||
|
c64e0ea489 | ||
|
7de666c595 | ||
|
344c21be5f | ||
|
0bbf70b455 | ||
|
2410598de0 | ||
|
64c67eaf48 | ||
|
592a4fddb7 | ||
|
4f2d57e86f |
59
.github/workflows/build_windows.yml
vendored
Normal file
59
.github/workflows/build_windows.yml
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# This workflow is used to run the pyinstaller spec
|
||||||
|
# and produce a Windows build directory as artifact.
|
||||||
|
|
||||||
|
# In the future it'll also need to confirm that all
|
||||||
|
# of the translations and UI files are built from
|
||||||
|
# scratch as a condition of the tests with pytest.
|
||||||
|
|
||||||
|
name: Build for Windows
|
||||||
|
|
||||||
|
# Controls when the action will run.
|
||||||
|
on:
|
||||||
|
# Triggers the workflow on push or pull request events but only for the develop branch
|
||||||
|
push:
|
||||||
|
branches: [ develop ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ develop ]
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
windows_build:
|
||||||
|
name: Building for Windows ${{ matrix.python_version }} on ${{ matrix.os }}
|
||||||
|
# The type of runner that the job will run on
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
python-version: [3.9]
|
||||||
|
os: [windows-latest]
|
||||||
|
steps:
|
||||||
|
# We use the version from this commit and not just the current branch. This is for R&D builds too.
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
# These should be moved to a pyproject.toml file down the line.
|
||||||
|
- name: Install Python build dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install pyqt5==5.15.7 lxml pytest pytest-faulthandler markdown language_tool_python symspellpy pyspellchecker pyenchant
|
||||||
|
pip install pyinstaller
|
||||||
|
- name: pyinstaller build
|
||||||
|
run: |
|
||||||
|
pyinstaller ./manuskript.spec
|
||||||
|
env:
|
||||||
|
manuskript_version: ${{ steps.vars.outputs.sha_short }}
|
||||||
|
- name: Remove W7 File Issues # https://github.com/olivierkes/manuskript/blob/develop/package/build_for_windows.sh#L85
|
||||||
|
run: |
|
||||||
|
powershell Remove-Item ./dist/manuskript/PyQt5/Qt5/bin/Qt5Bluetooth.dll;
|
||||||
|
powershell Remove-Item ./dist/manuskript/ucrtbase.dll;
|
||||||
|
powershell Remove-Item ./dist/manuskript/api-ms-win-*;
|
||||||
|
|
||||||
|
# https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: manuskript_windows
|
||||||
|
path: ./dist/manuskript/
|
|
@ -1,6 +1,7 @@
|
||||||
# This is a basic workflow to help you get started with Actions
|
# This workflow is used to run pytest and confirm
|
||||||
|
# that Linux builds meet the pytest requirements for the project.
|
||||||
|
|
||||||
name: CI
|
name: Pytest Run (Linux)
|
||||||
|
|
||||||
# Controls when the action will run.
|
# Controls when the action will run.
|
||||||
on:
|
on:
|
||||||
|
@ -13,31 +14,28 @@ on:
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
|
||||||
jobs:
|
jobs:
|
||||||
# This workflow contains a single job called "build"
|
|
||||||
test:
|
test:
|
||||||
name: Test on node ${{ matrix.python_version }} and ${{ matrix.os }}
|
name: Running pytest ${{ matrix.python_version }} and ${{ matrix.os }}
|
||||||
# The type of runner that the job will run on
|
# The type of runner that the job will run on
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: [3.6]
|
# https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
|
||||||
# python-version: [3.6, 3.7, 3.8, 3.9]
|
python-version: [3.9]
|
||||||
os: [ubuntu-16.04]
|
os: [ubuntu-20.04]
|
||||||
# os: [ubuntu-16.04, ubuntu-latest, windows-latest, macos-10.15]
|
|
||||||
|
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install pyqt5==5.9 lxml pytest pytest-faulthandler
|
pip install pyqt5==5.15.7 lxml pytest pytest-faulthandler
|
||||||
sudo apt-get -qq update
|
sudo apt-get -qq update
|
||||||
sudo apt-get -qq install python3-pip python3-dev build-essential qt5-default libxml2-dev libxslt1-dev mesa-utils libgl1-mesa-glx libgl1-mesa-dev libxcb-xinerama0-dev
|
sudo apt-get -qq install python3-pip python3-dev build-essential qt5-default libxml2-dev libxslt1-dev mesa-utils libgl1-mesa-glx libgl1-mesa-dev libxcb-xinerama0-dev
|
||||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -6,6 +6,7 @@
|
||||||
*.msk
|
*.msk
|
||||||
*.nja
|
*.nja
|
||||||
*.pyc
|
*.pyc
|
||||||
|
*.glade~
|
||||||
.cache
|
.cache
|
||||||
.directory
|
.directory
|
||||||
.idea
|
.idea
|
||||||
|
|
|
@ -2,7 +2,7 @@ language: generic
|
||||||
os:
|
os:
|
||||||
- osx
|
- osx
|
||||||
- linux
|
- linux
|
||||||
osx_image: xcode12
|
osx_image: xcode13.4
|
||||||
sudo: required
|
sudo: required
|
||||||
install:
|
install:
|
||||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then package/prepare_osx.sh; fi
|
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then package/prepare_osx.sh; fi
|
||||||
|
|
146
CHANGELOG.md
146
CHANGELOG.md
|
@ -1,8 +1,148 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [0.13.1](https://github.com/olivierkes/manuskript/tree/HEAD)
|
## [0.16.1](https://github.com/olivierkes/manuskript/tree/0.16.1) (2023-12-14)
|
||||||
|
|
||||||
[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.12.0...HEAD)
|
[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.16.0...0.16.1)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- Characters, Plots and Worlds are greyed out [\#1249](https://github.com/olivierkes/manuskript/issues/1249)
|
||||||
|
- Missing Pages with Version 0.16.0 [\#1248](https://github.com/olivierkes/manuskript/issues/1248)
|
||||||
|
- Software crashing every time I open [\#1247](https://github.com/olivierkes/manuskript/issues/1247)
|
||||||
|
|
||||||
|
## [0.16.0](https://github.com/olivierkes/manuskript/tree/0.16.0) (2023-12-07)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.15.0...0.16.0)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- my manuskript is not launching i don't know why [\#1207](https://github.com/olivierkes/manuskript/issues/1207)
|
||||||
|
- cannot download to ubuntu [\#1199](https://github.com/olivierkes/manuskript/issues/1199)
|
||||||
|
- LanguageTool crashes app [\#1143](https://github.com/olivierkes/manuskript/issues/1143)
|
||||||
|
- can't load LanguageTool [\#1142](https://github.com/olivierkes/manuskript/issues/1142)
|
||||||
|
- Crash on spellcheck context menu [\#1224](https://github.com/olivierkes/manuskript/issues/1224)
|
||||||
|
- Trouble launching 0.15 in Windows 10 Home [\#1222](https://github.com/olivierkes/manuskript/issues/1222)
|
||||||
|
- Crash on Search [\#1218](https://github.com/olivierkes/manuskript/issues/1218)
|
||||||
|
- Crash on Mac not on windows with same project [\#1169](https://github.com/olivierkes/manuskript/issues/1169)
|
||||||
|
- Fedora 38 application crashes when cycling through the home options at first launch [\#1163](https://github.com/olivierkes/manuskript/issues/1163)
|
||||||
|
- RuntimeError with manuskriptw.exe \(sys.stderr is None\) [\#1138](https://github.com/olivierkes/manuskript/issues/1138)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- Allow chapter/scene cards to be scrolled [\#1170](https://github.com/olivierkes/manuskript/issues/1170)
|
||||||
|
- Kubuntu 20.40.6 getting undefined symbol: krb5\_ser\_context\_init, version krb5\_3\_MIT [\#1155](https://github.com/olivierkes/manuskript/issues/1155)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Bulk Info Manager bug fix and style changes. [\#1144](https://github.com/olivierkes/manuskript/pull/1144) ([tntscreed](https://github.com/tntscreed))
|
||||||
|
- I added a feature to add "detailed info" entries to multiple characters simultaneously via a dialog box. [\#1137](https://github.com/olivierkes/manuskript/pull/1137) ([tntscreed](https://github.com/tntscreed))
|
||||||
|
- Crash on spellcheck context menu \#1224 [\#1226](https://github.com/olivierkes/manuskript/pull/1226) ([drmousse](https://github.com/drmousse))
|
||||||
|
- Update spellchecker.py And Fixed crashing [\#1214](https://github.com/olivierkes/manuskript/pull/1214) ([TheShadowblast123](https://github.com/TheShadowblast123))
|
||||||
|
- Fix regex for ignoring multi-line comments. [\#1212](https://github.com/olivierkes/manuskript/pull/1212) ([sagev9000](https://github.com/sagev9000))
|
||||||
|
- Skip comments in word count [\#1205](https://github.com/olivierkes/manuskript/pull/1205) ([sagev9000](https://github.com/sagev9000))
|
||||||
|
- added extra check for the filebase dir not to start with an . [\#1198](https://github.com/olivierkes/manuskript/pull/1198) ([Niwreg](https://github.com/Niwreg))
|
||||||
|
- Fix inconsistent newline handling across operating systems [\#1196](https://github.com/olivierkes/manuskript/pull/1196) ([Dreaded-Gnu](https://github.com/Dreaded-Gnu))
|
||||||
|
- Fix manuskriptw startup error [\#1195](https://github.com/olivierkes/manuskript/pull/1195) ([Dreaded-Gnu](https://github.com/Dreaded-Gnu))
|
||||||
|
- Simple history back/forward navigation [\#1165](https://github.com/olivierkes/manuskript/pull/1165) ([alfar](https://github.com/alfar))
|
||||||
|
|
||||||
|
## [0.15.0](https://github.com/olivierkes/manuskript/tree/0.15.0) (2023-03-04)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.14.0...0.15.0)
|
||||||
|
|
||||||
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
- Feature request: Development version indicator [\#1126](https://github.com/olivierkes/manuskript/issues/1126)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- 0.14 won't open [\#1105](https://github.com/olivierkes/manuskript/issues/1105)
|
||||||
|
- click on "Plan" makes Manuskript 0.14.0 crash [\#1094](https://github.com/olivierkes/manuskript/issues/1094)
|
||||||
|
- mouse over goes blank in fiction [\#1093](https://github.com/olivierkes/manuskript/issues/1093)
|
||||||
|
- Crashes on hitting "+" while editing plot step summary [\#1081](https://github.com/olivierkes/manuskript/issues/1081)
|
||||||
|
- Type error on launch [\#1043](https://github.com/olivierkes/manuskript/issues/1043)
|
||||||
|
- Plot-step summary disappearing and not being saved! [\#1008](https://github.com/olivierkes/manuskript/issues/1008)
|
||||||
|
- Don't open msk from command line [\#993](https://github.com/olivierkes/manuskript/issues/993)
|
||||||
|
- Metadata: References [\#756](https://github.com/olivierkes/manuskript/issues/756)
|
||||||
|
- Context/right click Menu slow and only in english [\#487](https://github.com/olivierkes/manuskript/issues/487)
|
||||||
|
- Translations breaks shortcuts [\#1135](https://github.com/olivierkes/manuskript/issues/1135)
|
||||||
|
- Missing visual indicator for collapsables like metadata fields [\#1132](https://github.com/olivierkes/manuskript/issues/1132)
|
||||||
|
- New search bug [\#1125](https://github.com/olivierkes/manuskript/issues/1125)
|
||||||
|
- One-time glitch: dragged "World" entry to top of list and it disappeared [\#1122](https://github.com/olivierkes/manuskript/issues/1122)
|
||||||
|
- Loading Error with fileno [\#1121](https://github.com/olivierkes/manuskript/issues/1121)
|
||||||
|
- Search no longer works [\#1095](https://github.com/olivierkes/manuskript/issues/1095)
|
||||||
|
- Crash when opening a plot in the cheat sheet containing deleted characters [\#1082](https://github.com/olivierkes/manuskript/issues/1082)
|
||||||
|
- CTD Crash To Desktop after "inserting link" [\#1071](https://github.com/olivierkes/manuskript/issues/1071)
|
||||||
|
- Spellcheck intermittantly looses location in editor [\#1065](https://github.com/olivierkes/manuskript/issues/1065)
|
||||||
|
- Translation - missing lines in .ts file etc. issues [\#1052](https://github.com/olivierkes/manuskript/issues/1052)
|
||||||
|
- Debian installer zst compression error [\#1047](https://github.com/olivierkes/manuskript/issues/1047)
|
||||||
|
- manuskriptw.exe can not be executed due to unhandled exception "NullWriter" [\#1044](https://github.com/olivierkes/manuskript/issues/1044)
|
||||||
|
- Crash when attempting to add an inexistent reference [\#1042](https://github.com/olivierkes/manuskript/issues/1042)
|
||||||
|
- Setting the language to German deletes shortcut-functions like "Ctrl+S" [\#1012](https://github.com/olivierkes/manuskript/issues/1012)
|
||||||
|
- Open in new tab doesn't work from tree [\#919](https://github.com/olivierkes/manuskript/issues/919)
|
||||||
|
- \[Bug\] Next Button in Characters Pane [\#584](https://github.com/olivierkes/manuskript/issues/584)
|
||||||
|
- Top level World items with sub-items do not visually indicate sub-items exist [\#305](https://github.com/olivierkes/manuskript/issues/305)
|
||||||
|
- saving error [\#274](https://github.com/olivierkes/manuskript/issues/274)
|
||||||
|
- Crashing when creating a new project - locale C [\#130](https://github.com/olivierkes/manuskript/issues/130)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- Adding a clearer discription to contributing guidlines [\#1115](https://github.com/olivierkes/manuskript/issues/1115)
|
||||||
|
- I can't click boxes to edit them [\#1104](https://github.com/olivierkes/manuskript/issues/1104)
|
||||||
|
- Minor Python error during Installation - Linux Mint 20.3 [\#1097](https://github.com/olivierkes/manuskript/issues/1097)
|
||||||
|
- Package as App Bundle for macOS [\#567](https://github.com/olivierkes/manuskript/issues/567)
|
||||||
|
- Update files about languages [\#1133](https://github.com/olivierkes/manuskript/issues/1133)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Fix to error \#1095 [\#1098](https://github.com/olivierkes/manuskript/pull/1098) ([TheShadowOfHassen](https://github.com/TheShadowOfHassen))
|
||||||
|
- Add GitHub Actions Windows CI build to commits [\#1092](https://github.com/olivierkes/manuskript/pull/1092) ([MC42](https://github.com/MC42))
|
||||||
|
- Resolve "Search" and "Cheat sheet" strings not being translated correctly in source string [\#1091](https://github.com/olivierkes/manuskript/pull/1091) ([MC42](https://github.com/MC42))
|
||||||
|
- Feature/split editor functionality [\#1060](https://github.com/olivierkes/manuskript/pull/1060) ([tcsch](https://github.com/tcsch))
|
||||||
|
- Create a macOS installer \(fixes \#567\) [\#1056](https://github.com/olivierkes/manuskript/pull/1056) ([marosoft](https://github.com/marosoft))
|
||||||
|
- Session target [\#460](https://github.com/olivierkes/manuskript/pull/460) ([nephlm](https://github.com/nephlm))
|
||||||
|
|
||||||
|
## [0.14.0](https://github.com/olivierkes/manuskript/tree/0.14.0) (2022-06-08)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.13.1...0.14.0)
|
||||||
|
|
||||||
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
- \[Feature Request\] Full Compile Export [\#1034](https://github.com/olivierkes/manuskript/issues/1034)
|
||||||
|
- Cleaning up the flatpak [\#1029](https://github.com/olivierkes/manuskript/issues/1029)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- crash on the "Outline" section [\#1032](https://github.com/olivierkes/manuskript/issues/1032)
|
||||||
|
- Manuskript crashing while booting [\#1021](https://github.com/olivierkes/manuskript/issues/1021)
|
||||||
|
- Crashing when I'm trying to create the 1st project [\#1035](https://github.com/olivierkes/manuskript/issues/1035)
|
||||||
|
- \[Bug\] double click causes crash in outline or plots view [\#1014](https://github.com/olivierkes/manuskript/issues/1014)
|
||||||
|
- Re-ordering items in the outline causes data loss/text overwritting [\#1001](https://github.com/olivierkes/manuskript/issues/1001)
|
||||||
|
- An unhandled exception has occurred! on cheatsheet [\#994](https://github.com/olivierkes/manuskript/issues/994)
|
||||||
|
- Crash when changing index card style [\#992](https://github.com/olivierkes/manuskript/issues/992)
|
||||||
|
- Regex search causes crash [\#989](https://github.com/olivierkes/manuskript/issues/989)
|
||||||
|
- Crash when project file is open in another application [\#950](https://github.com/olivierkes/manuskript/issues/950)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- Creating project from template dialog has fixed size [\#996](https://github.com/olivierkes/manuskript/issues/996)
|
||||||
|
- Creating empty language file hr-HR [\#1023](https://github.com/olivierkes/manuskript/issues/1023)
|
||||||
|
- Russian translation [\#990](https://github.com/olivierkes/manuskript/issues/990)
|
||||||
|
- \[Windows Version\] Two program windows pop up [\#327](https://github.com/olivierkes/manuskript/issues/327)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- catch AttributeError in plotTreeView double click event \(fixes \#1014\) [\#1015](https://github.com/olivierkes/manuskript/pull/1015) ([amconners](https://github.com/amconners))
|
||||||
|
- Change welcome page spacer size policy to allow welcome to expand to fill most of screen \(fixes olivierkes\#996\) [\#1007](https://github.com/olivierkes/manuskript/pull/1007) ([jdanielp](https://github.com/jdanielp))
|
||||||
|
- Fix crash when files are locked for writing \(Fixes olivierkes\#950\) [\#1004](https://github.com/olivierkes/manuskript/pull/1004) ([jdanielp](https://github.com/jdanielp))
|
||||||
|
- Fix crash when regex is not valid \(Fixes olivierkes\#989\) [\#1003](https://github.com/olivierkes/manuskript/pull/1003) ([jdanielp](https://github.com/jdanielp))
|
||||||
|
- Potential fix for \#719, \#1001: data loss when reordering items in upward direction [\#1002](https://github.com/olivierkes/manuskript/pull/1002) ([olivierkes](https://github.com/olivierkes))
|
||||||
|
- hard\_line\_breaks support [\#1000](https://github.com/olivierkes/manuskript/pull/1000) ([Mte90](https://github.com/Mte90))
|
||||||
|
- Fix for \#992 and \#998 [\#999](https://github.com/olivierkes/manuskript/pull/999) ([amconners](https://github.com/amconners))
|
||||||
|
- Write a test for ParseMMDFile function. [\#831](https://github.com/olivierkes/manuskript/pull/831) ([zeth](https://github.com/zeth))
|
||||||
|
|
||||||
|
## [0.13.1](https://github.com/olivierkes/manuskript/tree/0.13.1) (2021-12-13)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.12.0...0.13.1)
|
||||||
|
|
||||||
**Implemented enhancements:**
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
@ -240,7 +380,7 @@
|
||||||
- Fix Linux Travis CI build error - pyenv: version `3.6.3' not installed [\#610](https://github.com/olivierkes/manuskript/pull/610) ([gedakc](https://github.com/gedakc))
|
- Fix Linux Travis CI build error - pyenv: version `3.6.3' not installed [\#610](https://github.com/olivierkes/manuskript/pull/610) ([gedakc](https://github.com/gedakc))
|
||||||
- Fix crash when setting word Goal on new Text \(scene\) in Outline pane [\#609](https://github.com/olivierkes/manuskript/pull/609) ([gedakc](https://github.com/gedakc))
|
- Fix crash when setting word Goal on new Text \(scene\) in Outline pane [\#609](https://github.com/olivierkes/manuskript/pull/609) ([gedakc](https://github.com/gedakc))
|
||||||
- Spelling: Manuscript, could not, process, … No content [\#588](https://github.com/olivierkes/manuskript/pull/588) ([comradekingu](https://github.com/comradekingu))
|
- Spelling: Manuscript, could not, process, … No content [\#588](https://github.com/olivierkes/manuskript/pull/588) ([comradekingu](https://github.com/comradekingu))
|
||||||
- fix issue \#468 'unit' is reset [\#587](https://github.com/olivierkes/manuskript/pull/587) ([NocturnalFred](https://github.com/NocturnalFred))
|
- fix issue \#468 'unit' is reset [\#587](https://github.com/olivierkes/manuskript/pull/587) ([SOLIDFred](https://github.com/SOLIDFred))
|
||||||
- Fix pandoc export crashes is project title is empty [\#585](https://github.com/olivierkes/manuskript/pull/585) ([gedakc](https://github.com/gedakc))
|
- Fix pandoc export crashes is project title is empty [\#585](https://github.com/olivierkes/manuskript/pull/585) ([gedakc](https://github.com/gedakc))
|
||||||
- Track dirty state and have the UI behave accordingly [\#583](https://github.com/olivierkes/manuskript/pull/583) ([worstje](https://github.com/worstje))
|
- Track dirty state and have the UI behave accordingly [\#583](https://github.com/olivierkes/manuskript/pull/583) ([worstje](https://github.com/worstje))
|
||||||
- Fix crash if invalid character is inserted into the text. [\#578](https://github.com/olivierkes/manuskript/pull/578) ([kakaroto](https://github.com/kakaroto))
|
- Fix crash if invalid character is inserted into the text. [\#578](https://github.com/olivierkes/manuskript/pull/578) ([kakaroto](https://github.com/kakaroto))
|
||||||
|
|
26
README.md
26
README.md
|
@ -1,11 +1,15 @@
|
||||||
# Manuskript
|
# Manuskript
|
||||||
|
|
||||||
[Manuskript](http://www.theologeek.ch/manuskript) is an open-source
|
[Manuskript](https://www.theologeek.ch/manuskript) is an open-source
|
||||||
tool for writers.
|
tool for writers.
|
||||||
|
|
||||||
|
[![pytest](https://github.com/olivierkes/manuskript/workflows/Pytest%20Run%20%28Linux%29/badge.svg)](https://github.com/olivierkes/manuskript/actions/workflows/pytest.yml)
|
||||||
|
[![manuskript](https://snapcraft.io/manuskript/badge.svg)](https://snapcraft.io/manuskript)
|
||||||
|
[![translations](https://hosted.weblate.org/widgets/manuskript/-/translations/svg-badge.svg)](https://hosted.weblate.org/projects/manuskript/translations)
|
||||||
|
|
||||||
Manuskript runs on GNU/Linux, Mac OS X, and Windows.
|
Manuskript runs on GNU/Linux, Mac OS X, and Windows.
|
||||||
|
|
||||||
![Main view](http://www.theologeek.ch/manuskript/wp-content/uploads/2017/11/manuskript-0.5.0-main-view.jpg)
|
![Main view](https://www.theologeek.ch/manuskript/wp-content/uploads/2017/11/manuskript-0.5.0-main-view.jpg)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
@ -18,34 +22,34 @@ With Manuskript you can:
|
||||||
* Create characters
|
* Create characters
|
||||||
* Conceive plots
|
* Conceive plots
|
||||||
* Construct outlines
|
* Construct outlines
|
||||||
([Outline mode](http://www.theologeek.ch/manuskript/2016/02/05/outliner/)
|
([Outline mode](https://www.theologeek.ch/manuskript/2016/02/05/outliner/)
|
||||||
and/or
|
and/or
|
||||||
[Index cards](http://www.theologeek.ch/manuskript/2016/02/05/index-cards/))
|
[Index cards](https://www.theologeek.ch/manuskript/2016/02/05/index-cards/))
|
||||||
* Write with focus
|
* Write with focus
|
||||||
([Distraction free mode](https://github.com/olivierkes/manuskript/wiki/Full-screen-mode))
|
([Distraction free mode](https://github.com/olivierkes/manuskript/wiki/Full-screen-mode))
|
||||||
* Build worlds
|
* Build worlds
|
||||||
* [Track items](https://github.com/olivierkes/manuskript/wiki/How-to-keep-track-of-important-items)
|
* [Track items](https://github.com/olivierkes/manuskript/wiki/How-to-keep-track-of-important-items)
|
||||||
* Edit and re-organize chapters and scenes
|
* Edit and re-organize chapters and scenes
|
||||||
* View [Story line](http://www.theologeek.ch/manuskript/2016/02/28/story-line/)
|
* View [Story line](https://www.theologeek.ch/manuskript/2016/02/28/story-line/)
|
||||||
* Compose with
|
* Compose with
|
||||||
[fiction or non-fiction templates and writing modes](http://www.theologeek.ch/manuskript/2016/03/31/writing-modes-simple-fiction/)
|
[fiction or non-fiction templates and writing modes](https://www.theologeek.ch/manuskript/2016/03/31/writing-modes-simple-fiction/)
|
||||||
* Import and export document formats such as HTML, ePub, OpenDocument, DocX, and
|
* Import and export document formats such as HTML, ePub, OpenDocument, DocX, and
|
||||||
[more](https://github.com/olivierkes/manuskript/wiki/Import-and-Export-capabilities)
|
[more](https://github.com/olivierkes/manuskript/wiki/Import-and-Export-capabilities)
|
||||||
|
|
||||||
|
|
||||||
Additionally Manuskript can help in many more ways with a spell
|
Additionally Manuskript can help in many more ways with a spell
|
||||||
checker, markdown highlighter,
|
checker, markdown highlighter,
|
||||||
[frequency analyzer](http://www.theologeek.ch/manuskript/2016/02/08/frequency-analyzer/),
|
[frequency analyzer](https://www.theologeek.ch/manuskript/2016/02/08/frequency-analyzer/),
|
||||||
and automatic save in
|
and automatic save in
|
||||||
[open and plain text file format](http://www.theologeek.ch/manuskript/2016/03/31/open-plain-text-file-format/).
|
[open and plain text file format](https://www.theologeek.ch/manuskript/2016/03/31/open-plain-text-file-format/).
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
[Download](http://www.theologeek.ch/manuskript/download) and install Manuskript today.
|
[Download](https://www.theologeek.ch/manuskript/download) and install Manuskript today.
|
||||||
|
|
||||||
## HowTo's
|
## HowTo's
|
||||||
|
|
||||||
See the [Wiki](http://github.com/olivierkes/manuskript/wiki) for more
|
See the [Wiki](https://github.com/olivierkes/manuskript/wiki) for more
|
||||||
detailed instructions on how to install and use Manuskript.
|
detailed instructions on how to install and use Manuskript.
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
|
@ -56,7 +60,7 @@ You can help improve Manuskript by reporting
|
||||||
and
|
and
|
||||||
[translating to other languages](https://github.com/olivierkes/manuskript/wiki/Translate-Manuskript).
|
[translating to other languages](https://github.com/olivierkes/manuskript/wiki/Translate-Manuskript).
|
||||||
See also
|
See also
|
||||||
[Manuskript Contribute page](http://www.theologeek.ch/manuskript/contribute/).
|
[Manuskript Contribute page](https://www.theologeek.ch/manuskript/contribute/).
|
||||||
|
|
||||||
Manuskript is written in Python3 and PyQt5.
|
Manuskript is written in Python3 and PyQt5.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
TRANSLATIONS += manuskript_fr.ts
|
|
||||||
TRANSLATIONS += manuskript_es.ts
|
|
||||||
TRANSLATIONS += manuskript_de.ts
|
|
||||||
TRANSLATIONS += manuskript_sv.ts
|
|
|
@ -1,114 +1,243 @@
|
||||||
|
FORMS += ../manuskript/ui/exporters/exporter_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/exporters/exportersManager_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/about_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/welcome_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/mainWindow.ui
|
||||||
FORMS += ../manuskript/ui/importers/generalSettings_ui.ui
|
FORMS += ../manuskript/ui/importers/generalSettings_ui.ui
|
||||||
FORMS += ../manuskript/ui/importers/importer_ui.ui
|
FORMS += ../manuskript/ui/importers/importer_ui.ui
|
||||||
FORMS += ../manuskript/ui/about_ui.ui
|
FORMS += ../manuskript/ui/search_ui.ui
|
||||||
FORMS += ../manuskript/ui/settings_ui.ui
|
FORMS += ../manuskript/ui/settings_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/tools/frequency_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/tools/targets_ui.ui
|
||||||
FORMS += ../manuskript/ui/editors/locker_ui.ui
|
FORMS += ../manuskript/ui/editors/locker_ui.ui
|
||||||
FORMS += ../manuskript/ui/editors/mainEditor_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/editors/editorWidget_ui.ui
|
FORMS += ../manuskript/ui/editors/editorWidget_ui.ui
|
||||||
FORMS += ../manuskript/ui/editors/completer_ui.ui
|
FORMS += ../manuskript/ui/editors/completer_ui.ui
|
||||||
FORMS += ../manuskript/ui/editors/textFormat_ui.ui
|
FORMS += ../manuskript/ui/editors/textFormat_ui.ui
|
||||||
|
FORMS += ../manuskript/ui/editors/mainEditor_ui.ui
|
||||||
FORMS += ../manuskript/ui/editors/tabSplitter_ui.ui
|
FORMS += ../manuskript/ui/editors/tabSplitter_ui.ui
|
||||||
FORMS += ../manuskript/ui/tools/frequency_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/mainWindow.ui
|
|
||||||
FORMS += ../manuskript/ui/views/basicItemView_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/views/metadataView_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/views/storylineView_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/views/propertiesView_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/views/sldImportance_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/search_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/welcome_ui.ui
|
|
||||||
FORMS += ../manuskript/ui/cheatSheet_ui.ui
|
FORMS += ../manuskript/ui/cheatSheet_ui.ui
|
||||||
FORMS += ../manuskript/ui/revisions_ui.ui
|
FORMS += ../manuskript/ui/revisions_ui.ui
|
||||||
FORMS += ../manuskript/ui/exporters/exportersManager_ui.ui
|
FORMS += ../manuskript/ui/views/storylineView_ui.ui
|
||||||
FORMS += ../manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui
|
FORMS += ../manuskript/ui/views/sldImportance_ui.ui
|
||||||
FORMS += ../manuskript/ui/exporters/exporter_ui.ui
|
FORMS += ../manuskript/ui/views/basicItemView_ui.ui
|
||||||
SOURCES += ../manuskript/models/persosProxyModel.py
|
FORMS += ../manuskript/ui/views/propertiesView_ui.ui
|
||||||
SOURCES += ../manuskript/models/plotsProxyModel.py
|
FORMS += ../manuskript/ui/views/metadataView_ui.ui
|
||||||
SOURCES += ../manuskript/models/plotModel.py
|
FORMS += ../manuskript/ui/listDialog_ui.ui
|
||||||
SOURCES += ../manuskript/models/worldModel.py
|
SOURCES += ../manuskript/functions/__init__.py
|
||||||
SOURCES += ../manuskript/models/abstractModel.py
|
SOURCES += ../manuskript/functions/spellchecker.py
|
||||||
SOURCES += ../manuskript/models/characterModel.py
|
SOURCES += ../manuskript/__init__.py
|
||||||
SOURCES += ../manuskript/exporter/pandoc/abstractPlainText.py
|
SOURCES += ../manuskript/enums.py
|
||||||
SOURCES += ../manuskript/exporter/manuskript/markdown.py
|
SOURCES += ../manuskript/converters/__init__.py
|
||||||
SOURCES += ../manuskript/mainWindow.py
|
SOURCES += ../manuskript/converters/abstractConverter.py
|
||||||
|
SOURCES += ../manuskript/converters/pandocConverter.py
|
||||||
|
SOURCES += ../manuskript/converters/markdownConverter.py
|
||||||
SOURCES += ../manuskript/main.py
|
SOURCES += ../manuskript/main.py
|
||||||
SOURCES += ../manuskript/settingsWindow.py
|
SOURCES += ../manuskript/mainWindow.py
|
||||||
SOURCES += ../manuskript/load_save/version_0.py
|
SOURCES += ../manuskript/logging.py
|
||||||
SOURCES += ../manuskript/ui/importers/importer.py
|
SOURCES += ../manuskript/exporter/__init__.py
|
||||||
SOURCES += ../manuskript/ui/helpLabel.py
|
SOURCES += ../manuskript/exporter/basic.py
|
||||||
SOURCES += ../manuskript/ui/editors/textFormat.py
|
SOURCES += ../manuskript/exporter/pandoc/__init__.py
|
||||||
SOURCES += ../manuskript/ui/editors/tabSplitter.py
|
SOURCES += ../manuskript/exporter/pandoc/abstractOutput.py
|
||||||
SOURCES += ../manuskript/ui/editors/mainEditor.py
|
|
||||||
SOURCES += ../manuskript/ui/editors/fullScreenEditor.py
|
|
||||||
SOURCES += ../manuskript/ui/editors/locker.py
|
|
||||||
SOURCES += ../manuskript/ui/welcome.py
|
|
||||||
SOURCES += ../manuskript/ui/tools/frequencyAnalyzer.py
|
|
||||||
SOURCES += ../manuskript/ui/tools/splitDialog.py
|
|
||||||
SOURCES += ../manuskript/ui/cheatSheet.py
|
|
||||||
SOURCES += ../manuskript/ui/about.py
|
|
||||||
SOURCES += ../manuskript/ui/views/cmbOutlineCharacterChoser.py
|
|
||||||
SOURCES += ../manuskript/ui/views/sldImportance.py
|
|
||||||
SOURCES += ../manuskript/ui/views/cmbOutlineStatusChoser.py
|
|
||||||
SOURCES += ../manuskript/ui/views/textEditView.py
|
|
||||||
SOURCES += ../manuskript/ui/views/corkDelegate.py
|
|
||||||
SOURCES += ../manuskript/ui/views/outlineDelegates.py
|
|
||||||
SOURCES += ../manuskript/ui/views/lineEditView.py
|
|
||||||
SOURCES += ../manuskript/ui/views/cmbOutlineLabelChoser.py
|
|
||||||
SOURCES += ../manuskript/ui/views/plotDelegate.py
|
|
||||||
SOURCES += ../manuskript/ui/views/plotTreeView.py
|
|
||||||
SOURCES += ../manuskript/ui/views/treeView.py
|
|
||||||
SOURCES += ../manuskript/ui/views/characterTreeView.py
|
|
||||||
SOURCES += ../manuskript/ui/views/storylineView.py
|
|
||||||
SOURCES += ../manuskript/ui/views/MDEditCompleter.py
|
|
||||||
SOURCES += ../manuskript/ui/search.py
|
|
||||||
SOURCES += ../manuskript/ui/collapsibleDockWidgets.py
|
|
||||||
SOURCES += ../manuskript/ui/exporters/manuskript/plainTextSettings.py
|
|
||||||
SOURCES += ../manuskript/ui/exporters/exporter.py
|
|
||||||
SOURCES += ../manuskript/ui/exporters/exportersManager.py
|
|
||||||
SOURCES += ../manuskript/ui/revisions.py
|
|
||||||
SOURCES += ../manuskript/models/references.py
|
|
||||||
SOURCES += ../manuskript/models/outlineItem.py
|
|
||||||
SOURCES += ../manuskript/exporter/pandoc/HTML.py
|
|
||||||
SOURCES += ../manuskript/exporter/pandoc/outputFormats.py
|
SOURCES += ../manuskript/exporter/pandoc/outputFormats.py
|
||||||
SOURCES += ../manuskript/exporter/pandoc/abstractPlainText.py
|
SOURCES += ../manuskript/exporter/pandoc/abstractPlainText.py
|
||||||
SOURCES += ../manuskript/exporter/pandoc/plainText.py
|
SOURCES += ../manuskript/exporter/pandoc/HTML.py
|
||||||
SOURCES += ../manuskript/exporter/pandoc/PDF.py
|
SOURCES += ../manuskript/exporter/pandoc/PDF.py
|
||||||
SOURCES += ../manuskript/exporter/pandoc/__init__.py
|
SOURCES += ../manuskript/exporter/pandoc/plainText.py
|
||||||
|
SOURCES += ../manuskript/exporter/manuskript/__init__.py
|
||||||
SOURCES += ../manuskript/exporter/manuskript/markdown.py
|
SOURCES += ../manuskript/exporter/manuskript/markdown.py
|
||||||
SOURCES += ../manuskript/exporter/manuskript/HTML.py
|
SOURCES += ../manuskript/exporter/manuskript/HTML.py
|
||||||
SOURCES += ../manuskript/exporter/manuskript/plainText.py
|
SOURCES += ../manuskript/exporter/manuskript/plainText.py
|
||||||
SOURCES += ../manuskript/exporter/manuskript/__init__.py
|
SOURCES += ../manuskript/tests/__init__.py
|
||||||
SOURCES += ../manuskript/converters/pandocConverter.py
|
SOURCES += ../manuskript/tests/load_save/__init__.py
|
||||||
|
SOURCES += ../manuskript/tests/load_save/test_ParseMMDFile.py
|
||||||
|
SOURCES += ../manuskript/tests/models/__init__.py
|
||||||
|
SOURCES += ../manuskript/tests/models/test_searchFilter.py
|
||||||
|
SOURCES += ../manuskript/tests/models/test_searchResultModel.py
|
||||||
|
SOURCES += ../manuskript/tests/models/test_outlineItem.py
|
||||||
|
SOURCES += ../manuskript/tests/models/test_references.py
|
||||||
|
SOURCES += ../manuskript/tests/models/conftest.py
|
||||||
|
SOURCES += ../manuskript/tests/test_settingsWindow.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/exporters/__init__.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/exporters/test_exporters.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/__init__.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/importers/__init__.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/importers/test_importers.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/test_welcome.py
|
||||||
|
SOURCES += ../manuskript/tests/ui/test_searchMenu.py
|
||||||
|
SOURCES += ../manuskript/tests/conftest.py
|
||||||
|
SOURCES += ../manuskript/tests/test_functions.py
|
||||||
|
SOURCES += ../manuskript/searchLabels.py
|
||||||
|
SOURCES += ../manuskript/settings.py
|
||||||
|
SOURCES += ../manuskript/importer/__init__.py
|
||||||
|
SOURCES += ../manuskript/importer/pandocImporters.py
|
||||||
|
SOURCES += ../manuskript/importer/mindMapImporter.py
|
||||||
SOURCES += ../manuskript/importer/markdownImporter.py
|
SOURCES += ../manuskript/importer/markdownImporter.py
|
||||||
SOURCES += ../manuskript/importer/folderImporter.py
|
SOURCES += ../manuskript/importer/folderImporter.py
|
||||||
SOURCES += ../manuskript/importer/opmlImporter.py
|
SOURCES += ../manuskript/importer/opmlImporter.py
|
||||||
SOURCES += ../manuskript/importer/pandocImporters.py
|
SOURCES += ../manuskript/importer/abstractImporter.py
|
||||||
SOURCES += ../manuskript/importer/mindMapImporter.py
|
SOURCES += ../manuskript/load_save/__init__.py
|
||||||
SOURCES += ../manuskript/ui/views/corkDelegate.py
|
SOURCES += ../manuskript/load_save/version_1.py
|
||||||
SOURCES += ../manuskript/ui/views/outlineBasics.py
|
SOURCES += ../manuskript/load_save/version_0.py
|
||||||
|
SOURCES += ../manuskript/loadSave.py
|
||||||
|
SOURCES += ../manuskript/models/__init__.py
|
||||||
|
SOURCES += ../manuskript/models/searchResultModel.py
|
||||||
|
SOURCES += ../manuskript/models/outlineItem.py
|
||||||
|
SOURCES += ../manuskript/models/searchableItem.py
|
||||||
|
SOURCES += ../manuskript/models/plotsProxyModel.py
|
||||||
|
SOURCES += ../manuskript/models/worldModel.py
|
||||||
|
SOURCES += ../manuskript/models/persosProxyModel.py
|
||||||
|
SOURCES += ../manuskript/models/characterPOVModel.py
|
||||||
|
SOURCES += ../manuskript/models/abstractItem.py
|
||||||
|
SOURCES += ../manuskript/models/plotModel.py
|
||||||
|
SOURCES += ../manuskript/models/searchFilter.py
|
||||||
|
SOURCES += ../manuskript/models/references.py
|
||||||
|
SOURCES += ../manuskript/models/outlineModel.py
|
||||||
|
SOURCES += ../manuskript/models/flatDataModelWrapper.py
|
||||||
|
SOURCES += ../manuskript/models/abstractModel.py
|
||||||
|
SOURCES += ../manuskript/models/searchableModel.py
|
||||||
|
SOURCES += ../manuskript/models/characterModel.py
|
||||||
|
SOURCES += ../manuskript/version.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/exportersManager_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/manuskript/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/manuskript/plainTextSettings.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/manuskript/plainTextSettings_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/exporter.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/exportersManager.py
|
||||||
|
SOURCES += ../manuskript/ui/exporters/exporter_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/listDialog.py
|
||||||
|
SOURCES += ../manuskript/ui/mainWindow.py
|
||||||
|
SOURCES += ../manuskript/ui/revisions_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/about_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/importers/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/importers/generalSettings_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/importers/importer_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/importers/importer.py
|
||||||
|
SOURCES += ../manuskript/ui/importers/generalSettings.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/basicHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/abstractSpecificSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/worldSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/plotSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/characterSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/abstractSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/plotStepSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/outlineSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/searchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/flatDataSearchResultHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/searchResultHighlighters/widgetSelectionHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/MMDHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/markdownTokenizer.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/markdownHighlighter.py
|
||||||
|
SOURCES += ../manuskript/ui/highlighters/markdownEnums.py
|
||||||
|
SOURCES += ../manuskript/ui/tools/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/tools/splitDialog.py
|
||||||
|
SOURCES += ../manuskript/ui/tools/frequency_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/tools/targets_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/tools/frequencyAnalyzer.py
|
||||||
|
SOURCES += ../manuskript/ui/tools/targets.py
|
||||||
|
SOURCES += ../manuskript/ui/helpLabel.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/completer_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/fullScreenEditor.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/blockUserData.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/textFormat.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/MDFunctions.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/locker.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/locker_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/editorWidget.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/completer.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/textFormat_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/tabSplitter.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/themes.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/tabSplitter_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/mainEditor.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/editorWidget_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/editors/mainEditor_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/revisions.py
|
||||||
|
SOURCES += ../manuskript/ui/search_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/style.py
|
||||||
|
SOURCES += ../manuskript/ui/cheatSheet_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/views/outlineView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/corkView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/metadataView_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/views/__init__.py
|
||||||
|
SOURCES += ../manuskript/ui/views/treeView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/cmbOutlineStatusChoser.py
|
||||||
|
SOURCES += ../manuskript/ui/views/characterTreeView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/metadataView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/plotTreeView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/cmbOutlineCharacterChoser.py
|
||||||
|
SOURCES += ../manuskript/ui/views/webView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/textEditView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/storylineView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/sldImportance.py
|
||||||
|
SOURCES += ../manuskript/ui/views/sldImportance_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/views/basicItemView_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/views/storylineView_ui.py
|
||||||
|
SOURCES += ../manuskript/ui/views/MDEditCompleter.py
|
||||||
|
SOURCES += ../manuskript/ui/views/MDEditView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/cmbOutlineLabelChoser.py
|
||||||
SOURCES += ../manuskript/ui/views/outlineDelegates.py
|
SOURCES += ../manuskript/ui/views/outlineDelegates.py
|
||||||
|
SOURCES += ../manuskript/ui/views/outlineBasics.py
|
||||||
|
SOURCES += ../manuskript/ui/views/propertiesView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/lineEditView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/plotDelegate.py
|
||||||
|
SOURCES += ../manuskript/ui/views/basicItemView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/treeDelegates.py
|
||||||
|
SOURCES += ../manuskript/ui/views/chkOutlineCompile.py
|
||||||
|
SOURCES += ../manuskript/ui/views/dndView.py
|
||||||
|
SOURCES += ../manuskript/ui/views/corkDelegate.py
|
||||||
|
SOURCES += ../manuskript/ui/views/PDFViewer.py
|
||||||
|
SOURCES += ../manuskript/ui/views/propertiesView_ui.py
|
||||||
SOURCES += ../manuskript/ui/collapsibleDockWidgets.py
|
SOURCES += ../manuskript/ui/collapsibleDockWidgets.py
|
||||||
|
SOURCES += ../manuskript/ui/collapsibleGroupBox2.py
|
||||||
TRANSLATIONS += manuskript_ar_SA.ts
|
SOURCES += ../manuskript/ui/welcome_ui.py
|
||||||
TRANSLATIONS += manuskript_de.ts
|
SOURCES += ../manuskript/ui/welcome.py
|
||||||
TRANSLATIONS += manuskript_en_GB.ts
|
SOURCES += ../manuskript/ui/collapsibleGroupBox.py
|
||||||
TRANSLATIONS += manuskript_es.ts
|
SOURCES += ../manuskript/ui/settings_ui.py
|
||||||
TRANSLATIONS += manuskript_fa.ts
|
SOURCES += ../manuskript/ui/searchMenu.py
|
||||||
TRANSLATIONS += manuskript_fr.ts
|
SOURCES += ../manuskript/ui/listDialog_ui.py
|
||||||
TRANSLATIONS += manuskript_hu.ts
|
SOURCES += ../manuskript/ui/about.py
|
||||||
TRANSLATIONS += manuskript_id.ts
|
SOURCES += ../manuskript/ui/cheatSheet.py
|
||||||
TRANSLATIONS += manuskript_it.ts
|
SOURCES += ../manuskript/ui/statusLabel.py
|
||||||
TRANSLATIONS += manuskript_ja.ts
|
SOURCES += ../manuskript/ui/search.py
|
||||||
TRANSLATIONS += manuskript_ko.ts
|
SOURCES += ../manuskript/settingsWindow.py
|
||||||
TRANSLATIONS += manuskript_nb_NO.ts
|
|
||||||
TRANSLATIONS += manuskript_nl.ts
|
|
||||||
TRANSLATIONS += manuskript_pl.ts
|
|
||||||
TRANSLATIONS += manuskript_pt_BR.ts
|
|
||||||
TRANSLATIONS += manuskript_pt_PT.ts
|
|
||||||
TRANSLATIONS += manuskript_ro.ts
|
|
||||||
TRANSLATIONS += manuskript_ru.ts
|
|
||||||
TRANSLATIONS += manuskript_sv.ts
|
TRANSLATIONS += manuskript_sv.ts
|
||||||
TRANSLATIONS += manuskript_tr.ts
|
TRANSLATIONS += manuskript_ta.ts
|
||||||
TRANSLATIONS += manuskript_uk.ts
|
TRANSLATIONS += manuskript_nb_NO.ts
|
||||||
|
TRANSLATIONS += manuskript_ca.ts
|
||||||
|
TRANSLATIONS += manuskript_id.ts
|
||||||
|
TRANSLATIONS += manuskript_fi.ts
|
||||||
TRANSLATIONS += manuskript_zh_CN.ts
|
TRANSLATIONS += manuskript_zh_CN.ts
|
||||||
|
TRANSLATIONS += manuskript_pt.ts
|
||||||
|
TRANSLATIONS += manuskript_hu.ts
|
||||||
|
TRANSLATIONS += manuskript_it.ts
|
||||||
|
TRANSLATIONS += manuskript_sk.ts
|
||||||
|
TRANSLATIONS += manuskript_pl.ts
|
||||||
|
TRANSLATIONS += manuskript_tr.ts
|
||||||
|
TRANSLATIONS += manuskript_es.ts
|
||||||
|
TRANSLATIONS += manuskript_ru.ts
|
||||||
|
TRANSLATIONS += manuskript_uk.ts
|
||||||
|
TRANSLATIONS += manuskript_pt_PT.ts
|
||||||
|
TRANSLATIONS += manuskript_fr.ts
|
||||||
|
TRANSLATIONS += manuskript_mr.ts
|
||||||
|
TRANSLATIONS += manuskript_ja.ts
|
||||||
|
TRANSLATIONS += manuskript_ar_SA.ts
|
||||||
|
TRANSLATIONS += manuskript_nl.ts
|
||||||
|
TRANSLATIONS += manuskript_he.ts
|
||||||
|
TRANSLATIONS += manuskript_da.ts
|
||||||
|
TRANSLATIONS += manuskript_de.ts
|
||||||
|
TRANSLATIONS += manuskript_fa.ts
|
||||||
|
TRANSLATIONS += manuskript_el.ts
|
||||||
|
TRANSLATIONS += manuskript_ro.ts
|
||||||
|
TRANSLATIONS += manuskript_ca@valencia.ts
|
||||||
|
TRANSLATIONS += manuskript_pt_BR.ts
|
||||||
|
TRANSLATIONS += manuskript_en_GB.ts
|
||||||
TRANSLATIONS += manuskript_zh_HANT.ts
|
TRANSLATIONS += manuskript_zh_HANT.ts
|
||||||
|
TRANSLATIONS += manuskript_ko.ts
|
||||||
|
TRANSLATIONS += manuskript_eo.ts
|
||||||
|
TRANSLATIONS += manuskript_hr.ts
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
i18n/manuskript_da.qm
Normal file
BIN
i18n/manuskript_da.qm
Normal file
Binary file not shown.
4003
i18n/manuskript_da.ts
Normal file
4003
i18n/manuskript_da.ts
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
BIN
i18n/manuskript_fi.qm
Normal file
BIN
i18n/manuskript_fi.qm
Normal file
Binary file not shown.
4003
i18n/manuskript_fi.ts
Normal file
4003
i18n/manuskript_fi.ts
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
i18n/manuskript_hr.qm
Normal file
BIN
i18n/manuskript_hr.qm
Normal file
Binary file not shown.
4021
i18n/manuskript_hr.ts
Normal file
4021
i18n/manuskript_hr.ts
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
i18n/manuskript_sk.qm
Normal file
BIN
i18n/manuskript_sk.qm
Normal file
Binary file not shown.
4003
i18n/manuskript_sk.ts
Normal file
4003
i18n/manuskript_sk.ts
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
# Adds forms
|
|
||||||
for i in $(find .. -iname *.ui)
|
|
||||||
do
|
|
||||||
echo "FORMS += " $i;
|
|
||||||
done
|
|
||||||
|
|
||||||
# Adds file containing .tr(
|
|
||||||
for i in $(grep -ril "\.tr(" ../manuskript)
|
|
||||||
do
|
|
||||||
echo "SOURCES += " $i;
|
|
||||||
done
|
|
||||||
|
|
||||||
# Adds file containing .translate
|
|
||||||
for i in $(grep -ril "\.translate(" ../manuskript)
|
|
||||||
do
|
|
||||||
echo "SOURCES += " $i;
|
|
||||||
done
|
|
||||||
|
|
||||||
# Adds translations
|
|
||||||
cat languages.txt
|
|
BIN
icons/Manuskript/Manuskript.icns
Normal file
BIN
icons/Manuskript/Manuskript.icns
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -2,9 +2,26 @@
|
||||||
|
|
||||||
block_cipher = None
|
block_cipher = None
|
||||||
|
|
||||||
|
# This is the spec file to be run with pyinstaller.
|
||||||
|
# However, it's what amounts to a python script, so
|
||||||
|
# we can do some incredibly cursed things to make
|
||||||
|
# sure it builds, and the way we want it to.
|
||||||
|
|
||||||
a = Analysis(['bin/manuskript'],
|
# For some reason we need to explicitly include the current directory. Unsure why.
|
||||||
pathex=['.'],
|
import os
|
||||||
|
import sys
|
||||||
|
file_dir = os.path.dirname(".")
|
||||||
|
sys.path.append(file_dir)
|
||||||
|
|
||||||
|
# We're grabbing the current git SHA short to use in the version.
|
||||||
|
|
||||||
|
from util.hashed_version import writeVersionPlusHash
|
||||||
|
|
||||||
|
version = writeVersionPlusHash()
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
["bin/manuskript"],
|
||||||
|
pathex=["."],
|
||||||
binaries=None,
|
binaries=None,
|
||||||
datas=[
|
datas=[
|
||||||
("icons", "icons"),
|
("icons", "icons"),
|
||||||
|
@ -19,22 +36,64 @@ a = Analysis(['bin/manuskript'],
|
||||||
excludes=[],
|
excludes=[],
|
||||||
win_no_prefer_redirects=False,
|
win_no_prefer_redirects=False,
|
||||||
win_private_assemblies=False,
|
win_private_assemblies=False,
|
||||||
cipher=block_cipher)
|
cipher=block_cipher,
|
||||||
pyz = PYZ(a.pure, a.zipped_data,
|
)
|
||||||
cipher=block_cipher)
|
|
||||||
exe = EXE(pyz,
|
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
a.scripts,
|
a.scripts,
|
||||||
exclude_binaries=True,
|
exclude_binaries=True,
|
||||||
name='manuskript',
|
name="manuskript",
|
||||||
debug=False,
|
debug=False,
|
||||||
strip=False,
|
strip=False,
|
||||||
upx=True,
|
upx=True,
|
||||||
console=True,
|
console=True,
|
||||||
icon=os.path.join(SPECPATH, 'icons/Manuskript/manuskript.ico') )
|
icon=os.path.join(SPECPATH, "icons/Manuskript/manuskript.ico"),
|
||||||
coll = COLLECT(exe,
|
)
|
||||||
a.binaries,
|
|
||||||
a.zipfiles,
|
wexe = EXE(
|
||||||
a.datas,
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
exclude_binaries=True,
|
||||||
|
name="manuskriptw",
|
||||||
|
debug=False,
|
||||||
strip=False,
|
strip=False,
|
||||||
upx=True,
|
upx=True,
|
||||||
name='manuskript')
|
console=False,
|
||||||
|
icon=os.path.join(SPECPATH, "icons/Manuskript/manuskript.ico"),
|
||||||
|
)
|
||||||
|
|
||||||
|
coll = COLLECT(
|
||||||
|
exe, wexe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name="manuskript"
|
||||||
|
)
|
||||||
|
|
||||||
|
app = BUNDLE(
|
||||||
|
coll,
|
||||||
|
name="manuskript.app",
|
||||||
|
icon=os.path.join(SPECPATH, "icons/Manuskript/Manuskript.icns"),
|
||||||
|
bundle_identifier="ch.theologeek.manuskript",
|
||||||
|
version=version,
|
||||||
|
info_plist={
|
||||||
|
"NSPrincipalClass": "NSApplication",
|
||||||
|
"NSAppleScriptEnabled": False,
|
||||||
|
"NSHighResolutionCapable": True,
|
||||||
|
"CFBundleURLTypes": [
|
||||||
|
{
|
||||||
|
"CFBundleURLName": "MSK",
|
||||||
|
"CFBundleTypeRole": "Editor",
|
||||||
|
"CFBundleURLSchemes": ["msk"],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"CFBundleDocumentTypes": [
|
||||||
|
{
|
||||||
|
"CFBundleTypeName": "MSK",
|
||||||
|
"CFBundleTypeIconFile": "icons/Manuscript/manuskript",
|
||||||
|
"CFBundleTypeExtensions": ["msk"],
|
||||||
|
"CFBundleTypeRole": "Editor",
|
||||||
|
"LSHandlerRank": "Owner",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
|
@ -9,7 +9,7 @@ from PyQt5.QtWidgets import qApp, QMessageBox
|
||||||
from PyQt5.QtGui import QCursor
|
from PyQt5.QtGui import QCursor
|
||||||
|
|
||||||
from manuskript.converters import abstractConverter
|
from manuskript.converters import abstractConverter
|
||||||
from manuskript.functions import mainWindow
|
from manuskript.functions import mainWindow, safeTranslate
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -74,7 +74,7 @@ class pandocConverter(abstractConverter):
|
||||||
err = stderr.decode("utf-8")
|
err = stderr.decode("utf-8")
|
||||||
LOGGER.error(err)
|
LOGGER.error(err)
|
||||||
QMessageBox.critical(mainWindow().dialog,
|
QMessageBox.critical(mainWindow().dialog,
|
||||||
qApp.translate("Export", "Error"), err)
|
safeTranslate(qApp, "Export", "Error"), err)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return stdout.decode("utf-8")
|
return stdout.decode("utf-8")
|
||||||
|
|
|
@ -6,6 +6,8 @@ from PyQt5.QtWidgets import QPlainTextEdit, qApp, QTabWidget, QFrame, QTextEdit
|
||||||
from manuskript.exporter.manuskript.markdown import markdown, markdownSettings
|
from manuskript.exporter.manuskript.markdown import markdown, markdownSettings
|
||||||
from manuskript.ui.views.webView import webView
|
from manuskript.ui.views.webView import webView
|
||||||
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -15,8 +17,8 @@ except ImportError:
|
||||||
|
|
||||||
class HTML(markdown):
|
class HTML(markdown):
|
||||||
name = "HTML"
|
name = "HTML"
|
||||||
description = qApp.translate("Export", "Basic HTML output using the Python module 'markdown'.")
|
description = safeTranslate(qApp, "Export", "Basic HTML output using the Python module 'markdown'.")
|
||||||
InvalidBecause = qApp.translate("Export", "Python module 'markdown'.")
|
InvalidBecause = safeTranslate(qApp, "Export", "Python module 'markdown'.")
|
||||||
icon = "text-html"
|
icon = "text-html"
|
||||||
|
|
||||||
exportVarName = "lastManuskriptHTML"
|
exportVarName = "lastManuskriptHTML"
|
||||||
|
@ -51,12 +53,12 @@ class HTML(markdown):
|
||||||
w1 = QPlainTextEdit()
|
w1 = QPlainTextEdit()
|
||||||
w1.setFrameShape(QFrame.NoFrame)
|
w1.setFrameShape(QFrame.NoFrame)
|
||||||
w1.setReadOnly(True)
|
w1.setReadOnly(True)
|
||||||
t.addTab(w0, qApp.translate("Export", "Markdown source"))
|
t.addTab(w0, safeTranslate(qApp, "Export", "Markdown source"))
|
||||||
t.addTab(w1, qApp.translate("Export", "HTML Source"))
|
t.addTab(w1, safeTranslate(qApp, "Export", "HTML Source"))
|
||||||
|
|
||||||
if webView:
|
if webView:
|
||||||
w2 = webView()
|
w2 = webView()
|
||||||
t.addTab(w2, qApp.translate("Export", "HTML Output"))
|
t.addTab(w2, safeTranslate(qApp, "Export", "HTML Output"))
|
||||||
|
|
||||||
t.setCurrentIndex(2)
|
t.setCurrentIndex(2)
|
||||||
return t
|
return t
|
||||||
|
|
|
@ -6,20 +6,22 @@ from manuskript.exporter.basic import basicExporter, basicFormat
|
||||||
from manuskript.exporter.manuskript.HTML import HTML
|
from manuskript.exporter.manuskript.HTML import HTML
|
||||||
from manuskript.exporter.manuskript.markdown import markdown
|
from manuskript.exporter.manuskript.markdown import markdown
|
||||||
from manuskript.exporter.manuskript.plainText import plainText
|
from manuskript.exporter.manuskript.plainText import plainText
|
||||||
from manuskript.functions import appPath
|
from manuskript.functions import appPath, safeTranslate
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
class manuskriptExporter(basicExporter):
|
class manuskriptExporter(basicExporter):
|
||||||
|
|
||||||
name = "Manuskript"
|
name = "Manuskript"
|
||||||
description = qApp.translate("Export", "Default exporter, provides basic formats used by other exporters.")
|
description = safeTranslate(qApp, "Export", "Default exporter, provides basic formats used by other exporters.")
|
||||||
exportTo = [
|
exportTo = [
|
||||||
plainText(),
|
plainText(),
|
||||||
markdown(),
|
markdown(),
|
||||||
HTML(),
|
HTML(),
|
||||||
basicFormat("OPML", icon="text-x-opml+xml")
|
basicFormat("OPML", icon="text-x-opml+xml")
|
||||||
]
|
]
|
||||||
icon = appPath("icons/Manuskript/icon-256px.png")
|
icon = appPath(os.path.join("icons", "Manuskript", "icon-256px.png"))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def isValid(cls):
|
def isValid(cls):
|
||||||
|
|
|
@ -4,14 +4,14 @@ from PyQt5.QtGui import QTextCharFormat, QFont
|
||||||
from PyQt5.QtWidgets import QPlainTextEdit, QGroupBox, qApp, QVBoxLayout, QCheckBox
|
from PyQt5.QtWidgets import QPlainTextEdit, QGroupBox, qApp, QVBoxLayout, QCheckBox
|
||||||
|
|
||||||
from manuskript.exporter.manuskript.plainText import plainText
|
from manuskript.exporter.manuskript.plainText import plainText
|
||||||
from manuskript.functions import mainWindow
|
from manuskript.functions import mainWindow, safeTranslate
|
||||||
from manuskript.ui.highlighters import MMDHighlighter
|
from manuskript.ui.highlighters import MMDHighlighter
|
||||||
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
||||||
|
|
||||||
|
|
||||||
class markdown(plainText):
|
class markdown(plainText):
|
||||||
name = "Markdown"
|
name = "Markdown"
|
||||||
description = qApp.translate("Export", """Just like plain text, excepts adds markdown titles.
|
description = safeTranslate(qApp, "Export", """Just like plain text, excepts adds markdown titles.
|
||||||
Presupposes that texts are formatted in markdown.""")
|
Presupposes that texts are formatted in markdown.""")
|
||||||
|
|
||||||
exportVarName = "lastManuskriptMarkdown"
|
exportVarName = "lastManuskriptMarkdown"
|
||||||
|
@ -57,7 +57,7 @@ class markdownSettings(exporterSettings):
|
||||||
w = self.toolBox.widget(self.toolBox.count() - 1)
|
w = self.toolBox.widget(self.toolBox.count() - 1)
|
||||||
self.grpMarkdown = QGroupBox(self.tr("Markdown"))
|
self.grpMarkdown = QGroupBox(self.tr("Markdown"))
|
||||||
self.grpMarkdown.setLayout(QVBoxLayout())
|
self.grpMarkdown.setLayout(QVBoxLayout())
|
||||||
self.chkMarkdownHighlighter = QCheckBox(qApp.translate("Export", "Preview with highlighter."))
|
self.chkMarkdownHighlighter = QCheckBox(safeTranslate(qApp, "Export", "Preview with highlighter."))
|
||||||
self.grpMarkdown.layout().addWidget(self.chkMarkdownHighlighter)
|
self.grpMarkdown.layout().addWidget(self.chkMarkdownHighlighter)
|
||||||
|
|
||||||
w.layout().insertWidget(w.layout().count() - 1, self.grpMarkdown)
|
w.layout().insertWidget(w.layout().count() - 1, self.grpMarkdown)
|
||||||
|
|
|
@ -5,7 +5,7 @@ from PyQt5.QtGui import QFont, QTextCharFormat
|
||||||
from PyQt5.QtWidgets import QPlainTextEdit, qApp, QFrame, QFileDialog, QMessageBox
|
from PyQt5.QtWidgets import QPlainTextEdit, qApp, QFrame, QFileDialog, QMessageBox
|
||||||
|
|
||||||
from manuskript.exporter.basic import basicFormat
|
from manuskript.exporter.basic import basicFormat
|
||||||
from manuskript.functions import mainWindow, getSaveFileNameWithSuffix
|
from manuskript.functions import mainWindow, getSaveFileNameWithSuffix, safeTranslate
|
||||||
from manuskript.models import outlineItem
|
from manuskript.models import outlineItem
|
||||||
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
||||||
import codecs
|
import codecs
|
||||||
|
@ -14,8 +14,8 @@ import logging
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
class plainText(basicFormat):
|
class plainText(basicFormat):
|
||||||
name = qApp.translate("Export", "Plain text")
|
name = safeTranslate(qApp, "Export", "Plain text")
|
||||||
description = qApp.translate("Export", """Simplest export to plain text. Allows you to use your own markup not understood
|
description = safeTranslate(qApp, "Export", """Simplest export to plain text. Allows you to use your own markup not understood
|
||||||
by Manuskript, for example <a href='www.fountain.io'>Fountain</a>.""")
|
by Manuskript, for example <a href='www.fountain.io'>Fountain</a>.""")
|
||||||
implemented = True
|
implemented = True
|
||||||
requires = {
|
requires = {
|
||||||
|
@ -48,8 +48,8 @@ class plainText(basicFormat):
|
||||||
try:
|
try:
|
||||||
return self.concatenate(mainWindow().mdlOutline.rootItem, settings)
|
return self.concatenate(mainWindow().mdlOutline.rootItem, settings)
|
||||||
except re.error as e:
|
except re.error as e:
|
||||||
QMessageBox.warning(mainWindow().dialog, qApp.translate("Export", "Error"),
|
QMessageBox.warning(mainWindow().dialog, safeTranslate(qApp, "Export", "Error"),
|
||||||
qApp.translate("Export", "Could not process regular expression: \n{}").format(str(e)))
|
safeTranslate(qApp, "Export", "Could not process regular expression: \n{}").format(str(e)))
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def getExportFilename(self, settingsWidget, varName=None, filter=None):
|
def getExportFilename(self, settingsWidget, varName=None, filter=None):
|
||||||
|
@ -69,7 +69,7 @@ class plainText(basicFormat):
|
||||||
filename = ""
|
filename = ""
|
||||||
|
|
||||||
filename, filter = getSaveFileNameWithSuffix(settingsWidget.parent(),
|
filename, filter = getSaveFileNameWithSuffix(settingsWidget.parent(),
|
||||||
caption=qApp.translate("Export", "Choose output file…"),
|
caption=safeTranslate(qApp, "Export", "Choose output file…"),
|
||||||
filter=filter,
|
filter=filter,
|
||||||
directory=filename,
|
directory=filename,
|
||||||
defaultSuffix=self.exportDefaultSuffix)
|
defaultSuffix=self.exportDefaultSuffix)
|
||||||
|
@ -96,7 +96,7 @@ class plainText(basicFormat):
|
||||||
LOGGER.error("No content. Nothing saved.")
|
LOGGER.error("No content. Nothing saved.")
|
||||||
return
|
return
|
||||||
|
|
||||||
with open(filename, "w", encoding='utf8') as f:
|
with open(filename, "wt", encoding="utf8", newline="\n") as f:
|
||||||
f.write(content)
|
f.write(content)
|
||||||
|
|
||||||
def preview(self, settingsWidget, previewWidget):
|
def preview(self, settingsWidget, previewWidget):
|
||||||
|
@ -217,4 +217,3 @@ class plainText(basicFormat):
|
||||||
content += "\n"
|
content += "\n"
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,14 @@ from PyQt5.QtCore import QUrl
|
||||||
|
|
||||||
from manuskript.exporter.manuskript import HTML as MskHTML
|
from manuskript.exporter.manuskript import HTML as MskHTML
|
||||||
from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText
|
from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
class HTML(abstractPlainText):
|
class HTML(abstractPlainText):
|
||||||
name = "HTML"
|
name = "HTML"
|
||||||
description = qApp.translate("Export", """A little known format modestly used. You know, web sites for example.""")
|
description = safeTranslate(qApp, "Export", """A little known format modestly used. You know, web sites for example.""")
|
||||||
icon = "text-html"
|
icon = "text-html"
|
||||||
|
|
||||||
exportVarName = "lastPandocHTML"
|
exportVarName = "lastPandocHTML"
|
||||||
|
|
|
@ -7,7 +7,7 @@ from PyQt5.QtCore import QUrl
|
||||||
from PyQt5.QtWidgets import qApp
|
from PyQt5.QtWidgets import qApp
|
||||||
|
|
||||||
from manuskript.exporter.pandoc.abstractOutput import abstractOutput
|
from manuskript.exporter.pandoc.abstractOutput import abstractOutput
|
||||||
from manuskript.functions import tempFile
|
from manuskript.functions import tempFile, safeTranslate
|
||||||
from manuskript.ui.views.PDFViewer import PDFViewer
|
from manuskript.ui.views.PDFViewer import PDFViewer
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@ class PDF(abstractOutput):
|
||||||
"""PDF Viewer using PDF.js. Cf. https://github.com/mozilla/pdf.js/wiki/Setup-PDF.js-in-a-website"""
|
"""PDF Viewer using PDF.js. Cf. https://github.com/mozilla/pdf.js/wiki/Setup-PDF.js-in-a-website"""
|
||||||
|
|
||||||
name = "PDF"
|
name = "PDF"
|
||||||
description = qApp.translate("Export", "Needs LaTeX to be installed.")
|
description = safeTranslate(qApp, "Export", "Needs LaTeX to be installed.")
|
||||||
InvalidBecause = qApp.translate("Export", """a valid LaTeX installation. Pandoc recommendations can be found on:
|
InvalidBecause = safeTranslate(qApp, "Export", """a valid LaTeX installation. Pandoc recommendations can be found on:
|
||||||
<a href="https://pandoc.org/installing.html">pandoc.org/installing.html</a>. If you want Unicode support, you need XeLaTeX.""")
|
<a href="https://pandoc.org/installing.html">pandoc.org/installing.html</a>. If you want Unicode support, you need XeLaTeX.""")
|
||||||
icon = "application-pdf"
|
icon = "application-pdf"
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ from manuskript.exporter.pandoc.HTML import HTML
|
||||||
from manuskript.exporter.pandoc.PDF import PDF
|
from manuskript.exporter.pandoc.PDF import PDF
|
||||||
from manuskript.exporter.pandoc.outputFormats import ePub, OpenDocument, DocX
|
from manuskript.exporter.pandoc.outputFormats import ePub, OpenDocument, DocX
|
||||||
from manuskript.exporter.pandoc.plainText import reST, markdown, latex, OPML
|
from manuskript.exporter.pandoc.plainText import reST, markdown, latex, OPML
|
||||||
from manuskript.functions import mainWindow
|
from manuskript.functions import mainWindow, safeTranslate
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -19,7 +19,7 @@ LOGGER = logging.getLogger(__name__)
|
||||||
class pandocExporter(basicExporter):
|
class pandocExporter(basicExporter):
|
||||||
|
|
||||||
name = "Pandoc"
|
name = "Pandoc"
|
||||||
description = qApp.translate("Export", """<p>A universal document converter. Can be used to convert Markdown to a wide range of other
|
description = safeTranslate(qApp, "Export", """<p>A universal document converter. Can be used to convert Markdown to a wide range of other
|
||||||
formats.</p>
|
formats.</p>
|
||||||
<p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p>
|
<p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p>
|
||||||
""")
|
""")
|
||||||
|
@ -106,7 +106,7 @@ class pandocExporter(basicExporter):
|
||||||
+ "Stderr content:\n" + stderr.decode("utf-8")
|
+ "Stderr content:\n" + stderr.decode("utf-8")
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
LOGGER.error(err)
|
LOGGER.error(err)
|
||||||
QMessageBox.critical(mainWindow().dialog, qApp.translate("Export", "Error"), err)
|
QMessageBox.critical(mainWindow().dialog, safeTranslate(qApp, "Export", "Error"), err)
|
||||||
else:
|
else:
|
||||||
LOGGER.warning(err)
|
LOGGER.warning(err)
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -7,6 +7,7 @@ from PyQt5.QtWidgets import qApp, QVBoxLayout, QCheckBox, QWidget, QHBoxLayout,
|
||||||
|
|
||||||
from manuskript.exporter.manuskript.markdown import markdown, markdownSettings
|
from manuskript.exporter.manuskript.markdown import markdown, markdownSettings
|
||||||
from manuskript.ui.collapsibleGroupBox2 import collapsibleGroupBox2
|
from manuskript.ui.collapsibleGroupBox2 import collapsibleGroupBox2
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -150,77 +151,80 @@ class pandocSettings(markdownSettings):
|
||||||
settingsList = {
|
settingsList = {
|
||||||
# General
|
# General
|
||||||
"standalone": pandocSetting("--standalone", "checkbox", "",
|
"standalone": pandocSetting("--standalone", "checkbox", "",
|
||||||
qApp.translate("Export", "Standalone document (not just a fragment)"),
|
safeTranslate(qApp, "Export", "Standalone document (not just a fragment)"),
|
||||||
default=True),
|
default=True),
|
||||||
"TOC": pandocSetting("--toc", "checkbox", "",
|
"TOC": pandocSetting("--toc", "checkbox", "",
|
||||||
qApp.translate("Export", "Include a table of contents."), toc=True),
|
safeTranslate(qApp, "Export", "Include a table of contents."), toc=True),
|
||||||
|
|
||||||
"TOC-depth": pandocSetting("--toc-depth=", "number", "",
|
"TOC-depth": pandocSetting("--toc-depth=", "number", "",
|
||||||
qApp.translate("Export", "Number of sections level to include in TOC: "),
|
safeTranslate(qApp, "Export", "Number of sections level to include in TOC: "),
|
||||||
default=3, min=1, max=6, toc=True, minVersion="1.10"),
|
default=3, min=1, max=6, toc=True, minVersion="1.10"),
|
||||||
# pandoc v1 only
|
# pandoc v1 only
|
||||||
"smart": pandocSetting("--smart", "checkbox", "",
|
"smart": pandocSetting("--smart", "checkbox", "",
|
||||||
qApp.translate("Export", "Typographically correct output"),
|
safeTranslate(qApp, "Export", "Typographically correct output"),
|
||||||
maxVersion="1.19.2.4"),
|
maxVersion="1.19.2.4"),
|
||||||
# pandoc v1 only
|
# pandoc v1 only
|
||||||
"normalize": pandocSetting("--normalize", "checkbox", "",
|
"normalize": pandocSetting("--normalize", "checkbox", "",
|
||||||
qApp.translate("Export", "Normalize the document (cleaner)"),
|
safeTranslate(qApp, "Export", "Normalize the document (cleaner)"),
|
||||||
minVersion="1.8", maxVersion="1.19.2.4"),
|
minVersion="1.8", maxVersion="1.19.2.4"),
|
||||||
# pandoc v1.5 to 2.7.3
|
# pandoc v1.5 to 2.7.3
|
||||||
"base-header": pandocSetting("--base-header-level=", "number", "",
|
"base-header": pandocSetting("--base-header-level=", "number", "",
|
||||||
qApp.translate("Export", "Specify the base level for headers: "),
|
safeTranslate(qApp, "Export", "Specify the base level for headers: "),
|
||||||
default=1, min=1, minVersion="1.5", maxVersion="2.7.3"),
|
default=1, min=1, minVersion="1.5", maxVersion="2.7.3"),
|
||||||
# pandoc v2.8+
|
# pandoc v2.8+
|
||||||
"shift-heading": pandocSetting("--shift-heading-level-by=", "number", "",
|
"shift-heading": pandocSetting("--shift-heading-level-by=", "number", "",
|
||||||
qApp.translate("Export", "Specify the base level for headers: "),
|
safeTranslate(qApp, "Export", "Specify the base level for headers: "),
|
||||||
default=0, min=0, minVersion="2.8"),
|
default=0, min=0, minVersion="2.8"),
|
||||||
"disable-YAML": pandocSetting("EXT-yaml_metadata_block", "checkbox", "",
|
"disable-YAML": pandocSetting("EXT-yaml_metadata_block", "checkbox", "",
|
||||||
qApp.translate("Export", "Disable YAML metadata block.\nUse that if you get YAML related error."),
|
safeTranslate(qApp, "Export", "Disable YAML metadata block.\nUse that if you get YAML related error."),
|
||||||
minVersion="1.12"),
|
minVersion="1.12"),
|
||||||
|
"hard-line-breaks": pandocSetting("EXT-hard_line_block", "checkbox", "",
|
||||||
|
safeTranslate(qApp, "Export", "Enable the support on markdown for line break on new line."),
|
||||||
|
minVersion="1.16"),
|
||||||
|
|
||||||
# Specific
|
# Specific
|
||||||
"ref-link": pandocSetting("--reference-links", "checkbox", "markdown rst",
|
"ref-link": pandocSetting("--reference-links", "checkbox", "markdown rst",
|
||||||
qApp.translate("Export", "Use reference-style links instead of inline links"),
|
safeTranslate(qApp, "Export", "Use reference-style links instead of inline links"),
|
||||||
specific=True),
|
specific=True),
|
||||||
# pandoc v1.9 to v2.11.1
|
# pandoc v1.9 to v2.11.1
|
||||||
"atx": pandocSetting("--atx-headers", "checkbox", "markdown asciidoc",
|
"atx": pandocSetting("--atx-headers", "checkbox", "markdown asciidoc",
|
||||||
qApp.translate("Export", "Use ATX-style headers"), specific=True,
|
safeTranslate(qApp, "Export", "Use ATX-style headers"), specific=True,
|
||||||
minVersion="1.9", maxVersion="2.11.1"),
|
minVersion="1.9", maxVersion="2.11.1"),
|
||||||
# pandoc v2.11.2+
|
# pandoc v2.11.2+
|
||||||
"atx-heading": pandocSetting("--markdown-headings=atx|setext", "checkbox", "markdown asciidoc",
|
"atx-heading": pandocSetting("--markdown-headings=atx|setext", "checkbox", "markdown asciidoc",
|
||||||
qApp.translate("Export", "Use ATX-style headers"), specific=True,
|
safeTranslate(qApp, "Export", "Use ATX-style headers"), specific=True,
|
||||||
minVersion="2.11.2"),
|
minVersion="2.11.2"),
|
||||||
"self-contained": pandocSetting("--self-contained", "checkbox", "html",
|
"self-contained": pandocSetting("--self-contained", "checkbox", "html",
|
||||||
qApp.translate("Export", "Self-contained HTML files, with no dependencies"),
|
safeTranslate(qApp, "Export", "Self-contained HTML files, with no dependencies"),
|
||||||
specific=True, minVersion="1.9"),
|
specific=True, minVersion="1.9"),
|
||||||
"q-tags": pandocSetting("--html-q-tags", "checkbox", "html",
|
"q-tags": pandocSetting("--html-q-tags", "checkbox", "html",
|
||||||
qApp.translate("Export", "Use <q> tags for quotes in HTML"), specific=True,
|
safeTranslate(qApp, "Export", "Use <q> tags for quotes in HTML"), specific=True,
|
||||||
minVersion="1.10"),
|
minVersion="1.10"),
|
||||||
# pandoc v1 only
|
# pandoc v1 only
|
||||||
"latex-engine": pandocSetting("--latex-engine=", "combo", "pdf",
|
"latex-engine": pandocSetting("--latex-engine=", "combo", "pdf",
|
||||||
qApp.translate("Export", "LaTeX engine used to produce the PDF."),
|
safeTranslate(qApp, "Export", "LaTeX engine used to produce the PDF."),
|
||||||
vals="pdflatex|lualatex|xelatex", specific=True,
|
vals="pdflatex|lualatex|xelatex", specific=True,
|
||||||
minVersion="1.9", maxVersion="1.19.2.4"),
|
minVersion="1.9", maxVersion="1.19.2.4"),
|
||||||
# pandoc v2
|
# pandoc v2
|
||||||
"pdf-engine": pandocSetting("--pdf-engine=", "combo", "pdf",
|
"pdf-engine": pandocSetting("--pdf-engine=", "combo", "pdf",
|
||||||
qApp.translate("Export", "LaTeX engine used to produce the PDF."),
|
safeTranslate(qApp, "Export", "LaTeX engine used to produce the PDF."),
|
||||||
vals="pdflatex|lualatex|xelatex", minVersion="2.0", specific=True),
|
vals="pdflatex|lualatex|xelatex", minVersion="2.0", specific=True),
|
||||||
"epub3": pandocSetting("EXTepub3", "checkbox", "epub",
|
"epub3": pandocSetting("EXTepub3", "checkbox", "epub",
|
||||||
qApp.translate("Export", "Convert to ePUB3"), specific=True,
|
safeTranslate(qApp, "Export", "Convert to ePUB3"), specific=True,
|
||||||
minVersion="1.10"),
|
minVersion="1.10"),
|
||||||
|
|
||||||
# PDF
|
# PDF
|
||||||
"latex-ps": pandocSetting("--variable=papersize:", "combo", "pdf latex", # FIXME: does not work with default template
|
"latex-ps": pandocSetting("--variable=papersize:", "combo", "pdf latex", # FIXME: does not work with default template
|
||||||
qApp.translate("Export", "Paper size:"),
|
safeTranslate(qApp, "Export", "Paper size:"),
|
||||||
vals="letter|A4|A5", specific=True, minVersion="1.4"),
|
vals="letter|A4|A5", specific=True, minVersion="1.4"),
|
||||||
"latex-fs": pandocSetting("--variable=fontsize:", "number", "pdf latex", # FIXME: does not work with default template
|
"latex-fs": pandocSetting("--variable=fontsize:", "number", "pdf latex", # FIXME: does not work with default template
|
||||||
qApp.translate("Export", "Font size:"),
|
safeTranslate(qApp, "Export", "Font size:"),
|
||||||
min=8, max=88, default=12, suffix="pt", specific=True, minVersion="1.4"),
|
min=8, max=88, default=12, suffix="pt", specific=True, minVersion="1.4"),
|
||||||
"latex-class": pandocSetting("--variable=documentclass:", "combo", "pdf latex",
|
"latex-class": pandocSetting("--variable=documentclass:", "combo", "pdf latex",
|
||||||
qApp.translate("Export", "Class:"),
|
safeTranslate(qApp, "Export", "Class:"),
|
||||||
vals="article|report|book|memoir", specific=True, minVersion="1.4"),
|
vals="article|report|book|memoir", specific=True, minVersion="1.4"),
|
||||||
"latex-ls": pandocSetting("--variable=linestretch:", "combo", "pdf latex",
|
"latex-ls": pandocSetting("--variable=linestretch:", "combo", "pdf latex",
|
||||||
qApp.translate("Export", "Line spacing:"),
|
safeTranslate(qApp, "Export", "Line spacing:"),
|
||||||
vals="1|1.25|1.5|2", specific=True, minVersion="1.4"),
|
vals="1|1.25|1.5|2", specific=True, minVersion="1.4"),
|
||||||
|
|
||||||
# FIXME: complete with http://pandoc.org/README.html#variables-for-latex
|
# FIXME: complete with http://pandoc.org/README.html#variables-for-latex
|
||||||
|
@ -367,6 +371,8 @@ class pandocSettings(markdownSettings):
|
||||||
extensions += "-yaml_metadata_block"
|
extensions += "-yaml_metadata_block"
|
||||||
if name == "epub3" and s.widget.isChecked():
|
if name == "epub3" and s.widget.isChecked():
|
||||||
toFormat = "epub3"
|
toFormat = "epub3"
|
||||||
|
if name == "hard-line-breaks" and s.widget.isChecked():
|
||||||
|
extensions += "+hard_line_breaks"
|
||||||
|
|
||||||
r = ["--from=markdown" + extensions,
|
r = ["--from=markdown" + extensions,
|
||||||
"--to={}".format(toFormat)]
|
"--to={}".format(toFormat)]
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
from PyQt5.QtWidgets import qApp
|
from PyQt5.QtWidgets import qApp
|
||||||
|
|
||||||
from manuskript.exporter.pandoc.abstractOutput import abstractOutput
|
from manuskript.exporter.pandoc.abstractOutput import abstractOutput
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
|
|
||||||
class ePub(abstractOutput):
|
class ePub(abstractOutput):
|
||||||
name = "ePub"
|
name = "ePub"
|
||||||
description = qApp.translate("Export", """Books that don't kill trees.""")
|
description = safeTranslate(qApp, "Export", """Books that don't kill trees.""")
|
||||||
icon = "application-epub+zip"
|
icon = "application-epub+zip"
|
||||||
|
|
||||||
exportVarName = "lastPandocePub"
|
exportVarName = "lastPandocePub"
|
||||||
|
@ -18,7 +19,7 @@ class ePub(abstractOutput):
|
||||||
|
|
||||||
class OpenDocument(abstractOutput):
|
class OpenDocument(abstractOutput):
|
||||||
name = "OpenDocument"
|
name = "OpenDocument"
|
||||||
description = qApp.translate("Export", "OpenDocument format. Used by LibreOffice for example.")
|
description = safeTranslate(qApp, "Export", "OpenDocument format. Used by LibreOffice for example.")
|
||||||
|
|
||||||
exportVarName = "lastPandocODT"
|
exportVarName = "lastPandocODT"
|
||||||
toFormat = "odt"
|
toFormat = "odt"
|
||||||
|
@ -29,7 +30,7 @@ class OpenDocument(abstractOutput):
|
||||||
|
|
||||||
class DocX(abstractOutput):
|
class DocX(abstractOutput):
|
||||||
name = "DocX"
|
name = "DocX"
|
||||||
description = qApp.translate("Export", "Microsoft Office (.docx) document.")
|
description = safeTranslate(qApp, "Export", "Microsoft Office (.docx) document.")
|
||||||
|
|
||||||
exportVarName = "lastPandocDocX"
|
exportVarName = "lastPandocDocX"
|
||||||
toFormat = "docx"
|
toFormat = "docx"
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
from PyQt5.QtWidgets import qApp
|
from PyQt5.QtWidgets import qApp
|
||||||
|
|
||||||
from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText
|
from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
|
|
||||||
class markdown(abstractPlainText):
|
class markdown(abstractPlainText):
|
||||||
name = "Markdown"
|
name = "Markdown"
|
||||||
description = qApp.translate("Export", """Export to markdown, using pandoc. Allows more formatting options
|
description = safeTranslate(qApp, "Export", """Export to markdown, using pandoc. Allows more formatting options
|
||||||
than the basic manuskript exporter.""")
|
than the basic manuskript exporter.""")
|
||||||
icon = "text-x-markdown"
|
icon = "text-x-markdown"
|
||||||
|
|
||||||
|
@ -19,7 +20,7 @@ class markdown(abstractPlainText):
|
||||||
|
|
||||||
class reST(abstractPlainText):
|
class reST(abstractPlainText):
|
||||||
name = "reST"
|
name = "reST"
|
||||||
description = qApp.translate("Export", """reStructuredText is a lightweight markup language.""")
|
description = safeTranslate(qApp, "Export", """reStructuredText is a lightweight markup language.""")
|
||||||
|
|
||||||
exportVarName = "lastPandocreST"
|
exportVarName = "lastPandocreST"
|
||||||
toFormat = "rst"
|
toFormat = "rst"
|
||||||
|
@ -30,7 +31,7 @@ class reST(abstractPlainText):
|
||||||
|
|
||||||
class latex(abstractPlainText):
|
class latex(abstractPlainText):
|
||||||
name = "LaTeX"
|
name = "LaTeX"
|
||||||
description = qApp.translate("Export", """LaTeX is a word processor and document markup language used to create
|
description = safeTranslate(qApp, "Export", """LaTeX is a word processor and document markup language used to create
|
||||||
beautiful documents.""")
|
beautiful documents.""")
|
||||||
|
|
||||||
exportVarName = "lastPandocLatex"
|
exportVarName = "lastPandocLatex"
|
||||||
|
@ -42,7 +43,7 @@ class latex(abstractPlainText):
|
||||||
|
|
||||||
class OPML(abstractPlainText):
|
class OPML(abstractPlainText):
|
||||||
name = "OPML"
|
name = "OPML"
|
||||||
description = qApp.translate("Export", """The purpose of this format is to provide a way to exchange information
|
description = safeTranslate(qApp, "Export", """The purpose of this format is to provide a way to exchange information
|
||||||
between outliners and Internet services that can be browsed or controlled
|
between outliners and Internet services that can be browsed or controlled
|
||||||
through an outliner.""")
|
through an outliner.""")
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,14 @@ AUC = Qt.AutoConnection | Qt.UniqueConnection
|
||||||
MW = None
|
MW = None
|
||||||
|
|
||||||
|
|
||||||
|
def safeTranslate(qApp, group, text):
|
||||||
|
try:
|
||||||
|
return qApp.translate(group, text)
|
||||||
|
except:
|
||||||
|
return text
|
||||||
|
|
||||||
def wordCount(text):
|
def wordCount(text):
|
||||||
return len(re.findall(r"\S+", text))
|
return len(re.findall(r"\S+", re.sub(r"(<!--).+?(-->)", "", text, flags=re.DOTALL)))
|
||||||
|
|
||||||
|
|
||||||
def charCount(text, use_spaces = True):
|
def charCount(text, use_spaces = True):
|
||||||
|
@ -246,7 +252,7 @@ def colorifyPixmap(pixmap, color):
|
||||||
|
|
||||||
|
|
||||||
def appPath(suffix=None):
|
def appPath(suffix=None):
|
||||||
p = os.path.realpath(os.path.join(os.path.split(__file__)[0], "../.."))
|
p = os.path.realpath(os.path.join(os.path.split(__file__)[0], os.path.join("..", "..")))
|
||||||
if suffix:
|
if suffix:
|
||||||
p = os.path.join(p, suffix)
|
p = os.path.join(p, suffix)
|
||||||
return p
|
return p
|
||||||
|
@ -299,7 +305,7 @@ def findBackground(filename):
|
||||||
"""
|
"""
|
||||||
Returns the full path to a background file of name filename within resources folders.
|
Returns the full path to a background file of name filename within resources folders.
|
||||||
"""
|
"""
|
||||||
return findFirstFile(re.escape(filename), "resources/backgrounds")
|
return findFirstFile(re.escape(filename), os.path.join("resources", "backgrounds"))
|
||||||
|
|
||||||
|
|
||||||
def findFirstFile(regex, path="resources"):
|
def findFirstFile(regex, path="resources"):
|
||||||
|
@ -463,7 +469,7 @@ def search(searchRegex, text):
|
||||||
:return: list of tuples (startPos, endPos)
|
:return: list of tuples (startPos, endPos)
|
||||||
"""
|
"""
|
||||||
if text is not None:
|
if text is not None:
|
||||||
return [(m.start(), m.end(), getSearchResultContext(text, m.start(), m.end())) for m in searchRegex.finditer(text)]
|
return [(m.start(), m.end(), getSearchResultContext(text, m.start(), m.end())) for m in searchRegex.finditer(str(text))]
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -505,7 +511,7 @@ def getManuskriptPath(follow_symlinks=True):
|
||||||
path = os.path.abspath(sys.executable)
|
path = os.path.abspath(sys.executable)
|
||||||
else:
|
else:
|
||||||
import inspect
|
import inspect
|
||||||
path = inspect.getabsfile(getManuskriptPath) + "/../.."
|
path = os.path.join(inspect.getabsfile(getManuskriptPath), "..", "..")
|
||||||
if follow_symlinks:
|
if follow_symlinks:
|
||||||
path = os.path.realpath(path)
|
path = os.path.realpath(path)
|
||||||
return os.path.dirname(path)
|
return os.path.dirname(path)
|
||||||
|
|
56
manuskript/functions/history/History.py
Normal file
56
manuskript/functions/history/History.py
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
from manuskript.functions.history.NavigatedEvent import NavigatedEvent
|
||||||
|
from manuskript.functions.history.Signal import Signal
|
||||||
|
|
||||||
|
|
||||||
|
class History():
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._entries = []
|
||||||
|
self._position = 0
|
||||||
|
self.navigated = Signal()
|
||||||
|
self._navigating = False
|
||||||
|
|
||||||
|
def next(self, entry):
|
||||||
|
if self._navigating:
|
||||||
|
return
|
||||||
|
|
||||||
|
while self._position < len(self._entries) - 1:
|
||||||
|
self._entries.pop()
|
||||||
|
|
||||||
|
self._entries.append(entry)
|
||||||
|
self._position = len(self._entries) - 1
|
||||||
|
self._navigating = True
|
||||||
|
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), entry))
|
||||||
|
self._navigating = False
|
||||||
|
|
||||||
|
|
||||||
|
def replace(self, entry):
|
||||||
|
if self._navigating:
|
||||||
|
return
|
||||||
|
|
||||||
|
while self._position < len(self._entries):
|
||||||
|
self._entries.pop()
|
||||||
|
|
||||||
|
self._entries.append(entry)
|
||||||
|
self._position = len(self._entries) - 1
|
||||||
|
self._navigating = True
|
||||||
|
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), entry))
|
||||||
|
self._navigating = False
|
||||||
|
|
||||||
|
def forward(self):
|
||||||
|
if self._position < len(self._entries) - 1:
|
||||||
|
self._position += 1
|
||||||
|
self._navigating = True
|
||||||
|
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), self._entries[self._position]))
|
||||||
|
self._navigating = False
|
||||||
|
|
||||||
|
def back(self):
|
||||||
|
if self._position > 0:
|
||||||
|
self._position -= 1
|
||||||
|
self._navigating = True
|
||||||
|
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), self._entries[self._position]))
|
||||||
|
self._navigating = False
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self._entries.clear()
|
||||||
|
self._position = 0
|
||||||
|
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), None))
|
5
manuskript/functions/history/NavigatedEvent.py
Normal file
5
manuskript/functions/history/NavigatedEvent.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class NavigatedEvent():
|
||||||
|
def __init__(self, position, count, entry) -> None:
|
||||||
|
self.position = position
|
||||||
|
self.count = count
|
||||||
|
self.entry = entry
|
23
manuskript/functions/history/Signal.py
Normal file
23
manuskript/functions/history/Signal.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
class Signal():
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._methods = []
|
||||||
|
|
||||||
|
def connect(self, func):
|
||||||
|
self._methods.append(func)
|
||||||
|
|
||||||
|
def disconnect(self, func):
|
||||||
|
try:
|
||||||
|
self._methods.remove(func)
|
||||||
|
except ValueError:
|
||||||
|
raise TypeError
|
||||||
|
|
||||||
|
def disconnect(self):
|
||||||
|
if len(self._methods) == 0:
|
||||||
|
raise TypeError
|
||||||
|
self._methods.pop()
|
||||||
|
|
||||||
|
def fire(self, data):
|
||||||
|
for m in self._methods:
|
||||||
|
m(data)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# --!-- coding: utf8 --!--
|
# --!-- coding: utf8 --!--
|
||||||
|
|
||||||
import os, gzip, json, glob, re
|
import os, gzip, json, glob, re, string
|
||||||
from PyQt5.QtCore import QLocale
|
from PyQt5.QtCore import QLocale
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from manuskript.functions import writablePath
|
from manuskript.functions import writablePath
|
||||||
|
@ -148,7 +148,7 @@ class BasicDictionary:
|
||||||
self._customDict = set()
|
self._customDict = set()
|
||||||
customPath = self.getCustomDictionaryPath()
|
customPath = self.getCustomDictionaryPath()
|
||||||
try:
|
try:
|
||||||
with gzip.open(customPath, "rt", encoding='utf-8') as f:
|
with gzip.open(customPath, 'rt', encoding='utf-8') as f:
|
||||||
self._customDict = set(json.loads(f.read()))
|
self._customDict = set(json.loads(f.read()))
|
||||||
for word in self._customDict:
|
for word in self._customDict:
|
||||||
self._dict.create_dictionary_entry(word, self.CUSTOM_COUNT)
|
self._dict.create_dictionary_entry(word, self.CUSTOM_COUNT)
|
||||||
|
@ -187,6 +187,7 @@ class BasicDictionary:
|
||||||
def checkText(self, text):
|
def checkText(self, text):
|
||||||
# Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/
|
# Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/
|
||||||
WORDS = r'(?iu)((?:[^_\W]|\')+)[^A-Za-z0-9\']'
|
WORDS = r'(?iu)((?:[^_\W]|\')+)[^A-Za-z0-9\']'
|
||||||
|
|
||||||
# (?iu) means case insensitive and Unicode
|
# (?iu) means case insensitive and Unicode
|
||||||
# ((?:[^_\W]|\')+) means words exclude underscores but include apostrophes
|
# ((?:[^_\W]|\')+) means words exclude underscores but include apostrophes
|
||||||
# [^A-Za-z0-9\'] used with above hack to prevent spellcheck while typing word
|
# [^A-Za-z0-9\'] used with above hack to prevent spellcheck while typing word
|
||||||
|
@ -197,8 +198,30 @@ class BasicDictionary:
|
||||||
|
|
||||||
for word_object in re.finditer(WORDS, text):
|
for word_object in re.finditer(WORDS, text):
|
||||||
word = word_object.group(1)
|
word = word_object.group(1)
|
||||||
|
mispelled = self.isMisspelled(word)
|
||||||
|
if mispelled == False:
|
||||||
|
continue
|
||||||
|
punctuation = string.punctuation.replace('-', '')
|
||||||
|
|
||||||
|
FALSE_POSITIVE = r'^[^\w]|([^{}])$'.format(punctuation)
|
||||||
|
|
||||||
|
#inorder to prevent apostrophes causing false positives and keep the same functionality otherwise,
|
||||||
|
#check that the word doesn't have any additional punctuation on it.
|
||||||
|
if re.match(FALSE_POSITIVE, word):
|
||||||
|
# ^[^\w] checks that it doesn't start with a word character
|
||||||
|
# ([\p{P}'])$ checks it doesn't end with punctuation characters
|
||||||
|
|
||||||
|
apostrophe_WORDS = r'(?iu)\b(?<=[\s\'"(])((?:[a-zA-Z]|\')+)(?=\b)'
|
||||||
|
|
||||||
|
# \b(?<=[\s\'"(]) looks for nonword characters and starts grouping after
|
||||||
|
# (?=\b) looks for the word boundary
|
||||||
|
# ((?:[a-zA-Z]|\')+) greedily matches for letters and apostrophes
|
||||||
|
|
||||||
|
temp = re.match(apostrophe_WORDS, word)
|
||||||
|
mispelled = self.isMisspelled(temp.group(1)) if temp else False
|
||||||
|
|
||||||
|
if (mispelled and not self.isCustomWord(word)):
|
||||||
|
|
||||||
if (self.isMisspelled(word) and not self.isCustomWord(word)):
|
|
||||||
matches.append(BasicMatch(
|
matches.append(BasicMatch(
|
||||||
word_object.start(1), word_object.end(1)
|
word_object.start(1), word_object.end(1)
|
||||||
))
|
))
|
||||||
|
@ -250,7 +273,7 @@ class BasicDictionary:
|
||||||
|
|
||||||
def _saveCustomDict(self):
|
def _saveCustomDict(self):
|
||||||
customPath = self.getCustomDictionaryPath()
|
customPath = self.getCustomDictionaryPath()
|
||||||
with gzip.open(customPath, "wt") as f:
|
with gzip.open(customPath, "wt", newline="\n") as f:
|
||||||
f.write(json.dumps(list(self._customDict)))
|
f.write(json.dumps(list(self._customDict)))
|
||||||
|
|
||||||
|
|
||||||
|
@ -363,7 +386,7 @@ class PySpellcheckerDictionary(BasicDictionary):
|
||||||
|
|
||||||
def getSuggestions(self, word):
|
def getSuggestions(self, word):
|
||||||
candidates = self._dict.candidates(word)
|
candidates = self._dict.candidates(word)
|
||||||
if word in candidates:
|
if candidates and word in candidates:
|
||||||
candidates.remove(word)
|
candidates.remove(word)
|
||||||
return candidates
|
return candidates
|
||||||
|
|
||||||
|
@ -393,7 +416,7 @@ class SymSpellDictionary(BasicDictionary):
|
||||||
if pyspellchecker:
|
if pyspellchecker:
|
||||||
path = os.path.join(pyspellchecker.__path__[0], "resources", "{}.json.gz".format(self.name))
|
path = os.path.join(pyspellchecker.__path__[0], "resources", "{}.json.gz".format(self.name))
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
with gzip.open(path, "rt", encoding='utf-8') as f:
|
with gzip.open(path, 'rt', encoding='utf-8') as f:
|
||||||
data = json.loads(f.read())
|
data = json.loads(f.read())
|
||||||
for key in data:
|
for key in data:
|
||||||
self._dict.create_dictionary_entry(key, data[key])
|
self._dict.create_dictionary_entry(key, data[key])
|
||||||
|
|
|
@ -5,6 +5,8 @@ import os
|
||||||
from manuskript.importer.abstractImporter import abstractImporter
|
from manuskript.importer.abstractImporter import abstractImporter
|
||||||
from manuskript.models import outlineItem
|
from manuskript.models import outlineItem
|
||||||
from manuskript.enums import Outline
|
from manuskript.enums import Outline
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
from PyQt5.QtWidgets import qApp
|
from PyQt5.QtWidgets import qApp
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,7 +46,7 @@ class folderImporter(abstractImporter):
|
||||||
fName, fExt = os.path.splitext(f)
|
fName, fExt = os.path.splitext(f)
|
||||||
if fExt.lower() in ext:
|
if fExt.lower() in ext:
|
||||||
try:
|
try:
|
||||||
with open(os.path.join(dirpath, f), "r", encoding="utf-8") as fr:
|
with open(os.path.join(dirpath, f), 'rt', encoding="utf-8") as fr:
|
||||||
content = fr.read()
|
content = fr.read()
|
||||||
child = outlineItem(title=fName, _type="md", parent=item)
|
child = outlineItem(title=fName, _type="md", parent=item)
|
||||||
child._data[Outline.text] = content
|
child._data[Outline.text] = content
|
||||||
|
@ -94,33 +96,29 @@ class folderImporter(abstractImporter):
|
||||||
|
|
||||||
# Add group
|
# Add group
|
||||||
group = self.addGroup(widget.toolBox.widget(0),
|
group = self.addGroup(widget.toolBox.widget(0),
|
||||||
qApp.translate("Import", "Folder import"))
|
safeTranslate(qApp, "Import", "Folder import"))
|
||||||
#group = cls.addPage(widget, "Folder import")
|
#group = cls.addPage(widget, "Folder import")
|
||||||
|
|
||||||
self.addSetting("info", "label",
|
self.addSetting("info", "label",
|
||||||
qApp.translate("Import", """<p><b>Info:</b> Imports a whole
|
safeTranslate(qApp, "Import", """<p><b>Info:</b> Imports a whole
|
||||||
directory structure. Folders are added as folders, and
|
directory structure. Folders are added as folders, and
|
||||||
plaintext documents within (you chose which ones by extension)
|
plaintext documents within (you chose which ones by extension)
|
||||||
are added as scene.</p>
|
are added as scene.</p>
|
||||||
<p>Only text files are supported (not images, binary or others).</p>"""))
|
<p>Only text files are supported (not images, binary or others).</p>"""))
|
||||||
|
|
||||||
self.addSetting("ext", "text",
|
self.addSetting("ext", "text",
|
||||||
qApp.translate("Import", "Include only those extensions:"),
|
safeTranslate(qApp, "Import", "Include only those extensions:"),
|
||||||
default="*.txt, *.md",
|
default="*.txt, *.md",
|
||||||
tooltip=qApp.translate("Import", "Comma separated values")),
|
tooltip=safeTranslate(qApp, "Import", "Comma separated values")),
|
||||||
|
|
||||||
self.addSetting("sortItems", "checkbox",
|
self.addSetting("sortItems", "checkbox",
|
||||||
qApp.translate("Import", "Sort items by name"),
|
safeTranslate(qApp, "Import", "Sort items by name"),
|
||||||
default=True),
|
default=True),
|
||||||
|
|
||||||
self.addSetting("separateFolderFiles", "checkbox",
|
self.addSetting("separateFolderFiles", "checkbox",
|
||||||
qApp.translate("Import", "Import folder then files"),
|
safeTranslate(qApp, "Import", "Import folder then files"),
|
||||||
default=True),
|
default=True),
|
||||||
|
|
||||||
self.addSettingsTo(group)
|
self.addSettingsTo(group)
|
||||||
|
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
from manuskript.importer.abstractImporter import abstractImporter
|
from manuskript.importer.abstractImporter import abstractImporter
|
||||||
from manuskript.models import outlineItem
|
from manuskript.models import outlineItem
|
||||||
from manuskript.enums import Outline
|
from manuskript.enums import Outline
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
from PyQt5.QtWidgets import qApp
|
from PyQt5.QtWidgets import qApp
|
||||||
import re, os
|
import re, os
|
||||||
|
|
||||||
|
@ -63,7 +65,7 @@ class markdownImporter(abstractImporter):
|
||||||
|
|
||||||
if not fromString:
|
if not fromString:
|
||||||
# Read file
|
# Read file
|
||||||
with open(filePath, "r", encoding="utf-8") as f:
|
with open(filePath, 'rt', encoding="utf-8") as f:
|
||||||
txt = f.read()
|
txt = f.read()
|
||||||
else:
|
else:
|
||||||
txt = fromString
|
txt = fromString
|
||||||
|
@ -173,11 +175,11 @@ class markdownImporter(abstractImporter):
|
||||||
|
|
||||||
# Add group
|
# Add group
|
||||||
group = self.addGroup(widget.toolBox.widget(0),
|
group = self.addGroup(widget.toolBox.widget(0),
|
||||||
qApp.translate("Import", "Markdown import"))
|
safeTranslate(qApp, "Import", "Markdown import"))
|
||||||
#group = cls.addPage(widget, "Folder import")
|
#group = cls.addPage(widget, "Folder import")
|
||||||
|
|
||||||
self.addSetting("info", "label",
|
self.addSetting("info", "label",
|
||||||
qApp.translate("Import", """<b>Info:</b> A very simple
|
safeTranslate(qApp, "Import", """<b>Info:</b> A very simple
|
||||||
parser that will go through a markdown document and
|
parser that will go through a markdown document and
|
||||||
create items for each titles.<br/> """))
|
create items for each titles.<br/> """))
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,11 @@ from PyQt5.QtWidgets import qApp, QMessageBox
|
||||||
from manuskript.models import outlineItem
|
from manuskript.models import outlineItem
|
||||||
from manuskript.enums import Outline
|
from manuskript.enums import Outline
|
||||||
from lxml import etree as ET
|
from lxml import etree as ET
|
||||||
from manuskript.functions import mainWindow
|
from manuskript.functions import mainWindow, safeTranslate
|
||||||
from manuskript.importer.abstractImporter import abstractImporter
|
from manuskript.importer.abstractImporter import abstractImporter
|
||||||
from manuskript.converters import HTML2MD, HTML2PlainText
|
from manuskript.converters import HTML2MD, HTML2PlainText
|
||||||
|
|
||||||
|
|
||||||
class mindMapImporter(abstractImporter):
|
class mindMapImporter(abstractImporter):
|
||||||
|
|
||||||
name = "Mind Map"
|
name = "Mind Map"
|
||||||
|
@ -54,8 +55,8 @@ class mindMapImporter(abstractImporter):
|
||||||
if not ret:
|
if not ret:
|
||||||
QMessageBox.critical(
|
QMessageBox.critical(
|
||||||
settingsWidget,
|
settingsWidget,
|
||||||
qApp.translate("Import", "Mind Map Import"),
|
safeTranslate(qApp, "Import", "Mind Map Import"),
|
||||||
qApp.translate("Import", "This does not appear to be a valid Mind Map file."))
|
safeTranslate(qApp, "Import", "This does not appear to be a valid Mind Map file."))
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -68,10 +69,10 @@ class mindMapImporter(abstractImporter):
|
||||||
|
|
||||||
# Add group
|
# Add group
|
||||||
group = self.addGroup(widget.toolBox.widget(0),
|
group = self.addGroup(widget.toolBox.widget(0),
|
||||||
qApp.translate("Import", "Mind Map import"))
|
safeTranslate(qApp, "Import", "Mind Map import"))
|
||||||
|
|
||||||
self.addSetting("importTipAs", "combo",
|
self.addSetting("importTipAs", "combo",
|
||||||
qApp.translate("Import", "Import tip as:"),
|
safeTranslate(qApp, "Import", "Import tip as:"),
|
||||||
vals="Text|Folder",
|
vals="Text|Folder",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ class mindMapImporter(abstractImporter):
|
||||||
# Title
|
# Title
|
||||||
title = underElement.get('TEXT', "").replace("\n", " ")
|
title = underElement.get('TEXT', "").replace("\n", " ")
|
||||||
if not title:
|
if not title:
|
||||||
title = qApp.translate("Import", "Untitled")
|
title = safeTranslate(qApp, "Import", "Untitled")
|
||||||
|
|
||||||
item = outlineItem(parent=parentItem, title=title)
|
item = outlineItem(parent=parentItem, title=title)
|
||||||
items.append(item)
|
items.append(item)
|
||||||
|
|
|
@ -5,9 +5,10 @@ from PyQt5.QtWidgets import qApp, QMessageBox
|
||||||
from manuskript.models import outlineItem
|
from manuskript.models import outlineItem
|
||||||
from manuskript.enums import Outline
|
from manuskript.enums import Outline
|
||||||
from lxml import etree as ET
|
from lxml import etree as ET
|
||||||
from manuskript.functions import mainWindow
|
from manuskript.functions import mainWindow, safeTranslate
|
||||||
from manuskript.importer.abstractImporter import abstractImporter
|
from manuskript.importer.abstractImporter import abstractImporter
|
||||||
|
|
||||||
|
|
||||||
class opmlImporter(abstractImporter):
|
class opmlImporter(abstractImporter):
|
||||||
|
|
||||||
name = "OPML"
|
name = "OPML"
|
||||||
|
@ -34,8 +35,8 @@ class opmlImporter(abstractImporter):
|
||||||
opmlContent = opmlFile.read()
|
opmlContent = opmlFile.read()
|
||||||
except:
|
except:
|
||||||
QMessageBox.critical(settingsWidget,
|
QMessageBox.critical(settingsWidget,
|
||||||
qApp.translate("Import", "OPML Import"),
|
safeTranslate(qApp, "Import", "OPML Import"),
|
||||||
qApp.translate("Import", "File open failed."))
|
safeTranslate(qApp, "Import", "File open failed."))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
elif fromString == "":
|
elif fromString == "":
|
||||||
|
@ -63,8 +64,8 @@ class opmlImporter(abstractImporter):
|
||||||
if not ret:
|
if not ret:
|
||||||
QMessageBox.critical(
|
QMessageBox.critical(
|
||||||
settingsWidget,
|
settingsWidget,
|
||||||
qApp.translate("Import", "OPML Import"),
|
safeTranslate(qApp, "Import", "OPML Import"),
|
||||||
qApp.translate("Import", "This does not appear to be a valid OPML file."))
|
safeTranslate(qApp, "Import", "This does not appear to be a valid OPML file."))
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ from manuskript.importer.abstractImporter import abstractImporter
|
||||||
from manuskript.exporter.pandoc import pandocExporter
|
from manuskript.exporter.pandoc import pandocExporter
|
||||||
from manuskript.importer.opmlImporter import opmlImporter
|
from manuskript.importer.opmlImporter import opmlImporter
|
||||||
from manuskript.importer.markdownImporter import markdownImporter
|
from manuskript.importer.markdownImporter import markdownImporter
|
||||||
|
from manuskript.functions import safeTranslate
|
||||||
|
|
||||||
from PyQt5.QtWidgets import qApp
|
from PyQt5.QtWidgets import qApp
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,10 +57,10 @@ class pandocImporter(abstractImporter):
|
||||||
|
|
||||||
# Add group
|
# Add group
|
||||||
group = self.addGroup(widget.toolBox.widget(0),
|
group = self.addGroup(widget.toolBox.widget(0),
|
||||||
qApp.translate("Import", "Pandoc import"))
|
safeTranslate(qApp, "Import", "Pandoc import"))
|
||||||
|
|
||||||
self.addSetting("info", "label",
|
self.addSetting("info", "label",
|
||||||
qApp.translate("Import", """<b>Info:</b> Manuskript can
|
safeTranslate(qApp, "Import", """<b>Info:</b> Manuskript can
|
||||||
import from <b>markdown</b> or <b>OPML</b>. Pandoc will
|
import from <b>markdown</b> or <b>OPML</b>. Pandoc will
|
||||||
convert your document to either (see option below), and
|
convert your document to either (see option below), and
|
||||||
then it will be imported in manuskript. One or the other
|
then it will be imported in manuskript. One or the other
|
||||||
|
@ -66,14 +68,14 @@ class pandocImporter(abstractImporter):
|
||||||
<br/> """))
|
<br/> """))
|
||||||
|
|
||||||
self.addSetting("formatTo", "combo",
|
self.addSetting("formatTo", "combo",
|
||||||
qApp.translate("Import", "Import using:"),
|
safeTranslate(qApp, "Import", "Import using:"),
|
||||||
vals="markdown|OPML")
|
vals="markdown|OPML")
|
||||||
|
|
||||||
self.addSetting("wrap", "combo",
|
self.addSetting("wrap", "combo",
|
||||||
qApp.translate("Import", "Wrap lines:"),
|
safeTranslate(qApp, "Import", "Wrap lines:"),
|
||||||
vals="auto|none|preserve",
|
vals="auto|none|preserve",
|
||||||
default="none",
|
default="none",
|
||||||
tooltip=qApp.translate("Import", """<p>Should pandoc create
|
tooltip=safeTranslate(qApp, "Import", """<p>Should pandoc create
|
||||||
cosmetic / non-semantic line-breaks?</p><p>
|
cosmetic / non-semantic line-breaks?</p><p>
|
||||||
<b>auto</b>: wraps at 72 characters.<br>
|
<b>auto</b>: wraps at 72 characters.<br>
|
||||||
<b>none</b>: no line wrap.<br>
|
<b>none</b>: no line wrap.<br>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue