mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-17 10:24:34 +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.
|
||||
on:
|
||||
|
@ -13,31 +14,28 @@ on:
|
|||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
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
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.6]
|
||||
# python-version: [3.6, 3.7, 3.8, 3.9]
|
||||
os: [ubuntu-16.04]
|
||||
# os: [ubuntu-16.04, ubuntu-latest, windows-latest, macos-10.15]
|
||||
# https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
|
||||
python-version: [3.9]
|
||||
os: [ubuntu-20.04]
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
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 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
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -6,6 +6,7 @@
|
|||
*.msk
|
||||
*.nja
|
||||
*.pyc
|
||||
*.glade~
|
||||
.cache
|
||||
.directory
|
||||
.idea
|
||||
|
|
|
@ -2,7 +2,7 @@ language: generic
|
|||
os:
|
||||
- osx
|
||||
- linux
|
||||
osx_image: xcode12
|
||||
osx_image: xcode13.4
|
||||
sudo: required
|
||||
install:
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then package/prepare_osx.sh; fi
|
||||
|
|
146
CHANGELOG.md
146
CHANGELOG.md
|
@ -1,8 +1,148 @@
|
|||
# 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:**
|
||||
|
||||
|
@ -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 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))
|
||||
- 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))
|
||||
- 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))
|
||||
|
|
26
README.md
26
README.md
|
@ -1,11 +1,15 @@
|
|||
# Manuskript
|
||||
|
||||
[Manuskript](http://www.theologeek.ch/manuskript) is an open-source
|
||||
[Manuskript](https://www.theologeek.ch/manuskript) is an open-source
|
||||
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.
|
||||
|
||||
![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
|
||||
|
||||
|
@ -18,34 +22,34 @@ With Manuskript you can:
|
|||
* Create characters
|
||||
* Conceive plots
|
||||
* 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
|
||||
[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
|
||||
([Distraction free mode](https://github.com/olivierkes/manuskript/wiki/Full-screen-mode))
|
||||
* Build worlds
|
||||
* [Track items](https://github.com/olivierkes/manuskript/wiki/How-to-keep-track-of-important-items)
|
||||
* 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
|
||||
[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
|
||||
[more](https://github.com/olivierkes/manuskript/wiki/Import-and-Export-capabilities)
|
||||
|
||||
|
||||
Additionally Manuskript can help in many more ways with a spell
|
||||
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
|
||||
[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](http://www.theologeek.ch/manuskript/download) and install Manuskript today.
|
||||
[Download](https://www.theologeek.ch/manuskript/download) and install Manuskript today.
|
||||
|
||||
## 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.
|
||||
|
||||
## Contribute
|
||||
|
@ -56,7 +60,7 @@ You can help improve Manuskript by reporting
|
|||
and
|
||||
[translating to other languages](https://github.com/olivierkes/manuskript/wiki/Translate-Manuskript).
|
||||
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.
|
||||
|
||||
|
|
|
@ -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/importer_ui.ui
|
||||
FORMS += ../manuskript/ui/about_ui.ui
|
||||
FORMS += ../manuskript/ui/search_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/mainEditor_ui.ui
|
||||
FORMS += ../manuskript/ui/editors/editorWidget_ui.ui
|
||||
FORMS += ../manuskript/ui/editors/completer_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/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/revisions_ui.ui
|
||||
FORMS += ../manuskript/ui/exporters/exportersManager_ui.ui
|
||||
FORMS += ../manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui
|
||||
FORMS += ../manuskript/ui/exporters/exporter_ui.ui
|
||||
SOURCES += ../manuskript/models/persosProxyModel.py
|
||||
SOURCES += ../manuskript/models/plotsProxyModel.py
|
||||
SOURCES += ../manuskript/models/plotModel.py
|
||||
SOURCES += ../manuskript/models/worldModel.py
|
||||
SOURCES += ../manuskript/models/abstractModel.py
|
||||
SOURCES += ../manuskript/models/characterModel.py
|
||||
SOURCES += ../manuskript/exporter/pandoc/abstractPlainText.py
|
||||
SOURCES += ../manuskript/exporter/manuskript/markdown.py
|
||||
SOURCES += ../manuskript/mainWindow.py
|
||||
FORMS += ../manuskript/ui/views/storylineView_ui.ui
|
||||
FORMS += ../manuskript/ui/views/sldImportance_ui.ui
|
||||
FORMS += ../manuskript/ui/views/basicItemView_ui.ui
|
||||
FORMS += ../manuskript/ui/views/propertiesView_ui.ui
|
||||
FORMS += ../manuskript/ui/views/metadataView_ui.ui
|
||||
FORMS += ../manuskript/ui/listDialog_ui.ui
|
||||
SOURCES += ../manuskript/functions/__init__.py
|
||||
SOURCES += ../manuskript/functions/spellchecker.py
|
||||
SOURCES += ../manuskript/__init__.py
|
||||
SOURCES += ../manuskript/enums.py
|
||||
SOURCES += ../manuskript/converters/__init__.py
|
||||
SOURCES += ../manuskript/converters/abstractConverter.py
|
||||
SOURCES += ../manuskript/converters/pandocConverter.py
|
||||
SOURCES += ../manuskript/converters/markdownConverter.py
|
||||
SOURCES += ../manuskript/main.py
|
||||
SOURCES += ../manuskript/settingsWindow.py
|
||||
SOURCES += ../manuskript/load_save/version_0.py
|
||||
SOURCES += ../manuskript/ui/importers/importer.py
|
||||
SOURCES += ../manuskript/ui/helpLabel.py
|
||||
SOURCES += ../manuskript/ui/editors/textFormat.py
|
||||
SOURCES += ../manuskript/ui/editors/tabSplitter.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/mainWindow.py
|
||||
SOURCES += ../manuskript/logging.py
|
||||
SOURCES += ../manuskript/exporter/__init__.py
|
||||
SOURCES += ../manuskript/exporter/basic.py
|
||||
SOURCES += ../manuskript/exporter/pandoc/__init__.py
|
||||
SOURCES += ../manuskript/exporter/pandoc/abstractOutput.py
|
||||
SOURCES += ../manuskript/exporter/pandoc/outputFormats.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/__init__.py
|
||||
SOURCES += ../manuskript/exporter/pandoc/plainText.py
|
||||
SOURCES += ../manuskript/exporter/manuskript/__init__.py
|
||||
SOURCES += ../manuskript/exporter/manuskript/markdown.py
|
||||
SOURCES += ../manuskript/exporter/manuskript/HTML.py
|
||||
SOURCES += ../manuskript/exporter/manuskript/plainText.py
|
||||
SOURCES += ../manuskript/exporter/manuskript/__init__.py
|
||||
SOURCES += ../manuskript/converters/pandocConverter.py
|
||||
SOURCES += ../manuskript/tests/__init__.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/folderImporter.py
|
||||
SOURCES += ../manuskript/importer/opmlImporter.py
|
||||
SOURCES += ../manuskript/importer/pandocImporters.py
|
||||
SOURCES += ../manuskript/importer/mindMapImporter.py
|
||||
SOURCES += ../manuskript/ui/views/corkDelegate.py
|
||||
SOURCES += ../manuskript/ui/views/outlineBasics.py
|
||||
SOURCES += ../manuskript/importer/abstractImporter.py
|
||||
SOURCES += ../manuskript/load_save/__init__.py
|
||||
SOURCES += ../manuskript/load_save/version_1.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/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
|
||||
|
||||
TRANSLATIONS += manuskript_ar_SA.ts
|
||||
TRANSLATIONS += manuskript_de.ts
|
||||
TRANSLATIONS += manuskript_en_GB.ts
|
||||
TRANSLATIONS += manuskript_es.ts
|
||||
TRANSLATIONS += manuskript_fa.ts
|
||||
TRANSLATIONS += manuskript_fr.ts
|
||||
TRANSLATIONS += manuskript_hu.ts
|
||||
TRANSLATIONS += manuskript_id.ts
|
||||
TRANSLATIONS += manuskript_it.ts
|
||||
TRANSLATIONS += manuskript_ja.ts
|
||||
TRANSLATIONS += manuskript_ko.ts
|
||||
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
|
||||
SOURCES += ../manuskript/ui/collapsibleGroupBox2.py
|
||||
SOURCES += ../manuskript/ui/welcome_ui.py
|
||||
SOURCES += ../manuskript/ui/welcome.py
|
||||
SOURCES += ../manuskript/ui/collapsibleGroupBox.py
|
||||
SOURCES += ../manuskript/ui/settings_ui.py
|
||||
SOURCES += ../manuskript/ui/searchMenu.py
|
||||
SOURCES += ../manuskript/ui/listDialog_ui.py
|
||||
SOURCES += ../manuskript/ui/about.py
|
||||
SOURCES += ../manuskript/ui/cheatSheet.py
|
||||
SOURCES += ../manuskript/ui/statusLabel.py
|
||||
SOURCES += ../manuskript/ui/search.py
|
||||
SOURCES += ../manuskript/settingsWindow.py
|
||||
TRANSLATIONS += manuskript_sv.ts
|
||||
TRANSLATIONS += manuskript_tr.ts
|
||||
TRANSLATIONS += manuskript_uk.ts
|
||||
TRANSLATIONS += manuskript_ta.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_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_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
|
||||
|
||||
# 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'],
|
||||
pathex=['.'],
|
||||
# For some reason we need to explicitly include the current directory. Unsure why.
|
||||
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,
|
||||
datas=[
|
||||
("icons", "icons"),
|
||||
|
@ -19,22 +36,64 @@ a = Analysis(['bin/manuskript'],
|
|||
excludes=[],
|
||||
win_no_prefer_redirects=False,
|
||||
win_private_assemblies=False,
|
||||
cipher=block_cipher)
|
||||
pyz = PYZ(a.pure, a.zipped_data,
|
||||
cipher=block_cipher)
|
||||
exe = EXE(pyz,
|
||||
cipher=block_cipher,
|
||||
)
|
||||
|
||||
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
exclude_binaries=True,
|
||||
name='manuskript',
|
||||
name="manuskript",
|
||||
debug=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
console=True,
|
||||
icon=os.path.join(SPECPATH, 'icons/Manuskript/manuskript.ico') )
|
||||
coll = COLLECT(exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
icon=os.path.join(SPECPATH, "icons/Manuskript/manuskript.ico"),
|
||||
)
|
||||
|
||||
wexe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
exclude_binaries=True,
|
||||
name="manuskriptw",
|
||||
debug=False,
|
||||
strip=False,
|
||||
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 manuskript.converters import abstractConverter
|
||||
from manuskript.functions import mainWindow
|
||||
from manuskript.functions import mainWindow, safeTranslate
|
||||
|
||||
import logging
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
@ -74,7 +74,7 @@ class pandocConverter(abstractConverter):
|
|||
err = stderr.decode("utf-8")
|
||||
LOGGER.error(err)
|
||||
QMessageBox.critical(mainWindow().dialog,
|
||||
qApp.translate("Export", "Error"), err)
|
||||
safeTranslate(qApp, "Export", "Error"), err)
|
||||
return None
|
||||
|
||||
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.ui.views.webView import webView
|
||||
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
import os
|
||||
|
||||
try:
|
||||
|
@ -15,8 +17,8 @@ except ImportError:
|
|||
|
||||
class HTML(markdown):
|
||||
name = "HTML"
|
||||
description = qApp.translate("Export", "Basic HTML output using the Python module 'markdown'.")
|
||||
InvalidBecause = qApp.translate("Export", "Python module 'markdown'.")
|
||||
description = safeTranslate(qApp, "Export", "Basic HTML output using the Python module 'markdown'.")
|
||||
InvalidBecause = safeTranslate(qApp, "Export", "Python module 'markdown'.")
|
||||
icon = "text-html"
|
||||
|
||||
exportVarName = "lastManuskriptHTML"
|
||||
|
@ -51,12 +53,12 @@ class HTML(markdown):
|
|||
w1 = QPlainTextEdit()
|
||||
w1.setFrameShape(QFrame.NoFrame)
|
||||
w1.setReadOnly(True)
|
||||
t.addTab(w0, qApp.translate("Export", "Markdown source"))
|
||||
t.addTab(w1, qApp.translate("Export", "HTML Source"))
|
||||
t.addTab(w0, safeTranslate(qApp, "Export", "Markdown source"))
|
||||
t.addTab(w1, safeTranslate(qApp, "Export", "HTML Source"))
|
||||
|
||||
if webView:
|
||||
w2 = webView()
|
||||
t.addTab(w2, qApp.translate("Export", "HTML Output"))
|
||||
t.addTab(w2, safeTranslate(qApp, "Export", "HTML Output"))
|
||||
|
||||
t.setCurrentIndex(2)
|
||||
return t
|
||||
|
|
|
@ -6,20 +6,22 @@ from manuskript.exporter.basic import basicExporter, basicFormat
|
|||
from manuskript.exporter.manuskript.HTML import HTML
|
||||
from manuskript.exporter.manuskript.markdown import markdown
|
||||
from manuskript.exporter.manuskript.plainText import plainText
|
||||
from manuskript.functions import appPath
|
||||
from manuskript.functions import appPath, safeTranslate
|
||||
|
||||
import os
|
||||
|
||||
|
||||
class manuskriptExporter(basicExporter):
|
||||
|
||||
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 = [
|
||||
plainText(),
|
||||
markdown(),
|
||||
HTML(),
|
||||
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
|
||||
def isValid(cls):
|
||||
|
|
|
@ -4,14 +4,14 @@ from PyQt5.QtGui import QTextCharFormat, QFont
|
|||
from PyQt5.QtWidgets import QPlainTextEdit, QGroupBox, qApp, QVBoxLayout, QCheckBox
|
||||
|
||||
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.exporters.manuskript.plainTextSettings import exporterSettings
|
||||
|
||||
|
||||
class markdown(plainText):
|
||||
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.""")
|
||||
|
||||
exportVarName = "lastManuskriptMarkdown"
|
||||
|
@ -57,7 +57,7 @@ class markdownSettings(exporterSettings):
|
|||
w = self.toolBox.widget(self.toolBox.count() - 1)
|
||||
self.grpMarkdown = QGroupBox(self.tr("Markdown"))
|
||||
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)
|
||||
|
||||
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 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.ui.exporters.manuskript.plainTextSettings import exporterSettings
|
||||
import codecs
|
||||
|
@ -14,8 +14,8 @@ import logging
|
|||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
class plainText(basicFormat):
|
||||
name = qApp.translate("Export", "Plain text")
|
||||
description = qApp.translate("Export", """Simplest export to plain text. Allows you to use your own markup not understood
|
||||
name = safeTranslate(qApp, "Export", "Plain text")
|
||||
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>.""")
|
||||
implemented = True
|
||||
requires = {
|
||||
|
@ -48,8 +48,8 @@ class plainText(basicFormat):
|
|||
try:
|
||||
return self.concatenate(mainWindow().mdlOutline.rootItem, settings)
|
||||
except re.error as e:
|
||||
QMessageBox.warning(mainWindow().dialog, qApp.translate("Export", "Error"),
|
||||
qApp.translate("Export", "Could not process regular expression: \n{}").format(str(e)))
|
||||
QMessageBox.warning(mainWindow().dialog, safeTranslate(qApp, "Export", "Error"),
|
||||
safeTranslate(qApp, "Export", "Could not process regular expression: \n{}").format(str(e)))
|
||||
return ""
|
||||
|
||||
def getExportFilename(self, settingsWidget, varName=None, filter=None):
|
||||
|
@ -69,7 +69,7 @@ class plainText(basicFormat):
|
|||
filename = ""
|
||||
|
||||
filename, filter = getSaveFileNameWithSuffix(settingsWidget.parent(),
|
||||
caption=qApp.translate("Export", "Choose output file…"),
|
||||
caption=safeTranslate(qApp, "Export", "Choose output file…"),
|
||||
filter=filter,
|
||||
directory=filename,
|
||||
defaultSuffix=self.exportDefaultSuffix)
|
||||
|
@ -96,7 +96,7 @@ class plainText(basicFormat):
|
|||
LOGGER.error("No content. Nothing saved.")
|
||||
return
|
||||
|
||||
with open(filename, "w", encoding='utf8') as f:
|
||||
with open(filename, "wt", encoding="utf8", newline="\n") as f:
|
||||
f.write(content)
|
||||
|
||||
def preview(self, settingsWidget, previewWidget):
|
||||
|
@ -217,4 +217,3 @@ class plainText(basicFormat):
|
|||
content += "\n"
|
||||
|
||||
return content
|
||||
|
||||
|
|
|
@ -5,12 +5,14 @@ from PyQt5.QtCore import QUrl
|
|||
|
||||
from manuskript.exporter.manuskript import HTML as MskHTML
|
||||
from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
import os
|
||||
|
||||
|
||||
class HTML(abstractPlainText):
|
||||
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"
|
||||
|
||||
exportVarName = "lastPandocHTML"
|
||||
|
|
|
@ -7,7 +7,7 @@ from PyQt5.QtCore import QUrl
|
|||
from PyQt5.QtWidgets import qApp
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
@ -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"""
|
||||
|
||||
name = "PDF"
|
||||
description = qApp.translate("Export", "Needs LaTeX to be installed.")
|
||||
InvalidBecause = qApp.translate("Export", """a valid LaTeX installation. Pandoc recommendations can be found on:
|
||||
description = safeTranslate(qApp, "Export", "Needs LaTeX to be installed.")
|
||||
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.""")
|
||||
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.outputFormats import ePub, OpenDocument, DocX
|
||||
from manuskript.exporter.pandoc.plainText import reST, markdown, latex, OPML
|
||||
from manuskript.functions import mainWindow
|
||||
from manuskript.functions import mainWindow, safeTranslate
|
||||
|
||||
import logging
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
@ -19,7 +19,7 @@ LOGGER = logging.getLogger(__name__)
|
|||
class pandocExporter(basicExporter):
|
||||
|
||||
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>
|
||||
<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")
|
||||
if p.returncode != 0:
|
||||
LOGGER.error(err)
|
||||
QMessageBox.critical(mainWindow().dialog, qApp.translate("Export", "Error"), err)
|
||||
QMessageBox.critical(mainWindow().dialog, safeTranslate(qApp, "Export", "Error"), err)
|
||||
else:
|
||||
LOGGER.warning(err)
|
||||
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.ui.collapsibleGroupBox2 import collapsibleGroupBox2
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
import logging
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
@ -150,77 +151,80 @@ class pandocSettings(markdownSettings):
|
|||
settingsList = {
|
||||
# General
|
||||
"standalone": pandocSetting("--standalone", "checkbox", "",
|
||||
qApp.translate("Export", "Standalone document (not just a fragment)"),
|
||||
safeTranslate(qApp, "Export", "Standalone document (not just a fragment)"),
|
||||
default=True),
|
||||
"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", "",
|
||||
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"),
|
||||
# pandoc v1 only
|
||||
"smart": pandocSetting("--smart", "checkbox", "",
|
||||
qApp.translate("Export", "Typographically correct output"),
|
||||
safeTranslate(qApp, "Export", "Typographically correct output"),
|
||||
maxVersion="1.19.2.4"),
|
||||
# pandoc v1 only
|
||||
"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"),
|
||||
# pandoc v1.5 to 2.7.3
|
||||
"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"),
|
||||
# pandoc v2.8+
|
||||
"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"),
|
||||
"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"),
|
||||
"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
|
||||
"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),
|
||||
# pandoc v1.9 to v2.11.1
|
||||
"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"),
|
||||
# pandoc v2.11.2+
|
||||
"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"),
|
||||
"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"),
|
||||
"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"),
|
||||
# pandoc v1 only
|
||||
"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,
|
||||
minVersion="1.9", maxVersion="1.19.2.4"),
|
||||
# pandoc v2
|
||||
"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),
|
||||
"epub3": pandocSetting("EXTepub3", "checkbox", "epub",
|
||||
qApp.translate("Export", "Convert to ePUB3"), specific=True,
|
||||
safeTranslate(qApp, "Export", "Convert to ePUB3"), specific=True,
|
||||
minVersion="1.10"),
|
||||
|
||||
# PDF
|
||||
"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"),
|
||||
"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"),
|
||||
"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"),
|
||||
"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"),
|
||||
|
||||
# FIXME: complete with http://pandoc.org/README.html#variables-for-latex
|
||||
|
@ -367,6 +371,8 @@ class pandocSettings(markdownSettings):
|
|||
extensions += "-yaml_metadata_block"
|
||||
if name == "epub3" and s.widget.isChecked():
|
||||
toFormat = "epub3"
|
||||
if name == "hard-line-breaks" and s.widget.isChecked():
|
||||
extensions += "+hard_line_breaks"
|
||||
|
||||
r = ["--from=markdown" + extensions,
|
||||
"--to={}".format(toFormat)]
|
||||
|
|
|
@ -3,11 +3,12 @@
|
|||
from PyQt5.QtWidgets import qApp
|
||||
|
||||
from manuskript.exporter.pandoc.abstractOutput import abstractOutput
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
|
||||
class ePub(abstractOutput):
|
||||
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"
|
||||
|
||||
exportVarName = "lastPandocePub"
|
||||
|
@ -18,7 +19,7 @@ class ePub(abstractOutput):
|
|||
|
||||
class OpenDocument(abstractOutput):
|
||||
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"
|
||||
toFormat = "odt"
|
||||
|
@ -29,7 +30,7 @@ class OpenDocument(abstractOutput):
|
|||
|
||||
class DocX(abstractOutput):
|
||||
name = "DocX"
|
||||
description = qApp.translate("Export", "Microsoft Office (.docx) document.")
|
||||
description = safeTranslate(qApp, "Export", "Microsoft Office (.docx) document.")
|
||||
|
||||
exportVarName = "lastPandocDocX"
|
||||
toFormat = "docx"
|
||||
|
|
|
@ -3,11 +3,12 @@
|
|||
from PyQt5.QtWidgets import qApp
|
||||
|
||||
from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
|
||||
class markdown(abstractPlainText):
|
||||
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.""")
|
||||
icon = "text-x-markdown"
|
||||
|
||||
|
@ -19,7 +20,7 @@ class markdown(abstractPlainText):
|
|||
|
||||
class reST(abstractPlainText):
|
||||
name = "reST"
|
||||
description = qApp.translate("Export", """reStructuredText is a lightweight markup language.""")
|
||||
description = safeTranslate(qApp, "Export", """reStructuredText is a lightweight markup language.""")
|
||||
|
||||
exportVarName = "lastPandocreST"
|
||||
toFormat = "rst"
|
||||
|
@ -30,7 +31,7 @@ class reST(abstractPlainText):
|
|||
|
||||
class latex(abstractPlainText):
|
||||
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.""")
|
||||
|
||||
exportVarName = "lastPandocLatex"
|
||||
|
@ -42,7 +43,7 @@ class latex(abstractPlainText):
|
|||
|
||||
class OPML(abstractPlainText):
|
||||
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
|
||||
through an outliner.""")
|
||||
|
||||
|
|
|
@ -23,8 +23,14 @@ AUC = Qt.AutoConnection | Qt.UniqueConnection
|
|||
MW = None
|
||||
|
||||
|
||||
def safeTranslate(qApp, group, text):
|
||||
try:
|
||||
return qApp.translate(group, text)
|
||||
except:
|
||||
return 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):
|
||||
|
@ -246,7 +252,7 @@ def colorifyPixmap(pixmap, color):
|
|||
|
||||
|
||||
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:
|
||||
p = os.path.join(p, suffix)
|
||||
return p
|
||||
|
@ -299,7 +305,7 @@ def findBackground(filename):
|
|||
"""
|
||||
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"):
|
||||
|
@ -463,7 +469,7 @@ def search(searchRegex, text):
|
|||
:return: list of tuples (startPos, endPos)
|
||||
"""
|
||||
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:
|
||||
return []
|
||||
|
||||
|
@ -505,7 +511,7 @@ def getManuskriptPath(follow_symlinks=True):
|
|||
path = os.path.abspath(sys.executable)
|
||||
else:
|
||||
import inspect
|
||||
path = inspect.getabsfile(getManuskriptPath) + "/../.."
|
||||
path = os.path.join(inspect.getabsfile(getManuskriptPath), "..", "..")
|
||||
if follow_symlinks:
|
||||
path = os.path.realpath(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
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
import os, gzip, json, glob, re
|
||||
import os, gzip, json, glob, re, string
|
||||
from PyQt5.QtCore import QLocale
|
||||
from collections import OrderedDict
|
||||
from manuskript.functions import writablePath
|
||||
|
@ -148,7 +148,7 @@ class BasicDictionary:
|
|||
self._customDict = set()
|
||||
customPath = self.getCustomDictionaryPath()
|
||||
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()))
|
||||
for word in self._customDict:
|
||||
self._dict.create_dictionary_entry(word, self.CUSTOM_COUNT)
|
||||
|
@ -187,6 +187,7 @@ class BasicDictionary:
|
|||
def checkText(self, text):
|
||||
# Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/
|
||||
WORDS = r'(?iu)((?:[^_\W]|\')+)[^A-Za-z0-9\']'
|
||||
|
||||
# (?iu) means case insensitive and Unicode
|
||||
# ((?:[^_\W]|\')+) means words exclude underscores but include apostrophes
|
||||
# [^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):
|
||||
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(
|
||||
word_object.start(1), word_object.end(1)
|
||||
))
|
||||
|
@ -250,7 +273,7 @@ class BasicDictionary:
|
|||
|
||||
def _saveCustomDict(self):
|
||||
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)))
|
||||
|
||||
|
||||
|
@ -363,7 +386,7 @@ class PySpellcheckerDictionary(BasicDictionary):
|
|||
|
||||
def getSuggestions(self, word):
|
||||
candidates = self._dict.candidates(word)
|
||||
if word in candidates:
|
||||
if candidates and word in candidates:
|
||||
candidates.remove(word)
|
||||
return candidates
|
||||
|
||||
|
@ -393,7 +416,7 @@ class SymSpellDictionary(BasicDictionary):
|
|||
if pyspellchecker:
|
||||
path = os.path.join(pyspellchecker.__path__[0], "resources", "{}.json.gz".format(self.name))
|
||||
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())
|
||||
for key in data:
|
||||
self._dict.create_dictionary_entry(key, data[key])
|
||||
|
|
|
@ -5,6 +5,8 @@ import os
|
|||
from manuskript.importer.abstractImporter import abstractImporter
|
||||
from manuskript.models import outlineItem
|
||||
from manuskript.enums import Outline
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
from PyQt5.QtWidgets import qApp
|
||||
|
||||
|
||||
|
@ -44,7 +46,7 @@ class folderImporter(abstractImporter):
|
|||
fName, fExt = os.path.splitext(f)
|
||||
if fExt.lower() in ext:
|
||||
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()
|
||||
child = outlineItem(title=fName, _type="md", parent=item)
|
||||
child._data[Outline.text] = content
|
||||
|
@ -94,33 +96,29 @@ class folderImporter(abstractImporter):
|
|||
|
||||
# Add group
|
||||
group = self.addGroup(widget.toolBox.widget(0),
|
||||
qApp.translate("Import", "Folder import"))
|
||||
safeTranslate(qApp, "Import", "Folder import"))
|
||||
#group = cls.addPage(widget, "Folder import")
|
||||
|
||||
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
|
||||
plaintext documents within (you chose which ones by extension)
|
||||
are added as scene.</p>
|
||||
<p>Only text files are supported (not images, binary or others).</p>"""))
|
||||
|
||||
self.addSetting("ext", "text",
|
||||
qApp.translate("Import", "Include only those extensions:"),
|
||||
safeTranslate(qApp, "Import", "Include only those extensions:"),
|
||||
default="*.txt, *.md",
|
||||
tooltip=qApp.translate("Import", "Comma separated values")),
|
||||
tooltip=safeTranslate(qApp, "Import", "Comma separated values")),
|
||||
|
||||
self.addSetting("sortItems", "checkbox",
|
||||
qApp.translate("Import", "Sort items by name"),
|
||||
safeTranslate(qApp, "Import", "Sort items by name"),
|
||||
default=True),
|
||||
|
||||
self.addSetting("separateFolderFiles", "checkbox",
|
||||
qApp.translate("Import", "Import folder then files"),
|
||||
safeTranslate(qApp, "Import", "Import folder then files"),
|
||||
default=True),
|
||||
|
||||
self.addSettingsTo(group)
|
||||
|
||||
return widget
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
from manuskript.importer.abstractImporter import abstractImporter
|
||||
from manuskript.models import outlineItem
|
||||
from manuskript.enums import Outline
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
from PyQt5.QtWidgets import qApp
|
||||
import re, os
|
||||
|
||||
|
@ -63,7 +65,7 @@ class markdownImporter(abstractImporter):
|
|||
|
||||
if not fromString:
|
||||
# Read file
|
||||
with open(filePath, "r", encoding="utf-8") as f:
|
||||
with open(filePath, 'rt', encoding="utf-8") as f:
|
||||
txt = f.read()
|
||||
else:
|
||||
txt = fromString
|
||||
|
@ -173,11 +175,11 @@ class markdownImporter(abstractImporter):
|
|||
|
||||
# Add group
|
||||
group = self.addGroup(widget.toolBox.widget(0),
|
||||
qApp.translate("Import", "Markdown import"))
|
||||
safeTranslate(qApp, "Import", "Markdown import"))
|
||||
#group = cls.addPage(widget, "Folder import")
|
||||
|
||||
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
|
||||
create items for each titles.<br/> """))
|
||||
|
||||
|
|
|
@ -5,10 +5,11 @@ from PyQt5.QtWidgets import qApp, QMessageBox
|
|||
from manuskript.models import outlineItem
|
||||
from manuskript.enums import Outline
|
||||
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.converters import HTML2MD, HTML2PlainText
|
||||
|
||||
|
||||
class mindMapImporter(abstractImporter):
|
||||
|
||||
name = "Mind Map"
|
||||
|
@ -54,8 +55,8 @@ class mindMapImporter(abstractImporter):
|
|||
if not ret:
|
||||
QMessageBox.critical(
|
||||
settingsWidget,
|
||||
qApp.translate("Import", "Mind Map Import"),
|
||||
qApp.translate("Import", "This does not appear to be a valid Mind Map file."))
|
||||
safeTranslate(qApp, "Import", "Mind Map Import"),
|
||||
safeTranslate(qApp, "Import", "This does not appear to be a valid Mind Map file."))
|
||||
|
||||
return None
|
||||
|
||||
|
@ -68,10 +69,10 @@ class mindMapImporter(abstractImporter):
|
|||
|
||||
# Add group
|
||||
group = self.addGroup(widget.toolBox.widget(0),
|
||||
qApp.translate("Import", "Mind Map import"))
|
||||
safeTranslate(qApp, "Import", "Mind Map import"))
|
||||
|
||||
self.addSetting("importTipAs", "combo",
|
||||
qApp.translate("Import", "Import tip as:"),
|
||||
safeTranslate(qApp, "Import", "Import tip as:"),
|
||||
vals="Text|Folder",
|
||||
)
|
||||
|
||||
|
@ -86,7 +87,7 @@ class mindMapImporter(abstractImporter):
|
|||
# Title
|
||||
title = underElement.get('TEXT', "").replace("\n", " ")
|
||||
if not title:
|
||||
title = qApp.translate("Import", "Untitled")
|
||||
title = safeTranslate(qApp, "Import", "Untitled")
|
||||
|
||||
item = outlineItem(parent=parentItem, title=title)
|
||||
items.append(item)
|
||||
|
|
|
@ -5,9 +5,10 @@ from PyQt5.QtWidgets import qApp, QMessageBox
|
|||
from manuskript.models import outlineItem
|
||||
from manuskript.enums import Outline
|
||||
from lxml import etree as ET
|
||||
from manuskript.functions import mainWindow
|
||||
from manuskript.functions import mainWindow, safeTranslate
|
||||
from manuskript.importer.abstractImporter import abstractImporter
|
||||
|
||||
|
||||
class opmlImporter(abstractImporter):
|
||||
|
||||
name = "OPML"
|
||||
|
@ -34,8 +35,8 @@ class opmlImporter(abstractImporter):
|
|||
opmlContent = opmlFile.read()
|
||||
except:
|
||||
QMessageBox.critical(settingsWidget,
|
||||
qApp.translate("Import", "OPML Import"),
|
||||
qApp.translate("Import", "File open failed."))
|
||||
safeTranslate(qApp, "Import", "OPML Import"),
|
||||
safeTranslate(qApp, "Import", "File open failed."))
|
||||
return None
|
||||
|
||||
elif fromString == "":
|
||||
|
@ -63,8 +64,8 @@ class opmlImporter(abstractImporter):
|
|||
if not ret:
|
||||
QMessageBox.critical(
|
||||
settingsWidget,
|
||||
qApp.translate("Import", "OPML Import"),
|
||||
qApp.translate("Import", "This does not appear to be a valid OPML file."))
|
||||
safeTranslate(qApp, "Import", "OPML Import"),
|
||||
safeTranslate(qApp, "Import", "This does not appear to be a valid OPML file."))
|
||||
|
||||
return None
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ from manuskript.importer.abstractImporter import abstractImporter
|
|||
from manuskript.exporter.pandoc import pandocExporter
|
||||
from manuskript.importer.opmlImporter import opmlImporter
|
||||
from manuskript.importer.markdownImporter import markdownImporter
|
||||
from manuskript.functions import safeTranslate
|
||||
|
||||
from PyQt5.QtWidgets import qApp
|
||||
|
||||
|
||||
|
@ -55,10 +57,10 @@ class pandocImporter(abstractImporter):
|
|||
|
||||
# Add group
|
||||
group = self.addGroup(widget.toolBox.widget(0),
|
||||
qApp.translate("Import", "Pandoc import"))
|
||||
safeTranslate(qApp, "Import", "Pandoc import"))
|
||||
|
||||
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
|
||||
convert your document to either (see option below), and
|
||||
then it will be imported in manuskript. One or the other
|
||||
|
@ -66,14 +68,14 @@ class pandocImporter(abstractImporter):
|
|||
<br/> """))
|
||||
|
||||
self.addSetting("formatTo", "combo",
|
||||
qApp.translate("Import", "Import using:"),
|
||||
safeTranslate(qApp, "Import", "Import using:"),
|
||||
vals="markdown|OPML")
|
||||
|
||||
self.addSetting("wrap", "combo",
|
||||
qApp.translate("Import", "Wrap lines:"),
|
||||
safeTranslate(qApp, "Import", "Wrap lines:"),
|
||||
vals="auto|none|preserve",
|
||||
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>
|
||||
<b>auto</b>: wraps at 72 characters.<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