Compare commits
1394 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f2cf2c4396 | ||
|
|
79a9ab995d | ||
|
|
f6aabb7c5d | ||
|
|
b2782daece | ||
|
|
e7fdf05b00 | ||
|
|
02c532234c | ||
|
|
6eb6241044 | ||
|
|
af205b4877 | ||
|
|
a04eaaa779 | ||
|
|
d09e04e483 | ||
|
|
f421136f75 | ||
| f78f76a679 | |||
|
|
cd3bf1b97a | ||
|
|
e4ac46eb19 | ||
|
|
0d825f5c72 | ||
|
|
84e87cc2cd | ||
|
|
096cb08e98 | ||
|
|
1728fc31ed | ||
|
|
162428d8cb | ||
|
|
24408b9440 | ||
|
|
641a402daa | ||
|
|
026f486b3e | ||
|
|
7bb3fc581b | ||
|
|
88618b4c29 | ||
|
|
70d74e675f | ||
|
|
b80b4b2534 | ||
|
|
de8b7c1ac0 | ||
|
|
ed69456064 | ||
|
|
370843c296 | ||
|
|
02edf04117 | ||
|
|
6b4a495b87 | ||
|
|
3738f7fd51 | ||
|
|
e28e5cb052 | ||
|
|
762831931b | ||
|
|
29b7e4da37 | ||
|
|
037f1bee08 | ||
|
|
b5c8a014b7 | ||
|
|
f6fa696eb4 | ||
|
|
558ac0ae0c | ||
|
|
3355b5edbe | ||
|
|
b8f14bfb5d | ||
|
|
34caa41963 | ||
|
|
12bfc634c3 | ||
|
|
6b162eb3f2 | ||
|
|
767d6c5a1d | ||
|
|
5ae0292e0b | ||
|
|
fd4333c0e4 | ||
|
|
9843084b03 | ||
|
|
824a175ec7 | ||
|
|
6d931dc89b | ||
|
|
8a89fb604b | ||
|
|
e677e99b02 | ||
|
|
76da76f3bf | ||
|
|
41ce067d43 | ||
|
|
eddb12c5fb | ||
|
|
c124bcb7c6 | ||
|
|
0120f09bb7 | ||
|
|
8430ac1e6c | ||
|
|
f5ca209c2b | ||
|
|
b529a8f40e | ||
|
|
62201a0169 | ||
|
|
1d5011e186 | ||
|
|
6ddb8e3c37 | ||
|
|
50c0d44477 | ||
|
|
b731a0cd48 | ||
|
|
7e8fbb27a3 | ||
|
|
3bfdc1d154 | ||
|
|
1136b9ecda | ||
|
|
24acf5c827 | ||
|
|
734828918b | ||
|
|
471ba7d4e1 | ||
|
|
01fc02be9a | ||
|
|
1b33496d42 | ||
|
|
0963a6475d | ||
|
|
47be9d5d02 | ||
|
|
8c3fc3f412 | ||
|
|
28c59e902c | ||
|
|
bd027e590e | ||
|
|
af8d6dbc7c | ||
|
|
9dd6d7c55f | ||
|
|
1b1e723bdf | ||
|
|
1f81dabef4 | ||
|
|
67fbd16be6 | ||
|
|
a25880462f | ||
|
|
fe6737d546 | ||
|
|
2ccbd6952e | ||
|
|
68cafd991b | ||
|
|
8c6a24dc81 | ||
|
|
d13e88e134 | ||
|
|
7a365be88a | ||
|
|
bce48181e0 | ||
|
|
5a856a00c5 | ||
|
|
f610d41661 | ||
|
|
c69bfcb8bf | ||
|
|
db4c1c730c | ||
|
|
a4a896eae2 | ||
|
|
523c760594 | ||
|
|
aa3e42735f | ||
|
|
a85e8fd11e | ||
|
|
3e4f7b40eb | ||
|
|
c21f5c28a8 | ||
|
|
b48d880933 | ||
|
|
5c8310da64 | ||
|
|
e599b99223 | ||
|
|
105b8c461c | ||
|
|
f890672849 | ||
|
|
cd93cae133 | ||
|
|
36ab573966 | ||
|
|
96f8809bd8 | ||
|
|
deb04a8e82 | ||
|
|
784793f0f5 | ||
|
|
521dc36895 | ||
|
|
97922263b7 | ||
|
|
ebd168071b | ||
|
|
c0a0fa5e2c | ||
|
|
21672a8cfb | ||
|
|
f20c31f4dd | ||
|
|
a1426b0e35 | ||
|
|
2f327fb711 | ||
|
|
c875c9abb5 | ||
|
|
0f96ae6e8c | ||
|
|
6404af1b2a | ||
|
|
a38bfa1449 | ||
|
|
52187c02ac | ||
|
|
cd6c22d461 | ||
|
|
ee590e964b | ||
|
|
abdaf9b2c8 | ||
|
|
5f54211928 | ||
|
|
9c9a294ba4 | ||
|
|
eca6ea64c1 | ||
|
|
f51e59c2e5 | ||
|
|
ff35e42a35 | ||
|
|
b77d2a217f | ||
|
|
5e0886bb85 | ||
|
|
539b84f491 | ||
|
|
535fcdbb8e | ||
|
|
688a216ad0 | ||
|
|
97a43ff02e | ||
|
|
e13241d6a8 | ||
|
|
4c3db8bb6c | ||
|
|
dd40e6d916 | ||
|
|
e9d858a815 | ||
|
|
784967f0d1 | ||
|
|
6a07d224b8 | ||
|
|
0c9f711afc | ||
|
|
4e7f7f61ab | ||
|
|
b876f253d3 | ||
|
|
b9df42d1fb | ||
|
|
6b323ecdae | ||
|
|
6649c0c06d | ||
|
|
4c11f2618c | ||
|
|
4f792d7d5f | ||
|
|
bf3366f272 | ||
|
|
2ad12d281d | ||
|
|
960eb4e867 | ||
|
|
b95b27f0d6 | ||
|
|
9531dc37d1 | ||
|
|
6706113188 | ||
|
|
4587b9b093 | ||
|
|
14e9ec64f1 | ||
|
|
ca86464716 | ||
|
|
fd162b694b | ||
|
|
6be0340161 | ||
|
|
b9e7a0ff95 | ||
|
|
693c33e83a | ||
|
|
703d449b0b | ||
|
|
b4369f4068 | ||
|
|
0ae1716a3c | ||
|
|
30943280a8 | ||
|
|
227515d750 | ||
|
|
ebc6ee4247 | ||
|
|
905b87bd57 | ||
|
|
0ccc819452 | ||
|
|
99003ce148 | ||
|
|
fd929f7c67 | ||
|
|
f4e9a62600 | ||
|
|
7e21b8ae67 | ||
|
|
de5a453ba2 | ||
|
|
e1acc7d6b0 | ||
|
|
d955f5745d | ||
|
|
a39fcb708c | ||
|
|
ac84d75e37 | ||
|
|
380e29c389 | ||
|
|
beee6a5e6a | ||
|
|
a319b6774b | ||
|
|
7443433cf5 | ||
|
|
1d2f3edf28 | ||
|
|
fc7d58f426 | ||
|
|
bff4d12865 | ||
|
|
e55b5064b0 | ||
|
|
b08f82c941 | ||
|
|
9a7204565e | ||
|
|
e72c4739c5 | ||
|
|
6b595c9443 | ||
|
|
9ce4fd42fa | ||
|
|
65adc01085 | ||
|
|
2f0e5e2579 | ||
|
|
4a229ba08d | ||
|
|
6cc2a3f484 | ||
|
|
bb22a59188 | ||
|
|
0cff3bc752 | ||
|
|
3be7f829c1 | ||
|
|
1fdc329fbc | ||
|
|
49d3118018 | ||
|
|
fa0eca6723 | ||
|
|
c375aab44e | ||
|
|
c0e6dc17e8 | ||
|
|
53241eba0a | ||
|
|
78acbff013 | ||
|
|
48a0b115f2 | ||
|
|
ababebbe3d | ||
|
|
9fe60b7249 | ||
|
|
8aa6cb2c91 | ||
|
|
9e5c0534aa | ||
|
|
b329123426 | ||
|
|
1c6787bdc3 | ||
|
|
1b4695771c | ||
|
|
29090455de | ||
|
|
bffb01401f | ||
|
|
c99584fc41 | ||
|
|
3697c190e5 | ||
|
|
8197edf722 | ||
|
|
d23795ef6c | ||
|
|
bb400cde9f | ||
|
|
b871981c8d | ||
|
|
ec99fba2fc | ||
|
|
7f977b9f4d | ||
|
|
7c4f1a8d02 | ||
|
|
a0df20e97d | ||
|
|
3ceacc3b32 | ||
|
|
dda1b3b118 | ||
|
|
ff379da2dd | ||
|
|
655253d0d7 | ||
|
|
690afc7cfb | ||
|
|
62c530a4d0 | ||
|
|
f5cd9ce15c | ||
|
|
ef0faf698e | ||
|
|
2fadf1f9c3 | ||
|
|
b44b34b982 | ||
|
|
93cfff70ba | ||
|
|
97bc544bf9 | ||
|
|
ee62544c54 | ||
|
|
a9848f47fc | ||
|
|
9107e8b335 | ||
|
|
583c806cea | ||
|
|
cd4a14f5c3 | ||
|
|
6fa8e110bc | ||
|
|
3ea0240bcc | ||
|
|
216c259770 | ||
|
|
820bfdb062 | ||
|
|
b74176b685 | ||
|
|
510e7dc0b4 | ||
|
|
562539afe5 | ||
|
|
1875336e75 | ||
|
|
6755047587 | ||
|
|
170dfda478 | ||
|
|
6f2432b5b8 | ||
|
|
63ee310f34 | ||
|
|
1215ba1be6 | ||
|
|
1230478701 | ||
|
|
97c97ba702 | ||
|
|
5e3ffaa9e0 | ||
|
|
724a8b4220 | ||
|
|
b1789baa36 | ||
|
|
9d248c1494 | ||
|
|
8f31927d01 | ||
|
|
1febb9c10d | ||
|
|
6d54677ef4 | ||
|
|
535e9b605a | ||
|
|
79482c6dde | ||
|
|
5c71649be5 | ||
|
|
23113d8053 | ||
|
|
260b45afbe | ||
|
|
20f2d8519f | ||
|
|
7be695a2f6 | ||
|
|
671def88af | ||
|
|
b63241658e | ||
|
|
4a3e01d2cb | ||
|
|
7203eebde7 | ||
|
|
3662b61406 | ||
|
|
89b11bd248 | ||
|
|
f6a90db92a | ||
|
|
00632be1fb | ||
|
|
e208af2939 | ||
|
|
9987f226bf | ||
|
|
e296d74ee0 | ||
|
|
90c9653e01 | ||
|
|
f239d2a0e3 | ||
|
|
ba3a8cae6a | ||
|
|
daee5c8727 | ||
|
|
d5fc3f5432 | ||
|
|
6f5995abdb | ||
|
|
6fad351a7a | ||
|
|
f0d1971977 | ||
|
|
29cb152be2 | ||
|
|
e8849e8682 | ||
|
|
449ca153a2 | ||
|
|
961c09100c | ||
|
|
7aeadf74ce | ||
|
|
47af31d856 | ||
|
|
8759b2332d | ||
|
|
291d85f81a | ||
|
|
110f571475 | ||
|
|
06644352dc | ||
|
|
8975d1c727 | ||
|
|
bbc89f7403 | ||
|
|
5e19c09d88 | ||
|
|
77b76d91ed | ||
|
|
2c84a6df5a | ||
|
|
b43d3f903a | ||
|
|
3a2ceeadda | ||
|
|
c14136b32a | ||
|
|
26e73056c2 | ||
|
|
a2bc170a12 | ||
|
|
2beca51c5a | ||
|
|
54505d3102 | ||
|
|
dfe2fabc69 | ||
|
|
0e101ecc8a | ||
|
|
9dad8b9e09 | ||
|
|
ca469c8c7d | ||
|
|
7a7180ad79 | ||
|
|
09e8f79519 | ||
|
|
87f242e363 | ||
|
|
504ddb532d | ||
|
|
8ef76514e2 | ||
|
|
9bd2a53f69 | ||
|
|
d8c218addd | ||
|
|
e6f4b071af | ||
|
|
7c5deeacdd | ||
|
|
b07c388fc0 | ||
|
|
35ebd43fd7 | ||
|
|
b1eb74225d | ||
|
|
04d469e884 | ||
|
|
45291c8832 | ||
|
|
a6f74184b2 | ||
|
|
56551bc84e | ||
|
|
34dcae52f2 | ||
|
|
99b7396f23 | ||
|
|
64ce8bac74 | ||
|
|
d41f3c6d76 | ||
|
|
1b4c1583b2 | ||
|
|
010a496f46 | ||
|
|
ff20a467c6 | ||
|
|
0ecfd70af9 | ||
|
|
51a5e19936 | ||
|
|
8c992955cb | ||
|
|
a23c05cc31 | ||
|
|
1984f89fad | ||
|
|
ce88a96620 | ||
|
|
3c860c34f1 | ||
|
|
514ad9aa7a | ||
|
|
d5973740f2 | ||
|
|
b9db4d3a0c | ||
|
|
adb799780e | ||
|
|
e4194105ed | ||
|
|
789337c9ed | ||
|
|
a8cb1eb2a1 | ||
|
|
68e1ec0578 | ||
|
|
3b48d79db3 | ||
|
|
8a607d7e05 | ||
|
|
1bfac93a81 | ||
|
|
d84100cef1 | ||
|
|
4d3f7158de | ||
|
|
78901cd620 | ||
|
|
fed15e5059 | ||
|
|
a083d258fa | ||
|
|
b72a1cd126 | ||
|
|
a7045e4621 | ||
|
|
75eaaf6ff0 | ||
|
|
4e3ed839c7 | ||
|
|
956f586d60 | ||
|
|
327336dcde | ||
|
|
dffc46c083 | ||
|
|
cb87b9eeb6 | ||
|
|
99b0f48d92 | ||
|
|
406f3835b1 | ||
|
|
420f123697 | ||
|
|
7a10ff55a9 | ||
|
|
b40ca7446e | ||
|
|
d1c1ae22b0 | ||
|
|
8d8ff08e3a | ||
|
|
ce5d1db1d2 | ||
|
|
2ea513c4d6 | ||
|
|
a9bde454c1 | ||
|
|
3e6d7ea615 | ||
|
|
c78a0faf69 | ||
|
|
be29d2a97c | ||
|
|
a98b445de8 | ||
|
|
cedcd48b13 | ||
|
|
acb338bc64 | ||
|
|
69f8925199 | ||
|
|
98e64c0abc | ||
|
|
a70084e671 | ||
|
|
9fe4ee1fcb | ||
|
|
12ed469007 | ||
|
|
fe78582e65 | ||
|
|
16c349548e | ||
|
|
d1867ee15a | ||
|
|
4e8a904477 | ||
|
|
779dd2ddc5 | ||
|
|
6a0244cf20 | ||
|
|
f093486734 | ||
|
|
aa99cfd5dd | ||
|
|
921c5885bf | ||
|
|
996f25d1fd | ||
|
|
d0c694b46e | ||
|
|
66d6704a08 | ||
|
|
360ce67af8 | ||
|
|
7fed72810c | ||
|
|
a1a5e75143 | ||
|
|
c8d9276926 | ||
|
|
5eff4ef959 | ||
|
|
7bb292f439 | ||
|
|
f744d860b3 | ||
|
|
0bfb8b4eed | ||
|
|
ccf09cca75 | ||
|
|
8d594ab62d | ||
|
|
334cb94c08 | ||
|
|
485a0ea202 | ||
|
|
367d28c909 | ||
|
|
b9d9436a94 | ||
|
|
ae0f629fa7 | ||
|
|
c6669df375 | ||
|
|
1f2584e093 | ||
|
|
eddb935907 | ||
|
|
fb123d2080 | ||
|
|
b55097eeca | ||
|
|
82a947201b | ||
|
|
c8421b7870 | ||
|
|
dd907871c5 | ||
|
|
07a72c3eae | ||
|
|
1ab517f8a0 | ||
|
|
8b4fcd14d8 | ||
|
|
ec77153a75 | ||
|
|
2a34485411 | ||
|
|
eae88d1cee | ||
|
|
4b40f3af0d | ||
|
|
34011b5d01 | ||
|
|
575c226a98 | ||
|
|
6b52d32ac1 | ||
|
|
b268277d9b | ||
|
|
65ebdcdd8a | ||
|
|
93122e6032 | ||
|
|
25616ee8ce | ||
|
|
c5596ba0ad | ||
|
|
348e6347c1 | ||
|
|
866cf8c704 | ||
|
|
823fdf3177 | ||
|
|
9af579f9fd | ||
|
|
a7c4f92e9a | ||
|
|
0de9223c4f | ||
|
|
0d1c73d1df | ||
|
|
f626cf0837 | ||
|
|
197903f611 | ||
|
|
d7b5cba088 | ||
|
|
6b711cebe9 | ||
|
|
b244b611b3 | ||
|
|
6bc7db501d | ||
|
|
cfedf5cd44 | ||
|
|
25f416b1fa | ||
|
|
67518be5ca | ||
|
|
1e91472b12 | ||
|
|
176a54d5be | ||
|
|
004a059504 | ||
|
|
90c5062fc7 | ||
|
|
1167c7883e | ||
|
|
8e80cb0afc | ||
|
|
fbba6c320b | ||
|
|
bba37676ad | ||
|
|
ef8c8d83b0 | ||
|
|
7c348b899a | ||
|
|
4687e8ba9d | ||
|
|
3eca53d1dc | ||
|
|
b142cd7fd4 | ||
|
|
f4d7795f1c | ||
|
|
386796a413 | ||
|
|
ed840c0c16 | ||
|
|
4aa23a9603 | ||
|
|
00ba707114 | ||
|
|
a672bbf04f | ||
|
|
eff118d1db | ||
|
|
2e5cb614a1 | ||
|
|
acc0912509 | ||
|
|
4d68042c07 | ||
|
|
8b99e9fd89 | ||
|
|
45c4aa03fb | ||
|
|
54173d51ff | ||
|
|
82f56e95e4 | ||
|
|
f7747f2865 | ||
|
|
549c827a4b | ||
|
|
367d58a632 | ||
|
|
915f72a753 | ||
|
|
7d707b7471 | ||
|
|
faaf56c93b | ||
|
|
37e6cd12ff | ||
|
|
648e687c9f | ||
|
|
4bdd69b35e | ||
|
|
6ce041ba33 | ||
|
|
1094072e9a | ||
|
|
3f22fcabc8 | ||
|
|
cfed3acd66 | ||
|
|
e2cff94a62 | ||
|
|
82d0661e37 | ||
|
|
5504d40c8f | ||
|
|
60fd1aa17b | ||
|
|
4d6ff675d0 | ||
|
|
014ae4eb03 | ||
|
|
72c395c25b | ||
|
|
abd85d2b53 | ||
|
|
66bbb8c4f8 | ||
|
|
4343425ce2 | ||
|
|
39fe6b59a1 | ||
|
|
d11e07c812 | ||
|
|
e6e57c8062 | ||
|
|
4f47ba19d6 | ||
|
|
e035e85018 | ||
|
|
42e8b2dd0c | ||
|
|
b60789c85e | ||
|
|
cb21f5acbf | ||
|
|
566e84bf25 | ||
|
|
ae487b925e | ||
|
|
d9631099cf | ||
|
|
48b58b1f30 | ||
|
|
77b7b28403 | ||
|
|
9640a57dc8 | ||
|
|
9b49734e53 | ||
|
|
739146e0fb | ||
|
|
34451a62e8 | ||
|
|
89be8c9d9c | ||
|
|
e6dcf2ef82 | ||
|
|
a16581f608 | ||
|
|
f9e6df8f92 | ||
|
|
416078506b | ||
|
|
d5be1e328c | ||
|
|
4beb064fe9 | ||
|
|
2d6dce6351 | ||
|
|
d5e0ba8013 | ||
|
|
320ce4a62d | ||
|
|
0edba02ead | ||
|
|
0a19bcbd06 | ||
|
|
38cdcc5379 | ||
|
|
1ea593b2a3 | ||
|
|
0c2bc8ad38 | ||
|
|
ba90793830 | ||
|
|
2fc97006d9 | ||
|
|
103186d088 | ||
|
|
fce340fd33 | ||
|
|
b97313914f | ||
|
|
5635c67251 | ||
|
|
2971a8473b | ||
|
|
fb59410818 | ||
|
|
eebe58ca2e | ||
|
|
397b177462 | ||
|
|
79d0e80b1c | ||
|
|
6b7bcd0314 | ||
|
|
2b811911d3 | ||
|
|
e218943c42 | ||
|
|
9d97c93ece | ||
|
|
c5c6897ee3 | ||
|
|
2fc9a59695 | ||
|
|
9a9a05cd7e | ||
|
|
dba2f9485d | ||
|
|
9ce3662681 | ||
|
|
a35258a133 | ||
|
|
ae47aaeacd | ||
|
|
dc4e96ebf2 | ||
|
|
392c3ea07c | ||
|
|
e4b5cbd0bf | ||
|
|
faa097ac37 | ||
|
|
5e5cf93699 | ||
|
|
796148f410 | ||
|
|
990c5f497c | ||
|
|
ee739884e4 | ||
|
|
31d97bb939 | ||
|
|
4a7c06e6f0 | ||
|
|
84a79686d4 | ||
|
|
9b3bb24cda | ||
|
|
1cfe00697a | ||
|
|
a57910bda7 | ||
|
|
bd04109f55 | ||
|
|
11906bab53 | ||
|
|
e51bb95fa6 | ||
|
|
f63e429c2a | ||
|
|
2b0da9beb6 | ||
|
|
8e7b8ae078 | ||
|
|
bc568a69fd | ||
|
|
163e8a75dc | ||
|
|
50ec9b42ed | ||
|
|
98b9aaab28 | ||
|
|
f8cd1d0d92 | ||
|
|
ee4555b3c6 | ||
|
|
e37801fe6d | ||
|
|
5ba6a02113 | ||
|
|
7e0428112a | ||
|
|
058d51e80e | ||
|
|
87fdf9acca | ||
|
|
4d3fa458eb | ||
|
|
9aa6f2d36b | ||
|
|
46eeeb107e | ||
|
|
a1a63d474c | ||
|
|
af15669fa6 | ||
|
|
67cebd9ca6 | ||
|
|
4a20de77f9 | ||
|
|
fee724f2d9 | ||
|
|
0044a2f731 | ||
|
|
e700176924 | ||
|
|
b2820e908f | ||
|
|
d3fc1a6582 | ||
|
|
68a376f3ae | ||
|
|
74b1640214 | ||
|
|
62b80c229b | ||
|
|
eb4dc9e66c | ||
|
|
0926d6fa37 | ||
|
|
62901ae91b | ||
|
|
e78c894fb8 | ||
|
|
f6e2051355 | ||
|
|
24ca9a3a04 | ||
|
|
f54ae5ce15 | ||
|
|
a6903612e4 | ||
|
|
3df616ef02 | ||
|
|
11f45a465c | ||
|
|
8db7b1561d | ||
|
|
5d6285e260 | ||
|
|
ec2d73bc4c | ||
|
|
797485272c | ||
|
|
fc5c079118 | ||
|
|
712c660aee | ||
|
|
b0b61b5ca7 | ||
|
|
b96d86ac82 | ||
|
|
bac5fdf824 | ||
|
|
07a9cb6256 | ||
|
|
b01f5d473a | ||
|
|
7eb105c5ed | ||
|
|
0d7d172aae | ||
|
|
233ef00989 | ||
|
|
10ffb371dc | ||
|
|
d37cbf4545 | ||
|
|
9153388c06 | ||
|
|
7a89dc7fef | ||
|
|
2391fce076 | ||
|
|
3a67535206 | ||
|
|
2f94e63381 | ||
|
|
bf2217e0b0 | ||
|
|
c31f3defaa | ||
|
|
f3fc6ae757 | ||
|
|
daaeba1bbb | ||
|
|
bd27f55d32 | ||
|
|
c1913ffde2 | ||
|
|
060ee9679a | ||
|
|
3115070aea | ||
|
|
aea9eba50b | ||
|
|
1da0265a7c | ||
|
|
186cb5e81b | ||
|
|
20e42186fb | ||
|
|
02f785dd97 | ||
|
|
7e6b98cb73 | ||
|
|
de5a9d18ba | ||
|
|
d9ea86441d | ||
|
|
0a037aaef6 | ||
|
|
c760eafd86 | ||
|
|
9f0c7ecb24 | ||
|
|
1fb952c8dc | ||
|
|
86b4bd65b8 | ||
|
|
5270379632 | ||
|
|
380ccacddf | ||
|
|
9e78e0f046 | ||
|
|
8db4bd1e5f | ||
|
|
ba64945d2d | ||
|
|
5fd4ce231f | ||
|
|
654ba50e49 | ||
|
|
dc074a07e4 | ||
|
|
38eb05efb7 | ||
|
|
1eba971031 | ||
|
|
5fa696c18a | ||
|
|
7b9a2d4b2e | ||
|
|
bad6766532 | ||
|
|
3a42cd73cb | ||
|
|
36e19acf88 | ||
|
|
c458dcc620 | ||
|
|
c24bd47163 | ||
|
|
9e1b4ba1f4 | ||
|
|
bce93a0856 | ||
|
|
ed6666e65a | ||
|
|
e3b9f7cf24 | ||
|
|
b0b32b43d8 | ||
|
|
347d7f2593 | ||
|
|
e673f36288 | ||
|
|
933c53c87b | ||
|
|
c99686d727 | ||
|
|
a1410302ce | ||
|
|
8941488682 | ||
|
|
ec8e0a7feb | ||
|
|
cb0d2e59b8 | ||
|
|
2166fa0396 | ||
|
|
bb8146e9c3 | ||
|
|
8698bf1d45 | ||
|
|
33f0fb9413 | ||
|
|
f05e726ca4 | ||
|
|
8791ca5800 | ||
|
|
8d6c8d9f61 | ||
|
|
6b0f73d41a | ||
|
|
bc7befd4a8 | ||
|
|
fc865fd5bc | ||
|
|
e4a9446e2b | ||
|
|
8abcd226e5 | ||
|
|
cd26a19c1a | ||
|
|
2cda8efec0 | ||
|
|
72e0250317 | ||
|
|
42c66426e6 | ||
|
|
e77f32d2f6 | ||
|
|
80f398c39e | ||
|
|
5570ede2a3 | ||
|
|
06122aa295 | ||
|
|
e7123b4af3 | ||
|
|
a7be4266bc | ||
|
|
d62adc4a97 | ||
|
|
4b4db26721 | ||
|
|
ca752d6edb | ||
|
|
8a6a224fda | ||
|
|
be639522fe | ||
|
|
184654c67f | ||
|
|
3dabf07a60 | ||
|
|
8ec867c2d2 | ||
|
|
75a8983c97 | ||
|
|
dac075f570 | ||
|
|
0152590bda | ||
|
|
8e06ebbda0 | ||
|
|
ee85a19b53 | ||
|
|
6a22bdf206 | ||
|
|
7e0d0e91d6 | ||
|
|
0c71605e1b | ||
|
|
5a5a0e3521 | ||
|
|
6fb18b5674 | ||
|
|
3188b9ed69 | ||
|
|
98591f74dd | ||
|
|
168a8fea72 | ||
|
|
74c9aa5a2b | ||
|
|
6c010665c1 | ||
|
|
d69c497824 | ||
|
|
f6707a2488 | ||
|
|
44cef5ec83 | ||
|
|
1390f13600 | ||
|
|
95b6b47802 | ||
|
|
aab3531a42 | ||
|
|
442264b3ab | ||
|
|
7fcc68e567 | ||
|
|
09f7fdb8df | ||
|
|
71dd9410d8 | ||
|
|
09af70d338 | ||
|
|
60444de60e | ||
|
|
c5d4d61108 | ||
|
|
3b60f6b063 | ||
|
|
f9780f08c8 | ||
|
|
d2e58deec5 | ||
|
|
4e61c3cba6 | ||
|
|
aa26e2b2c8 | ||
|
|
56c7db6e87 | ||
|
|
50675b87a8 | ||
|
|
d5ee36b65e | ||
|
|
f53cee3ca4 | ||
|
|
9a4048574c | ||
|
|
b9d427af3e | ||
|
|
3a70cfa8de | ||
|
|
f761a5a6ba | ||
|
|
16c8ccb9da | ||
|
|
f540f010c0 | ||
|
|
9b15f7269c | ||
|
|
759b30adc5 | ||
|
|
67a58e654f | ||
|
|
64dd79e8c2 | ||
|
|
74c1686418 | ||
|
|
c53ad98c0f | ||
|
|
c6b28e4385 | ||
|
|
9409c60613 | ||
|
|
6b2223c697 | ||
|
|
f6e4d27272 | ||
|
|
6d180adca9 | ||
|
|
9356a2a5dc | ||
|
|
a2bdbf6d85 | ||
|
|
d88be00fd3 | ||
|
|
c294af97a8 | ||
|
|
f7ad47e359 | ||
|
|
865919a3af | ||
|
|
9388b42001 | ||
|
|
98d0ee0dc7 | ||
|
|
f09603f2bf | ||
|
|
af131abe91 | ||
|
|
74ef69cee1 | ||
|
|
47c064046e | ||
|
|
bcdc03dd72 | ||
|
|
b8e1f9c2ee | ||
|
|
2587956fcf | ||
|
|
55c7872ed8 | ||
|
|
283a5537de | ||
|
|
d688e2dd0d | ||
|
|
a5eee6b37b | ||
|
|
b6ade82dd0 | ||
|
|
4a39a1e408 | ||
|
|
270932e40b | ||
|
|
caa6dcd053 | ||
|
|
8fb67541c1 | ||
|
|
7745a0738a | ||
|
|
3baa4dc1df | ||
|
|
032fef1092 | ||
|
|
df3e51629b | ||
|
|
fecf6233d9 | ||
|
|
fe64931f67 | ||
|
|
699a1f32f4 | ||
|
|
a551c89f3f | ||
|
|
ff9948768a | ||
|
|
baf34452fa | ||
|
|
9219209032 | ||
|
|
4251069718 | ||
|
|
f034557f17 | ||
|
|
f67d73de3e | ||
|
|
080dc05e16 | ||
|
|
0c66ba28ee | ||
|
|
f90370d01a | ||
|
|
6c22acf0e5 | ||
|
|
26a4af2a10 | ||
|
|
32a441cda9 | ||
|
|
70f2d8f3b4 | ||
|
|
7530eea63a | ||
|
|
d50bd6e777 | ||
|
|
64c3c71e08 | ||
|
|
6ed031238b | ||
|
|
0ff2ebfd2a | ||
|
|
41055f2292 | ||
|
|
bbc30d6cb9 | ||
|
|
d138e59110 | ||
|
|
eae404e3e7 | ||
|
|
bb2a2869f1 | ||
|
|
abbc413671 | ||
|
|
691f0492eb | ||
|
|
df8efe60de | ||
|
|
10304adf34 | ||
|
|
588c69102a | ||
|
|
ac3cef77ac | ||
|
|
d6c5b875d3 | ||
|
|
a43a0bf527 | ||
|
|
4fdafdd86a | ||
|
|
171631c025 | ||
|
|
34b2f6dde3 | ||
|
|
0f20459b69 | ||
|
|
0c51e1c409 | ||
|
|
be85bf5fa3 | ||
|
|
acd3bc97a0 | ||
|
|
a65aa4d828 | ||
|
|
9861ea7ddd | ||
|
|
3c58988c34 | ||
|
|
140a8da62d | ||
|
|
102a4d7af6 | ||
|
|
ce4047261c | ||
|
|
818106b0eb | ||
|
|
ddf5a0639b | ||
|
|
a2272fd4ed | ||
|
|
f834ccc653 | ||
|
|
b7e8f8a052 | ||
|
|
7d4f8a6f9f | ||
|
|
cc8badfee4 | ||
|
|
7406381094 | ||
|
|
85de937667 | ||
|
|
1a8301380c | ||
|
|
eea2c89a16 | ||
|
|
24c05e4d8f | ||
|
|
2f221b972c | ||
|
|
16b89699a0 | ||
|
|
424572375f | ||
|
|
fb77d69128 | ||
|
|
794207f6e7 | ||
|
|
f11ff0726c | ||
|
|
aeed9be8db | ||
|
|
946897527e | ||
|
|
21e924273d | ||
|
|
532b863674 | ||
|
|
133d945758 | ||
|
|
92446d1b3c | ||
|
|
7643de9ce1 | ||
|
|
1dedae4f8f | ||
|
|
050b9afd44 | ||
|
|
607098ffd7 | ||
|
|
5f07c1ee48 | ||
|
|
934ad9f298 | ||
|
|
7244367cf7 | ||
|
|
2801724f1c | ||
|
|
fe1c79e80d | ||
|
|
7b151e046f | ||
|
|
8c6e8be2e8 | ||
|
|
e6dbb9dd7c | ||
|
|
81bcd8179d | ||
|
|
41a4922088 | ||
|
|
42d701730c | ||
|
|
e39151c9d6 | ||
|
|
378c483748 | ||
|
|
ac04a61562 | ||
|
|
1abbc80c70 | ||
|
|
c456ae2e4a | ||
|
|
78407ceb87 | ||
|
|
81f6062a44 | ||
|
|
2ea7a49321 | ||
|
|
45e09c7dd3 | ||
|
|
668f6fe2f6 | ||
|
|
0b1b3ad244 | ||
|
|
cef491f96c | ||
|
|
9bca71468f | ||
|
|
c3ee1efb56 | ||
|
|
7f28b16eae | ||
|
|
f5db958f53 | ||
|
|
cad40cd369 | ||
|
|
952d92df18 | ||
|
|
4cb9c58ae6 | ||
|
|
9e80c77050 | ||
|
|
837d9bec90 | ||
|
|
ddc064e86b | ||
|
|
49f62494d6 | ||
|
|
4ff55ca4a7 | ||
|
|
9ebee3d917 | ||
|
|
d246071348 | ||
|
|
a4b6b42b56 | ||
|
|
888f22ffde | ||
|
|
05c35149a5 | ||
|
|
85b2e2db18 | ||
|
|
22803752d1 | ||
|
|
1fc8fb84a8 | ||
|
|
e4b669e8c1 | ||
|
|
a1c99ae713 | ||
|
|
caf51ea53d | ||
|
|
eead5afa67 | ||
|
|
903d886aee | ||
|
|
c7ae38df7e | ||
|
|
9175a3c553 | ||
|
|
2bff7f974b | ||
|
|
e99a9d3325 | ||
|
|
7228e2872c | ||
|
|
e02a7d5ab5 | ||
|
|
c8e729bbe4 | ||
|
|
475a9dd45d | ||
|
|
38639932d9 | ||
|
|
1c8661f8c4 | ||
|
|
fb9ab8a346 | ||
|
|
cc9b7ae58b | ||
|
|
92a9c7476b | ||
|
|
e34676ae57 | ||
|
|
4bc9aae1aa | ||
|
|
98b4248a3c | ||
|
|
37cea519e0 | ||
|
|
0587524c6c | ||
|
|
c28e1a0ba4 | ||
|
|
5e46735bb2 | ||
|
|
d9f70bdbac | ||
|
|
2dddd1c2ad | ||
|
|
8775416064 | ||
|
|
ae8d790b55 | ||
|
|
a067c4d932 | ||
|
|
5668a56e2d | ||
|
|
713b8252fe | ||
|
|
10e1b9d4d9 | ||
|
|
51ea95e79d | ||
|
|
41622806c2 | ||
|
|
b0d083bd2f | ||
|
|
2a4d44ff78 | ||
|
|
c34e525fb2 | ||
|
|
3da463382d | ||
|
|
50d65e2d7d | ||
|
|
93c1de8a3d | ||
|
|
6d56020110 | ||
|
|
2448f2cd38 | ||
|
|
cc27826a48 | ||
|
|
ad11b458f5 | ||
|
|
8c53a67e06 | ||
|
|
db1841bbf3 | ||
|
|
ff9afd0485 | ||
|
|
33470486ea | ||
|
|
6e6113b887 | ||
|
|
fd4bdd04e9 | ||
|
|
2296fe166b | ||
|
|
c7f2248eaf | ||
|
|
833f92dded | ||
|
|
89478c8dd3 | ||
|
|
ba4cd217c0 | ||
|
|
409ce4f2e9 | ||
|
|
a8690808c2 | ||
|
|
a9f4cab48b | ||
|
|
3a8a3680c5 | ||
|
|
0956b528cb | ||
|
|
3944a8c9a2 | ||
|
|
8c75e36115 | ||
|
|
e7fabab051 | ||
|
|
77f112fcb9 | ||
|
|
bc41619497 | ||
|
|
104c8b0d01 | ||
|
|
6e7e5f7840 | ||
|
|
f558f53a95 | ||
|
|
a13bafa2c0 | ||
|
|
187f53b837 | ||
|
|
5391edebc1 | ||
|
|
5d2f70a45d | ||
|
|
f28e3d1225 | ||
|
|
16c0592523 | ||
|
|
2e03a29de9 | ||
|
|
70cc564582 | ||
|
|
55f8b58c9a | ||
|
|
4c75bacca0 | ||
|
|
2bb5b677ef | ||
|
|
64bfe5a935 | ||
|
|
41f3dcd0fc | ||
|
|
8243e07448 | ||
|
|
31cf39aa91 | ||
|
|
8cedbc7469 | ||
|
|
f967b812cb | ||
|
|
21d2b5b133 | ||
|
|
fbdefac538 | ||
|
|
8deb2ff7ed | ||
|
|
bf5ce29d04 | ||
|
|
0bc2d95f15 | ||
|
|
54e23f38cd | ||
|
|
1fd23ae721 | ||
|
|
e966ffad6d | ||
|
|
4bd1a6f11b | ||
|
|
b2502ce0e8 | ||
|
|
ad649ad4f7 | ||
|
|
6e23fa7efd | ||
|
|
074357a238 | ||
|
|
d01b1c868f | ||
|
|
466d310c25 | ||
|
|
33343f64ef | ||
|
|
40daa9596f | ||
|
|
12d1b2a112 | ||
|
|
0b93d7e6c6 | ||
|
|
6d8f4f79b1 | ||
|
|
ad9d04a24e | ||
|
|
f1c6e44c5c | ||
|
|
87245f09ad | ||
|
|
f6e5202a99 | ||
|
|
a0bfd9d83f | ||
|
|
2b5ad3e4c4 | ||
|
|
0899b4f6b1 | ||
|
|
960f62d94b | ||
|
|
1dfa425889 | ||
|
|
7a347afb40 | ||
|
|
230e91b60d | ||
|
|
3092278d63 | ||
|
|
e83873bbea | ||
|
|
2bec8e4aff | ||
|
|
42ead5886d | ||
|
|
3d85401ab1 | ||
|
|
ddef31ae21 | ||
|
|
3c630657b1 | ||
|
|
61a95e781a | ||
|
|
49b363494a | ||
|
|
e234e2340d | ||
|
|
c7f8008355 | ||
|
|
caad6871ca | ||
|
|
9aadd42471 | ||
|
|
df5e135834 | ||
|
|
84fd163ca8 | ||
|
|
187190b229 | ||
|
|
92e02634e8 | ||
|
|
134b72f219 | ||
|
|
970b962208 | ||
|
|
7da4e4de59 | ||
|
|
0f72d9504a | ||
|
|
9103a95315 | ||
|
|
ffc5bd1654 | ||
|
|
ef916607d8 | ||
|
|
2b4f8f8d38 | ||
|
|
f3d0538207 | ||
|
|
b9d63340b8 | ||
|
|
ec99e41614 | ||
|
|
8101f59fc5 | ||
|
|
93c3ea2d9f | ||
|
|
3dcbecf04a | ||
|
|
a0e2e03616 | ||
|
|
aad07535fb | ||
|
|
1334aad4f6 | ||
|
|
af4239b957 | ||
|
|
8267af24c7 | ||
|
|
06e4eb5f79 | ||
|
|
5010e54b53 | ||
|
|
e53d17495e | ||
|
|
729ec29b37 | ||
|
|
26c3d53e55 | ||
|
|
b88132620d | ||
|
|
cd10bb3092 | ||
|
|
40f73dc4ef | ||
|
|
a73cf4f787 | ||
|
|
b17afcf40c | ||
|
|
05875b94b7 | ||
|
|
f7bf92885e | ||
|
|
c5f26f3e94 | ||
|
|
f6b060c0f9 | ||
|
|
4741ff1289 | ||
|
|
1337fe9816 | ||
|
|
e19308cba4 | ||
|
|
a5acdfa3da | ||
|
|
f57a6b512a | ||
|
|
5afcbfe8c6 | ||
|
|
507f1e7a92 | ||
|
|
fa5653ce16 | ||
|
|
1283a0f4b2 | ||
|
|
a27aeb6613 | ||
|
|
0e4fed94b1 | ||
|
|
df2e255129 | ||
|
|
b1fde3ff37 | ||
|
|
3d83f9a452 | ||
|
|
ccdf963847 | ||
|
|
8405411263 | ||
|
|
a343778b64 | ||
|
|
6db22271d9 | ||
|
|
f0f017aa0d | ||
|
|
0afec0b94d | ||
|
|
f3cb4d05e1 | ||
|
|
8dd2778119 | ||
|
|
970f432739 | ||
|
|
92377fdc1d | ||
|
|
e6dde015a6 | ||
|
|
5993ca4193 | ||
|
|
168ad781dc | ||
|
|
a0f36ea4ea | ||
|
|
7340da7c07 | ||
|
|
d9c7423b34 | ||
|
|
fe42c529ca | ||
|
|
815026976b | ||
|
|
fc6e9d8213 | ||
|
|
e0f53d86d3 | ||
|
|
6611b495d0 | ||
|
|
9741d083ae | ||
|
|
083abbc73b | ||
|
|
ab9be4efd4 | ||
|
|
9a8b89afa7 | ||
|
|
e20b82f802 | ||
|
|
1218b25127 | ||
|
|
d58bc8373e | ||
|
|
b6e7c9444e | ||
|
|
32e004e11a | ||
|
|
81babd8a07 | ||
|
|
9d7c0c3a29 | ||
|
|
dabcf769fb | ||
|
|
0a4269a405 | ||
|
|
9fad61bca1 | ||
|
|
10ff56bba7 | ||
|
|
36a0b024b1 | ||
|
|
7f0e5cce08 | ||
|
|
1b9ac40e38 | ||
|
|
7b078103a2 | ||
|
|
ff89d27a93 | ||
|
|
9c672ffd7b | ||
|
|
097015228b | ||
|
|
b7d87a24cc | ||
|
|
628d012c82 | ||
|
|
67c151e23e | ||
|
|
64fb934096 | ||
|
|
b9e9709f18 | ||
|
|
490527abdf | ||
|
|
a78213052a | ||
|
|
de5553647d | ||
|
|
755b63bbf6 | ||
|
|
7666dcae2b | ||
|
|
db210b1da7 | ||
|
|
dd0c71c9d6 | ||
|
|
e47dee1fac | ||
|
|
5eb45cc3ec | ||
|
|
259cc7f00c | ||
|
|
eb1ede7747 | ||
|
|
b3147b125c | ||
|
|
58fefe3182 | ||
|
|
3397319b9f | ||
|
|
3bdb5ed594 | ||
|
|
05c5915f2b | ||
|
|
07572a1e94 | ||
|
|
cd9244f0dd | ||
|
|
4347021572 | ||
|
|
98520c1816 | ||
|
|
8df5f519d2 | ||
|
|
5e5d18fc64 | ||
|
|
86b436be98 | ||
|
|
15e73a1d43 | ||
|
|
8eb5442037 | ||
|
|
56053686fb | ||
|
|
65cb006f33 | ||
|
|
d942373528 | ||
|
|
d87b1beff5 | ||
|
|
ce4a86b077 | ||
|
|
0eb33394b9 | ||
|
|
11a01eed96 | ||
|
|
347e7913b4 | ||
|
|
5d9f159a58 | ||
|
|
5a7f129822 | ||
|
|
329274876f | ||
|
|
a073665fe6 | ||
|
|
3d646474be | ||
|
|
ebca4f9c85 | ||
|
|
678b80ea27 | ||
|
|
a71a409426 | ||
|
|
bee617afaf | ||
|
|
fbf603bc58 | ||
|
|
c037b575cb | ||
|
|
0cf81d02e7 | ||
|
|
b0b9eba129 | ||
|
|
a845e9d76a | ||
|
|
8475a29441 | ||
|
|
cc2620434b | ||
|
|
0b3b73f47d | ||
|
|
e4d07783e7 | ||
|
|
0a3b4c33ec | ||
|
|
c124a19d82 | ||
|
|
435abd693a | ||
|
|
fd29539b92 | ||
|
|
31cffb153b | ||
|
|
e31cd291a7 | ||
|
|
198cbae6b4 | ||
|
|
76d7faf5ba | ||
|
|
6bf950df84 | ||
|
|
0a4521fa27 | ||
|
|
e74b232489 | ||
|
|
41828edb63 | ||
|
|
5e9e9c6ead | ||
|
|
7669dea354 | ||
|
|
4992fa73cf | ||
|
|
496da77057 | ||
|
|
1c48f6352b | ||
|
|
85f8583061 | ||
|
|
950bf4b111 | ||
|
|
e44fa78354 | ||
|
|
fda6831075 | ||
|
|
6166bab780 | ||
|
|
66023ecf65 | ||
|
|
c0bee55d82 | ||
|
|
3d715d17dc | ||
|
|
00a6a39eb3 | ||
|
|
84864c68ec | ||
|
|
da04fe3d83 | ||
|
|
b75bbaafa1 | ||
|
|
6f12fb3c5a | ||
|
|
1d37707628 | ||
|
|
207648b7ee | ||
|
|
0e7859ea89 | ||
|
|
f23c067ccd | ||
|
|
0d160f4beb | ||
|
|
c17cd2d1d3 | ||
|
|
e14bb09139 | ||
|
|
68d8002ea5 | ||
|
|
08bed0c597 | ||
|
|
16fff7431c | ||
|
|
1f0d6a123d | ||
|
|
255368cc47 | ||
|
|
64ce1c026a | ||
|
|
f053510cd5 | ||
|
|
8cf0bebe29 | ||
|
|
223bc6b12d | ||
|
|
7ede82c57d | ||
|
|
d8a71615f9 | ||
|
|
b7df56759c | ||
|
|
89103b7562 | ||
|
|
574d98da28 | ||
|
|
84d51b3cb7 | ||
|
|
f36cdaeeed | ||
|
|
64d5713041 | ||
|
|
1a0b127407 | ||
|
|
4f3dbcae88 | ||
|
|
e6d25d2204 | ||
|
|
dffd248343 | ||
|
|
44be221621 | ||
|
|
836b5a16ca | ||
|
|
4e7813aeb6 | ||
|
|
ddd9918881 | ||
|
|
095a18798c | ||
|
|
7ddeed9955 | ||
|
|
6034133565 | ||
|
|
fd8324a1f4 | ||
|
|
e0c9ae7598 | ||
|
|
879d51dff7 | ||
|
|
24987a63a8 | ||
|
|
3caa699d1a | ||
|
|
24f950e3b3 | ||
|
|
4dff137c26 | ||
|
|
fcd5d04a40 | ||
|
|
c487e88a0b | ||
|
|
602adc2309 | ||
|
|
d42b37c29c | ||
|
|
63fdd3699f | ||
|
|
bde20ec991 | ||
|
|
84eaad0775 | ||
|
|
3204959c80 | ||
|
|
0cb677664e | ||
|
|
08563ade44 | ||
|
|
14f815d0ba | ||
|
|
d8489ba0fc | ||
|
|
d633f0ad04 | ||
|
|
3f89bfb273 | ||
|
|
550fc02ef8 | ||
|
|
60277fc11a | ||
|
|
f459025f39 | ||
|
|
3fa8c16164 | ||
|
|
f0aca3a965 | ||
|
|
47afb69acc | ||
|
|
217f1a9786 | ||
|
|
c0813f037b | ||
|
|
da3688bf2e | ||
|
|
5ba3b4ea9d | ||
|
|
3e6ec4a75b | ||
|
|
c9dbb1e240 | ||
|
|
5a66c19033 | ||
|
|
e256208eb4 | ||
|
|
c72b2d5bba | ||
|
|
d1194a37cd | ||
|
|
d4cfd6ef4f | ||
|
|
b27b3ad3f8 | ||
|
|
83b1c6969a | ||
|
|
865c556da3 | ||
|
|
4efd68446e | ||
|
|
115218c8aa | ||
|
|
0f58788e26 | ||
|
|
c72bb8c196 | ||
|
|
10c8a186e5 | ||
|
|
f125908e1e | ||
|
|
89c46e989d | ||
|
|
b3803ec424 | ||
|
|
1eea25c87b | ||
|
|
880b24a929 | ||
|
|
20ecbbafaa | ||
|
|
f6f7cc9cd1 | ||
|
|
36e4f34780 | ||
|
|
ed232b2199 | ||
|
|
571e3467fc | ||
|
|
b8508b7cd8 | ||
|
|
9725b2334c | ||
|
|
eab54ef98f | ||
|
|
afaf12e4b0 | ||
|
|
0e5cd73ef0 | ||
|
|
9c972b19e1 | ||
|
|
c6487f4837 | ||
|
|
0182107bc0 | ||
|
|
7497fc12fc | ||
|
|
3ce8d08439 | ||
|
|
111db6e2d1 | ||
|
|
a990429daa | ||
|
|
b618697998 | ||
|
|
6f96ca4a62 | ||
|
|
9626917362 | ||
|
|
d4705fe5be | ||
|
|
0a6cb656c8 | ||
|
|
72097a0fbb | ||
|
|
47a2a15b59 | ||
|
|
08082cf7e2 | ||
|
|
6f1a656a9a | ||
|
|
8fb4b02ef9 | ||
|
|
9ec26d4e87 | ||
|
|
12c0e9d452 | ||
|
|
338cfa3cef | ||
|
|
7f82bcdaf6 | ||
|
|
30672945d5 | ||
|
|
dabb6f0b74 | ||
|
|
8bf8950274 | ||
|
|
e4d9582a98 | ||
|
|
0a0e4fcd06 | ||
|
|
75bac0f6ea | ||
|
|
a670d0238f | ||
|
|
861e2a9439 | ||
|
|
c81f402ae2 | ||
|
|
cc3e2e2e40 | ||
|
|
808d7db163 | ||
|
|
95c7b64de4 | ||
|
|
5265d67b7f | ||
|
|
989d655c1f | ||
|
|
094353f64e | ||
|
|
36ec721b1e | ||
|
|
f1dae3e62e | ||
|
|
58bbb2be38 | ||
|
|
02cb9e9090 | ||
|
|
dc3e801fd2 | ||
|
|
cfc587569a | ||
|
|
7e56174b2a | ||
|
|
6d82d10883 | ||
|
|
c1598bccf9 | ||
|
|
43d0e0a5fd | ||
|
|
08c4aea1b2 | ||
|
|
535012f8b0 | ||
|
|
89423208bb | ||
|
|
b82bead486 | ||
|
|
7233137ad3 | ||
|
|
14ca0deb00 | ||
|
|
575a046cac | ||
|
|
77246aad17 | ||
|
|
3303eb3043 | ||
|
|
04f82e5151 | ||
|
|
de9ebbf99d | ||
|
|
d6506b6430 | ||
|
|
ea7c72a509 | ||
|
|
a9314cc6d5 | ||
|
|
3da0510a8d | ||
|
|
20adf39d8b | ||
|
|
02f474504b | ||
|
|
427abafe43 |
9
.env.example
Normal file
@@ -0,0 +1,9 @@
|
||||
# Copy to .env and fill in for dev tooling
|
||||
|
||||
# Crowdin Personal Access Token scoped to at least `project.report` (Read only)
|
||||
# Needed for `qtlimport --credits-since`
|
||||
CROWDIN_REPORT_READ_TOKEN=
|
||||
|
||||
# Path for long-term cached files, like downloaded icon packs
|
||||
# Used by `icons` unless `--work-dir` is set
|
||||
CACHE_DIR=
|
||||
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* @vkbo @saga-soft-bot
|
||||
63
.github/ISSUE_TEMPLATE/01-bug-report.yml
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
name: Bug Report
|
||||
description: Report a bug or issue.
|
||||
title: "[Bug] "
|
||||
labels: ["bug", "triage"]
|
||||
type: bug
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
Thank you for taking the time to fill out this bug report.
|
||||
Note that issues without a description will not be considered.
|
||||
Please also check if an issue already exists on this problem.
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Bug Description
|
||||
description: >
|
||||
Provide a clear and concise description of what happened.
|
||||
Include screenshots where relevant.
|
||||
placeholder: Tell us what you see.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: >
|
||||
Explain what to do to reproduce the issue.
|
||||
Include screenshots where relevant.
|
||||
placeholder: Tell us what to do.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of UmbraEdit are you running?
|
||||
placeholder: "e.g. 26.2"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: What operating system are you running?
|
||||
placeholder: "e.g. Windows 11, macOS 26, Ubuntu 26.04"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Log or Error Output
|
||||
description: >
|
||||
If the error dialog popped up, copy/paste the content here.
|
||||
Or provide relevant log output from the console.
|
||||
render: shell
|
||||
validations:
|
||||
required: false
|
||||
34
.github/ISSUE_TEMPLATE/02-improvement.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Suggest Improvement
|
||||
description: Suggest something that can be improved.
|
||||
title: "[Improve] "
|
||||
labels: ["enhancement", "triage"]
|
||||
type: feature
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
Thank you for taking the time to fill out this feature request.
|
||||
Note that feature requests without a description will not be considered.
|
||||
Please also check if a request already exists for this feature.
|
||||
|
||||
- type: textarea
|
||||
id: problem
|
||||
attributes:
|
||||
label: The Problem
|
||||
description: >
|
||||
Explain the problem you're facing.
|
||||
Include screenshots where relevant.
|
||||
placeholder: Tell us about the issue.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Your Suggestion
|
||||
description: >
|
||||
Provide a clear and concise description of what you'd like to see.
|
||||
Include screenshots where relevant.
|
||||
placeholder: Tell us what you need.
|
||||
validations:
|
||||
required: true
|
||||
23
.github/ISSUE_TEMPLATE/03-feature.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Feature Request
|
||||
description: Suggest a new feature you'd like added.
|
||||
title: "[Feat] "
|
||||
labels: ["enhancement", "triage"]
|
||||
type: feature
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
Thank you for taking the time to fill out this feature request.
|
||||
Note that feature requests without a description will not be considered.
|
||||
Please also check if a request already exists for this feature.
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Your Suggestion
|
||||
description: >
|
||||
Provide a clear and concise description of what you'd like to see.
|
||||
Include screenshots where relevant.
|
||||
placeholder: Tell us what you need.
|
||||
validations:
|
||||
required: true
|
||||
24
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -1,24 +0,0 @@
|
||||
---
|
||||
name: Bug Report
|
||||
about: Create a report to help us improve
|
||||
title: ""
|
||||
labels: bug
|
||||
---
|
||||
|
||||
**Note**: Issues without a description will not be considered.
|
||||
Please also check if an issue already exists on this problem.
|
||||
Please provide a description covering the following points, if applicable:
|
||||
|
||||
* A clear and concise description of what the bug is.
|
||||
* Steps to reproduce the behaviour.
|
||||
* A clear and concise description of what you expected to happen.
|
||||
* If applicable, add screenshots to help explain your problem.
|
||||
* If the error dialog popped up, copy/paste the content here.
|
||||
|
||||
Please also *always* include the following information:
|
||||
|
||||
* The operating system you are using, and if Linux, also the distro.
|
||||
* The version of novelWriter you are using.
|
||||
* How and from where you installed novelWriter.
|
||||
|
||||
Issues without this required information will be closed.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: GitHub Community Support
|
||||
url: https://github.com/saga-soft/UmbraEdit/discussions
|
||||
about: Please ask and answer questions here.
|
||||
15
.github/ISSUE_TEMPLATE/feature-request.md
vendored
@@ -1,15 +0,0 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Suggest an idea for this project
|
||||
title: ""
|
||||
labels: enhancement
|
||||
---
|
||||
|
||||
**Note**: Feature requests without a description will not be considered.
|
||||
Please also check if an issue already exists on this feature.
|
||||
Please provide a description covering the following points, if applicable:
|
||||
|
||||
* A clear and concise description of what the problem is. Ex. I'm always frustrated when ...
|
||||
* A clear and concise description of what you want to happen.
|
||||
* A clear and concise description of any alternative solutions or features you've considered.
|
||||
* If applicable, add screenshots to help explain your request.
|
||||
21
.github/pull_request_template.md
vendored
@@ -1,20 +1,15 @@
|
||||
<!--
|
||||
Please check the following before you make a pull request:
|
||||
### Summary
|
||||
|
||||
* The branch you are making the pull request from (in your own fork) has a unique and descriptive
|
||||
name. Do not make a pull request directly from your copy of `main`.
|
||||
* If you are submitting translation files, only submit the files that you have added translations
|
||||
to, not the other .ts files that may have been updated in the process.
|
||||
* Make sure your contribution follows the style guide and other requirements mentioned in the
|
||||
CONTRIBUTING.md file in the repository.
|
||||
* Fill in the Summary section below, and if relevant, mention the issue numbers related to the PR.
|
||||
-->
|
||||
### Related Issue(s)
|
||||
|
||||
**Summary:**
|
||||
<!-- i.e. Closes #1234 -->
|
||||
|
||||
**Related Issue(s):**
|
||||
### Submitter's Checklist
|
||||
|
||||
**Reviewer's Checklist:**
|
||||
* [ ] I am familiar with, and have followed, the [Contributing Guide](https://github.com/saga-soft/UmbraEdit/blob/main/CONTRIBUTING.md)
|
||||
* [ ] I am familiar with, and have followed, the [AI Policy](https://github.com/saga-soft/UmbraEdit/blob/main/AI_POLICY.md)
|
||||
|
||||
### Reviewer's Checklist
|
||||
|
||||
* [ ] The header of all files contain a reference to the repository license
|
||||
* [ ] The overall test coverage is increased or remains the same as before
|
||||
|
||||
26
.github/workflows/auto_approve.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Auto-Approve
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
|
||||
concurrency:
|
||||
group: auto-approve-${{ github.event.pull_request.number }}
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
approve:
|
||||
name: Approve Owner PRs
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.pull_request.draft == false && github.event.pull_request.user.login == 'vkbo'
|
||||
steps:
|
||||
- name: Approve Pull Request
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.SAGA_SOFT_BOT_TOKEN }}
|
||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||
run: gh pr review "$PR_URL" --approve
|
||||
9
.github/workflows/build_all.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: BuildAll
|
||||
name: Build All
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
@@ -15,6 +15,13 @@ jobs:
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
buildLinux-Flatpak:
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_flatpak.yml
|
||||
secrets: inherit
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
buildWin-X64:
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_win_x64.yml
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: BuildLinux
|
||||
name: Build Linux Images
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
@@ -14,3 +14,10 @@ jobs:
|
||||
secrets: inherit
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
buildLinux-Flatpak:
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_flatpak.yml
|
||||
secrets: inherit
|
||||
permissions:
|
||||
contents: read
|
||||
147
.github/workflows/build_linux_native.yml
vendored
Normal file
@@ -0,0 +1,147 @@
|
||||
name: Build Linux Native
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
publish:
|
||||
required: false
|
||||
description: "Publish to Cloudsmith?"
|
||||
type: boolean
|
||||
default: false
|
||||
build_number:
|
||||
required: false
|
||||
description: "Build Number"
|
||||
type: string
|
||||
default: "0"
|
||||
debian12:
|
||||
required: false
|
||||
description: "Debian 12 (Bookworm)"
|
||||
type: boolean
|
||||
default: true
|
||||
debian13:
|
||||
required: false
|
||||
description: "Debian 13 (Trixie)"
|
||||
type: boolean
|
||||
default: true
|
||||
ubuntu2404:
|
||||
required: false
|
||||
description: "Ubuntu 24.04 (Noble)"
|
||||
type: boolean
|
||||
default: true
|
||||
ubuntu2604:
|
||||
required: false
|
||||
description: "Ubuntu 26.04 (Resolute)"
|
||||
type: boolean
|
||||
default: true
|
||||
ubuntu2610:
|
||||
required: false
|
||||
description: "Ubuntu 26.10 (Stonking)"
|
||||
type: boolean
|
||||
default: true
|
||||
mint22:
|
||||
required: false
|
||||
description: "Linux Mint 22 (Wilma)"
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
jobs:
|
||||
buildAssets:
|
||||
uses: ./.github/workflows/part_assets.yml
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
buildAndPublish-Debian12:
|
||||
name: Debian 12 (Bookworm)
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_debian.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
build_number: ${{ inputs.build_number }}
|
||||
codename: bookworm
|
||||
family: debian
|
||||
image: debian:12
|
||||
secrets: inherit
|
||||
if: ${{ inputs.debian12 }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
|
||||
buildAndPublish-Debian13:
|
||||
name: Debian 13 (Trixie)
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_debian.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
build_number: ${{ inputs.build_number }}
|
||||
codename: trixie
|
||||
family: debian
|
||||
image: debian:13
|
||||
secrets: inherit
|
||||
if: ${{ inputs.debian13 }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
|
||||
buildAndPublish-Ubuntu2404:
|
||||
name: Ubuntu 24.04 (Noble)
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_debian.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
build_number: ${{ inputs.build_number }}
|
||||
codename: noble
|
||||
family: ubuntu
|
||||
image: ubuntu:24.04
|
||||
secrets: inherit
|
||||
if: ${{ inputs.ubuntu2404 }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
|
||||
buildAndPublish-Ubuntu2604:
|
||||
name: Ubuntu 26.04 (Resolute)
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_debian.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
build_number: ${{ inputs.build_number }}
|
||||
codename: resolute
|
||||
family: ubuntu
|
||||
image: ubuntu:26.04
|
||||
secrets: inherit
|
||||
if: ${{ inputs.ubuntu2604 }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
|
||||
buildAndPublish-Ubuntu2610:
|
||||
name: Ubuntu 26.10 (Stonking)
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_debian.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
build_number: ${{ inputs.build_number }}
|
||||
codename: stonking
|
||||
family: ubuntu
|
||||
image: ubuntu:26.10
|
||||
secrets: inherit
|
||||
if: ${{ inputs.ubuntu2610 }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
|
||||
buildAndPublish-Mint22:
|
||||
name: Linux Mint 22 (Wilma)
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_debian.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
build_number: ${{ inputs.build_number }}
|
||||
codename: wilma
|
||||
family: linuxmint
|
||||
image: linuxmintd/mint22-amd64
|
||||
secrets: inherit
|
||||
if: ${{ inputs.mint22 }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
2
.github/workflows/build_mac.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: BuildMacOS
|
||||
name: Build MacOS
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
|
||||
26
.github/workflows/build_pypi.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Build PyPI
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
publish:
|
||||
required: false
|
||||
description: "Publish to PyPI?"
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
buildAssets:
|
||||
uses: ./.github/workflows/part_assets.yml
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
buildAndPublish-PyPI:
|
||||
name: PyPI Package
|
||||
needs: buildAssets
|
||||
uses: ./.github/workflows/part_pypi.yml
|
||||
with:
|
||||
publish: ${{ inputs.publish }}
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
2
.github/workflows/build_win.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: BuildWindows
|
||||
name: Build Windows
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
|
||||
10
.github/workflows/build_win_launcher.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: BuildWindowsLauncher
|
||||
name: Build Windows Launcher
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Build Launcher
|
||||
id: build
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: launcher
|
||||
path: setup/windows/novelWriter.exe
|
||||
path: setup/windows/UmbraEdit.exe
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
with:
|
||||
api-token: "${{ secrets.SIGNPATH_API_TOKEN }}"
|
||||
organization-id: "0471e52c-66fa-4e9a-bfb9-36167095ca3f"
|
||||
project-slug: "novelWriter"
|
||||
project-slug: "UmbraEdit"
|
||||
signing-policy-slug: "release-signing"
|
||||
artifact-configuration-slug: "launcher"
|
||||
github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}"
|
||||
@@ -42,6 +42,6 @@ jobs:
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: launcher-signed
|
||||
path: novelWriter.exe
|
||||
path: UmbraEdit.exe
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
48
.github/workflows/codeql.yml
vendored
@@ -1,48 +0,0 @@
|
||||
name: CodeQL
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
paths-ignore:
|
||||
- "**/*.md"
|
||||
- "**/*.txt"
|
||||
- "**/*.rst"
|
||||
- "**/*.ts"
|
||||
schedule:
|
||||
- cron: "38 12 * * 6"
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyse (${{ matrix.language }})
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
security-events: write
|
||||
packages: read
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- language: actions
|
||||
build-mode: none
|
||||
- language: python
|
||||
build-mode: none
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Initialise CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
13
.github/workflows/i18n.yml
vendored
@@ -1,9 +1,12 @@
|
||||
name: i18n
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
branches:
|
||||
- i18n/*
|
||||
- main
|
||||
- release
|
||||
paths:
|
||||
- i18n/*.ts
|
||||
|
||||
jobs:
|
||||
buildI18n:
|
||||
@@ -15,11 +18,11 @@ jobs:
|
||||
- name: Python Setup
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.13"
|
||||
python-version: "3.14"
|
||||
architecture: x64
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
@@ -33,6 +36,6 @@ jobs:
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: nw-i18n
|
||||
path: novelwriter/assets/i18n/*.qm
|
||||
path: umbraedit/assets/i18n/*.qm
|
||||
if-no-files-found: error
|
||||
retention-days: 7
|
||||
|
||||
35
.github/workflows/lock_threads.yml
vendored
@@ -1,35 +0,0 @@
|
||||
name: LockThreads
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "14 3 */3 * *"
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: lock-threads
|
||||
|
||||
jobs:
|
||||
action:
|
||||
name: Lock Old Issues & PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v6
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
issue-inactive-days: 120
|
||||
issue-comment: >
|
||||
This issue has been automatically locked since there has not been
|
||||
any recent activity after it was closed. Please open a new issue
|
||||
for related bugs or feature requests.
|
||||
issue-lock-reason: "resolved"
|
||||
pr-inactive-days: 120
|
||||
# pr-comment: >
|
||||
# This pull request thread has been automatically locked since there
|
||||
# has not been any recent activity after it was closed. Please open
|
||||
# an issue for any related bugs or feature requests.
|
||||
pr-lock-reason: "resolved"
|
||||
process-only: "issue, pr"
|
||||
log-output: true
|
||||
97
.github/workflows/part_appimage.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Part-AppImage
|
||||
name: Part AppImage
|
||||
|
||||
on: workflow_call
|
||||
|
||||
@@ -11,14 +11,14 @@ jobs:
|
||||
permissions:
|
||||
contents: read
|
||||
env:
|
||||
PYTHON_VERSION: "3.13"
|
||||
PYTHON_VERSION: "3.14"
|
||||
LINUX_TAG: "manylinux_2_28"
|
||||
LINUX_ARCH: "x86_64"
|
||||
steps:
|
||||
- name: Python Setup
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.13"
|
||||
python-version: "3.14"
|
||||
architecture: x64
|
||||
|
||||
- name: Install Packages (apt)
|
||||
@@ -30,13 +30,13 @@ jobs:
|
||||
run: pip install python-appimage setuptools
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: novelwriter/assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Build AppImage
|
||||
id: build
|
||||
@@ -50,7 +50,92 @@ jobs:
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: novelWriter-${{ steps.build.outputs.BUILD_VERSION }}-Linux-AppImage
|
||||
name: UmbraEdit-${{ steps.build.outputs.BUILD_VERSION }}-Linux-AppImage
|
||||
path: dist_appimage/*.AppImage*
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
smokeTest:
|
||||
name: Smoke Test AppImage (${{ matrix.distro }})
|
||||
needs: buildLinux-AppImage
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
contents: read
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- distro: Ubuntu 22.04
|
||||
image: ubuntu:22.04
|
||||
- distro: Debian 12
|
||||
image: debian:12
|
||||
- distro: Fedora 40
|
||||
image: fedora:40
|
||||
- distro: Arch Linux
|
||||
image: archlinux:latest
|
||||
- distro: Manjaro
|
||||
image: manjarolinux/base:latest
|
||||
container:
|
||||
image: ${{ matrix.image }}
|
||||
steps:
|
||||
- name: Install Runtime Dependencies
|
||||
run: |
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get update
|
||||
apt-get install -y ca-certificates libgl1 libxkbcommon0 libegl1 libfontconfig1 libglib2.0-0 libdbus-1-3
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
dnf install -y ca-certificates coreutils mesa-libGL mesa-libEGL libxkbcommon fontconfig glib2 dbus-libs
|
||||
elif command -v pacman >/dev/null 2>&1; then
|
||||
pacman -Syu --noconfirm --needed ca-certificates coreutils mesa libxkbcommon fontconfig glib2 dbus
|
||||
fi
|
||||
|
||||
- name: Download AppImage Artifact
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: UmbraEdit-*-Linux-AppImage
|
||||
merge-multiple: true
|
||||
path: appimage-dist
|
||||
|
||||
- name: Run AppImage Smoke Test
|
||||
run: |
|
||||
set -eu
|
||||
APPIMAGE_FILE="$(find appimage-dist -maxdepth 1 -name '*.AppImage' | head -n1)"
|
||||
if [ -z "$APPIMAGE_FILE" ]; then
|
||||
echo "No AppImage artifact found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x "$APPIMAGE_FILE"
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
export QT_NO_XDG_DESKTOP_PORTAL=1
|
||||
export APPIMAGE_EXTRACT_AND_RUN=1
|
||||
|
||||
set +e
|
||||
timeout 25s "$APPIMAGE_FILE" > smoke.log 2>&1
|
||||
EXIT_CODE=$?
|
||||
set -e
|
||||
|
||||
if [ "$EXIT_CODE" -eq 139 ]; then
|
||||
echo "AppImage crashed with segmentation fault"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if grep -Eiq 'segmentation fault|core dumped' smoke.log; then
|
||||
echo "Crash signature found in smoke log"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$EXIT_CODE" -ne 0 ] && [ "$EXIT_CODE" -ne 124 ]; then
|
||||
echo "Unexpected exit code: $EXIT_CODE"
|
||||
cat smoke.log
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Upload Smoke Logs
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: appimage-smoke-log-${{ matrix.distro }}
|
||||
path: smoke.log
|
||||
if-no-files-found: ignore
|
||||
retention-days: 14
|
||||
|
||||
30
.github/workflows/part_assets.yml
vendored
@@ -1,6 +1,7 @@
|
||||
name: Part-Assets
|
||||
name: Part Assets
|
||||
|
||||
on: workflow_call
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
buildAssets:
|
||||
@@ -10,35 +11,34 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install qttools5-dev-tools latexmk texlive texlive-latex-extra
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y qttools5-dev-tools latexmk texlive texlive-latex-extra
|
||||
|
||||
- name: Setup PDM
|
||||
uses: pdm-project/setup-pdm@v4
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
python-version: "3.13"
|
||||
python-version: "3.14"
|
||||
enable-cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
pdm install --group docs
|
||||
uv sync --no-dev --group docs
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
pdm run pkgutils.py build-assets
|
||||
pdm run pkgutils.py icons optional
|
||||
uv run --no-sync pkgutils.py build-assets
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: nw-assets
|
||||
path: |
|
||||
novelwriter/assets/manual*.pdf
|
||||
novelwriter/assets/sample.zip
|
||||
novelwriter/assets/i18n/*.qm
|
||||
novelwriter/assets/icons/*.icons
|
||||
umbraedit/assets/manual*.pdf
|
||||
umbraedit/assets/sample.zip
|
||||
umbraedit/assets/i18n/*.qm
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
82
.github/workflows/part_debian.yml
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
name: Part Debian
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
publish:
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
build_number:
|
||||
required: false
|
||||
type: string
|
||||
default: "0"
|
||||
codename:
|
||||
required: true
|
||||
type: string
|
||||
family:
|
||||
required: true
|
||||
type: string
|
||||
image:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CLOUDSMITH_API_KEY:
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
buildPackage:
|
||||
name: Build Debian Package
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
container:
|
||||
image: ${{ inputs.image }}
|
||||
steps:
|
||||
- name: Install Checkout Prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y git ca-certificates python3
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Assets Artifact
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Install Native Packages
|
||||
run: apt-get install -y $(python3 pkgutils.py build-deb-depends ${{ inputs.codename }})
|
||||
|
||||
- name: Build Package
|
||||
run: python3 pkgutils.py build-deb ${{ inputs.codename }} --build ${{ inputs.build_number }} --install-source Cloudsmith
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: nw-deb-${{ inputs.codename }}
|
||||
path: dist_upload/*
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
- name: Set up Cloudsmith CLI with OIDC
|
||||
if: ${{ inputs.publish }}
|
||||
uses: cloudsmith-io/cloudsmith-cli-action@v3
|
||||
with:
|
||||
oidc-namespace: "saga-soft"
|
||||
oidc-service-slug: "github-actions-lcpr"
|
||||
verify-auth: true
|
||||
|
||||
- name: Publish to Cloudsmith
|
||||
if: ${{ inputs.publish }}
|
||||
run: |
|
||||
CHANNEL="$(python3 pkgutils.py channel)"
|
||||
REPO="stable"
|
||||
if [ "$CHANNEL" = "pre" ]; then
|
||||
REPO="testing"
|
||||
fi
|
||||
DEB_FILE="$(find dist_upload -name '*.deb')"
|
||||
cloudsmith push deb "saga-soft/$REPO/${{ inputs.family }}/${{ inputs.codename }}" "$DEB_FILE" --republish
|
||||
46
.github/workflows/part_flatpak.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: Part Flatpak
|
||||
|
||||
on: workflow_call
|
||||
|
||||
jobs:
|
||||
buildLinux-Flatpak:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install Packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y flatpak flatpak-builder
|
||||
flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
python-version: "3.14"
|
||||
enable-cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
uv sync --no-dev --group build
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Build Flatpak
|
||||
id: build
|
||||
run: |
|
||||
echo "BUILD_VERSION=$(uv run pkgutils.py version)" >> $GITHUB_OUTPUT
|
||||
uv run --no-sync pkgutils.py build-flatpak
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: UmbraEdit-${{ steps.build.outputs.BUILD_VERSION }}-Linux-Flatpak
|
||||
path: dist_flatpak/*.flatpak*
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
8
.github/workflows/part_macos_amd64.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Part-MacOS-AMD64
|
||||
name: Part MacOS AMD64
|
||||
|
||||
on: workflow_call
|
||||
|
||||
@@ -14,13 +14,13 @@ jobs:
|
||||
MINICONDA_ARCH: x86_64
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: novelwriter/assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Build App Bundle
|
||||
id: build
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
- name: Upload DMG
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: novelWriter-${{ steps.build.outputs.BUILD_VERSION }}-MacOS-AMD64-DMG
|
||||
name: UmbraEdit-${{ steps.build.outputs.BUILD_VERSION }}-MacOS-AMD64-DMG
|
||||
path: dist_macos/*.dmg*
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
8
.github/workflows/part_macos_m1.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Part-MacOS-M1
|
||||
name: Part MacOS M1
|
||||
|
||||
on: workflow_call
|
||||
|
||||
@@ -14,13 +14,13 @@ jobs:
|
||||
MINICONDA_ARCH: arm64
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: novelwriter/assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Build App Bundle
|
||||
id: build
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
- name: Upload DMG
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: novelWriter-${{ steps.build.outputs.BUILD_VERSION }}-MacOS-M1-DMG
|
||||
name: UmbraEdit-${{ steps.build.outputs.BUILD_VERSION }}-MacOS-M1-DMG
|
||||
path: dist_macos/*.dmg*
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
66
.github/workflows/part_pypi.yml
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
name: Part PyPI
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
publish:
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
buildPackage:
|
||||
name: Build PyPI Package
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Assets Artifact
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
python-version: "3.14"
|
||||
enable-cache: true
|
||||
|
||||
- name: Build Package
|
||||
run: uv run pkgutils.py build-pypi
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: nw-pypi
|
||||
path: |
|
||||
dist_pypi/*.whl
|
||||
dist_pypi/*.tar.gz
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
publishPackage:
|
||||
name: Publish to PyPI
|
||||
needs: buildPackage
|
||||
if: ${{ inputs.publish }}
|
||||
runs-on: ubuntu-latest
|
||||
environment: pypi
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Download Package Artifact
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-pypi
|
||||
path: dist_pypi
|
||||
|
||||
- name: Install UV
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
|
||||
- name: Publish Package
|
||||
run: uv publish dist_pypi/*
|
||||
17
.github/workflows/part_win_x64.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Part-Windows-X64
|
||||
name: Part Windows X64
|
||||
|
||||
on: workflow_call
|
||||
|
||||
@@ -12,17 +12,20 @@ jobs:
|
||||
- name: Python Setup
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.13"
|
||||
python-version: "3.14"
|
||||
architecture: x64
|
||||
|
||||
- name: Install Packages (pip)
|
||||
run: pip install tzdata
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Assets
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: nw-assets
|
||||
path: novelwriter/assets
|
||||
path: umbraedit/assets
|
||||
|
||||
- name: Build Setup Installer
|
||||
id: build
|
||||
@@ -34,7 +37,7 @@ jobs:
|
||||
id: upload-unsigned-artifact
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: novelWriter-${{ steps.build.outputs.BUILD_VERSION }}-Win-Setup
|
||||
name: UmbraEdit-${{ steps.build.outputs.BUILD_VERSION }}-Win-Setup
|
||||
path: dist/*.exe
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
@@ -44,7 +47,7 @@ jobs:
|
||||
with:
|
||||
api-token: "${{ secrets.SIGNPATH_API_TOKEN }}"
|
||||
organization-id: "0471e52c-66fa-4e9a-bfb9-36167095ca3f"
|
||||
project-slug: "novelWriter"
|
||||
project-slug: "UmbraEdit"
|
||||
signing-policy-slug: "release-signing "
|
||||
github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}"
|
||||
wait-for-completion: true
|
||||
@@ -55,7 +58,7 @@ jobs:
|
||||
- name: Upload Signed Artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: novelWriter-${{ steps.build.outputs.BUILD_VERSION }}-Win-Setup-Signed
|
||||
name: UmbraEdit-${{ steps.build.outputs.BUILD_VERSION }}-Win-Setup-Signed
|
||||
path: dist/*.exe
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
17
.github/workflows/policy.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
name: Policy Checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
|
||||
jobs:
|
||||
commitPolicy:
|
||||
name: Commit Policy
|
||||
uses: saga-soft/automation/.github/workflows/saga-soft-policy.yml@main
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
with:
|
||||
policy-url: https://github.com/saga-soft/UmbraEdit/blob/main/AI_POLICY.md
|
||||
24
.github/workflows/syntax.yml
vendored
@@ -18,26 +18,24 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Setup PDM
|
||||
uses: pdm-project/setup-pdm@v4
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
enable-cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
pdm install --group lint
|
||||
uv sync --no-dev --group lint --group test
|
||||
|
||||
- name: Ruff Check
|
||||
run: |
|
||||
pdm run ruff --version
|
||||
pdm run ruff check --output-format github
|
||||
uv run --no-sync ruff --version
|
||||
uv run --no-sync ruff format --check
|
||||
uv run --no-sync ruff check --output-format github
|
||||
|
||||
- name: Pyright Check
|
||||
run: |
|
||||
pdm run pyright --version
|
||||
pdm run pyright
|
||||
|
||||
- name: Isort Check
|
||||
run: |
|
||||
pdm run isort --version
|
||||
pdm run isort --check .
|
||||
uv run --no-sync pyright --version
|
||||
uv run --no-sync pyright
|
||||
|
||||
90
.github/workflows/test_linux.yml
vendored
@@ -1,90 +0,0 @@
|
||||
name: Linux
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
|
||||
jobs:
|
||||
testLinux:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version:
|
||||
- "3.11"
|
||||
- "3.12"
|
||||
- "3.13"
|
||||
- "3.14"
|
||||
fail-fast: false
|
||||
name: Test Python ${{ matrix.python-version }}
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install qttools5-dev-tools
|
||||
|
||||
- name: Setup PDM
|
||||
uses: pdm-project/setup-pdm@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
pdm install --group test
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
pdm run pkgutils.py qtlrelease
|
||||
pdm run pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
pdm run coverage run -m pytest -v --timeout=60
|
||||
pdm run coverage xml
|
||||
|
||||
- name: Upload to Codecov
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
fail_ci_if_error: true
|
||||
|
||||
testUbuntu24:
|
||||
name: Test Ubuntu 24.04 & Sys Packages
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install \
|
||||
python3-pyqt6 \
|
||||
python3-pyqt6.qtsvg \
|
||||
python3-pytest \
|
||||
python3-pytestqt \
|
||||
python3-enchant \
|
||||
python3-pytest-timeout \
|
||||
qt6-image-formats-plugins
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
python3 pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
python3 -m pytest -v --timeout=60
|
||||
50
.github/workflows/test_mac.yml
vendored
@@ -1,50 +0,0 @@
|
||||
name: MacOS
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
|
||||
jobs:
|
||||
testMac:
|
||||
runs-on: macos-latest
|
||||
name: Test Python 3.13
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
brew install enchant
|
||||
|
||||
- name: Setup PDM
|
||||
uses: pdm-project/setup-pdm@v4
|
||||
with:
|
||||
python-version: "3.13"
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
pdm install --group test
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
pdm run pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
pdm run coverage run -m pytest -v --timeout=60
|
||||
pdm run coverage xml
|
||||
|
||||
- name: Upload to Codecov
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
fail_ci_if_error: true
|
||||
45
.github/workflows/test_win.yml
vendored
@@ -1,45 +0,0 @@
|
||||
name: Windows
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
|
||||
jobs:
|
||||
testWin:
|
||||
runs-on: windows-latest
|
||||
name: Test Python 3.13
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Setup PDM
|
||||
uses: pdm-project/setup-pdm@v4
|
||||
with:
|
||||
python-version: "3.13"
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
pdm install --group test
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
pdm run pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
pdm run coverage run -m pytest -v --timeout=60
|
||||
pdm run coverage xml
|
||||
|
||||
- name: Upload to Codecov
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
fail_ci_if_error: true
|
||||
308
.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,308 @@
|
||||
name: Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release
|
||||
|
||||
jobs:
|
||||
testLinux:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version:
|
||||
- "3.11"
|
||||
- "3.12"
|
||||
- "3.13"
|
||||
- "3.14"
|
||||
- "3.15"
|
||||
fail-fast: false
|
||||
name: Linux Python ${{ matrix.python-version }}
|
||||
permissions:
|
||||
contents: read
|
||||
env:
|
||||
COVERAGE_FILE: .coverage.py${{ matrix.python-version }}
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install System Packages
|
||||
timeout-minutes: 5
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install qttools5-dev-tools
|
||||
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
enable-cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
uv sync --no-dev --group test
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
uv run --no-sync pkgutils.py qtlrelease
|
||||
uv run --no-sync pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
uv run --no-sync coverage run -m pytest -v --timeout=60
|
||||
uv run --no-sync coverage report --skip-covered --show-missing
|
||||
|
||||
- name: Upload Coverage Data
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: coverage-data-py${{ matrix.python-version }}
|
||||
path: ${{ env.COVERAGE_FILE }}
|
||||
include-hidden-files: true
|
||||
retention-days: 1
|
||||
|
||||
testMac:
|
||||
runs-on: macos-latest
|
||||
name: MacOS Python 3.14
|
||||
permissions:
|
||||
contents: read
|
||||
env:
|
||||
COVERAGE_FILE: .coverage.mac
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
brew install enchant
|
||||
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
python-version: "3.14"
|
||||
enable-cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
uv sync --no-dev --group test
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
uv run --no-sync pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
uv run --no-sync coverage run -m pytest -v --timeout=60
|
||||
uv run --no-sync coverage report --skip-covered --show-missing
|
||||
|
||||
- name: Upload Coverage Data
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: coverage-data-mac
|
||||
path: ${{ env.COVERAGE_FILE }}
|
||||
include-hidden-files: true
|
||||
retention-days: 1
|
||||
|
||||
testWin:
|
||||
runs-on: windows-latest
|
||||
name: Windows Python 3.14
|
||||
permissions:
|
||||
contents: read
|
||||
env:
|
||||
COVERAGE_FILE: .coverage.win
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install UV and Python
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
with:
|
||||
python-version: "3.14"
|
||||
enable-cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
uv sync --no-dev --group test
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
uv run --no-sync pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
uv run --no-sync coverage run -m pytest -v --timeout=60
|
||||
uv run --no-sync coverage report --skip-covered --show-missing
|
||||
|
||||
- name: Upload Coverage Data
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: coverage-data-win
|
||||
path: ${{ env.COVERAGE_FILE }}
|
||||
include-hidden-files: true
|
||||
retention-days: 1
|
||||
|
||||
coverageReport:
|
||||
name: PR Coverage Report
|
||||
needs:
|
||||
- testLinux
|
||||
- testMac
|
||||
- testWin
|
||||
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Coverage Data
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: coverage-data-*
|
||||
merge-multiple: true
|
||||
|
||||
- name: Install UV
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
|
||||
- name: Combine Coverage Data
|
||||
run: |
|
||||
uvx coverage combine
|
||||
uvx coverage report --skip-covered
|
||||
|
||||
- name: Build Comment Body
|
||||
run: |
|
||||
{
|
||||
echo '<!-- coverage-report -->'
|
||||
echo '### Coverage Report (Linux, macOS, Windows)'
|
||||
echo
|
||||
uvx coverage report --skip-covered --show-missing --format=markdown --precision=3
|
||||
echo
|
||||
echo "**Total: $(uvx coverage report --format=total --precision=3)%**"
|
||||
} > coverage-comment.md
|
||||
|
||||
- name: Post PR Comment
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
REPO: ${{ github.repository }}
|
||||
run: |
|
||||
comment_id=$(gh api "repos/$REPO/issues/$PR_NUMBER/comments" --paginate --jq '.[] | select(.body | startswith("<!-- coverage-report -->")) | .id' | head -n1)
|
||||
if [ -n "$comment_id" ]; then
|
||||
gh api --method PATCH "repos/$REPO/issues/comments/$comment_id" -F body=@coverage-comment.md
|
||||
else
|
||||
gh pr comment "$PR_NUMBER" --body-file coverage-comment.md
|
||||
fi
|
||||
|
||||
coverageSummary:
|
||||
name: Action Coverage Report
|
||||
needs:
|
||||
- testLinux
|
||||
- testMac
|
||||
- testWin
|
||||
if: github.event_name == 'pull_request'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download Coverage Data
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: coverage-data-*
|
||||
merge-multiple: true
|
||||
|
||||
- name: Install UV
|
||||
uses: astral-sh/setup-uv@v10.2.0
|
||||
|
||||
- name: Combine Coverage Data
|
||||
run: |
|
||||
uvx coverage combine
|
||||
uvx coverage report --skip-covered
|
||||
|
||||
- name: Write Coverage Summary
|
||||
run: |
|
||||
{
|
||||
echo '### Coverage Report (Linux, macOS, Windows)'
|
||||
echo
|
||||
uvx coverage report --skip-covered --show-missing --format=markdown --precision=3
|
||||
echo
|
||||
echo "**Total: $(uvx coverage report --format=total --precision=3)%**"
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
testUbuntu24:
|
||||
name: Ubuntu 24.04 & Sys Packages
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install System Packages
|
||||
timeout-minutes: 5
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install \
|
||||
python3-pyqt6 \
|
||||
python3-pyqt6.qtsvg \
|
||||
python3-pytest \
|
||||
python3-pytestqt \
|
||||
python3-enchant \
|
||||
python3-pytest-timeout \
|
||||
qt6-image-formats-plugins
|
||||
|
||||
- name: Build Assets
|
||||
run: |
|
||||
python3 pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
python3 -m pytest -v --timeout=60
|
||||
|
||||
testFedoraLatest:
|
||||
name: Fedora 44 & Sys Packages
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: fedora:44
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Install System Packages
|
||||
timeout-minutes: 5
|
||||
run: |
|
||||
dnf -y update
|
||||
dnf -y install \
|
||||
git \
|
||||
python3-enchant \
|
||||
python3-pyqt6 \
|
||||
python3-pytest \
|
||||
python3-pytest-qt \
|
||||
python3-pytest-timeout \
|
||||
qt6-linguist \
|
||||
qt6-qtimageformats
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Run Build Commands
|
||||
run: |
|
||||
python pkgutils.py qtlrelease
|
||||
python pkgutils.py sample
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
export QT_QPA_PLATFORM=offscreen
|
||||
python3 -m pytest -v --timeout=60
|
||||
56
.gitignore
vendored
@@ -8,60 +8,53 @@
|
||||
*.spec
|
||||
*.egg-info
|
||||
setup.iss
|
||||
/novelwriter.desktop
|
||||
/novelWriter.pyw
|
||||
/umbraedit.desktop
|
||||
/UmbraEdit.pyw
|
||||
/setup/macos/Info.plist
|
||||
/setup/windows/build
|
||||
.flatpak-builder
|
||||
.venv
|
||||
/uv.lock
|
||||
/.pdm-python
|
||||
.env
|
||||
|
||||
# Translations
|
||||
/novelwriter/assets/i18n/*.qm
|
||||
/umbraedit/assets/i18n/*.qm
|
||||
.qmake.stash
|
||||
i18n/*.qm
|
||||
i18n/*.qph
|
||||
|
||||
# Icons Themes Except Material Symbols
|
||||
/novelwriter/assets/icons/*.icons
|
||||
!/novelwriter/assets/icons/material_*.icons
|
||||
|
||||
# Documentation
|
||||
/docs/build/
|
||||
/docs/source/locales/**/*.mo
|
||||
/novelwriter/assets/help/
|
||||
/novelwriter/assets/manual*.pdf
|
||||
*.qch
|
||||
*.qhc
|
||||
/umbraedit/assets/manual*.pdf
|
||||
.~lock.*
|
||||
|
||||
# Python Temp
|
||||
# Python
|
||||
/.python-version
|
||||
__pycache__
|
||||
*.pyc
|
||||
|
||||
# Sample Project
|
||||
/novelwriter/assets/sample.zip
|
||||
/sample/cache
|
||||
/umbraedit/assets/sample.zip
|
||||
/sample/meta
|
||||
/sample/**/*.bak
|
||||
/sample/*.lock
|
||||
ToC.txt
|
||||
/sample/ToC.txt
|
||||
/sample/manifest.json
|
||||
|
||||
# PyTest
|
||||
/prof/
|
||||
/htmlcov/
|
||||
/tests/temp
|
||||
/tests/lipsum/cache
|
||||
/tests/lipsum/meta
|
||||
/tests/_temp
|
||||
/.pytest_cache
|
||||
/pytestdebug.log
|
||||
|
||||
# Coverage
|
||||
/.coverage
|
||||
/.coveragerc
|
||||
/coverage.*
|
||||
|
||||
# Other
|
||||
/test.py
|
||||
.config
|
||||
.local
|
||||
*.patch
|
||||
@@ -69,3 +62,26 @@ ToC.txt
|
||||
# IDE
|
||||
.vscode
|
||||
.ruff_cache
|
||||
.nvimlog
|
||||
|
||||
# No AI files
|
||||
AGENTS.md
|
||||
CLAUSE.md
|
||||
GEMINI.md
|
||||
.claude/
|
||||
.cursor*
|
||||
.codex/
|
||||
.gemini/
|
||||
|
||||
# Debug
|
||||
/debug/
|
||||
|
||||
# Clean up accidentally committed files
|
||||
# Added by B.D. Murphy 2026: exclude files accidentally committed during branding transition
|
||||
Splh.jpeg
|
||||
Oldwelcome.webp
|
||||
.DS_Store
|
||||
UmbraEdit_Projects/
|
||||
Inner_Demon_1.2a.docm
|
||||
requirements.txt
|
||||
UmbraEdit_deb_Build_Script.txt
|
||||
|
||||
59
AI_POLICY.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# AI Policy
|
||||
|
||||
This is the AI policy of UmbraEdit and associated projects.
|
||||
|
||||
|
||||
### Code Contributions
|
||||
|
||||
We consider code to be creative work, and we have a strong preference for feature contributions designed by actual
|
||||
humans over the average and mediocre output of agentic and generative AI.
|
||||
|
||||
While we do not have a strict No-AI policy, we want to limit its use in this project. In general, we expect any
|
||||
contributed code to hold up to maintainability and stability standards so that our users can rely on the software for
|
||||
their creative work. This implies careful review, thorough test coverage, and beta testing of all features before they
|
||||
reach live users. The requirements on code that isn't shipped to the user are less strict. This includes unit tests and
|
||||
build tooling.
|
||||
|
||||
We recognise that AI tools can be useful in a developer's toolbox, alongside other tools that can edit or add code. In
|
||||
addition to read-only operations, it is generally fine to use them for boilerplate, fixes, and otherwise editing and
|
||||
extending existing code. However, you must not contribute fully or predominantly AI-generated features or other
|
||||
bulk-generated code. This applies especially to core functionality.
|
||||
|
||||
In general, so-called vibe coding does not meet our code quality requirements, so this project is not suitable for such
|
||||
contributions in any case. The licensing implications around generated code are also unclear, as AI models are trained
|
||||
on material without consent or concern for original licensing.
|
||||
|
||||
No AI automation or agentic tools are used anywhere in this project on GitHub. Do not use your AI agents on your
|
||||
contributions on GitHub either. Commits listed in any way as authored by, signed off by, or assisted by, AI tools are
|
||||
explicitly not allowed. Pull requests containing such commits will be rejected. You should also not commit AI-specific
|
||||
files into the code repository. Most of the common ones are in the git ignore file.
|
||||
|
||||
|
||||
### Design Work
|
||||
|
||||
No design work generated by AI for UmbraEdit will be accepted. We do not control how third-party work like icon
|
||||
libraries are created, but any artwork added to the app must be made by actual people.
|
||||
|
||||
|
||||
### Translation Work
|
||||
|
||||
This project uses Crowdin to host the translation files for the user interface. Crowdin has a lot of AI integration and
|
||||
tooling, which we do not use. The Crowdin translation interface provides AI translated suggestions, which the
|
||||
translators may choose to use. All translations are proofread and approved by speakers of the respective languages.
|
||||
|
||||
|
||||
### Application Features
|
||||
|
||||
We do not believe creative writing and generative AI go together. Therefore, there will not be any tooling or features
|
||||
added to this project that will generate text for you. Language models have a real use case in text analysis that
|
||||
predates generative AI, and such supportive tools **may** be in scope depending on how intrusive they are.
|
||||
|
||||
|
||||
### Discussions and Comments
|
||||
|
||||
Please refrain from using AI to generate or respond to discussions, issues, and pull requests. Especially do not use AI
|
||||
tools to generate long and verbose issue reports. It is OK to use AI for translations of comments or for accessibility
|
||||
reasons. All text in the code or posted to this project must be in English.
|
||||
|
||||
|
||||
*Last updated on 2026-10-03.*
|
||||
146
BUILD_LINUX.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# UmbraEdit - Linux AMD64 Build Guide
|
||||
|
||||
UmbraEdit is developed on macOS but builds natively on Linux AMD64 and ARM64.
|
||||
This guide covers building Linux install packages from source.
|
||||
|
||||
## Source Distribution
|
||||
|
||||
The source tarball (`umbraedit-2026.11.1.tar.gz`) includes everything needed to
|
||||
build Linux packages:
|
||||
|
||||
```
|
||||
umbraedit-2026.11.1/
|
||||
├── pyproject.toml # Project metadata & dependencies
|
||||
├── UmbraEdit.py # Application entry point
|
||||
├── pkgutils.py # Packaging utility
|
||||
├── run_tests.py # Test runner
|
||||
├── setup/ # Packaging assets
|
||||
│ ├── data/ # .desktop file, MIME type XML
|
||||
│ ├── macos/ # macOS-specific packaging
|
||||
│ └── windows/ # Windows-specific packaging
|
||||
├── utils/ # Build scripts
|
||||
│ ├── build_debian.py # .deb package builder
|
||||
│ ├── build_appimage.py # AppImage builder
|
||||
│ ├── build_all.py # Multi-platform build orchestrator
|
||||
│ └── ...
|
||||
├── umbraedit/ # Application source code
|
||||
└── tests/ # Test suite
|
||||
```
|
||||
|
||||
## Prerequisites on Linux
|
||||
|
||||
### Debian/Ubuntu
|
||||
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install \
|
||||
python3 python3-pip \
|
||||
python3-pyqt6 python3-pyqt6.qtsvg \
|
||||
python3-enchant \
|
||||
qt6-image-formats-plugins qt6-svg-plugins \
|
||||
dh-python debhelper python3-build python3-setuptools \
|
||||
python3-pytest python3-pytestqt python3-pytest-timeout \
|
||||
appimagetool
|
||||
```
|
||||
|
||||
### Fedora/RHEL
|
||||
|
||||
```bash
|
||||
sudo dnf install \
|
||||
python3 python3-pip \
|
||||
python3-pyqt6 python3-enchant \
|
||||
qt6-qtimageformats qt6-qtsvg \
|
||||
python3-build python3-setuptools \
|
||||
dpkg rpm-build appimagetool
|
||||
```
|
||||
|
||||
### Arch Linux
|
||||
|
||||
```bash
|
||||
sudo pacman -S \
|
||||
python python-pip \
|
||||
python-pyqt6 python-enchant \
|
||||
qt6-imageformats qt6-svg \
|
||||
python-build python-setuptools \
|
||||
dpkg appimagetool
|
||||
```
|
||||
|
||||
## Build Options
|
||||
|
||||
### Option 1: Install via Wheel (Simplest)
|
||||
|
||||
The pure Python wheel requires no compilation:
|
||||
|
||||
```bash
|
||||
pip install umbraedit-2026.11.1-py3-none-any.whl
|
||||
umbraedit
|
||||
```
|
||||
|
||||
### Option 2: Install from Source Tarball
|
||||
|
||||
```bash
|
||||
tar xzf umbraedit-2026.11.1.tar.gz
|
||||
cd umbraedit-2026.11.1
|
||||
pip install .
|
||||
umbraedit
|
||||
```
|
||||
|
||||
### Option 3: Build .deb Package
|
||||
|
||||
```bash
|
||||
tar xzf umbraedit-2026.11.1.tar.gz
|
||||
cd umbraedit-2026.11.1
|
||||
|
||||
# Build for Ubuntu Noble (24.04)
|
||||
python3 utils/build_debian.py --distro noble --build 1
|
||||
|
||||
# The .deb will be in dist_deb/
|
||||
sudo dpkg -i dist_deb/umbraedit_*_amd64.deb
|
||||
```
|
||||
|
||||
Available distro targets: `bookworm`, `trixie`, `noble`, `resolute`, `stonking`, `wilma`
|
||||
|
||||
### Option 4: Build AppImage
|
||||
|
||||
```bash
|
||||
pip install python-appimage
|
||||
sudo apt-get install appimagetool
|
||||
|
||||
tar xzf umbraedit-2026.11.1.tar.gz
|
||||
cd umbraedit-2026.11.1
|
||||
|
||||
python3 utils/build_appimage.py --linux ubuntu --arch amd64 --python 3.12
|
||||
|
||||
chmod +x dist_appimage/umbraedit-2026.11-amd64.AppImage
|
||||
./dist_appimage/umbraedit-2026.11-amd64.AppImage
|
||||
```
|
||||
|
||||
### Option 5: Build All Linux Packages
|
||||
|
||||
```bash
|
||||
tar xzf umbraedit-2026.11.1.tar.gz
|
||||
cd umbraedit-2026.11.1
|
||||
|
||||
python3 utils/build_all.py --platform linux --arch amd64
|
||||
```
|
||||
|
||||
## Project Storage
|
||||
|
||||
UmbraEdit projects are stored in plain folders with an `nwProject.nwx` file.
|
||||
The sample project included in the distribution can be used for testing:
|
||||
|
||||
```bash
|
||||
umbraedit # Opens the welcome dialog
|
||||
# Select "Sample Project" from the list, or browse to your .nwx file
|
||||
```
|
||||
|
||||
## Version
|
||||
|
||||
Current development version: **2026.11.0004**
|
||||
|
||||
## License
|
||||
|
||||
GPL-3.0-or-later AND Apache-2.0 AND ISC AND MIT
|
||||
|
||||
UmbraEdit is based on novelWrite 2026.02 by Veronica Berglyd Olsen
|
||||
(novelWriter.io), licenced under the same GPL v3.0 license.
|
||||
1023
CHANGELOG.md
@@ -1,132 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at issues (at)
|
||||
novelwriter.io. All complaints will be reviewed and investigated promptly and
|
||||
fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
||||
200
CONTRIBUTING.md
@@ -1,22 +1,27 @@
|
||||
# Contributing Guide
|
||||
|
||||
See also [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md).
|
||||
See also our [Code of Conduct](https://github.com/saga-soft/UmbraEdit?tab=coc-ov-file#code-of-conduct)
|
||||
and our [AI Policy](https://github.com/saga-soft/UmbraEdit/blob/main/AI_POLICY.md).
|
||||
|
||||
When contributing to this repository, please first discuss the change you wish to make with the
|
||||
owner. Either via the issue tracker or on the discussions page. Especially if it is regarding new
|
||||
features. If you just want to make a minor correction, like fix a typo or similar, feel free to
|
||||
just make a pull request directly.
|
||||
maintainers. For new and complex ideas, it is better to open a discussion before adding a new
|
||||
feature request. If you just want to make a minor correction, like fix a typo or similar, feel free
|
||||
to just make a pull request directly.
|
||||
|
||||
**The following contributions are welcome:**
|
||||
|
||||
* Bugfixes for new or existing bugs. Please also report new bugs in the issue tracker even if you
|
||||
also provide a fix. It makes it easier to keep track of what has been fixed and when.
|
||||
* Translations made via the [Crowdin project page](https://crowdin.com/project/novelwriter).
|
||||
also provide a fix. It makes it easier to keep track of what has been fixed and when and to
|
||||
populate our changelog.
|
||||
* Translations made via the [Crowdin project page](https://crowdin.com/project/umbraedit).
|
||||
* Translations of the documentation. These need to use Sphinx i18n tooling. Please start a
|
||||
discussion before beginning such work as it requires some coordination.
|
||||
* Improvements to the documentation. Particularly if the documentation is unclear. Please don't
|
||||
make any larger changes to the documentation without discussing them with the maintainer first.
|
||||
make any larger changes to the documentation without discussing them with a maintainer first.
|
||||
* Adaptations, installation or packaging features targeting specific operating systems.
|
||||
* Using AI as a coding assistant is fine as long as the code is of good quality and the scope of
|
||||
change is small, but do not generate large chunks of code. Generated code is not only hard to
|
||||
maintain, but also poses licensing issues.
|
||||
|
||||
**Please do not:**
|
||||
|
||||
@@ -26,21 +31,25 @@ just make a pull request directly.
|
||||
* Make pull requests with AI generated code. This is not a project suitable for vibe coding.
|
||||
Outright slop will result in the account being blocked.
|
||||
|
||||
This project uses [pdm](https://pdm-project.org/) as its main developer tool. In order to run
|
||||
novelWriter directly from checked out source, simply call from the root folder:
|
||||
|
||||
## Running from Source
|
||||
|
||||
This project uses [uv](https://docs.astral.sh/uv/) to maintain dependencies. In order to run
|
||||
UmbraEdit directly from checked out source, simply call from the root folder with:
|
||||
|
||||
```bash
|
||||
pdm run novelwriter
|
||||
uv run umbraedit
|
||||
```
|
||||
|
||||
To set up a development environment with all needed dependencies, run:
|
||||
|
||||
```bash
|
||||
pdm install
|
||||
uv sync
|
||||
```
|
||||
|
||||
Many tasks like building assets from source are handled by the `pkgutils.py` helper tool.
|
||||
This tool requires no dependencies, so you can either run it directly with Python, or `pdm run`.
|
||||
Many tasks, like building assets from source, are handled by the `pkgutils.py` helper tool.
|
||||
This tool requires no dependencies for most commands, so you can either run it directly with
|
||||
Python, or using `uv run`.
|
||||
|
||||
```bash
|
||||
python pkgutils.py --help
|
||||
@@ -52,118 +61,119 @@ The translation files needed at runtime can be built with:
|
||||
python pkgutils.py qtlrelease
|
||||
```
|
||||
|
||||
Material design icons are included with the source. Optional icon themes can be built with:
|
||||
Default icon themes can be updated with:
|
||||
|
||||
```bash
|
||||
python pkgutils.py icons optional
|
||||
python pkgutils.py icons default
|
||||
```
|
||||
|
||||
|
||||
## Picking the Correct Branch for a Pull Request
|
||||
|
||||
Pre-releases are made from the `main` branch, and full releases are made from the `release` branch.
|
||||
If you are submitting a fix to a current release you must do so from the `release` branch. If you
|
||||
make such a fix on the `main` branch, **it cannot be included in a patch release**. This also
|
||||
applies to the documentation for the latest release published on the main website.
|
||||
|
||||
New features are only accepted on full releases, so a feature pull request must be made to the
|
||||
`main` branch. However, if the `main` branch is very close to a new full release, pull requests may
|
||||
not be merged until the release is completed.
|
||||
|
||||
This project uses GitHub milestones to plan releases, and only pull requests included in the
|
||||
current release cycle will be merged to `main`. Milestone tickets are not set in stone and are
|
||||
often moved between them.
|
||||
|
||||
|
||||
## Pull Request Check List
|
||||
|
||||
Make sure the pull request follows these rules:
|
||||
|
||||
* The `main` branch is the default branch. For general changes, please make a new branch in your
|
||||
own fork from the current `main` branch. Do not make pull requests from your copy of the `main`
|
||||
branch.
|
||||
* Please provide a description of the changes in the pull request under the summary section of the
|
||||
pull request template, and reference any related issues by providing the issue number. Do not
|
||||
post links to issue numbers as that breaks the integration. Stating the issue number is enough.
|
||||
* Do not change the version number.
|
||||
* Do not submit files that were not actively changed but have otherwise been modified. This is
|
||||
particularly an issue with autoformatting.
|
||||
|
||||
|
||||
## General Rules
|
||||
|
||||
These are the guidelines for the project. The source code of novelWriter broadly follows the
|
||||
[PEP8](https://www.python.org/dev/peps/pep-0008) style guide, but with a few exceptions.
|
||||
|
||||
The project uses [ruff](https://docs.astral.sh/ruff/) for linting, but the auto-formatter should
|
||||
not be used at this point. It also uses [isort](https://pycqa.github.io/isort) for import sorting.
|
||||
The latter can be auto-formatted and the settings are defined in ``pyproject.toml`.
|
||||
|
||||
|
||||
### Tests
|
||||
### Running Tests
|
||||
|
||||
* New code must not break any existing tests.
|
||||
* New code must come with tests that cover the code in full. If the code has branches that only
|
||||
runs on some OSes, they only need to be covered when test are run on that OS. The test suite runs
|
||||
on Linux, Windows and MacOS.
|
||||
* New code must come with tests that cover the code in full. This includes branch coverage. If the
|
||||
code has branches that only runs on some OSes, they only need to be covered when test are run on
|
||||
that OS. The test suite runs on Linux, Windows and MacOS.
|
||||
* It is ok to use `pragma` comments with `no cover` and `no branch` if the code is not expected to
|
||||
touch those areas or branches at runtime.
|
||||
|
||||
A helper script is provided for running tests. It simplifies coverage reporting and a few other
|
||||
things. Run the following to see all details:
|
||||
|
||||
```bash
|
||||
pdm run run_tests.py --help
|
||||
uv run run_tests.py --help
|
||||
```
|
||||
|
||||
For instance, this command will run all tests off screen (`-o`), generate a coverage XML report for
|
||||
your code editor (`-r`), and produce a terminal report with all missing lines and branches (`-l`).
|
||||
|
||||
```bash
|
||||
uv run run_tests.py -orl
|
||||
```
|
||||
|
||||
|
||||
### Code Formatting
|
||||
## Picking the Correct Branch for a Pull Request
|
||||
|
||||
* The pull request code *must* pass the `ruff` and `isort` linting rules specified in
|
||||
`pyproject.toml`.
|
||||
* In general, do not make large scale formatting changes to the code.
|
||||
Pre-releases are generally made from the `main` branch, and full releases are always made from the
|
||||
`release` branch. If you are submitting a fix to a current release you must do so from the
|
||||
`release` branch. If you make such a fix on the `main` branch, **it cannot be included in a patch
|
||||
release**. This also applies to the documentation for the latest release published on the main
|
||||
website.
|
||||
|
||||
New features are only added in full releases, so a feature pull request must be made to the `main`
|
||||
branch. However, if the `main` branch is very close to a new full release, pull requests may not be
|
||||
merged until the release is completed.
|
||||
|
||||
This project uses GitHub milestones to plan releases, and only pull requests included in the
|
||||
current release cycle will be merged to `main`. Milestone tickets are not set in stone and are
|
||||
often moved to the next milestones.
|
||||
|
||||
|
||||
### Type Annotations
|
||||
### Pull Request Check List
|
||||
|
||||
* All functions and parameters must be type annotated, and so must variables and attributes if the
|
||||
type cannot be inferred from the initial value. Typing rules are set in `pyproject.toml` and a
|
||||
pull request must pass `pyright` with these settings.
|
||||
* Do not use the `Any` type when an actual type exists. `Any` is allowed for functions that
|
||||
actually handles any kind of input and returns a standard type.
|
||||
* Do not use deprecated capitalised annotations like `Dict`, `List`, `Tuple`, etc.
|
||||
* Type annotated code must be runnable on all supported Python versions.
|
||||
Make sure the pull request follows these rules:
|
||||
|
||||
* The `main` branch is the default branch. For general changes, please make a new branch in your
|
||||
own fork from the current `main` branch. Do not make pull requests from your copy of the `main`
|
||||
branch. The same applies to the `release` branch.
|
||||
* Please provide a description of the changes in the pull request under the summary section of the
|
||||
pull request template, and reference any related issues by providing the issue number. Do not
|
||||
post links to issue numbers as that breaks the integration. Stating the issue number on the form
|
||||
`Closes #1234` is enough.
|
||||
* Do not change the version number. This is done during the release process.
|
||||
* Make sure the formatting and linting tools have been run locally before the pull request is made.
|
||||
|
||||
|
||||
## Code Style
|
||||
|
||||
This code base uses camelCase convention for function and variable names. This differs from the
|
||||
common convention of snake_case in Python. The reason for this is that UmbraEdit is built on the
|
||||
Qt framework, where everything is camelCase.
|
||||
|
||||
Pretty much everything else regarding formatting is handled by the linter and formatter. This
|
||||
project uses [ruff](https://docs.astral.sh/ruff/) for linting and formatting and
|
||||
[pyright](https://github.com/microsoft/pyright) for type checking. The settings for these tools
|
||||
are defined in `pyproject.toml`, and any submitted code must pass the following three commands:
|
||||
|
||||
```bash
|
||||
uv run ruff check
|
||||
uv run ruff format
|
||||
uv run pyright
|
||||
```
|
||||
|
||||
### Line Length
|
||||
|
||||
* The line length of the source code is enforced by the formatter, and is set to 120 characters.
|
||||
Docstrings should be wrapped manually at 79 characters for better readability.
|
||||
* For text files, the text should be wrapped 120 character or less. The exception is Markdown image
|
||||
tags and URLs which can run past that limit.
|
||||
|
||||
|
||||
### Internationalisation
|
||||
|
||||
* All comments and docstrings in the code must be in English.
|
||||
* All text presented to the user must be wrapped in calls to Qt's translation framework, and the
|
||||
spelling of this text *must* be UK English. US English spelling is not allowed for these strings.
|
||||
spelling of this text **must** be British English. US English spelling **is not allowed** for
|
||||
these strings. A US English translation is provided via the translation framework.
|
||||
* Commit descriptions and pull requests must also be in English.
|
||||
|
||||
|
||||
### Line Length
|
||||
### License Headers and Credits
|
||||
|
||||
* Source code lines can extend to the upper limit of 99 characters. Generally, if a code statement
|
||||
requires multiple lines, the lines should wrap at 79 characters if possible. If wrapping can be
|
||||
avoided by going to 99, then that is generally preferable. Readability has priority.
|
||||
* For text files, the text should be wrapped at 99 character. The exception is Markdown image tags
|
||||
and URLs which can run past that limit.
|
||||
All code should add the license header on the exact format as used in other files. Update the title
|
||||
as needed, and the copyright line. The year should be the year the code module was first created.
|
||||
The default is:
|
||||
|
||||
```
|
||||
Copyright (C) <YEAR> <Original Author Name> and UmbraEdit contributors.
|
||||
```
|
||||
|
||||
### Spaces, Indentation and Alignment
|
||||
For major changes to an existing file, don't touch the year, but you can append your name. By major
|
||||
contributions is meant new code, like added new classes or larger functions, not modifications. Use
|
||||
common sense since "UmbraEdit contributors" includes most modifications and changes.
|
||||
|
||||
* Only indentation by multiples of 4 spaces is allowed.
|
||||
* No trailing spaces should occur on any line in the source code, including empty lines.
|
||||
* Common line wrapping methods are allowed in the code except `\`, but avoid deep indentations.
|
||||
* Aligning operators and attributes in columns with multiple spaces is not allowed by PEP8. The
|
||||
rule is relaxed a bit here. Alignment is allowed when populating large dictionaries or setting
|
||||
many class attributes. It does improve readability in such cases, but should not be overused.
|
||||
```
|
||||
Copyright (C) <YEAR> <Original Author Name>, <Your Name> and UmbraEdit contributors.
|
||||
```
|
||||
|
||||
|
||||
### General Code Rules
|
||||
|
||||
* Use f-string style for string formatting as the first choice, and `.format` functions if there is
|
||||
a good reason for it. Do not use `%` style formatting except for logging output. For logging, `%`
|
||||
must be used (it's a limitation in the logging library unfortunately).
|
||||
* Functions should be on camelCase form for consistency with the Qt library code. This also goes
|
||||
for variable names for the sake of internal consistency.
|
||||
Make sure the `CREDITS.md` and `credits_en.htm` files are updated too if appropriate.
|
||||
|
||||
40
CREDITS.md
@@ -1,9 +1,13 @@
|
||||
# Credits
|
||||
|
||||
## Main Developer
|
||||
## Main Developer novelWriter
|
||||
|
||||
* Veronica Berglyd Olsen
|
||||
|
||||
## Main Product Manager / Developer
|
||||
|
||||
* B.D. Murphy
|
||||
|
||||
## Contributors
|
||||
|
||||
Larger contributions were made by:
|
||||
@@ -12,18 +16,21 @@ Larger contributions were made by:
|
||||
* Internationalisation: Bruno Meneguello
|
||||
* Setup and Packaging: Rachel Powers
|
||||
* Vim Mode: Alexis Dumelie
|
||||
* UmbraEdit Rebranding and Word DOCX/DOCM Import: B.D. Murphy
|
||||
|
||||
For other contributions, see the project's [Contributors](https://github.com/vkbo/novelWriter/graphs/contributors) page.
|
||||
For other contributions, see the project's [Contributors](https://github.com/saga-soft/UmbraEdit/graphs/contributors) page.
|
||||
|
||||
## Artwork
|
||||
|
||||
The artwork on the Welcome dialog was created by Louis Durrant.
|
||||
The artwork on the Welcome dialog was generated with AI by B.D. Murphy. Reading print options through time.
|
||||
UmbraEdit icon by B.D. Murphy using AI.
|
||||
|
||||
## Translations
|
||||
|
||||
The default language is English (UK) with English (US) as an option. These are the original
|
||||
translators for the languages currently available:
|
||||
|
||||
* **Catalan:** Jaume Planas (jaumeplanas)
|
||||
* **Czech:** Tomáš Zmek (perteus)
|
||||
* **Dutch:** Martijn van der Kleijn (mvdkleijn)
|
||||
* **French:** Jan Lüdke (jyhelle)
|
||||
@@ -39,6 +46,7 @@ translators for the languages currently available:
|
||||
|
||||
Additional larger translation contributions:
|
||||
|
||||
* **Dutch:** Lise Blok (risingphoenix73)
|
||||
* **French:** Albert Aribaud (aaribaud)
|
||||
* **Portuguese:** Oli Maia (olimaia)
|
||||
|
||||
@@ -46,12 +54,11 @@ Translations of the documentation:
|
||||
|
||||
* **French:** Jean-Michel Heras (Karduin)
|
||||
|
||||
Translations are managed on [Crowdin](https://crowdin.com/project/novelwriter), and more
|
||||
contributions are listed on the project's Members page.
|
||||
After the fork to UmbraEdit translations of text in the program are done via AI.
|
||||
|
||||
## Libraries
|
||||
|
||||
The following libraries are dependencies of novelWriter:
|
||||
The following libraries are dependencies of UmbraEdit:
|
||||
|
||||
* **Qt6** by Qt Company
|
||||
* **PyQt6** by Riverbank Computing
|
||||
@@ -60,20 +67,15 @@ The following libraries are dependencies of novelWriter:
|
||||
|
||||
## Icon Themes
|
||||
|
||||
The default icon theme is a subset of icons from:
|
||||
The default icon themes are subsets of icons from:
|
||||
|
||||
* **Material Symbols** by Google Inc (Apache 2.0)
|
||||
|
||||
Additional icon themes may or may not be bundled with novelWriter, depending on license
|
||||
constraints. These themes include a subset of icons from:
|
||||
|
||||
* **Font Awesome** by Fonticons Inc (CC BY 4.0)
|
||||
* **Remix** by RemixIcon (Apache 2.0 w/non-free clause)
|
||||
* **Fluent UI** by Microsoft (MIT License)
|
||||
* **Lucide** by Cole Bemis and Lucide Contributors (ISC License)
|
||||
* **Material Symbols** by Google Inc (Apache 2.0)
|
||||
|
||||
## Colour Themes
|
||||
|
||||
Colour themes included with novelWriter were adapted from the following sources:
|
||||
Colour themes included with UmbraEdit were adapted from the following sources:
|
||||
|
||||
* **Aura** themes by Dalton Menezes
|
||||
* **B2T** themes by Bram de Haan
|
||||
@@ -94,7 +96,7 @@ Colour themes included with novelWriter were adapted from the following sources:
|
||||
* **Tango** themes by the Tango Desktop Project
|
||||
* **Tomorrow** themes by Chris Kempson
|
||||
|
||||
Other themes were created for novelWriter:
|
||||
Other themes were created for UmbraEdit:
|
||||
|
||||
* **Aura Bright** theme by Myian
|
||||
* **Blue Streak** themes by Veronica Berglyd Olsen
|
||||
@@ -102,7 +104,9 @@ Other themes were created for novelWriter:
|
||||
* **Chalky Soil** theme by Myian
|
||||
* **Chernozem** theme by Myian
|
||||
* **Cyberpunk Night** theme by Anders Lemvigh
|
||||
* **Dark Arts** theme by Myian
|
||||
* **Floral** themes by Myian
|
||||
* **Friendly** themes by Myian
|
||||
* **Full Moon** theme by Myian
|
||||
* **Jewel Case** themes by Myian
|
||||
* **LCARS** theme by Veronica Berglyd Olsen
|
||||
@@ -120,10 +124,12 @@ Other themes were created for novelWriter:
|
||||
|
||||
## Fonts
|
||||
|
||||
The font used for the main novelWriter logo, mimetype and text banners is Pridi.
|
||||
The font used for the main UmbraEdit logo, mimetype and text banners is Pridi.
|
||||
|
||||
* **Pridi** by Cadson Demak (Open Font License, Version 1.1)
|
||||
|
||||
--> Caladea <--
|
||||
|
||||
## Special Mentions
|
||||
|
||||
Additional thanks to John Blommers who was an early user and who has provided a lot of very useful
|
||||
|
||||
28
MANIFEST.in
@@ -1,6 +1,28 @@
|
||||
include pkgutils.py
|
||||
include README.md
|
||||
include LICENSE.md
|
||||
include CONTRIBUTING.md
|
||||
include CREDITS.md
|
||||
include CHANGELOG.md
|
||||
recursive-include novelwriter/assets *
|
||||
recursive-include setup *
|
||||
include AI_POLICY.md
|
||||
include pyproject.toml
|
||||
include UmbraEdit.py
|
||||
include pkgutils.py
|
||||
include run_tests.py
|
||||
include build-linux.sh
|
||||
|
||||
include setup/macos/*
|
||||
include setup/windows/*
|
||||
include setup/linux/*
|
||||
include setup/flatpak/*
|
||||
include setup/data/*
|
||||
include setup/appimage_launcher.sh
|
||||
|
||||
include utils/*.py
|
||||
include utils/build_*.py
|
||||
|
||||
recursive-include docs *
|
||||
recursive-include i18n *
|
||||
recursive-exclude *.pyc
|
||||
recursive-exclude __pycache__
|
||||
global-exclude .DS_Store
|
||||
global-exclude .gitkeep
|
||||
|
||||
BIN
NW_Splash.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
91
README.md
@@ -1,86 +1,73 @@
|
||||
# novelWriter
|
||||
# UmbraEdit
|
||||
|
||||
[](https://github.com/vkbo/novelWriter/actions/workflows/test_linux.yml)
|
||||
[](https://github.com/vkbo/novelWriter/actions/workflows/test_win.yml)
|
||||
[](https://github.com/vkbo/novelWriter/actions/workflows/test_mac.yml)
|
||||
[](https://github.com/vkbo/novelWriter/actions/workflows/syntax.yml)
|
||||
[](https://codecov.io/gh/vkbo/novelWriter)
|
||||
[](https://pdm-project.org)
|
||||
<img align="left" style="margin: 0 0 4px 0;" src="https://git.umbratools.com/umbragit/UmbraEdit/raw/main/umbraedit/assets/icons/umbraedit.svg">
|
||||
|
||||
<img align="left" style="margin: 0 0 4px 0;" src="https://raw.githubusercontent.com/vkbo/novelWriter/main/setup/novelwriter_readme.png">
|
||||
|
||||
novelWriter is a plain text editor designed for writing novels assembled from many smaller text
|
||||
UmbraEdit is a plain text editor designed for writing novels assembled from many smaller text
|
||||
documents. It uses a minimal formatting syntax inspired by Markdown, and adds a meta data syntax
|
||||
for comments, synopsis, and cross-referencing. It's designed to be a simple text editor that allows
|
||||
for easy organisation of text and notes, using human readable text files as storage for robustness.
|
||||
The project format is well suited both for version control software and file synchronisation tools.
|
||||
|
||||
For more details, and how to install and use novelWriter, please see the main website and
|
||||
documentation.
|
||||
UmbraEdit is based on novelWrite 2026.02 by Veronica Berglyd Olsen (novelWriter.io) and is
|
||||
licensed under the same GPL v3.0 license.
|
||||
|
||||
B.D. Murphy is modifying the original using AI to make it part of his Umbratools publishing system.
|
||||
|
||||
The ideas:
|
||||
|
||||
1) Write the novel. Make it simple while writing. Formatting is later.
|
||||
2) Have the entire project together. Not the novel text here and metadata you need somewhere else. All together. 2.a) ePub, paperback (print pdf), audio all start with the same story text, but each needs something different. Put everything into one project ISBN, book blurb, search terms, genere/categories BISAC codes, cover, etc
|
||||
3) With everything together publishing is simpler
|
||||
4) The goal is to write (human written) a novel, then use AI to help with everything else. At the end of the process there will be ePub, Paperback/Hard cover, audio versions in 10 languages.
|
||||
|
||||
For more details, and how to install and use UmbraEdit, please see the main website and documentation.
|
||||
|
||||
This project is a fork of novelWrite. Taking the great start and extending it. I use AI to help.
|
||||
|
||||
**Project Links**
|
||||
|
||||
* Website: [novelwriter.io](https://novelwriter.io)
|
||||
* Documentation: [docs.novelwriter.io](https://docs.novelwriter.io)
|
||||
* Internationalisation: [crowdin.com/project/novelwriter](https://crowdin.com/project/novelwriter)
|
||||
* PyPi Project: [pypi.org/project/novelWriter](https://pypi.org/project/novelWriter)
|
||||
* Social Media: [fosstodon.org/@novelwriter](https://fosstodon.org/@novelwriter)
|
||||
|
||||
_This project is developed with care, and is 100% free of AI slop._
|
||||
|
||||
## Sponsors
|
||||
|
||||
<table style="border: none;">
|
||||
<tr>
|
||||
<td><img align="left" style="height: 25px;" src="https://raw.githubusercontent.com/vkbo/novelWriter/main/setup/signpath_logo.png"></td>
|
||||
<td>Free code signing on Windows provided by <a href="https://about.signpath.io/">SignPath.io</a>, certificate by <a href="https://signpath.org/">SignPath Foundation</a>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
* Website: [UmbraEdit](https://umbratools.com/umbraedit)
|
||||
* Documentation: [UmbraEdit Docs](https://umbratools.com/umbraedit/docs)
|
||||
|
||||
This project is a fork of novelWrite. Taking the great start and extending it. I use AI to help._
|
||||
|
||||
## Implementation
|
||||
|
||||
novelWriter is written in Python and uses Qt6 with PyQt6 Python binding as the UI framework. It is
|
||||
released on Linux, Windows and MacOS. It can in principle run on any Operating System that also
|
||||
UmbraEdit is written in Python and uses Qt6 with PyQt6 Python binding as the UI framework. It
|
||||
runs on Linux, Windows and MacOS. It can in principle run on any Operating System that also
|
||||
supports Qt, PyQt and Python.
|
||||
|
||||
<p align="center">
|
||||
<img width="80%" src="https://raw.githubusercontent.com/vkbo/novelWriter/main/setup/screenshot.png">
|
||||
<img width="80%" src="https://raw.githubusercontent.com/saga-soft/UmbraEdit/main/setup/screenshot.png">
|
||||
</p>
|
||||
|
||||
|
||||
## Project Contributions
|
||||
|
||||
Please don't make feature pull requests without first having discussed them with the maintainer.
|
||||
You can make a feature request in the [issues tracker](https://github.com/vkbo/novelWriter/issues),
|
||||
or if the idea isn't fully formed, start a [discussion](https://github.com/vkbo/novelWriter/discussions).
|
||||
You can make a feature request in the [issues tracker](https://github.com/saga-soft/UmbraEdit/issues),
|
||||
or if the idea isn't fully formed, start a [discussion](https://github.com/saga-soft/UmbraEdit/discussions).
|
||||
Please also don't make pull requests to reformat or rewrite existing code unless there is a very
|
||||
good reason for doing so. Please do not submit AI generated content.
|
||||
See our [AI Policy](https://github.com/saga-soft/UmbraEdit/blob/main/AI_POLICY.md) for details.
|
||||
|
||||
Fixes and patches are welcome. Contributions related to packaging and installing novelWriter will
|
||||
also be appreciated, but please make an issue or a discussion topic first. Before contributing any
|
||||
code, please also read the full
|
||||
[Contributing Guide](https://github.com/vkbo/novelWriter/blob/main/CONTRIBUTING.md).
|
||||
Fixes and patches are welcome. Contributions related to packaging and installing UmbraEdit will
|
||||
also be appreciated. Before contributing any code, please read the full
|
||||
[Contributing Guide](https://github.com/saga-soft/UmbraEdit/blob/main/CONTRIBUTING.md).
|
||||
|
||||
Project credits are available in [CREDITS.md](https://github.com/vkbo/novelWriter/blob/main/CREDITS.md).
|
||||
## Original Credits
|
||||
|
||||
**Note:** New features and pre-releases are made on the `main` branch. Full releases are made from
|
||||
the `release` branch. So if you're submitting a fix to a current release, **including changes to
|
||||
documentation**, they must be made to the `release` branch.
|
||||
Project credits are available in [CREDITS.md](https://github.com/saga-soft/novelwriter/blob/main/CREDITS.md).
|
||||
|
||||
|
||||
### Translations
|
||||
|
||||
New translations are always welcome. This project uses Crowdin to maintain translations, and you
|
||||
can contribute translations at the [Crowdin project page](https://crowdin.com/project/novelwriter).
|
||||
If you have any questions, feel free to post them to the
|
||||
[Translations of novelWriter](https://github.com/vkbo/novelWriter/issues/93) issue thread.
|
||||
**Note:** New features and most pre-releases are made on the `main` branch. Full releases are made
|
||||
from the `release` branch. So if you're submitting a fix to a current release, **including changes
|
||||
to documentation**, they must be made to the `release` branch.
|
||||
|
||||
|
||||
## Licence
|
||||
|
||||
This is Open Source software, and novelWriter is licenced under GPLv3. See the
|
||||
This is Open Source software, and UmbraEdit is licensed under GPLv3. See the
|
||||
[GNU General Public License website](https://www.gnu.org/licenses/gpl-3.0.en.html) for more
|
||||
details, or consult the [License](https://github.com/vkbo/novelWriter/blob/main/LICENSE.md)
|
||||
document. Bundled assets and their licences are listed in the
|
||||
[Credits](https://github.com/vkbo/novelWriter/blob/main/CREDITS.md) document.
|
||||
details, or consult the [License](https://github.com/saga-soft/UmbraEdit/blob/main/LICENSE.md)
|
||||
document. Bundled assets and their licenses are listed in the
|
||||
[Credits](https://github.com/saga-soft/UmbraEdit/blob/main/CREDITS.md) document.
|
||||
|
||||
157
RELEASE.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# UmbraEdit - Release Process
|
||||
|
||||
This document describes the release process for UmbraEdit, including versioning,
|
||||
platform support, build workflows, and publishing.
|
||||
|
||||
## Versioning
|
||||
|
||||
UmbraEdit uses a **YYYY/MM.P####** versioning scheme:
|
||||
|
||||
| Component | Meaning |
|
||||
|-----------|---------|
|
||||
| `YYYY` | Release year (e.g., 2026) |
|
||||
| `MM` | Release month (e.g., 11) |
|
||||
| `####` | Patch/build sequence (e.g., 0001) |
|
||||
|
||||
Examples:
|
||||
- `2026.11` - Major monthly release (November 2026)
|
||||
- `2026.11.0001` - First development build of November 2026
|
||||
- `2026.11.0002` - Second development build (e.g., new feature)
|
||||
|
||||
Git tags follow the format: `v2026.11`, `v2026.11.0001`, etc.
|
||||
|
||||
## Supported Platforms
|
||||
|
||||
| Platform | Architecture | Package Format | Build Host |
|
||||
|----------|-------------|----------------|------------|
|
||||
| Linux | amd64 | .deb, .rpm, AppImage | Linux |
|
||||
| Linux | arm64 | .deb, .rpm, AppImage | Linux (ARM64) |
|
||||
| macOS | arm64 | .dmg, .app | macOS (Apple Silicon) |
|
||||
| macOS | amd64 | .dmg, .app | macOS (Intel) |
|
||||
| Windows | amd64 | .msi, .exe | Windows |
|
||||
| Windows | arm64 | .msi, .exe | Windows (ARM64) |
|
||||
| iOS/iPadOS | arm64 | **NOT SUPPORTED** | N/A |
|
||||
|
||||
### iOS/iPadOS Support
|
||||
|
||||
UmbraEdit is **not available for iOS/iPadOS**. PyQt6 does not support iOS,
|
||||
and UmbraEdit requires a full desktop Qt environment with keyboard, mouse,
|
||||
and file system access. Porting to iOS would require a complete rewrite
|
||||
using SwiftUI or a different cross-platform framework.
|
||||
|
||||
Users on iPad should use UmbraEdit via a VNC/remote desktop connection to a
|
||||
desktop machine running UmbraEdit, or use a compatible web-based alternative.
|
||||
|
||||
## Release Workflow
|
||||
|
||||
### 1. Prepare Release
|
||||
|
||||
```bash
|
||||
# Ensure working tree is clean
|
||||
git status
|
||||
|
||||
# Update version in umbraedit/__init__.py
|
||||
# __version__ = "2026.12.0001"
|
||||
|
||||
# Update CHANGELOG.md with new release entry
|
||||
|
||||
# Commit and tag
|
||||
git add -A
|
||||
git commit -m "release: prepare v2026.12"
|
||||
git tag -a v2026.12 -m "Release v2026.12"
|
||||
git push origin main --tags
|
||||
```
|
||||
|
||||
### 2. Build All Platforms
|
||||
|
||||
On each target platform, run:
|
||||
|
||||
```bash
|
||||
# Clone the tagged release
|
||||
git clone https://git.umbratools.com/umbragit/UmbraEdit.git
|
||||
cd UmbraEdit
|
||||
git checkout v2026.12
|
||||
|
||||
# Build all packages for this platform
|
||||
python utils/build_all.py --platform <platform> --arch <arch>
|
||||
```
|
||||
|
||||
Available platforms: `linux`, `macos`, `windows`
|
||||
Available architectures: `amd64`, `arm64`
|
||||
|
||||
### 3. Publish
|
||||
|
||||
Upload all build artifacts to the release server:
|
||||
|
||||
```bash
|
||||
# Example: upload to Gitea releases
|
||||
# Files to upload:
|
||||
# Linux: dist_deb/umbraedit_*.deb, dist_appimage/*.AppImage
|
||||
# macOS: dist_macos/umbraedit-*.dmg
|
||||
# Windows: dist_win/umbraedit-*.exe, dist_win/umbraedit-*.msi
|
||||
# Source: dist/umbraedit-*.tar.gz, dist/umbraedit-*.whl
|
||||
```
|
||||
|
||||
Create a release on Gitea/GitHub and attach all artifacts.
|
||||
|
||||
## Build Artifacts
|
||||
|
||||
Each platform produces the following artifacts:
|
||||
|
||||
### Linux (.deb + AppImage)
|
||||
|
||||
| File | Location | Description |
|
||||
|------|----------|-------------|
|
||||
| `umbraedit_<version>_amd64.deb` | `dist_deb/` | Debian package |
|
||||
| `umbraedit-<version>-amd64.AppImage` | `dist_appimage/` | Portable AppImage |
|
||||
|
||||
### macOS (.dmg + .app)
|
||||
|
||||
| File | Location | Description |
|
||||
|------|----------|-------------|
|
||||
| `umbraedit-<version>-arm64.dmg` | `dist_macos/` | macOS disk image |
|
||||
| `UmbraEdit.app` | inside .dmg | macOS application bundle |
|
||||
|
||||
### Windows (.exe + .msi)
|
||||
|
||||
| File | Location | Description |
|
||||
|------|----------|-------------|
|
||||
| `umbraedit-<version>-amd64.exe` | `dist_win/` | Windows installer |
|
||||
| `umbraedit-<version>-amd64.msi` | `dist_win/` | Windows MSI installer |
|
||||
|
||||
### Source
|
||||
|
||||
| File | Location | Description |
|
||||
|------|----------|-------------|
|
||||
| `umbraedit-<version>.tar.gz` | `dist/` | Source tarball |
|
||||
| `umbraedit-<version>-py3-none-any.whl` | `dist/` | Pure Python wheel |
|
||||
|
||||
## Build Scripts
|
||||
|
||||
| Script | Purpose |
|
||||
|--------|---------|
|
||||
| `utils/build_all.py` | Unified build orchestrator for all platforms |
|
||||
| `utils/build_debian.py` | Debian/Ubuntu .deb package builder |
|
||||
| `utils/build_appimage.py` | AppImage builder |
|
||||
| `utils/build_windows.py` | Windows installer builder |
|
||||
| `setup/macos/build.sh` | macOS .dmg builder |
|
||||
|
||||
## Release Checklist
|
||||
|
||||
- [ ] Update version in `umbraedit/__init__.py`
|
||||
- [ ] Update `CHANGELOG.md` with release notes
|
||||
- [ ] Tag release: `git tag -a vYYYY.MM -m "Release vYYYY.MM"`
|
||||
- [ ] Push tag: `git push origin vYYYY.MM`
|
||||
- [ ] Build packages for all platforms
|
||||
- [ ] Test installation on each platform
|
||||
- [ ] Create release on Gitea/GitHub
|
||||
- [ ] Attach all build artifacts
|
||||
- [ ] Publish release notes
|
||||
- [ ] Announce release
|
||||
|
||||
## Credits
|
||||
|
||||
UmbraEdit is based on novelWrite 2026.02 by Veronica Berglyd Olsen
|
||||
(novelWriter.io), licenced under the same GPL v3.0 license.
|
||||
|
||||
Current development lead: B.D. Murphy
|
||||
213
UMBRAEDIT.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# UmbraEdit — Project Scan & Structure
|
||||
|
||||
Copyright (C) 2026 B.D. Murphy and novelWriter contributors.
|
||||
Documentation for the UmbraEdit project (renamed from novelWriter).
|
||||
|
||||
This document is a structural scan of the **UmbraEdit** codebase. It is intended for developers who want to modify or extend the project.
|
||||
|
||||
> UmbraEdit was created by cloning **novelWriter** (vkbo/saga-soft) into this folder and renaming the project to `UmbraEdit`. The full upstream git history is preserved (see §6).
|
||||
|
||||
---
|
||||
|
||||
## 1. Overview
|
||||
|
||||
| Property | Value |
|
||||
|---|---|
|
||||
| **Project name** | UmbraEdit |
|
||||
| **Origin** | Renamed/rebased from [novelWriter](https://github.com/vkbo/novelWriter) (vkbo / saga-soft) |
|
||||
| **Inherited version** | 26.3b1 (novelWriter v26 series; see `umbraedit/__init__.py`) |
|
||||
| **Base version** | Based on novelWrite 2026.02 by Veronica Berglyd Olsen (novelWriter.io), GPL v3.0 |
|
||||
| **Language** | Python 3.11+ |
|
||||
| **UI framework** | Qt6 via PyQt6 |
|
||||
| **Platforms** | Linux, Windows, macOS |
|
||||
| **Storage model** | Plain-text project files (one document per scene + a project XML), well suited to Git and file-sync tools |
|
||||
| **Formatting** | Minimal Markdown-like syntax plus a metadata syntax for comments, synopsis, and cross-references |
|
||||
| **License** | `GPL-3.0-or-later AND Apache-2.0 AND ISC AND MIT` (see `pyproject.toml`, `LICENSE.md`) |
|
||||
| **Entry point** | `UmbraEdit.py` → `umbraedit:main()` |
|
||||
|
||||
**Core idea:** a novel is built from many small plain-text documents organised in a binder/tree, with a composing editor and a compile/export step (DOCX, EPUB, HTML, ODT, Markdown, raw text, QDoc).
|
||||
|
||||
---
|
||||
|
||||
## 2. Repository layout (top level)
|
||||
|
||||
```
|
||||
UmbraEdit/ <- this folder (was novelWriter2)
|
||||
├── UmbraEdit.py <- application start script (imports umbraedit, calls main)
|
||||
├── pyproject.toml <- project metadata, dependencies, ruff/pytest config
|
||||
├── uv.lock <- dependency lockfile (regenerate if deps change)
|
||||
├── run_tests.py <- pytest runner wrapper
|
||||
├── pkgutils.py <- packaging / i18n utility script
|
||||
├── README.md <- user-facing project page (mechanically renamed to UmbraEdit)
|
||||
├── LICENSE.md
|
||||
├── CHANGELOG.md <- historical novelWriter changelog (retains original attribution)
|
||||
├── CONTRIBUTING.md
|
||||
├── CREDITS.md
|
||||
├── AI_POLICY.md
|
||||
├── .gitignore
|
||||
├── .env.example
|
||||
├── docs/ <- Sphinx documentation source
|
||||
├── i18n/ <- Qt translation sources (ue_XX.ts) — compiled .qm are gitignored
|
||||
├── sample/ <- sample novel project (.nwx + content)
|
||||
├── setup/ <- packaging: deb, windows, flatpak, macOS, appimage, icons
|
||||
├── tests/ <- pytest suite (core, editor, gui, manuscript, models, story, text, tools, …)
|
||||
├── umbraedit/ <- main Python package (was novelwriter/)
|
||||
└── utils/ <- build scripts (appimage, debian, flatpak, pypi, windows, assets, docs)
|
||||
```
|
||||
|
||||
**Note:** `AGENTS.md` is gitignored by this project (`.gitignore` line 68). This scan lives in `UMBRAEDIT.md` instead.
|
||||
|
||||
---
|
||||
|
||||
## 3. Package layout — `umbraedit/`
|
||||
|
||||
| Module / package | Responsibility |
|
||||
|---|---|
|
||||
| `__init__.py` | Application bootstrap, `__version__`, `main()` entry |
|
||||
| `config.py` | Runtime configuration, paths, locale/i18n loading (`_ueLangPath`) |
|
||||
| `constants.py` | Application-wide constants |
|
||||
| `shared.py` | Shared data / singleton state |
|
||||
| `enum.py`, `types.py`, `error.py` | Enums, shared types, error handling |
|
||||
| `splash.py` | Splash screen |
|
||||
| `guimain.py` | Main window / GUI assembly |
|
||||
| `core/` | Project model: project, projectdata, projectxml, tree, item, document, storage, sessions, index, indexdata, projectsearch, spellcheck, status, options, coretools |
|
||||
| `editor/` | The composing editor: editor, editordocument, highlighter, history, hovercard, header/footer, toolbars, viewer, search, completion, vim mode |
|
||||
| `gui/` | Widgets/views: main menu, novel tree, project tree, sidebar, status bar, item details, search, theme |
|
||||
| `manuscript/` | Compile/export: manuscript build, document build, settings |
|
||||
| `models/` | Qt item models: item, novel, outline, search |
|
||||
| `story/` | Outline/story view, story settings |
|
||||
| `text/` | Text processing: counting, patterns, formats, autoreplace |
|
||||
| `tools/` | Dictionaries, lorem ipsum, welcome, writing stats |
|
||||
| `formats/` | Import/export filters: to/from DOCX, EPUB, HTML, ODT, Markdown, QDoc, raw text, TOML, QDoc |
|
||||
| `dialogs/` | Preferences, project settings, about, split/merge, labels, links, quotes, word list |
|
||||
| `extensions/` | Custom widgets: tab widget, switch, progress bars, event filters, etc. |
|
||||
| `assets/` | Icons, images, themes (`.toml`), i18n project JSON, manual, credits |
|
||||
|
||||
---
|
||||
|
||||
## 4. How to build and run
|
||||
|
||||
### Requirements
|
||||
- Python ≥ 3.11 (system Python 3.9.6 is **too old** — `match`/`case` syntax requires 3.10+)
|
||||
- `pyqt6>=6.4`, `pyenchant>=3.3.0`
|
||||
- macOS only: `pyobjc-framework-Cocoa`
|
||||
|
||||
### Run the application
|
||||
```bash
|
||||
cd /Volumes/1TB_APL_Storage/UmbraEdit
|
||||
python3 UmbraEdit.py
|
||||
# or, with the package on PYTHONPATH:
|
||||
python3 -c "import umbraedit; umbraedit.main()"
|
||||
```
|
||||
|
||||
### Syntax check (Python 3.11+)
|
||||
```bash
|
||||
/Volumes/Dock/worstauthor/.local/bin/python3.11 -m py_compile umbraedit/*.py umbraedit/**/*.py
|
||||
```
|
||||
|
||||
### Tests
|
||||
```bash
|
||||
python3 run_tests.py # full pytest suite
|
||||
python3 run_tests.py -m core # run a test marker group
|
||||
```
|
||||
Test configuration lives in `pyproject.toml` (`[tool.pytest.ini_options]`, testpaths=`tests`).
|
||||
|
||||
### Linting
|
||||
The project uses **ruff** (see `[tool.ruff]` in `pyproject.toml`) and **pyright**.
|
||||
|
||||
### Packaging
|
||||
See `setup/` and `utils/`:
|
||||
- `utils/build_debian.py`, `build_windows.py`, `build_flatpak.py`, `build_appimage.py`, `build_pypi.py`
|
||||
- `setup/windows/`, `setup/macos/`, `setup/debian/`, `setup/flatpak/`
|
||||
|
||||
---
|
||||
|
||||
## 5. i18n (translations)
|
||||
|
||||
- Translation sources: `i18n/ue_XX.ts` (renamed from `nw_XX.ts`)
|
||||
- Compiled `.qm` files are **gitignored** (`i18n/*.qm`, `/umbraedit/assets/i18n/*.qm`) and generated at build time
|
||||
- `umbraedit/config.py` loads `ue_<locale>.qm` from `_ueLangPath` (`umbraedit/assets/i18n`)
|
||||
- Add a new language: create `i18n/ue_XX.ts` and regenerate the `.qm` with Qt Linguist / `lrelease`
|
||||
|
||||
---
|
||||
|
||||
## 6. Git system & Gitea publishing
|
||||
|
||||
### Current remote state
|
||||
```
|
||||
upstream https://github.com/vkbo/novelWriter.git (original novelWriter, preserved as reference)
|
||||
```
|
||||
There is **no `origin`** yet.
|
||||
|
||||
### What was done in this session
|
||||
1. Cloned `https://github.com/vkbo/novelWriter.git` into this folder (`novelWriter2`).
|
||||
2. Renamed the project `novelWriter` → `UmbraEdit` (package `novelwriter` → `umbraedit`, entry `novelWriter.py` → `UmbraEdit.py`, i18n `nw_*.ts` → `ue_*.ts`, packaging files, all imports/docs/tests/workflows).
|
||||
3. Committed the rename:
|
||||
- `70d74e675 chore: rename project from novelWriter to UmbraEdit` (474 files, all renames detected by git)
|
||||
4. Archived the previous UmbraEdit (Rust/Tauri, pre-implementation spec project) preserving its git history:
|
||||
- `/Volumes/1TB_APL_Storage/Archive/UmbraEdit_archived_20261105/`
|
||||
5. Working tree is clean; branch is `main`.
|
||||
|
||||
### To publish as UmbraEdit on your Gitea server
|
||||
A Gitea credential is **not** configured in this environment, and the Gitea server URL is not known yet, so `origin` was intentionally left unset. When ready:
|
||||
|
||||
```bash
|
||||
# 1. Create the "UmbraEdit" repository on your Gitea server first
|
||||
# 2. Add it as origin
|
||||
git remote add origin <GITEA_URL>/UmbraEdit.git
|
||||
|
||||
# 3. Push
|
||||
git push -u origin main
|
||||
|
||||
# 4. (Optional) keep pulling upstream novelWriter improvements
|
||||
git fetch upstream
|
||||
git merge upstream/main # or cherry-pick as desired
|
||||
```
|
||||
|
||||
### Project URLs to update
|
||||
`README.md` and `pyproject.toml` currently carry mechanically-renamed GitHub URLs
|
||||
(`https://github.com/saga-soft/UmbraEdit`, etc.). Before publishing, replace these
|
||||
with your Gitee instance URLs, e.g.:
|
||||
- Repository → `https://<gitea>/<owner>/UmbraEdit`
|
||||
- Issues → `https://<gitea>/<owner>/UmbraEdit/issues`
|
||||
- Homepage / Documentation → your UmbraEdit docs site
|
||||
|
||||
---
|
||||
|
||||
## 7. Extension guidance (adding features)
|
||||
|
||||
The codebase is organised by concern, which makes it straightforward to extend:
|
||||
|
||||
| To add… | Touch… |
|
||||
|---|---|
|
||||
| New editor feature / syntax highlighting | `umbraedit/editor/` (editor, highlighter, history) |
|
||||
| New project-tree / binder operation | `umbraedit/core/` (tree, project, projectdata, projectxml) |
|
||||
| New import/export format | `umbraedit/formats/` (add a `toXxx` / `fromXxx` module) |
|
||||
| New settings / preferences UI | `umbraedit/dialogs/preferences.py`, `umbraedit/config.py` |
|
||||
| New view / dock panel | `umbraedit/gui/`, `umbraedit/guimain.py` |
|
||||
| New data model / Qt model | `umbraedit/models/`, `umbraedit/core/item.py` |
|
||||
| New compile/export target | `umbraedit/manuscript/` + a format module |
|
||||
| New theme | `umbraedit/assets/themes/*.toml` |
|
||||
| New translation | `i18n/ue_XX.ts` (§5) |
|
||||
|
||||
### Recommended workflow for new features
|
||||
1. Create a feature branch off `main`: `git checkout -b feature/<name>`
|
||||
2. Implement + add tests under `tests/` mirroring the source layout
|
||||
3. Run `python3 run_tests.py` and `ruff` lint
|
||||
4. Commit on the feature branch, then merge to `main`
|
||||
5. Never let a week of work sit uncommitted (per project convention)
|
||||
|
||||
---
|
||||
|
||||
## 8. Files intentionally left as-is
|
||||
|
||||
| File | Reason |
|
||||
|---|---|
|
||||
| `uv.lock` | Dependency lockfile; still references `novelwriter` — regenerate (`uv lock`) if dependencies change |
|
||||
| `setup/windows/novelWriter.exe` | Binary executable |
|
||||
| `umbraedit/assets/images/welcome.webp` | Binary image (may still render "novelWriter" text) |
|
||||
| `CHANGELOG.md`, `CREDITS.md` | Historical records retaining original novelWriter attribution |
|
||||
|
||||
---
|
||||
|
||||
*Generated as part of the UmbraEdit project setup. Scan date: 2026-11-05.*
|
||||
245
UMBRAEDIT_UPDATE_PLAN.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# UmbraEdit — Toolchain & Dependency Update Plan
|
||||
|
||||
Copyright (C) 2026 B.D. Murphy and novelWriter contributors.
|
||||
Plan for upgrading UmbraEdit (Python/PyQt6) toolchain and dependencies.
|
||||
|
||||
**Goal:** Bring UmbraEdit (Python/PyQt6) up to the latest stable versions of its tools and dependencies, starting from the current baseline.
|
||||
|
||||
**Baseline (as of 2026-11-05):**
|
||||
- System Python: 3.9.6 (`/usr/bin/python3`) — **below** the project's `requires-python >=3.11`
|
||||
- Available runtimes: Python 3.11.15, 3.12.13 (via `uv` in `~/.local/bin`)
|
||||
- `uv`: 0.11.7 (2026-04-15) — outdated
|
||||
- PyQt6: not yet installed in the 3.11 environment
|
||||
- `pyproject.toml` deps: `pyqt6>=6.4`, `pyenchant>=3.3.0`, `pyobjc-framework-Cocoa` (darwin)
|
||||
- Lockfile: `uv.lock` (references `novelwriter` package name — will need regen)
|
||||
|
||||
---
|
||||
|
||||
## 1. Target Versions
|
||||
|
||||
| Tool | Current | Target | Source |
|
||||
|---|---|---|---|
|
||||
| Python runtime | 3.9.6 (system) | 3.12.x (latest 3.12) or 3.13.x | `uv` / python.org |
|
||||
| PyQt6 | not installed | latest 6.x | PyPI |
|
||||
| pyenchant | >=3.3.0 | latest 3.x | PyPI |
|
||||
| pyobjc-framework-Cocoa | pinned by pyproject | latest (macOS only) | PyPI |
|
||||
| uv | 0.11.7 | latest | github.com/astral-sh/uv |
|
||||
| ruff | (in `uv.lock`) | latest | PyPI |
|
||||
| pyright | (in `uv.lock`) | latest | npm/PyPI |
|
||||
| pytest | (in `uv.lock`) | latest 8.x | PyPI |
|
||||
| pytest-qt | (in `uv.lock`) | latest | PyPI |
|
||||
| coverage | (in `uv.lock`) | latest | PyPI |
|
||||
| Sphinx + theme | (in `uv.lock`) | latest | PyPI |
|
||||
| setuptools | 82.0.1 | latest | PyPI |
|
||||
| pip | 26.0.1 | latest | ensure via `uv` |
|
||||
|
||||
> Prefer Python **3.12** as the primary target (mature, PyQt6 wheels widely available). Keep **3.11** as a secondary CI matrix entry since `requires-python` is `>=3.11`.
|
||||
|
||||
---
|
||||
|
||||
## 2. Phased Execution
|
||||
|
||||
### Phase 0 — Preparation & Safety
|
||||
1. Ensure working tree is clean and all changes committed on `main` (already done).
|
||||
2. Tag the current state as a rollback point:
|
||||
```bash
|
||||
git tag umbraedit/pre-toolchain-update
|
||||
git push origin umbraedit/pre-toolchain-update
|
||||
```
|
||||
3. Record current working commands (`python3 UmbraEdit.py`, test runner) so you can compare before/after.
|
||||
4. Back up `uv.lock` and `pyproject.toml`.
|
||||
|
||||
### Phase 1 — Upgrade `uv` and Python runtimes
|
||||
1. Upgrade `uv` itself:
|
||||
```bash
|
||||
uv self upgrade
|
||||
# or: curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
```
|
||||
2. Install the target Python(s) via `uv` (so they are isolated and reproducible):
|
||||
```bash
|
||||
uv python install 3.12
|
||||
uv python install 3.11 # keep for CI matrix
|
||||
uv python list
|
||||
uv python pin 3.12 # sets default for this project (writes .python-version)
|
||||
```
|
||||
3. Verify:
|
||||
```bash
|
||||
uv run python --version # should report 3.12.x
|
||||
```
|
||||
|
||||
### Phase 2 — Upgrade core runtime dependencies
|
||||
Create a fresh virtual environment with the target Python and install the project's runtime deps at their latest compatible versions:
|
||||
|
||||
```bash
|
||||
cd /Volumes/1TB_APL_Storage/UmbraEdit
|
||||
uv venv --python 3.12
|
||||
uv pip install "pyqt6>=6.4" "pyenchant>=3.3.0"
|
||||
# macOS only:
|
||||
uv pip install "pyobjc-framework-Cocoa"
|
||||
```
|
||||
|
||||
Then:
|
||||
1. Run the app to confirm it starts:
|
||||
```bash
|
||||
uv run python UmbraEdit.py
|
||||
# or, after venv activation:
|
||||
python UmbraEdit.py
|
||||
```
|
||||
2. If `pyqt6` wheels fail on the target Python, fall back to 3.11 or file an issue.
|
||||
|
||||
### Phase 3 — Upgrade build / lint / test tooling
|
||||
Update the dependency groups in `pyproject.toml` (`build`, `docs`, `test`, `lint`) to latest, then sync:
|
||||
|
||||
```toml
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
{ include-group = "build" },
|
||||
{ include-group = "docs" },
|
||||
{ include-group = "test" },
|
||||
{ include-group = "lint" },
|
||||
]
|
||||
build = ["pyyaml", "tzdata; sys_platform == 'win32'"]
|
||||
docs = [
|
||||
"docutils>=0.17.1",
|
||||
"pygments>=2.7",
|
||||
"sphinx-book-theme",
|
||||
"sphinx-copybutton",
|
||||
"sphinx-design",
|
||||
"sphinx-favicon",
|
||||
"sphinx-intl",
|
||||
"sphinx>=5.0",
|
||||
]
|
||||
test = [
|
||||
"coverage>=7.16.0",
|
||||
"pytest-qt",
|
||||
"pytest-timeout",
|
||||
"pytest>=6.0.0",
|
||||
"tzdata; sys_platform == 'win32'",
|
||||
]
|
||||
lint = ["pyright", "ruff"]
|
||||
```
|
||||
|
||||
Suggested edits:
|
||||
- Bump `pytest>=6.0.0` → `pytest>=8.0` (check PyPI for latest 8.x)
|
||||
- Bump `coverage>=7.16.0` → latest
|
||||
- Bump `sphinx>=5.0` → latest 7.x/8.x
|
||||
- Keep `ruff` and `pyright` unpinned or with generous lower bounds so `uv lock` resolves latest
|
||||
|
||||
Then sync:
|
||||
```bash
|
||||
uv lock --upgrade # resolve all groups to latest
|
||||
uv sync --all-groups # create .venv with everything
|
||||
```
|
||||
|
||||
### Phase 4 — Regenerate `uv.lock`
|
||||
`uv.lock` currently references the old `novelwriter` package name and is stale.
|
||||
```bash
|
||||
uv lock --upgrade
|
||||
git diff uv.lock # review before committing
|
||||
```
|
||||
Commit the regenerated lockfile with the toolchain update.
|
||||
|
||||
### Phase 5 — Update `requires-python` and classifiers (optional)
|
||||
If you want to drop 3.11 and standardize on 3.12+:
|
||||
```toml
|
||||
requires-python = ">=3.12"
|
||||
```
|
||||
And update classifiers accordingly. Otherwise keep `>=3.11` and test both 3.11 and 3.12 in CI.
|
||||
|
||||
### Phase 6 — Update Gitea CI workflows
|
||||
The `.github/workflows/*.yml` files reference Python setup steps. Update them to:
|
||||
- Use `actions/setup-python` with `python-version: ["3.11", "3.12"]` (or your Gitea Actions equivalent)
|
||||
- Install via `uv sync --all-groups` instead of `pip install -e .`
|
||||
- Run `uv run ruff check`, `uv run pyright`, `uv run pytest`
|
||||
|
||||
If your Gitea instance uses Gitea Actions, mirror the same matrix. If not, update the workflows to call `uv` explicitly.
|
||||
|
||||
### Phase 7 — Packaging scripts review
|
||||
The `utils/` build scripts (`build_appimage.py`, `build_debian.py`, `build_flatpak.py`, `build_pypi.py`, `build_windows.py`) and `setup/` packaging may pin Python/Qt versions. Check each for:
|
||||
- Hardcoded `python3` → should target the new runtime
|
||||
- `qt_version = "6.11"` in `[tool.novelwriter.build] flatpak` → verify against latest Qt6
|
||||
- `pyqt6>=6.4` lower bound → keep or raise
|
||||
|
||||
### Phase 8 — Validation
|
||||
1. **Syntax/compile:** `uv run python -m py_compile umbraedit/ tests/ utils/`
|
||||
2. **Import smoke:** `uv run python -c "import umbraedit; umbraedit.main(['--help'])"`
|
||||
3. **Lint:** `uv run ruff check .` and `uv run pyright`
|
||||
4. **Tests:** `uv run pytest` (or `uv run python run_tests.py`)
|
||||
5. **App launch:** `uv run python UmbraEdit.py` — confirm main window opens
|
||||
6. **Export formats:** exercise DOCX/EPUB/HTML/ODT export paths if sample data exists
|
||||
|
||||
### Phase 9 — Commit & publish
|
||||
```bash
|
||||
git add -A
|
||||
git commit -m "chore: upgrade toolchain to Python 3.12 and latest deps
|
||||
|
||||
- Upgrade uv and pin Python 3.12 via .python-version
|
||||
- Refresh pyproject.toml dependency groups to latest compatible versions
|
||||
- Regenerate uv.lock
|
||||
- Update Gitea CI workflows for uv + Python 3.11/3.12 matrix
|
||||
- Review packaging scripts for hardcoded python/qt versions"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Rollback Plan
|
||||
|
||||
If anything breaks after the update:
|
||||
|
||||
```bash
|
||||
# Restore previous state
|
||||
git checkout umbraedit/pre-toolchain-update .
|
||||
# or reset hard to the tag
|
||||
git reset --hard umbraedit/pre-toolchain-update
|
||||
git push origin main --force # only if already pushed and you need to undo
|
||||
```
|
||||
|
||||
Also keep the old system Python 3.9.6 available (do not remove `/usr/bin/python3`), and keep the `upstream` remote pointing at the original novelWriter for reference.
|
||||
|
||||
---
|
||||
|
||||
## 4. Recommended Command Sequence (copy-paste ready)
|
||||
|
||||
```bash
|
||||
cd /Volumes/1TB_APL_Storage/UmbraEdit
|
||||
|
||||
# 0. Tag rollback point
|
||||
git tag umbraedit/pre-toolchain-update
|
||||
git push origin umbraedit/pre-toolchain-update
|
||||
|
||||
# 1. Upgrade uv and pin Python 3.12
|
||||
uv self upgrade
|
||||
uv python install 3.12
|
||||
uv python pin 3.12
|
||||
uv run python --version
|
||||
|
||||
# 2. Create venv and install runtime deps at latest
|
||||
uv venv --python 3.12
|
||||
uv pip install "pyqt6>=6.4" "pyenchant>=3.3.0"
|
||||
|
||||
# 3. Smoke-test the app
|
||||
uv run python UmbraEdit.py
|
||||
|
||||
# 4. Sync dev toolchains (lint/test/docs)
|
||||
uv sync --all-groups
|
||||
|
||||
# 5. Regenerate lockfile
|
||||
uv lock --upgrade
|
||||
git diff uv.lock | head -100
|
||||
|
||||
# 6. Validate
|
||||
uv run python -m py_compile umbraedit/ tests/ utils/
|
||||
uv run ruff check .
|
||||
uv run pytest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Notes & Risks
|
||||
|
||||
- **PyQt6 on Python 3.13:** Wheels may lag; if 3.13 is required, verify PyQt6 availability first. 3.12 is the safer target.
|
||||
- **`pyobjc-framework-Cocoa`:** macOS-only; only install/test on darwin.
|
||||
- **`uv.lock` diff:** Expect a large diff since the lockfile is stale; review that no unexpected major-version jumps occur (especially PyQt6 6.x → 7.x, which would be breaking).
|
||||
- **CI:** Gitea Actions runners must have `uv` installed, or the workflows must install it as a step.
|
||||
- **Application still runs on Python 3.9.6?** No — `match`/`case` syntax requires 3.10+, and `requires-python` is `>=3.11`. The system 3.9.6 must not be used to run UmbraEdit.
|
||||
12
UmbraEdit.command
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/zsh
|
||||
# UmbraEdit Launcher for macOS
|
||||
# Double-click to launch, or run: ./UmbraEdit.command
|
||||
#
|
||||
# Copyright (C) 2026 B.D. Murphy and novelWriter contributors.
|
||||
# Created: macOS launcher script for UmbraEdit (renamed from novelWriter).
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Use the project's uv-managed Python 3.12 virtual environment
|
||||
export UV_PYTHON_PREFERENCE="only-managed"
|
||||
exec uv run python UmbraEdit.py "$@"
|
||||
BIN
UmbraEdit.jpg
Executable file
|
After Width: | Height: | Size: 736 KiB |
@@ -1,13 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
novelWriter – Start Script
|
||||
UmbraEdit - Start Script
|
||||
==========================
|
||||
""" # noqa
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
os.curdir = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
if __name__ == "__main__":
|
||||
import novelwriter
|
||||
novelwriter.main(sys.argv[1:])
|
||||
import umbraedit
|
||||
|
||||
umbraedit.main(sys.argv[1:])
|
||||
221
build-linux.sh
Executable file
@@ -0,0 +1,221 @@
|
||||
#!/usr/bin/env bash
|
||||
#=============================================================================
|
||||
# UmbraEdit Linux Build Script
|
||||
# ============================================================================
|
||||
# Downloads the UmbraEdit source tarball and builds a .deb package and/or
|
||||
# AppImage for Linux AMD64/ARM64.
|
||||
#
|
||||
# Usage:
|
||||
# chmod +x build-linux.sh
|
||||
# ./build-linux.sh [--arch amd64|arm64] [--distro ubuntu|debian] [--no-deb]
|
||||
#
|
||||
# No git clone required. Downloads the source tarball automatically.
|
||||
#=============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Configuration
|
||||
#-----------------------------------------------------------------------------
|
||||
VERSION="2026.11.5"
|
||||
RELEASE_VERSION="2026.11.0007"
|
||||
GITEA_URL="http://192.168.123.18:2222/umbragit/UmbraEdit"
|
||||
TARBALL_URL="${GITEA_URL}/-/archive/v${RELEASE_VERSION}/umbraedit-${RELEASE_VERSION}.tar.gz"
|
||||
TARBALL="umbraedit-${RELEASE_VERSION}.tar.gz"
|
||||
EXTRACTED_DIR="umbraedit-${RELEASE_VERSION}"
|
||||
|
||||
ARCH="${1:-amd64}"
|
||||
DISTRO="${2:-ubuntu}"
|
||||
BUILD_DEB="${3:-yes}"
|
||||
|
||||
echo "============================================================"
|
||||
echo " UmbraEdit Linux Build Script"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo " Version: ${RELEASE_VERSION}"
|
||||
echo " Architecture: ${ARCH}"
|
||||
echo " Distro: ${DISTRO}"
|
||||
echo " Build .deb: ${BUILD_DEB}"
|
||||
echo ""
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Step 1: Check prerequisites
|
||||
#--------------------------------------------------------------
|
||||
echo "[1/5] Checking prerequisites..."
|
||||
|
||||
MISSING=0
|
||||
for cmd in curl tar python3; do
|
||||
if ! command -v "$cmd" &> /dev/null; then
|
||||
echo " MISSING: $cmd"
|
||||
MISSING=1
|
||||
fi
|
||||
done
|
||||
|
||||
if command -v apt-get &> /dev/null; then
|
||||
PKG_MGR="apt-get"
|
||||
elif command -v dnf &> /dev/null; then
|
||||
PKG_MGR="dnf"
|
||||
elif command -v pacman &> /dev/null; then
|
||||
PKG_MGR="pacman"
|
||||
else
|
||||
PKG_MGR=""
|
||||
fi
|
||||
|
||||
if [ "$PKG_MGR" = "" ]; then
|
||||
echo ""
|
||||
echo "ERROR: No supported package manager found (apt-get, dnf, or pacman)"
|
||||
echo "Please install: python3, python3-pip, python3-pyqt6, python3-enchant,"
|
||||
echo " dh-python, debhelper, python3-build, appimagetool"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " Package manager: $PKG_MGR"
|
||||
echo " Prerequisites OK"
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Step 2: Install system dependencies
|
||||
#--------------------------------------------------------------
|
||||
echo ""
|
||||
echo "[2/5] Installing system dependencies..."
|
||||
|
||||
INSTALL_FAILED=0
|
||||
|
||||
if [ "$PKG_MGR" = "apt-get" ]; then
|
||||
echo " Updating package lists..."
|
||||
if ! sudo apt-get update 2>&1 | tail -5; then
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " ERROR: apt-get update failed!"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo " One of your package repositories is broken (likely a PPA or"
|
||||
echo " third-party repo like NVIDIA's)."
|
||||
echo ""
|
||||
echo " To fix:"
|
||||
echo " 1. Check /etc/apt/sources.list and /etc/apt/sources.list.d/"
|
||||
echo " 2. Remove or disable any repositories that no longer exist"
|
||||
echo " 3. Run: sudo apt-get update"
|
||||
echo " 4. Then re-run this script: ./build-linux.sh"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Installing packages..."
|
||||
install_pkg() {
|
||||
if [ "$PKG_MGR" = "apt-get" ]; then
|
||||
sudo apt-get install -y "$@" 2>&1 | tail -3
|
||||
elif [ "$PKG_MGR" = "dnf" ]; then
|
||||
sudo dnf install -y "$@" 2>&1 | tail -3
|
||||
elif [ "$PKG_MGR" = "pacman" ]; then
|
||||
sudo pacman -Sy --noconfirm "$@" 2>&1 | tail -3
|
||||
fi
|
||||
}
|
||||
|
||||
echo " Installing: python3 python3-pip python3-pyqt6 python3-enchant"
|
||||
install_pkg python3 python3-pip python3-pyqt6 python3-enchant 2>&1 | tail -3 || {
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " ERROR: Failed to install core dependencies"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo " Please install manually and re-run:"
|
||||
echo " sudo apt-get install python3 python3-pip python3-pyqt6 python3-enchant"
|
||||
echo ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo " Installing: dh-python debhelper python3-build appimagetool"
|
||||
install_pkg dh-python debhelper python3-build appimagetool 2>&1 | tail -3 || {
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " WARNING: Some build tools failed to install"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo " You may need to install these manually:"
|
||||
echo " sudo apt-get install dh-python debhelper python3-build appimagetool"
|
||||
echo ""
|
||||
echo " Continuing anyway..."
|
||||
}
|
||||
|
||||
echo " System dependencies installed"
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Step 3: Download source tarball
|
||||
#--------------------------------------------------------------
|
||||
echo ""
|
||||
echo "[3/5] Downloading source tarball..."
|
||||
echo " URL: ${TARBALL_URL}"
|
||||
|
||||
if [ -f "$TARBALL" ]; then
|
||||
echo " Archive already exists, skipping download"
|
||||
else
|
||||
curl -L -o "$TARBALL" "$TARBALL_URL"
|
||||
echo " Downloaded: $(ls -lh "$TARBALL" | awk '{print $5}')"
|
||||
fi
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Step 4: Extract source
|
||||
#--------------------------------------------------------------
|
||||
echo ""
|
||||
echo "[4/5] Extracting source..."
|
||||
|
||||
rm -rf "$EXTRACTED_DIR"
|
||||
tar xzf "$TARBALL"
|
||||
cd "$EXTRACTED_DIR"
|
||||
|
||||
echo " Extracted to: $(pwd)"
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Step 5: Install Python dependencies
|
||||
#--------------------------------------------------------------
|
||||
echo ""
|
||||
echo "[5/5] Installing Python dependencies..."
|
||||
|
||||
python3 -m pip install --user --upgrade pip setuptools wheel 2>&1 | tail -1
|
||||
python3 -m pip install --user pyqt6 pyenchant 2>&1 | tail -1
|
||||
|
||||
echo " Python dependencies installed"
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Step 6: Build packages
|
||||
#--------------------------------------------------------------
|
||||
echo ""
|
||||
echo "[6/6] Building packages..."
|
||||
|
||||
# Build .deb (Debian/Ubuntu only)
|
||||
if [ "$BUILD_DEB" = "yes" ] && [ "$PKG_MGR" = "apt-get" ]; then
|
||||
echo ""
|
||||
echo "Building .deb package..."
|
||||
python3 utils/build_debian.py --distro "$DISTRO" --build 1
|
||||
echo ""
|
||||
echo " .deb package: dist_deb/umbraedit_*_${ARCH}.deb"
|
||||
fi
|
||||
|
||||
# Build AppImage
|
||||
echo ""
|
||||
echo "Building AppImage..."
|
||||
python3 utils/build_appimage.py --linux manylinux_2_28 --arch "$ARCH" --python 3.12
|
||||
echo ""
|
||||
echo " AppImage: dist_appimage/umbraedit-${RELEASE_VERSION}-${ARCH}.AppImage"
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Done
|
||||
#--------------------------------------------------------------
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " Build Complete!"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo "Artifacts:"
|
||||
ls -la dist_deb/ 2>/dev/null || true
|
||||
ls -la dist_appimage/ 2>/dev/null || true
|
||||
echo ""
|
||||
echo "To run UmbraEdit:"
|
||||
echo " From AppImage: chmod +x dist_appimage/umbraedit-${RELEASE_VERSION}-${ARCH}.AppImage"
|
||||
echo " ./dist_appimage/umbraedit-${RELEASE_VERSION}-${ARCH}.AppImage"
|
||||
echo " From .deb: sudo dpkg -i dist_deb/umbraedit_*_${ARCH}.deb && umbraedit"
|
||||
echo ""
|
||||
echo "Source directory: $(pwd)"
|
||||
22
codecov.yml
@@ -1,22 +0,0 @@
|
||||
codecov:
|
||||
require_ci_to_pass: yes
|
||||
|
||||
coverage:
|
||||
precision: 2
|
||||
round: nearest
|
||||
range: "70...95"
|
||||
|
||||
status:
|
||||
project:
|
||||
default:
|
||||
threshold: 1%
|
||||
patch: no
|
||||
changes: no
|
||||
|
||||
parsers:
|
||||
gcov:
|
||||
branch_detection:
|
||||
conditional: yes
|
||||
loop: yes
|
||||
method: no
|
||||
macro: no
|
||||
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
@@ -11,7 +11,7 @@ import time
|
||||
|
||||
# -- Project Information -----------------------------------------------------
|
||||
|
||||
project = "novelWriter"
|
||||
project = "UmbraEdit"
|
||||
copyright = f"{datetime.date.today().year}" # noqa: A001
|
||||
|
||||
if override_authors := os.environ.get("SPHINX_I18N_AUTHORS"):
|
||||
@@ -22,10 +22,7 @@ else:
|
||||
if override_version := os.environ.get("SPHINX_I18N_VERSION"):
|
||||
release = override_version
|
||||
else:
|
||||
initFile = os.path.join(
|
||||
os.path.dirname(__file__), os.pardir, os.pardir,
|
||||
"novelwriter", "__init__.py"
|
||||
)
|
||||
initFile = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "umbraedit", "__init__.py")
|
||||
with open(initFile, encoding="utf-8") as inFile:
|
||||
for aLine in inFile:
|
||||
if aLine.startswith("__version__"):
|
||||
@@ -60,12 +57,12 @@ html_static_path = ["_static"]
|
||||
html_css_files = ["custom.css"]
|
||||
html_theme_options = {
|
||||
"logo": {
|
||||
"image_light": "_static/novelwriter-light.png",
|
||||
"image_dark": "_static/novelwriter-dark.png",
|
||||
"image_light": "_static/umbraedit-light.png",
|
||||
"image_dark": "_static/umbraedit-dark.png",
|
||||
},
|
||||
"show_toc_level": 2,
|
||||
"show_navbar_depth": 1,
|
||||
"repository_url": "https://github.com/vkbo/novelwriter",
|
||||
"repository_url": "https://github.com/saga-soft/umbraedit",
|
||||
"navigation_with_keys": True,
|
||||
"use_repository_button": True,
|
||||
"use_issues_button": True,
|
||||
@@ -81,13 +78,8 @@ html_sidebars = {
|
||||
latex_elements = {
|
||||
"papersize": "a4paper",
|
||||
"pointsize": "11pt",
|
||||
"preamble": (
|
||||
"\\usepackage[utf8]{inputenc}\n"
|
||||
"\\DeclareUnicodeCharacter{2212}{\\textendash}\n"
|
||||
),
|
||||
"preamble": ("\\usepackage[utf8]{inputenc}\n\\DeclareUnicodeCharacter{2212}{\\textendash}\n"),
|
||||
"figure_align": "htbp",
|
||||
}
|
||||
latex_logo = "_static/novelwriter-pdf.png"
|
||||
latex_documents = [(
|
||||
master_doc, "manual.tex", None, author, "manual"
|
||||
)]
|
||||
latex_logo = "_static/umbraedit-pdf.png"
|
||||
latex_documents = [(master_doc, "manual.tex", None, author, "manual")]
|
||||
|
||||
@@ -7,7 +7,7 @@ Dialogue Highlighting
|
||||
Dialogue recognition and colour highlighting is available both while you're writing and in
|
||||
generated manuscript documents.
|
||||
|
||||
The default language settings in novelWriter are for English. That includes the dialogue
|
||||
The default language settings in UmbraEdit are for English. That includes the dialogue
|
||||
highlighting settings. But many dialogue styles are supported. You can tune a number of settings
|
||||
to fit your language and style preferences in the "Text Highlighting" section in **Preferences**.
|
||||
You can mix and match these settings.
|
||||
|
||||
@@ -4,13 +4,18 @@
|
||||
Keyboard Shortcuts
|
||||
******************
|
||||
|
||||
Most features in novelWriter are available as keyboard shortcuts. This is a reference list of those
|
||||
Most features in UmbraEdit are available as keyboard shortcuts. This is a reference list of those
|
||||
shortcuts. Most of them are also listed in the application's user interface.
|
||||
|
||||
.. note::
|
||||
|
||||
On MacOS, replace :kbd:`Ctrl` with :kbd:`Cmd`.
|
||||
|
||||
.. note::
|
||||
|
||||
Shortcuts marked with (*) are remapped when Vim Mode is enabled and no longer work as listed in
|
||||
the tables below. See :ref:`docs_features_vim_mode` for more details.
|
||||
|
||||
|
||||
Main Window Shortcuts
|
||||
=====================
|
||||
@@ -19,7 +24,7 @@ Main Window Shortcuts
|
||||
:header: "Shortcut", "Description"
|
||||
|
||||
":kbd:`F1`", "Open the online user manual"
|
||||
":kbd:`F5`", "Open the **Build Manuscript** tool"
|
||||
":kbd:`F5`", "Open the **Manuscript Build** tool"
|
||||
":kbd:`F6`", "Open the **Writing Statistics** tool"
|
||||
":kbd:`F8`", "Toggle **Focus Mode**"
|
||||
":kbd:`F9`", "Re-build the project's index"
|
||||
@@ -27,14 +32,14 @@ Main Window Shortcuts
|
||||
":kbd:`Ctrl+,`", "Open the **Preferences** dialog"
|
||||
":kbd:`Ctrl+E`", "Switch or toggle focus for the editor or viewer"
|
||||
":kbd:`Ctrl+T`", "Switch or toggle focus for the project tree or novel view"
|
||||
":kbd:`Ctrl+Q`", "Exit novelWriter"
|
||||
":kbd:`Ctrl+Q`", "Exit UmbraEdit"
|
||||
":kbd:`Ctrl+Shift+,`", "Open the **Project Settings** dialog"
|
||||
":kbd:`Ctrl+Shift+O`", "Open the Welcome dialog to open or create a project"
|
||||
":kbd:`Ctrl+Shift+S`", "Save the current project"
|
||||
":kbd:`Ctrl+Shift+T`", "Switch focus to the outline view"
|
||||
":kbd:`Ctrl+Shift+W`", "Close the current project"
|
||||
":kbd:`Shift+F1`", "Open the local user manual (PDF) if it is available"
|
||||
":kbd:`Shift+F6`", "Open the **Project Details** dialog"
|
||||
":kbd:`Shift+F8`", "Toggle tree pane visibility"
|
||||
|
||||
|
||||
Project Tree Shortcuts
|
||||
@@ -53,7 +58,7 @@ Project Tree Shortcuts
|
||||
":kbd:`Ctrl+L`", "Open the **Quick Links** menu"
|
||||
":kbd:`Ctrl+N`", "Open the **Create New Item** menu"
|
||||
":kbd:`Ctrl+O`", "Open the selected document in the editor"
|
||||
":kbd:`Ctrl+R`", "Open the selected document in the viewer"
|
||||
":kbd:`Ctrl+R`", "Open the selected document in the viewer (*)"
|
||||
":kbd:`Ctrl+Up`", "Move selected item one step up in the tree"
|
||||
":kbd:`Ctrl+Down`", "Move selected item one step down in the tree"
|
||||
":kbd:`Ctrl+Shift+Del`", "Move the selected item to Trash"
|
||||
@@ -88,7 +93,6 @@ Text Formatting Shortcuts
|
||||
":kbd:`Ctrl+'`", "Wrap selected text, or word under cursor, in single quotes"
|
||||
":kbd:`Ctrl+""`", "Wrap selected text, or word under cursor, in double quotes"
|
||||
":kbd:`Ctrl+/`", "Toggle comment format for block or selected text"
|
||||
":kbd:`Ctrl+0`", "Remove format for block or selected text"
|
||||
":kbd:`Ctrl+1`", "Change block format to heading level 1"
|
||||
":kbd:`Ctrl+2`", "Change block format to heading level 2"
|
||||
":kbd:`Ctrl+3`", "Change block format to heading level 3"
|
||||
@@ -117,19 +121,25 @@ Other Editor Shortcuts
|
||||
":kbd:`Ctrl+A`", "Select all text in the document"
|
||||
":kbd:`Ctrl+C`", "Copy selected text to clipboard"
|
||||
":kbd:`Ctrl+K`", "Activate the insert commands (see list in :ref:`docs_features_shortcuts_insert`)"
|
||||
":kbd:`Ctrl+R`", "Open or reload the current document in the viewer"
|
||||
":kbd:`Ctrl+R`", "Open or reload the current document in the viewer (*)"
|
||||
":kbd:`Ctrl+S`", "Save the current document"
|
||||
":kbd:`Ctrl+V`", "Paste text from clipboard to cursor position"
|
||||
":kbd:`Ctrl+W`", "Close the current document"
|
||||
":kbd:`Ctrl+X`", "Cut selected text to clipboard"
|
||||
":kbd:`Ctrl+Y`", "Redo latest undo"
|
||||
":kbd:`Ctrl+Z`", "Undo latest changes"
|
||||
":kbd:`Ctrl+0`", "Reset zoom"
|
||||
":kbd:`Ctrl++`", "Zoom in"
|
||||
":kbd:`Ctrl+=`", "Zoom in"
|
||||
":kbd:`Ctrl+-`", "Zoom out"
|
||||
":kbd:`Ctrl+_`", "Zoom out"
|
||||
":kbd:`Ctrl+Backspace`", "Delete the word before the cursor"
|
||||
":kbd:`Ctrl+Del`", "Delete the word after the cursor"
|
||||
":kbd:`Ctrl+F7`", "Toggle spell checking"
|
||||
":kbd:`Ctrl+Return`", "Open the tag or reference under the cursor in the viewer"
|
||||
":kbd:`Ctrl+Shift+Return`", "Open the tag or reference under the cursor in the editor"
|
||||
":kbd:`Ctrl+Shift+A`", "Select all text in the current paragraph"
|
||||
":kbd:`Ctrl+Shift+V`", "Paste text as plain text from clipboard to cursor position"
|
||||
":kbd:`Ctrl+Left`", "Move to previous word."
|
||||
":kbd:`Ctrl+Right`", "Move to next word."
|
||||
":kbd:`Ctrl+Up`", "Move to previous paragraph."
|
||||
@@ -152,7 +162,7 @@ a key or key combination for the inserted content.
|
||||
":kbd:`Ctrl+K`, :kbd:`_`", "Insert a long dash (em dash)"
|
||||
":kbd:`Ctrl+K`, :kbd:`.`", "Insert an ellipsis"
|
||||
":kbd:`Ctrl+K`, :kbd:`'`", "Insert a modifier apostrophe"
|
||||
":kbd:`Ctrl+K`, :kbd:`*`", "Insert a list bullet"
|
||||
":kbd:`Ctrl+K`, :kbd:`*`", "Insert a bullet symbol"
|
||||
":kbd:`Ctrl+K`, :kbd:`%`", "Insert a per mille symbol"
|
||||
":kbd:`Ctrl+K`, :kbd:`~`", "Insert a figure dash (same width as a number)"
|
||||
":kbd:`Ctrl+K`, :kbd:`−`", "Insert a short dash (en dash)"
|
||||
@@ -194,5 +204,10 @@ Document Viewer Shortcuts
|
||||
":kbd:`Alt+Left`", "Move backward in the view history"
|
||||
":kbd:`Alt+Right`", "Move forward in the view history"
|
||||
":kbd:`Ctrl+C`", "Copy selected text to clipboard"
|
||||
":kbd:`Ctrl+0`", "Reset zoom"
|
||||
":kbd:`Ctrl++`", "Zoom in"
|
||||
":kbd:`Ctrl+=`", "Zoom in"
|
||||
":kbd:`Ctrl+-`", "Zoom out"
|
||||
":kbd:`Ctrl+_`", "Zoom out"
|
||||
":kbd:`Ctrl+Shift+A`", "Select all text in the current paragraph"
|
||||
":kbd:`Ctrl+Shift+R`", "Close the document viewer"
|
||||
":kbd:`Ctrl+Shift+R`", "Close the document viewer (*)"
|
||||
|
||||
@@ -51,7 +51,7 @@ Other analytical models propose tracking a scene's pace, how it affects the mood
|
||||
which element(s) of the story's genre are being satisfied. An author can use this mechanism to
|
||||
track any element of a scene. Some examples include time of day, how much time passes in the scene,
|
||||
or even the physical form of a shape-shifting character. If a story involves magic, one could track
|
||||
which wand a main character has in hand. It's up to tha author.
|
||||
which wand a main character has in hand. It's up to the author.
|
||||
|
||||
When the story and other scene metadata is extracted into a tabular form, it is possible to get a
|
||||
comprehensive overview of the story and to identify possible issues. For example, so many
|
||||
|
||||
@@ -10,7 +10,7 @@ Vim_ is a keyboard-centric text editor. "Vim mode" refers to another editor impl
|
||||
ability to perform a subset of vim motions. This will allow you to write, select, edit, copy,
|
||||
paste, navigate, etc, efficiently by using keyboard commands.
|
||||
|
||||
Vim is modal. Three such modes have been implemented in novelWriter:
|
||||
Vim is modal. Three such modes have been implemented in UmbraEdit:
|
||||
|
||||
- **Normal** mode is the default mode used to navigate text.
|
||||
- **Insert** mode is where you can write text like in a 'normal' text editor.
|
||||
@@ -39,67 +39,78 @@ To switch between the various vim modes, these keystrokes implemented:
|
||||
"Normal", "Insert", ":kbd:`i`, :kbd:`I`, :kbd:`a`, :kbd:`A`, :kbd:`o`, :kbd:`O`"
|
||||
"Insert", "Normal", ":kbd:`Esc`"
|
||||
"Normal", "Visual", ":kbd:`v`, :kbd:`V`"
|
||||
"Visual", "V-Line", ":kbd:`V`"
|
||||
"V-Line", "Visual", ":kbd:`v`"
|
||||
"Visual", "Normal", ":kbd:`Esc`, :kbd:`v`"
|
||||
"V-Line", "Normal", ":kbd:`Esc`, :kbd:`V`"
|
||||
|
||||
You can exit visual mode back to normal mode by pressing :kbd:`Esc`, but all visual mode commands
|
||||
that logically "terminate" the visual mode usage will return you to normal mode.
|
||||
|
||||
For instance, press :kbd:`V` to enter V-Line mode, select next word with :kbd:`w`. press :kbd:`y`
|
||||
to yank (copy), you are now automatically put back in normal mode as you have completed selecting
|
||||
your text.
|
||||
For instance, press :kbd:`V` to enter V-Line mode, extend the selection to the next line with
|
||||
:kbd:`j`, and press :kbd:`y` to yank (copy). You are now automatically put back in normal mode as
|
||||
you have completed selecting your text.
|
||||
|
||||
|
||||
Implemented Keystrokes (Vim Motions)
|
||||
====================================
|
||||
|
||||
The table below shows the vim motions currently implemented in novelWriter.
|
||||
The table below shows the vim motions currently implemented in UmbraEdit.
|
||||
|
||||
.. csv-table::
|
||||
:header: "Motion", "Mode(s)", "Description"
|
||||
|
||||
":kbd:`i`", "Normal → Insert", "Enter insert mode"
|
||||
":kbd:`I`", "Normal → Insert", "Jump to first non-blank of line and enter insert"
|
||||
":kbd:`v`", "Normal → Visual", "Enter character-wise visual mode"
|
||||
":kbd:`V`", "Normal → V-Line", "Enter line-wise visual mode"
|
||||
":kbd:`dd`", "Normal", "Delete (cut) current line"
|
||||
":kbd:`x`", "Normal", "Delete character under cursor"
|
||||
":kbd:`w`", "Normal / Visual", "Move to next word start"
|
||||
":kbd:`b`", "Normal / Visual", "Move to previous word start"
|
||||
":kbd:`e`", "Normal / Visual", "Move to next word end"
|
||||
":kbd:`dw`", "Normal", "Delete from cursor to next word start"
|
||||
":kbd:`de`", "Normal", "Delete from cursor to next word end"
|
||||
":kbd:`db`", "Normal", "Delete from cursor to previous word start"
|
||||
":kbd:`d$`", "Normal", "Delete from cursor to end of line"
|
||||
":kbd:`yw`", "Normal", "Yank (copy) from cursor to next word start"
|
||||
":kbd:`gg`", "Normal / Visual", "Jump to first line"
|
||||
":kbd:`G`", "Normal / Visual", "Jump to last line"
|
||||
":kbd:`yy`", "Normal", "Yank current line"
|
||||
":kbd:`p`", "Normal", "Paste after current line"
|
||||
":kbd:`P`", "Normal", "Paste before current line"
|
||||
":kbd:`o`", "Normal → Insert", "Open new line below and enter insert"
|
||||
":kbd:`O`", "Normal → Insert", "Open new line above and enter insert"
|
||||
":kbd:`$`", "Normal / Visual", "Move to end of line"
|
||||
":kbd:`a`", "Normal → Insert", "Enter insert after cursor"
|
||||
":kbd:`A`", "Normal → Insert", "Enter insert at end of line"
|
||||
":kbd:`u`", "Normal", "Undo last change"
|
||||
":kbd:`zz`", "Normal", "Centre cursor vertically"
|
||||
":kbd:`h`", "Normal / Visual", "Move left"
|
||||
":kbd:`j`", "Normal / Visual", "Move down"
|
||||
":kbd:`k`", "Normal / Visual", "Move up"
|
||||
":kbd:`l`", "Normal / Visual", "Move right"
|
||||
":kbd:`d`", "Visual / V-Line", "Delete selection"
|
||||
":kbd:`x`", "Visual / V-Line", "Delete selection"
|
||||
":kbd:`y`", "Visual / V-Line", "Yank selection"
|
||||
":kbd:`0`", "Visual", "Move to start of line (extend selection)"
|
||||
":kbd:`i`", "Normal → Insert", "Enter insert mode"
|
||||
":kbd:`I`", "Normal → Insert", "Jump to start of line and enter insert"
|
||||
":kbd:`v`", "Normal → Visual", "Enter character-wise visual mode"
|
||||
":kbd:`V`", "Normal → V-Line", "Enter line-wise visual mode"
|
||||
":kbd:`dd`", "Normal", "Delete (cut) current line"
|
||||
":kbd:`x`", "Normal", "Delete character under cursor"
|
||||
":kbd:`w`", "Normal / Visual", "Move to next word start"
|
||||
":kbd:`b`", "Normal / Visual", "Move to previous word start"
|
||||
":kbd:`e`", "Normal / Visual", "Move to next word end"
|
||||
":kbd:`dw`", "Normal", "Delete from cursor to next word start"
|
||||
":kbd:`de`", "Normal", "Delete from cursor to next word end"
|
||||
":kbd:`db`", "Normal", "Delete from cursor to previous word start"
|
||||
":kbd:`d$`", "Normal", "Delete from cursor to end of line"
|
||||
":kbd:`yw`", "Normal", "Yank (copy) from cursor to next word start"
|
||||
":kbd:`gg`", "Normal / Visual", "Jump to first line"
|
||||
":kbd:`G`", "Normal / Visual", "Jump to last line"
|
||||
":kbd:`yy`", "Normal", "Yank current line"
|
||||
":kbd:`p`", "Normal", "Paste after current line or cursor"
|
||||
":kbd:`P`", "Normal", "Paste before current line or at cursor"
|
||||
":kbd:`o`", "Normal → Insert", "Open new line below and enter insert"
|
||||
":kbd:`O`", "Normal → Insert", "Open new line above and enter insert"
|
||||
":kbd:`$`", "Normal / Visual", "Move to end of line"
|
||||
":kbd:`0`", "Normal / Visual", "Move to start of line"
|
||||
":kbd:`a`", "Normal → Insert", "Enter insert after cursor"
|
||||
":kbd:`A`", "Normal → Insert", "Enter insert at end of line"
|
||||
":kbd:`u`", "Normal", "Undo last change"
|
||||
":kbd:`Ctrl+R`", "Normal", "Redo last undone change (*)"
|
||||
":kbd:`zz`", "Normal", "Centre cursor vertically"
|
||||
":kbd:`h`", "Normal / Visual", "Move left"
|
||||
":kbd:`j`", "Normal / Visual", "Move down"
|
||||
":kbd:`k`", "Normal / Visual", "Move up"
|
||||
":kbd:`l`", "Normal / Visual", "Move right"
|
||||
":kbd:`d`", "Visual / V-Line", "Delete selection"
|
||||
":kbd:`x`", "Visual / V-Line", "Delete selection"
|
||||
":kbd:`y`", "Visual / V-Line", "Yank selection"
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
Shortcuts marked with (*) are remapped when Vim Mode is enabled. These are shortcuts that
|
||||
usually do other things when Vim Mode is off.
|
||||
|
||||
|
||||
Known Issues
|
||||
============
|
||||
|
||||
* Currently, :kbd:`dd` on an empty line will not delete, but using :kbd:`x` will.
|
||||
* :kbd:`vypyy` will have :kbd:`ypyy` in command memory and thus not register :kbd:`yy`. Expected
|
||||
behavior would be visual mode, yank, paste, yank line.
|
||||
* Differing behavior from vim: the :kbd:`e` command behaves a bit differently with regards to the
|
||||
last character of a word. The behavior is inconsistent with vim but functional and still logical
|
||||
* Differing behaviour from vim: :kbd:`j` and :kbd:`k` move by displayed line when a line is
|
||||
wrapped, like :kbd:`gj` and :kbd:`gk` in vim. All other line commands act on the full line.
|
||||
* :kbd:`Esc` in normal mode will leave Focus Mode if there is no pending command to cancel.
|
||||
* Differing behaviour from vim: the :kbd:`e` command behaves a bit differently with regards to the
|
||||
last character of a word. The behaviour is inconsistent with vim but functional and still logical
|
||||
to use. The cursor is placed at the end of the word after the last character rather than on the
|
||||
last character.
|
||||
|
||||
@@ -108,8 +119,8 @@ Known Issues
|
||||
test
|
||||
^ Cursor placed here in vim
|
||||
test
|
||||
^ Cursor placed here in novelWriter vim mode
|
||||
^ Cursor placed here in UmbraEdit vim mode
|
||||
|
||||
You will only really ever notice this behavior if you try to combine the :kbd:`e` command with
|
||||
You will only really ever notice this behaviour if you try to combine the :kbd:`e` command with
|
||||
another. For instance, :kbd:`de` will not delete the last character but delete forward as it
|
||||
starts one character after the word boundary.
|
||||
|
||||
@@ -5,7 +5,7 @@ User Guide
|
||||
| **Release Version:** |release|
|
||||
| **Updated:** |today|
|
||||
|
||||
novelWriter is an open source plain text editor designed for writing novels assembled from
|
||||
UmbraEdit is an open source plain text editor designed for writing novels assembled from
|
||||
individual text documents. It uses a minimal formatting syntax inspired by Markdown, and adds a
|
||||
meta data syntax for comments, synopsis, and cross-referencing. It is designed to be a simple text
|
||||
editor that allows for easy organisation of text and notes, using human readable text files as
|
||||
@@ -18,22 +18,22 @@ storage for robustness.
|
||||
|
||||
**Useful Links**
|
||||
|
||||
* Website: https://novelwriter.io
|
||||
* Documentation: https://docs.novelwriter.io
|
||||
* Public Releases: https://releases.novelwriter.io
|
||||
* Internationalisation: https://crowdin.com/project/novelwriter
|
||||
* Source Code: https://github.com/vkbo/novelWriter
|
||||
* Source Releases: https://github.com/vkbo/novelWriter/releases
|
||||
* Issue Tracker: https://github.com/vkbo/novelWriter/issues
|
||||
* Feature Discussions: https://github.com/vkbo/novelWriter/discussions
|
||||
* PyPi Project: https://pypi.org/project/novelWriter
|
||||
* Social Media: https://fosstodon.org/@novelwriter
|
||||
* Website: https://umbraedit.io
|
||||
* Documentation: https://docs.umbraedit.io
|
||||
* Public Releases: https://releases.umbraedit.io
|
||||
* Internationalisation: https://crowdin.com/project/umbraedit
|
||||
* Source Code: https://github.com/saga-soft/UmbraEdit
|
||||
* Source Releases: https://github.com/saga-soft/UmbraEdit/releases
|
||||
* Issue Tracker: https://github.com/saga-soft/UmbraEdit/issues
|
||||
* Feature Discussions: https://github.com/saga-soft/UmbraEdit/discussions
|
||||
* PyPi Project: https://pypi.org/project/UmbraEdit
|
||||
* Social Media: https://fosstodon.org/@umbraedit
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
|
||||
self
|
||||
More Documents <https://novelwriter.io/more/>
|
||||
More Documents <https://umbraedit.io/more/>
|
||||
|
||||
.. toctree::
|
||||
:caption: Getting Started
|
||||
@@ -59,6 +59,7 @@ storage for robustness.
|
||||
user_interface/editor_viewer
|
||||
user_interface/split_and_merge
|
||||
user_interface/manuscript
|
||||
user_interface/formatting
|
||||
user_interface/statistics
|
||||
|
||||
.. toctree::
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 22:09+0200\n"
|
||||
@@ -36,13 +36,13 @@ msgstr ""
|
||||
|
||||
#: ../../source/features/dialogue.rst:10
|
||||
msgid ""
|
||||
"The default language settings in novelWriter are for English. That "
|
||||
"The default language settings in UmbraEdit are for English. That "
|
||||
"includes the dialogue highlighting settings. But many dialogue styles "
|
||||
"are supported. You can tune a number of settings to fit your language "
|
||||
"and style preferences in the \"Text Highlighting\" section in "
|
||||
"**Preferences**. You can mix and match these settings."
|
||||
msgstr ""
|
||||
"Les paramètres linguistiques par défaut de novelWriter sont ceux de "
|
||||
"Les paramètres linguistiques par défaut de UmbraEdit sont ceux de "
|
||||
"l'anglais. Cela inclut les paramètres de mise en évidence des dialogues. "
|
||||
"Mais de nombreux styles de dialogue sont pris en charge. Vous pouvez "
|
||||
"ajuster un certain nombre de paramètres en fonction de vos préférences "
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 22:50+0200\n"
|
||||
@@ -27,11 +27,11 @@ msgstr "Raccourcis clavier"
|
||||
|
||||
#: ../../source/features/shortcuts.rst:7
|
||||
msgid ""
|
||||
"Most features in novelWriter are available as keyboard shortcuts. This "
|
||||
"Most features in UmbraEdit are available as keyboard shortcuts. This "
|
||||
"is a reference list of those shortcuts. Most of them are also listed in "
|
||||
"the application's user interface."
|
||||
msgstr ""
|
||||
"La plupart des fonctionnalités de novelWriter sont disponibles sous "
|
||||
"La plupart des fonctionnalités de UmbraEdit sont disponibles sous "
|
||||
"forme de raccourcis clavier. Il s'agit d'une liste de référence de ces "
|
||||
"raccourcis. La plupart d'entre eux sont également listés dans "
|
||||
"l'interface utilisateur de l'application."
|
||||
@@ -132,8 +132,8 @@ msgid ":kbd:`Ctrl+Q`"
|
||||
msgstr ":kbd:`Ctrl+Q`"
|
||||
|
||||
#: ../../source/features/shortcuts.rst:1
|
||||
msgid "Exit novelWriter"
|
||||
msgstr "Quitter novelWriter"
|
||||
msgid "Exit UmbraEdit"
|
||||
msgstr "Quitter UmbraEdit"
|
||||
|
||||
#: ../../source/features/shortcuts.rst:1
|
||||
msgid ":kbd:`Ctrl+Shift+,`"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 22:28+0200\n"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-27 20:56+0200\n"
|
||||
@@ -59,14 +59,14 @@ msgstr "**Mise à jour :** |today|"
|
||||
|
||||
#: ../../source/index.rst:8
|
||||
msgid ""
|
||||
"novelWriter is an open source plain text editor designed for writing "
|
||||
"UmbraEdit is an open source plain text editor designed for writing "
|
||||
"novels assembled from individual text documents. It uses a minimal "
|
||||
"formatting syntax inspired by Markdown, and adds a meta data syntax for "
|
||||
"comments, synopsis, and cross-referencing. It is designed to be a simple "
|
||||
"text editor that allows for easy organisation of text and notes, using "
|
||||
"human readable text files as storage for robustness."
|
||||
msgstr ""
|
||||
"novelWriter est un éditeur de texte brut open source conçu pour écrire "
|
||||
"UmbraEdit est un éditeur de texte brut open source conçu pour écrire "
|
||||
"des romans assemblés à partir de documents texte individuels. Il utilise "
|
||||
"une syntaxe de formatage minimale inspirée de Markdown, et ajoute une "
|
||||
"syntaxe de métadonnées pour les commentaires, les synopsis et les "
|
||||
@@ -80,42 +80,41 @@ msgid "**Useful Links**"
|
||||
msgstr "**Liens utiles**"
|
||||
|
||||
#: ../../source/index.rst:21
|
||||
msgid "Website: https://novelwriter.io"
|
||||
msgstr "Site web : https://novelwriter.io"
|
||||
msgid "Website: https://umbraedit.io"
|
||||
msgstr "Site web : https://umbraedit.io"
|
||||
|
||||
#: ../../source/index.rst:22
|
||||
msgid "Documentation: https://docs.novelwriter.io"
|
||||
msgstr "Documentation: https://docs.novelwriter.io"
|
||||
msgid "Documentation: https://docs.umbraedit.io"
|
||||
msgstr "Documentation: https://docs.umbraedit.io"
|
||||
|
||||
#: ../../source/index.rst:23
|
||||
msgid "Public Releases: https://releases.novelwriter.io"
|
||||
msgstr "Public Releases: https://releases.novelwriter.io"
|
||||
msgid "Public Releases: https://releases.umbraedit.io"
|
||||
msgstr "Public Releases: https://releases.umbraedit.io"
|
||||
|
||||
#: ../../source/index.rst:24
|
||||
msgid "Internationalisation: https://crowdin.com/project/novelwriter"
|
||||
msgstr "Internationalisation: https://crowdin.com/project/novelwriter"
|
||||
msgid "Internationalisation: https://crowdin.com/project/umbraedit"
|
||||
msgstr "Internationalisation: https://crowdin.com/project/umbraedit"
|
||||
|
||||
#: ../../source/index.rst:25
|
||||
msgid "Source Code: https://github.com/vkbo/novelWriter"
|
||||
msgstr "Code source : https://github.com/vkbo/novelWriter"
|
||||
msgid "Source Code: https://github.com/saga-soft/UmbraEdit"
|
||||
msgstr "Code source : https://github.com/saga-soft/UmbraEdit"
|
||||
|
||||
#: ../../source/index.rst:26
|
||||
msgid "Source Releases: https://github.com/vkbo/novelWriter/releases"
|
||||
msgstr "Source Releases: https://github.com/vkbo/novelWriter/releases"
|
||||
msgid "Source Releases: https://github.com/saga-soft/UmbraEdit/releases"
|
||||
msgstr "Source Releases: https://github.com/saga-soft/UmbraEdit/releases"
|
||||
|
||||
#: ../../source/index.rst:27
|
||||
msgid "Issue Tracker: https://github.com/vkbo/novelWriter/issues"
|
||||
msgstr "Issue Tracker: https://github.com/vkbo/novelWriter/issues"
|
||||
msgid "Issue Tracker: https://github.com/saga-soft/UmbraEdit/issues"
|
||||
msgstr "Issue Tracker: https://github.com/saga-soft/UmbraEdit/issues"
|
||||
|
||||
#: ../../source/index.rst:28
|
||||
msgid "Feature Discussions: https://github.com/vkbo/novelWriter/discussions"
|
||||
msgstr ""
|
||||
"Feature Discussions: https://github.com/vkbo/novelWriter/discussions"
|
||||
msgid "Feature Discussions: https://github.com/saga-soft/UmbraEdit/discussions"
|
||||
msgstr "Feature Discussions: https://github.com/saga-soft/UmbraEdit/discussions"
|
||||
|
||||
#: ../../source/index.rst:29
|
||||
msgid "PyPi Project: https://pypi.org/project/novelWriter"
|
||||
msgstr "PyPi Project: https://pypi.org/project/novelWriter"
|
||||
msgid "PyPi Project: https://pypi.org/project/UmbraEdit"
|
||||
msgstr "PyPi Project: https://pypi.org/project/UmbraEdit"
|
||||
|
||||
#: ../../source/index.rst:30
|
||||
msgid "Social Media: https://fosstodon.org/@novelwriter"
|
||||
msgstr "Social Media: https://fosstodon.org/@novelwriter"
|
||||
msgid "Social Media: https://fosstodon.org/@umbraedit"
|
||||
msgstr "Social Media: https://fosstodon.org/@umbraedit"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 23:00+0200\n"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:05+0200\n"
|
||||
@@ -27,11 +27,11 @@ msgstr "Personnalisations"
|
||||
|
||||
#: ../../source/more/customise.rst:10
|
||||
msgid ""
|
||||
"There are a few ways you can customise novelWriter yourself. Currently, "
|
||||
"There are a few ways you can customise UmbraEdit yourself. Currently, "
|
||||
"you can add new GUI themes, your own syntax themes, and install additional "
|
||||
"dictionaries."
|
||||
msgstr ""
|
||||
"Vous pouvez personnaliser novelWriter de plusieurs façons. Actuellement, "
|
||||
"Vous pouvez personnaliser UmbraEdit de plusieurs façons. Actuellement, "
|
||||
"vous pouvez ajouter de nouveaux thèmes d'interface graphique, vos propres "
|
||||
"thèmes de syntaxe et installer des dictionnaires supplémentaires."
|
||||
|
||||
@@ -41,11 +41,11 @@ msgstr "Dictionnaires de vérification orthographique"
|
||||
|
||||
#: ../../source/more/customise.rst:19
|
||||
msgid ""
|
||||
"novelWriter uses Enchant_ as the spell checking tool. Depending on your "
|
||||
"UmbraEdit uses Enchant_ as the spell checking tool. Depending on your "
|
||||
"operating system, it may or may not load all installed spell check "
|
||||
"dictionaries automatically."
|
||||
msgstr ""
|
||||
"novelWriter utilise Enchant_ comme outil de vérification orthographique. "
|
||||
"UmbraEdit utilise Enchant_ comme outil de vérification orthographique. "
|
||||
"Selon votre système d'exploitation, il peut ou non charger automatiquement "
|
||||
"tous les dictionnaires de vérification orthographique installés."
|
||||
|
||||
@@ -58,14 +58,14 @@ msgid ""
|
||||
"On Linux and MacOS, you generally only have to install hunspell, aspell or "
|
||||
"myspell dictionaries on your system like you do for other applications. "
|
||||
"See your distro or OS documentation for how to do this. These dictionaries "
|
||||
"should show up as available spell check languages in novelWriter."
|
||||
"should show up as available spell check languages in UmbraEdit."
|
||||
msgstr ""
|
||||
"Sous Linux et MacOS, il vous suffit généralement d'installer les "
|
||||
"dictionnaires hunspell, aspell ou myspell sur votre système, comme vous le "
|
||||
"faites pour d'autres applications. Consultez la documentation de votre "
|
||||
"distro ou de votre système d'exploitation pour savoir comment procéder. "
|
||||
"Ces dictionnaires devraient apparaître comme des langues de vérification "
|
||||
"orthographique disponibles dans novelWriter."
|
||||
"orthographique disponibles dans UmbraEdit."
|
||||
|
||||
#: ../../source/more/customise.rst:32
|
||||
msgid "Windows"
|
||||
@@ -182,30 +182,30 @@ msgstr ""
|
||||
|
||||
#: ../../source/more/customise.rst:78
|
||||
msgid ""
|
||||
"The existing syntax themes are stored in `novelwriter/assets/syntax "
|
||||
"<https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/"
|
||||
"The existing syntax themes are stored in `umbraedit/assets/syntax "
|
||||
"<https://github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/"
|
||||
"syntax>`_."
|
||||
msgstr ""
|
||||
"Les thèmes syntaxiques existants sont stockés dans `novelwriter/assets/"
|
||||
"syntax <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/"
|
||||
"Les thèmes syntaxiques existants sont stockés dans `umbraedit/assets/"
|
||||
"syntax <https://github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/"
|
||||
"syntax>`_."
|
||||
|
||||
#: ../../source/more/customise.rst:80
|
||||
msgid ""
|
||||
"The existing GUI themes are stored in `novelwriter/assets/themes <https://"
|
||||
"github.com/vkbo/novelWriter/tree/main/novelwriter/assets/themes>`_."
|
||||
"The existing GUI themes are stored in `umbraedit/assets/themes <https://"
|
||||
"github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/themes>`_."
|
||||
msgstr ""
|
||||
"Les thèmes GUI existants sont stockés dans `novelwriter/assets/themes "
|
||||
"<https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/"
|
||||
"Les thèmes GUI existants sont stockés dans `umbraedit/assets/themes "
|
||||
"<https://github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/"
|
||||
"themes>`_."
|
||||
|
||||
#: ../../source/more/customise.rst:82
|
||||
msgid ""
|
||||
"The existing icon themes are stored in `novelwriter/assets/icons <https://"
|
||||
"github.com/vkbo/novelWriter/tree/main/novelwriter/assets/icons>`_."
|
||||
"The existing icon themes are stored in `umbraedit/assets/icons <https://"
|
||||
"github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/icons>`_."
|
||||
msgstr ""
|
||||
"Les thèmes d'icônes existants sont stockés dans `novelwriter/assets/icons "
|
||||
"<https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/icons>`_."
|
||||
"Les thèmes d'icônes existants sont stockés dans `umbraedit/assets/icons "
|
||||
"<https://github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/icons>`_."
|
||||
|
||||
#: ../../source/more/customise.rst:85
|
||||
msgid ""
|
||||
@@ -219,19 +219,19 @@ msgstr ""
|
||||
|
||||
#: ../../source/more/customise.rst:88
|
||||
msgid ""
|
||||
"For novelWriter to be able to locate the custom theme files, you must copy "
|
||||
"For UmbraEdit to be able to locate the custom theme files, you must copy "
|
||||
"them to the :ref:`docs_technical_locations_data` location in your home or "
|
||||
"user area. There should be a folder there named ``syntax`` for syntax "
|
||||
"themes, just ``themes`` for GUI themes, and ``icons`` for icon themes. "
|
||||
"These folders are created the first time you start novelWriter."
|
||||
"These folders are created the first time you start UmbraEdit."
|
||||
msgstr ""
|
||||
"Pour que novelWriter puisse localiser les fichiers de thèmes "
|
||||
"Pour que UmbraEdit puisse localiser les fichiers de thèmes "
|
||||
"personnalisés, vous devez les copier dans l'emplacement :ref:"
|
||||
"`docs_technical_locations_data` dans votre espace personnel ou "
|
||||
"utilisateur. Il devrait y avoir un dossier nommé ``syntax`` pour les "
|
||||
"thèmes de syntaxe, juste ``themes`` pour les thèmes GUI, et ``icons`` pour "
|
||||
"les thèmes d'icônes. Ces dossiers sont créés la première fois que vous "
|
||||
"démarrez novelWriter.\n"
|
||||
"démarrez UmbraEdit.\n"
|
||||
"\n"
|
||||
"Traduit avec DeepL.com (version gratuite)"
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:11+0200\n"
|
||||
@@ -27,12 +27,12 @@ msgstr "Traitement des erreurs"
|
||||
|
||||
#: ../../source/more/handling_errors.rst:7
|
||||
msgid ""
|
||||
"In case something goes wrong, novelWriter has a few built-in features to "
|
||||
"In case something goes wrong, UmbraEdit has a few built-in features to "
|
||||
"reduce the chance your work is lost. In case of a crash, it will also "
|
||||
"try to save whatever changes you have made before exiting, if this is at "
|
||||
"all possible."
|
||||
msgstr ""
|
||||
"En cas de problème, novelWriter dispose de quelques fonctions intégrées "
|
||||
"En cas de problème, UmbraEdit dispose de quelques fonctions intégrées "
|
||||
"pour réduire le risque de perte de votre travail. En cas de panne, il "
|
||||
"essaiera également d'enregistrer les modifications que vous avez "
|
||||
"apportées avant de quitter, si cela est possible."
|
||||
@@ -53,13 +53,13 @@ msgstr "Documents récupérés"
|
||||
|
||||
#: ../../source/more/handling_errors.rst:20
|
||||
msgid ""
|
||||
"If novelWriter crashes or otherwise exits without saving the project "
|
||||
"If UmbraEdit crashes or otherwise exits without saving the project "
|
||||
"state, or if you're using a file synchronisation tool that runs out of "
|
||||
"sync, there may be files in the project storage folder that aren't "
|
||||
"tracked in the core project file. These files, when discovered, are "
|
||||
"recovered and added back into the project when a project is opened."
|
||||
msgstr ""
|
||||
"Si novelWriter se plante ou se termine sans sauvegarder l'état du "
|
||||
"Si UmbraEdit se plante ou se termine sans sauvegarder l'état du "
|
||||
"projet, ou si vous utilisez un outil de synchronisation de fichiers qui "
|
||||
"se désynchronise, il peut y avoir des fichiers dans le dossier de "
|
||||
"stockage du projet qui ne sont pas suivis dans le fichier de base du "
|
||||
@@ -107,33 +107,33 @@ msgstr "Fichier de verrouillage du projet"
|
||||
|
||||
#: ../../source/more/handling_errors.rst:43
|
||||
msgid ""
|
||||
"To prevent data loss caused by file conflicts when novelWriter projects "
|
||||
"To prevent data loss caused by file conflicts when UmbraEdit projects "
|
||||
"are synchronised via file synchronisation tools, a project lockfile is "
|
||||
"written to the project storage folder when a project is open. If you try "
|
||||
"to open a project that already has such a file present, you will be "
|
||||
"presented with a warning, and some information about where else "
|
||||
"novelWriter thinks the project is also open. You will be given the "
|
||||
"UmbraEdit thinks the project is also open. You will be given the "
|
||||
"option to ignore this warning, and continue opening the project at your "
|
||||
"own risk."
|
||||
msgstr ""
|
||||
"Pour éviter la perte de données causée par des conflits de fichiers "
|
||||
"lorsque les projets novelWriter sont synchronisés via des outils de "
|
||||
"lorsque les projets UmbraEdit sont synchronisés via des outils de "
|
||||
"synchronisation de fichiers, un fichier de verrouillage de projet est "
|
||||
"écrit dans le dossier de stockage du projet lorsqu'un projet est ouvert. "
|
||||
"Si vous essayez d'ouvrir un projet dans lequel un tel fichier est déjà "
|
||||
"présent, vous recevrez un avertissement et des informations sur "
|
||||
"l'endroit où novelWriter pense que le projet est également ouvert. Vous "
|
||||
"l'endroit où UmbraEdit pense que le projet est également ouvert. Vous "
|
||||
"aurez la possibilité d'ignorer cet avertissement et de continuer à "
|
||||
"ouvrir le projet à vos risques et périls."
|
||||
|
||||
#: ../../source/more/handling_errors.rst:52
|
||||
msgid ""
|
||||
"If, for some reason, novelWriter or your computer crashes, the lock file "
|
||||
"If, for some reason, UmbraEdit or your computer crashes, the lock file "
|
||||
"may remain even if there are no other instances keeping the project "
|
||||
"open. In such a case it is safe to ignore the lock file warning when re-"
|
||||
"opening the project."
|
||||
msgstr ""
|
||||
"Si, pour une raison quelconque, novelWriter ou votre ordinateur tombe en "
|
||||
"Si, pour une raison quelconque, UmbraEdit ou votre ordinateur tombe en "
|
||||
"panne, le fichier de verrouillage peut subsister même si aucune autre "
|
||||
"instance ne maintient le projet ouvert. Dans ce cas, il est prudent "
|
||||
"d'ignorer l'avertissement relatif au fichier de verrouillage lors de la "
|
||||
@@ -146,7 +146,7 @@ msgid ""
|
||||
"to cause inconsistencies and create diverging project files, potentially "
|
||||
"resulting in loss of data and orphaned files. You are not likely to lose "
|
||||
"any actual text unless both instances have the same document open in the "
|
||||
"editor, and novelWriter will try to resolve project inconsistencies the "
|
||||
"editor, and UmbraEdit will try to resolve project inconsistencies the "
|
||||
"next time you open the project."
|
||||
msgstr ""
|
||||
"Si vous choisissez d'ignorer l'avertissement et de continuer à ouvrir le "
|
||||
@@ -155,5 +155,5 @@ msgstr ""
|
||||
"divergents, ce qui peut entraîner une perte de données et des fichiers "
|
||||
"orphelins. Il est peu probable que vous perdiez du texte à moins que les "
|
||||
"deux instances aient le même document ouvert dans l'éditeur, et "
|
||||
"novelWriter essaiera de résoudre les incohérences du projet la prochaine "
|
||||
"UmbraEdit essaiera de résoudre les incohérences du projet la prochaine "
|
||||
"fois que vous l'ouvrirez."
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:21+0200\n"
|
||||
@@ -27,13 +27,13 @@ msgstr "Modifications du format des projets"
|
||||
|
||||
#: ../../source/more/project_format.rst:7
|
||||
msgid ""
|
||||
"Most of the changes to the file formats over the history of novelWriter "
|
||||
"Most of the changes to the file formats over the history of UmbraEdit "
|
||||
"have no impact on the user side of things. The project files are "
|
||||
"generally updated automatically. However, some of the changes require "
|
||||
"minor actions from the user."
|
||||
msgstr ""
|
||||
"La plupart des modifications apportées aux formats de fichiers au cours "
|
||||
"de l'histoire de novelWriter n'ont pas d'impact sur l'utilisateur. Les "
|
||||
"de l'histoire de UmbraEdit n'ont pas d'impact sur l'utilisateur. Les "
|
||||
"fichiers de projet sont généralement mis à jour automatiquement. "
|
||||
"Cependant, certains changements nécessitent des actions mineures de la "
|
||||
"part de l'utilisateur."
|
||||
@@ -58,14 +58,14 @@ msgstr ""
|
||||
#: ../../source/more/project_format.rst:18
|
||||
msgid ""
|
||||
"When you update a project from one format version to the next, the "
|
||||
"project can no longer be opened by a version of novelWriter prior to the "
|
||||
"project can no longer be opened by a version of UmbraEdit prior to the "
|
||||
"version where the new file format was introduced. You will get a "
|
||||
"notification about any updates to your project file format and will have "
|
||||
"the option to decline the upgrade."
|
||||
msgstr ""
|
||||
"Lorsque vous mettez à jour un projet d'une version de format à la "
|
||||
"suivante, le projet ne peut plus être ouvert par une version de "
|
||||
"novelWriter antérieure à la version où le nouveau format de fichier a "
|
||||
"UmbraEdit antérieure à la version où le nouveau format de fichier a "
|
||||
"été introduit. Vous recevrez une notification concernant toute mise à "
|
||||
"jour du format de fichier de votre projet et vous aurez la possibilité "
|
||||
"de refuser la mise à jour."
|
||||
@@ -75,10 +75,10 @@ msgid "Format 1.5 Changes"
|
||||
msgstr "Format 1.5 Modifications"
|
||||
|
||||
#: ../../source/more/project_format.rst:29
|
||||
msgid "This project format was introduced in novelWriter version 2.0 RC 2."
|
||||
msgid "This project format was introduced in UmbraEdit version 2.0 RC 2."
|
||||
msgstr ""
|
||||
"Ce format de projet a été introduit dans la version 2.0 RC 2 de "
|
||||
"novelWriter."
|
||||
"UmbraEdit."
|
||||
|
||||
#: ../../source/more/project_format.rst:31
|
||||
msgid ""
|
||||
@@ -106,12 +106,12 @@ msgstr "Format 1.4 Modifications"
|
||||
|
||||
#: ../../source/more/project_format.rst:43
|
||||
msgid ""
|
||||
"This project format was introduced in novelWriter version 2.0 RC 1. "
|
||||
"This project format was introduced in UmbraEdit version 2.0 RC 1. "
|
||||
"Since this was a release candidate, it is unlikely that your project "
|
||||
"uses it, but it may be the case if you've installed a pre-release."
|
||||
msgstr ""
|
||||
"Ce format de projet a été introduit dans la version 2.0 RC 1 de "
|
||||
"novelWriter. Comme il s'agissait d'une version candidate, il est peu "
|
||||
"UmbraEdit. Comme il s'agissait d'une version candidate, il est peu "
|
||||
"probable que votre projet l'utilise, mais c'est peut-être le cas si vous "
|
||||
"avez installé une préversion."
|
||||
|
||||
@@ -133,9 +133,9 @@ msgid "Format 1.3 Changes"
|
||||
msgstr "Format 1.3 Modifications"
|
||||
|
||||
#: ../../source/more/project_format.rst:57
|
||||
msgid "This project format was introduced in novelWriter version 1.5."
|
||||
msgid "This project format was introduced in UmbraEdit version 1.5."
|
||||
msgstr ""
|
||||
"Ce format de projet a été introduit dans la version 1.5 de novelWriter."
|
||||
"Ce format de projet a été introduit dans la version 1.5 de UmbraEdit."
|
||||
|
||||
#: ../../source/more/project_format.rst:59
|
||||
msgid ""
|
||||
@@ -238,9 +238,9 @@ msgid "Format 1.2 Changes"
|
||||
msgstr "Format 1.2 Modifications"
|
||||
|
||||
#: ../../source/more/project_format.rst:96
|
||||
msgid "This project format was introduced in novelWriter version 0.10."
|
||||
msgid "This project format was introduced in UmbraEdit version 0.10."
|
||||
msgstr ""
|
||||
"Ce format de projet a été introduit dans la version 0.10 de novelWriter."
|
||||
"Ce format de projet a été introduit dans la version 0.10 de UmbraEdit."
|
||||
|
||||
#: ../../source/more/project_format.rst:98
|
||||
msgid ""
|
||||
@@ -257,18 +257,18 @@ msgid "Format 1.1 Changes"
|
||||
msgstr "Format 1.1 Modifications"
|
||||
|
||||
#: ../../source/more/project_format.rst:107
|
||||
msgid "This project format was introduced in novelWriter version 0.7."
|
||||
msgid "This project format was introduced in UmbraEdit version 0.7."
|
||||
msgstr ""
|
||||
"Ce format de projet a été introduit dans la version 0.7 de novelWriter."
|
||||
"Ce format de projet a été introduit dans la version 0.7 de UmbraEdit."
|
||||
|
||||
#: ../../source/more/project_format.rst:109
|
||||
msgid ""
|
||||
"With this format, the ``content`` folder was introduced in the project "
|
||||
"storage. Previously, all novelWriter documents were saved in a series of "
|
||||
"storage. Previously, all UmbraEdit documents were saved in a series of "
|
||||
"folders numbered from ``data_0`` to ``data_f``."
|
||||
msgstr ""
|
||||
"Avec ce format, le dossier ``content`` a été introduit dans le stockage "
|
||||
"du projet. Auparavant, tous les documents de novelWriter étaient "
|
||||
"du projet. Auparavant, tous les documents de UmbraEdit étaient "
|
||||
"sauvegardés dans une série de dossiers numérotés de ``data_0`` à "
|
||||
"``data_f``."
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 23:17+0200\n"
|
||||
@@ -27,13 +27,13 @@ msgstr "Notes typographiques"
|
||||
|
||||
#: ../../source/more/typography.rst:12
|
||||
msgid ""
|
||||
"novelWriter has some support for typographical symbols that are not usually "
|
||||
"UmbraEdit has some support for typographical symbols that are not usually "
|
||||
"easily available in many text editors. This includes for instance the "
|
||||
"proper unicode quotation marks, dashes, ellipsis, thin spaces, etc. All "
|
||||
"these symbols are available from the **Insert** menu, and via keyboard "
|
||||
"shortcuts. See :ref:`docs_features_shortcuts_insert`."
|
||||
msgstr ""
|
||||
"novelWriter prend en charge certains symboles typographiques qui ne sont "
|
||||
"UmbraEdit prend en charge certains symboles typographiques qui ne sont "
|
||||
"généralement pas disponibles dans de nombreux éditeurs de texte. Cela "
|
||||
"inclut par exemple les guillemets unicode, les tirets, les ellipses, les "
|
||||
"espaces fins, etc. Tous ces symboles sont disponibles dans le menu "
|
||||
@@ -42,11 +42,11 @@ msgstr ""
|
||||
|
||||
#: ../../source/more/typography.rst:17
|
||||
msgid ""
|
||||
"This chapter provides some additional information on how novelWriter "
|
||||
"This chapter provides some additional information on how UmbraEdit "
|
||||
"handles these symbols."
|
||||
msgstr ""
|
||||
"Ce chapitre fournit des informations supplémentaires sur la manière dont "
|
||||
"novelWriter gère ces symboles."
|
||||
"UmbraEdit gère ces symboles."
|
||||
|
||||
#: ../../source/more/typography.rst:21
|
||||
msgid "Dashes and Ellipsis"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:25+0200\n"
|
||||
@@ -27,11 +27,11 @@ msgstr "Emplacement des fichiers"
|
||||
|
||||
#: ../../source/technical/locations.rst:9
|
||||
msgid ""
|
||||
"novelWriter will create a few files on your system outside of the "
|
||||
"UmbraEdit will create a few files on your system outside of the "
|
||||
"application folder itself. These file locations are described in this "
|
||||
"chapter."
|
||||
msgstr ""
|
||||
"novelWriter créera quelques fichiers sur votre système en dehors du "
|
||||
"UmbraEdit créera quelques fichiers sur votre système en dehors du "
|
||||
"dossier de l'application elle-même. L'emplacement de ces fichiers est "
|
||||
"décrit dans ce chapitre."
|
||||
|
||||
@@ -41,13 +41,13 @@ msgstr "Configuration"
|
||||
|
||||
#: ../../source/technical/locations.rst:18
|
||||
msgid ""
|
||||
"The general configuration of novelWriter, including everything that is "
|
||||
"The general configuration of UmbraEdit, including everything that is "
|
||||
"in **Preferences**, is saved in one central configuration file. The "
|
||||
"location of this file depends on your operating system. The system paths "
|
||||
"are provided by the Qt QStandardPaths_ class and its ``ConfigLocation`` "
|
||||
"value."
|
||||
msgstr ""
|
||||
"La configuration générale de novelWriter, y compris tout ce qui se "
|
||||
"La configuration générale de UmbraEdit, y compris tout ce qui se "
|
||||
"trouve dans les **Préférences**, est enregistrée dans un fichier de "
|
||||
"configuration central. L'emplacement de ce fichier dépend de votre "
|
||||
"système d'exploitation. Les chemins d'accès au système sont fournis par "
|
||||
@@ -59,19 +59,19 @@ msgid "The standard paths are:"
|
||||
msgstr "Les chemins standard sont les suivants :"
|
||||
|
||||
#: ../../source/technical/locations.rst:24
|
||||
msgid "Linux: ``~/.config/novelwriter/novelwriter.conf``"
|
||||
msgstr "Linux : ``~/.config/novelwriter/novelwriter.conf``"
|
||||
msgid "Linux: ``~/.config/umbraedit/umbraedit.conf``"
|
||||
msgstr "Linux : ``~/.config/umbraedit/umbraedit.conf``"
|
||||
|
||||
#: ../../source/technical/locations.rst:25
|
||||
msgid "MacOS: ``~/Library/Preferences/novelwriter/novelwriter.conf``"
|
||||
msgstr "MacOS: ``~/Library/Preferences/novelwriter/novelwriter.conf``"
|
||||
msgid "MacOS: ``~/Library/Preferences/umbraedit/umbraedit.conf``"
|
||||
msgstr "MacOS: ``~/Library/Preferences/umbraedit/umbraedit.conf``"
|
||||
|
||||
#: ../../source/technical/locations.rst:26
|
||||
msgid ""
|
||||
"Windows: ``C:\\Users\\<USER>\\AppData\\Local\\novelwriter\\novelwriter."
|
||||
"Windows: ``C:\\Users\\<USER>\\AppData\\Local\\umbraedit\\umbraedit."
|
||||
"conf``"
|
||||
msgstr ""
|
||||
"Windows: ``C:\\Users\\<USER>\\AppData\\Local\\novelwriter\\novelwriter."
|
||||
"Windows: ``C:\\Users\\<USER>\\AppData\\Local\\umbraedit\\umbraedit."
|
||||
"conf``"
|
||||
|
||||
#: ../../source/technical/locations.rst:28
|
||||
@@ -101,13 +101,13 @@ msgstr "Données d'application"
|
||||
|
||||
#: ../../source/technical/locations.rst:41
|
||||
msgid ""
|
||||
"novelWriter also stores a bit of data that is generated by the user's "
|
||||
"UmbraEdit also stores a bit of data that is generated by the user's "
|
||||
"actions. This includes the list of recent projects form the **Welcome** "
|
||||
"dialog. Custom themes should also be saved here. The system paths are "
|
||||
"provided by the Qt QStandardPaths_ class and its ``AppDataLocation`` "
|
||||
"value."
|
||||
msgstr ""
|
||||
"novelWriter stocke également un certain nombre de données générées par "
|
||||
"UmbraEdit stocke également un certain nombre de données générées par "
|
||||
"les actions de l'utilisateur. Cela inclut la liste des projets récents "
|
||||
"de la boîte de dialogue **Bienvenue**. Les thèmes personnalisés "
|
||||
"devraient également être sauvegardés ici. Les chemins d'accès au système "
|
||||
@@ -115,16 +115,16 @@ msgstr ""
|
||||
"``AppDataLocation``."
|
||||
|
||||
#: ../../source/technical/locations.rst:47
|
||||
msgid "Linux: ``~/.local/share/novelwriter/``"
|
||||
msgstr "Linux: ``~/.local/share/novelwriter/``"
|
||||
msgid "Linux: ``~/.local/share/umbraedit/``"
|
||||
msgstr "Linux: ``~/.local/share/umbraedit/``"
|
||||
|
||||
#: ../../source/technical/locations.rst:48
|
||||
msgid "MacOS: ``~/Library/Application Support/novelwriter/``"
|
||||
msgstr "MacOS: ``~/Library/Application Support/novelwriter/``"
|
||||
msgid "MacOS: ``~/Library/Application Support/umbraedit/``"
|
||||
msgstr "MacOS: ``~/Library/Application Support/umbraedit/``"
|
||||
|
||||
#: ../../source/technical/locations.rst:49
|
||||
msgid "Windows: ``C:\\Users\\<USER>\\AppData\\Roaming\\novelwriter\\``"
|
||||
msgstr "Windows: ``C:\\Users\\<USER>\\AppData\\Roaming\\novelwriter\\``"
|
||||
msgid "Windows: ``C:\\Users\\<USER>\\AppData\\Roaming\\umbraedit\\``"
|
||||
msgstr "Windows: ``C:\\Users\\<USER>\\AppData\\Roaming\\umbraedit\\``"
|
||||
|
||||
#: ../../source/technical/locations.rst:58
|
||||
msgid "The Application Data location also holds several folders:"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:39+0200\n"
|
||||
@@ -27,11 +27,11 @@ msgstr "Exécuter depuis la source"
|
||||
|
||||
#: ../../source/technical/source.rst:11
|
||||
msgid ""
|
||||
"This chapter describes various ways of running novelWriter directly from "
|
||||
"This chapter describes various ways of running UmbraEdit directly from "
|
||||
"the source code, and how to build the various components like the "
|
||||
"translation files and documentation."
|
||||
msgstr ""
|
||||
"Ce chapitre décrit les différentes façons d'exécuter novelWriter "
|
||||
"Ce chapitre décrit les différentes façons d'exécuter UmbraEdit "
|
||||
"directement à partir du code source, et comment construire les "
|
||||
"différents composants tels que les fichiers de traduction et la "
|
||||
"documentation."
|
||||
@@ -50,12 +50,12 @@ msgstr ""
|
||||
|
||||
#: ../../source/technical/source.rst:20
|
||||
msgid ""
|
||||
"Most of the custom commands for building packages of novelWriter, or "
|
||||
"Most of the custom commands for building packages of UmbraEdit, or "
|
||||
"building assets, are contained in the ``pkgutils.py`` script in the root "
|
||||
"of the source code. You can list the available commands by running:"
|
||||
msgstr ""
|
||||
"La plupart des commandes personnalisées pour construire des paquets de "
|
||||
"novelWriter, ou pour construire des actifs, sont contenues dans le "
|
||||
"UmbraEdit, ou pour construire des actifs, sont contenues dans le "
|
||||
"script ``pkgutils.py`` à la racine du code source. Vous pouvez lister "
|
||||
"les commandes disponibles en lançant :"
|
||||
|
||||
@@ -65,12 +65,12 @@ msgstr "Dépendances"
|
||||
|
||||
#: ../../source/technical/source.rst:34
|
||||
msgid ""
|
||||
"novelWriter has been designed to rely on as few dependencies as "
|
||||
"UmbraEdit has been designed to rely on as few dependencies as "
|
||||
"possible. Only the Python wrapper for the Qt GUI libraries is required. "
|
||||
"The package for spell checking is optional, but recommended. Everything "
|
||||
"else is handled with standard Python libraries."
|
||||
msgstr ""
|
||||
"novelWriter a été conçu pour s'appuyer sur le moins de dépendances "
|
||||
"UmbraEdit a été conçu pour s'appuyer sur le moins de dépendances "
|
||||
"possible. Seul le wrapper Python pour les bibliothèques Qt GUI est "
|
||||
"nécessaire. Le paquetage pour la vérification orthographique est "
|
||||
"optionnel, mais recommandé. Tout le reste est géré par les bibliothèques "
|
||||
@@ -79,10 +79,10 @@ msgstr ""
|
||||
#: ../../source/technical/source.rst:38
|
||||
msgid ""
|
||||
"The following Python packages are needed to run all features of "
|
||||
"novelWriter:"
|
||||
"UmbraEdit:"
|
||||
msgstr ""
|
||||
"Les paquets Python suivants sont nécessaires pour exécuter toutes les "
|
||||
"fonctionnalités de novelWriter :"
|
||||
"fonctionnalités de UmbraEdit :"
|
||||
|
||||
#: ../../source/technical/source.rst:40
|
||||
msgid "``PyQt6`` – needed for connecting with the Qt6 libraries."
|
||||
@@ -119,13 +119,13 @@ msgstr ""
|
||||
msgid ""
|
||||
"On Linux distros, the Qt library is usually split up into multiple "
|
||||
"packages. In some cases, secondary dependencies may not be installed "
|
||||
"automatically. For novelWriter, the library files for rendering the SVG "
|
||||
"automatically. For UmbraEdit, the library files for rendering the SVG "
|
||||
"icons may be left out and needs to be installed manually. This is the "
|
||||
"case on for instance Arch Linux."
|
||||
msgstr ""
|
||||
"Sur les distributions Linux, la bibliothèque Qt est généralement divisée "
|
||||
"en plusieurs paquets. Dans certains cas, des dépendances secondaires "
|
||||
"peuvent ne pas être installées automatiquement. Pour novelWriter, les "
|
||||
"peuvent ne pas être installées automatiquement. Pour UmbraEdit, les "
|
||||
"fichiers de la bibliothèque pour le rendu des icônes SVG peuvent être "
|
||||
"omis et doivent être installés manuellement. C'est le cas, par exemple, "
|
||||
"sous Arch Linux."
|
||||
@@ -136,11 +136,11 @@ msgstr "Compiler et installer à partir des sources"
|
||||
|
||||
#: ../../source/technical/source.rst:66
|
||||
msgid ""
|
||||
"If you want to install novelWriter directly from the source available on "
|
||||
"If you want to install UmbraEdit directly from the source available on "
|
||||
"GitHub_, you must first build the package using the Python Packaging "
|
||||
"Authority's build tool. It can be installed with:"
|
||||
msgstr ""
|
||||
"Si vous souhaitez installer novelWriter directement à partir des sources "
|
||||
"Si vous souhaitez installer UmbraEdit directement à partir des sources "
|
||||
"disponibles sur GitHub_, vous devez d'abord construire le paquet à "
|
||||
"l'aide de l'outil de construction de la Python Packaging Authority. Il "
|
||||
"peut être installé avec :"
|
||||
@@ -154,10 +154,10 @@ msgstr ""
|
||||
#: ../../source/technical/source.rst:79
|
||||
msgid ""
|
||||
"With the tool installed, run the following command from the root of the "
|
||||
"novelWriter source code:"
|
||||
"UmbraEdit source code:"
|
||||
msgstr ""
|
||||
"Une fois l'outil installé, exécutez la commande suivante à partir de la "
|
||||
"racine du code source de novelWriter :"
|
||||
"racine du code source de UmbraEdit :"
|
||||
|
||||
#: ../../source/technical/source.rst:85
|
||||
msgid ""
|
||||
@@ -176,17 +176,17 @@ msgstr "Création des fichiers de traduction"
|
||||
|
||||
#: ../../source/technical/source.rst:99
|
||||
msgid ""
|
||||
"If you installed novelWriter from a package, the translation files "
|
||||
"should be pre-built and included. If you're running novelWriter from the "
|
||||
"If you installed UmbraEdit from a package, the translation files "
|
||||
"should be pre-built and included. If you're running UmbraEdit from the "
|
||||
"source code, you will need to generate the files yourself. The files you "
|
||||
"need will be written to the ``novelwriter/assets/i18n`` folder, and will "
|
||||
"need will be written to the ``umbraedit/assets/i18n`` folder, and will "
|
||||
"have the ``.qm`` file extension."
|
||||
msgstr ""
|
||||
"Si vous avez installé novelWriter à partir d'un paquetage, les fichiers "
|
||||
"Si vous avez installé UmbraEdit à partir d'un paquetage, les fichiers "
|
||||
"de traduction devraient être préconstruits et inclus. Si vous exécutez "
|
||||
"novelWriter à partir du code source, vous devrez générer les fichiers "
|
||||
"UmbraEdit à partir du code source, vous devrez générer les fichiers "
|
||||
"vous-même. Les fichiers dont vous avez besoin seront écrits dans le "
|
||||
"dossier ``novelwriter/assets/i18n``, et auront l'extension ``.qm``."
|
||||
"dossier ``umbraedit/assets/i18n``, et auront l'extension ``.qm``."
|
||||
|
||||
#: ../../source/technical/source.rst:104
|
||||
msgid "You can build the ``.qm`` files with:"
|
||||
@@ -203,12 +203,12 @@ msgstr ""
|
||||
|
||||
#: ../../source/technical/source.rst:115
|
||||
msgid ""
|
||||
"If you want to improve novelWriter with translation files for another "
|
||||
"If you want to improve UmbraEdit with translation files for another "
|
||||
"language, or update an existing translation, instructions for how to "
|
||||
"contribute can be found in the ``README.md`` file in the ``i18n`` folder "
|
||||
"of the source code."
|
||||
msgstr ""
|
||||
"Si vous voulez améliorer novelWriter avec des fichiers de traduction "
|
||||
"Si vous voulez améliorer UmbraEdit avec des fichiers de traduction "
|
||||
"pour une autre langue, ou mettre à jour une traduction existante, les "
|
||||
"instructions pour contribuer peuvent être trouvées dans le fichier "
|
||||
"``README.md`` dans le dossier ``i18n`` du code source."
|
||||
@@ -270,13 +270,13 @@ msgstr ""
|
||||
msgid ""
|
||||
"This will build the English documentation as a PDF using LaTeX. The file "
|
||||
"will then be copied into the assets folder and made available in the "
|
||||
"**Help** menu in novelWriter. Replace ``en`` with ``all`` to build for "
|
||||
"**Help** menu in UmbraEdit. Replace ``en`` with ``all`` to build for "
|
||||
"all languages. The Sphinx build system has a few extra dependencies when "
|
||||
"building the PDF. Please check the `Sphinx Docs`_ for more details."
|
||||
msgstr ""
|
||||
"Cela permettra de créer la documentation anglaise au format PDF en "
|
||||
"utilisant LaTeX. Le fichier sera ensuite copié dans le dossier assets et "
|
||||
"rendu disponible dans le menu **Aide** de novelWriter. Remplacez ``en`` "
|
||||
"rendu disponible dans le menu **Aide** de UmbraEdit. Remplacez ``en`` "
|
||||
"par ``all`` pour construire pour toutes les langues. Le système de "
|
||||
"construction Sphinx a quelques dépendances supplémentaires lors de la "
|
||||
"construction du PDF. Veuillez consulter la `Docs Sphinx`_ pour plus de "
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:33+0200\n"
|
||||
@@ -27,10 +27,10 @@ msgstr "Comment les données sont stockées"
|
||||
|
||||
#: ../../source/technical/storage.rst:9
|
||||
msgid ""
|
||||
"This chapter contains details of how novelWriter stores and handles the "
|
||||
"This chapter contains details of how UmbraEdit stores and handles the "
|
||||
"project data."
|
||||
msgstr ""
|
||||
"Ce chapitre contient des détails sur la manière dont novelWriter stocke "
|
||||
"Ce chapitre contient des détails sur la manière dont UmbraEdit stocke "
|
||||
"et gère les données du projet."
|
||||
|
||||
#: ../../source/technical/storage.rst:13
|
||||
@@ -39,12 +39,12 @@ msgstr "Présentation générale"
|
||||
|
||||
#: ../../source/technical/storage.rst:15
|
||||
msgid ""
|
||||
"The files of a novelWriter project are stored in a dedicated project "
|
||||
"The files of a UmbraEdit project are stored in a dedicated project "
|
||||
"folder. The project structure is kept in a file at the root of this "
|
||||
"folder called ``nwProject.nwx``. All the document files and associated "
|
||||
"meta data are stored in other folders below the project folder."
|
||||
msgstr ""
|
||||
"Les fichiers d'un projet novelWriter sont stockés dans un dossier dédié "
|
||||
"Les fichiers d'un projet UmbraEdit sont stockés dans un dossier dédié "
|
||||
"au projet. La structure du projet est conservée dans un fichier à la "
|
||||
"racine de ce dossier appelé ``nwProject.nwx``. Tous les fichiers de "
|
||||
"documents et les métadonnées associées sont stockés dans d'autres "
|
||||
@@ -95,13 +95,13 @@ msgstr ""
|
||||
|
||||
#: ../../source/technical/storage.rst:35
|
||||
msgid ""
|
||||
"Since novelWriter has to keep track of a bunch of files and folders when "
|
||||
"Since UmbraEdit has to keep track of a bunch of files and folders when "
|
||||
"a project is open, it may not run well on some virtual file systems. A "
|
||||
"file or folder must be accessible with exactly the path it was saved or "
|
||||
"created with. An example where this is not the case is the way Google "
|
||||
"Drive is mapped on Linux Gnome desktops using gvfs/gio."
|
||||
msgstr ""
|
||||
"Comme novelWriter doit garder la trace d'un grand nombre de fichiers et "
|
||||
"Comme UmbraEdit doit garder la trace d'un grand nombre de fichiers et "
|
||||
"de dossiers lorsqu'un projet est ouvert, il peut ne pas fonctionner "
|
||||
"correctement sur certains systèmes de fichiers virtuels. Un fichier ou "
|
||||
"un dossier doit être accessible avec exactement le chemin avec lequel il "
|
||||
@@ -128,13 +128,13 @@ msgstr ""
|
||||
msgid ""
|
||||
"Editing text files in the ``content`` folder is less risky as these are "
|
||||
"just plain text. Editing the main project XML file, however, may make "
|
||||
"the project file unreadable and you may crash novelWriter and lose "
|
||||
"the project file unreadable and you may crash UmbraEdit and lose "
|
||||
"project structure information and project settings."
|
||||
msgstr ""
|
||||
"L'édition de fichiers texte dans le dossier ``content`` est moins "
|
||||
"risquée car il s'agit de texte simple. Cependant, éditer le fichier XML "
|
||||
"du projet principal peut rendre le fichier du projet illisible et vous "
|
||||
"risquez de planter novelWriter et de perdre les informations sur la "
|
||||
"risquez de planter UmbraEdit et de perdre les informations sur la "
|
||||
"structure et les paramètres du projet."
|
||||
|
||||
#: ../../source/technical/storage.rst:53
|
||||
@@ -143,16 +143,16 @@ msgstr "Structure du projet"
|
||||
|
||||
#: ../../source/technical/storage.rst:55
|
||||
msgid ""
|
||||
"All novelWriter files are written with utf-8 encoding. Since Python "
|
||||
"All UmbraEdit files are written with utf-8 encoding. Since Python "
|
||||
"automatically converts Unix line endings to Windows line endings on "
|
||||
"Windows systems, novelWriter does not make any adaptations to the "
|
||||
"Windows systems, UmbraEdit does not make any adaptations to the "
|
||||
"formatting on Windows systems. This is handled entirely by the Python "
|
||||
"standard library. Python also handles this when working on the same "
|
||||
"files on both Windows and Unix-based operating systems."
|
||||
msgstr ""
|
||||
"Tous les fichiers novelWriter sont écrits avec l'encodage utf-8. Comme "
|
||||
"Tous les fichiers UmbraEdit sont écrits avec l'encodage utf-8. Comme "
|
||||
"Python convertit automatiquement les fins de ligne Unix en fins de ligne "
|
||||
"Windows sur les systèmes Windows, novelWriter ne fait aucune adaptation "
|
||||
"Windows sur les systèmes Windows, UmbraEdit ne fait aucune adaptation "
|
||||
"au formatage sur les systèmes Windows. Ceci est entièrement géré par la "
|
||||
"bibliothèque standard de Python. Python s'en occupe également lorsqu'il "
|
||||
"travaille sur les mêmes fichiers sur les systèmes d'exploitation Windows "
|
||||
@@ -165,7 +165,7 @@ msgstr "Fichier principal du projet"
|
||||
#: ../../source/technical/storage.rst:65
|
||||
msgid ""
|
||||
"The project itself requires a dedicated folder for storing its files, "
|
||||
"where novelWriter will create its own \"file system\" where the "
|
||||
"where UmbraEdit will create its own \"file system\" where the "
|
||||
"project's folder and file hierarchy is described in a project XML file. "
|
||||
"This is the main project file in the project's root folder with the name "
|
||||
"``nwProject.nwx``. This file also contains all the meta data required "
|
||||
@@ -173,7 +173,7 @@ msgid ""
|
||||
"settings."
|
||||
msgstr ""
|
||||
"Le projet lui-même nécessite un dossier dédié pour stocker ses fichiers, "
|
||||
"où novelWriter créera son propre « système de fichiers » où la "
|
||||
"où UmbraEdit créera son propre « système de fichiers » où la "
|
||||
"hiérarchie des dossiers et des fichiers du projet est décrite dans un "
|
||||
"fichier XML du projet. C'est le fichier principal du projet dans le "
|
||||
"dossier racine du projet avec le nom ``nwProject.nwx``. Ce fichier "
|
||||
@@ -271,28 +271,28 @@ msgid ""
|
||||
"editor. The file can in principle be edited in any text editor, and is "
|
||||
"suitable for diffing and version control if so desired. Just make sure "
|
||||
"the file remains in utf-8 encoding, otherwise unicode characters may "
|
||||
"become mangled when the file is opened in novelWriter again."
|
||||
"become mangled when the file is opened in UmbraEdit again."
|
||||
msgstr ""
|
||||
"Chaque fichier de document contient une version en texte brut du texte "
|
||||
"de l'éditeur. Le fichier peut en principe être édité dans n'importe quel "
|
||||
"éditeur de texte, et convient pour le diffing et le contrôle de version "
|
||||
"si on le souhaite. Assurez-vous simplement que le fichier reste en "
|
||||
"encodage utf-8, sinon les caractères unicode risquent d'être altérés "
|
||||
"lorsque le fichier est ouvert dans novelWriter."
|
||||
"lorsque le fichier est ouvert dans UmbraEdit."
|
||||
|
||||
#: ../../source/technical/storage.rst:106
|
||||
msgid ""
|
||||
"Editing these files is generally not recommended. The reason for this is "
|
||||
"that the index will not be automatically updated when doing so, which "
|
||||
"means novelWriter doesn't know you've altered the file. If you *do* edit "
|
||||
"means UmbraEdit doesn't know you've altered the file. If you *do* edit "
|
||||
"a file in this manner, you should rebuild the index when you next open "
|
||||
"the project in novelWriter."
|
||||
"the project in UmbraEdit."
|
||||
msgstr ""
|
||||
"Il est généralement déconseillé de modifier ces fichiers. La raison en "
|
||||
"est que l'index ne sera pas automatiquement mis à jour, ce qui signifie "
|
||||
"que novelWriter ne sait pas que vous avez modifié le fichier. Si vous "
|
||||
"que UmbraEdit ne sait pas que vous avez modifié le fichier. Si vous "
|
||||
"modifiez un fichier de cette manière, vous devez reconstruire l'index "
|
||||
"lorsque vous ouvrez le projet dans novelWriter."
|
||||
"lorsque vous ouvrez le projet dans UmbraEdit."
|
||||
|
||||
#: ../../source/technical/storage.rst:111
|
||||
#, python-format
|
||||
@@ -304,7 +304,7 @@ msgid ""
|
||||
"as it contains the document label and the document class and layout. The "
|
||||
"lines can be deleted without any consequences to the rest of the content "
|
||||
"of the file, and will be added back the next time the document is saved "
|
||||
"in novelWriter."
|
||||
"in UmbraEdit."
|
||||
msgstr ""
|
||||
"Les premières lignes du fichier peuvent contenir des métadonnées "
|
||||
"commençant par les caractères ``%%~``. Ces lignes sont principalement là "
|
||||
@@ -314,7 +314,7 @@ msgstr ""
|
||||
"l'étiquette du document ainsi que la classe et la mise en page du "
|
||||
"document. Les lignes peuvent être supprimées sans conséquences pour le "
|
||||
"reste du contenu du fichier, et seront ajoutées la prochaine fois que le "
|
||||
"document sera sauvegardé dans novelWriter."
|
||||
"document sera sauvegardé dans UmbraEdit."
|
||||
|
||||
#: ../../source/technical/storage.rst:120
|
||||
msgid "The File Saving Process"
|
||||
@@ -345,7 +345,7 @@ msgid ""
|
||||
"number of files. The meta folder contains semi-important files. That is, "
|
||||
"they can be lost with only minor impact to the project. All files in "
|
||||
"this folder are JSON or JSON Lines files, although some other files may "
|
||||
"remain from earlier versions of novelWriter as they haven't all been "
|
||||
"remain from earlier versions of UmbraEdit as they haven't all been "
|
||||
"JSON files in the past."
|
||||
msgstr ""
|
||||
"Le dossier du projet contient un sous-dossier nommé ``meta``, contenant "
|
||||
@@ -353,7 +353,7 @@ msgstr ""
|
||||
"semi-importants. C'est-à-dire qu'ils peuvent être perdus avec un impact "
|
||||
"mineur sur le projet. Tous les fichiers de ce dossier sont des fichiers "
|
||||
"JSON ou JSON Lines, bien que certains autres fichiers puissent provenir "
|
||||
"de versions antérieures de novelWriter, car ils n'ont pas tous été des "
|
||||
"de versions antérieures de UmbraEdit, car ils n'ont pas tous été des "
|
||||
"fichiers JSON dans le passé."
|
||||
|
||||
#: ../../source/technical/storage.rst:136
|
||||
@@ -374,12 +374,12 @@ msgstr "L'index des projets"
|
||||
msgid ""
|
||||
"Between writing sessions, the project index is saved in a JSON file in "
|
||||
"``meta/index.json``. This file is not critical. If it is lost, it can be "
|
||||
"completely rebuilt from within novelWriter from the **Tools** menu."
|
||||
"completely rebuilt from within UmbraEdit from the **Tools** menu."
|
||||
msgstr ""
|
||||
"Entre les sessions d'écriture, l'index du projet est sauvegardé dans un "
|
||||
"fichier JSON dans ``meta/index.json``. Ce fichier n'est pas critique. "
|
||||
"S'il est perdu, il peut être complètement reconstruit à partir de "
|
||||
"novelWriter dans le menu **Outils**."
|
||||
"UmbraEdit dans le menu **Outils**."
|
||||
|
||||
#: ../../source/technical/storage.rst:147
|
||||
msgid ""
|
||||
@@ -399,17 +399,17 @@ msgid ""
|
||||
"The integrity of the index is checked when the file is loaded. It is "
|
||||
"possible to corrupt the index if the file is manually edited and "
|
||||
"manipulated, so the check is important to avoid sudden crashes of "
|
||||
"novelWriter. If the file contains errors, novelWriter will automatically "
|
||||
"build it anew. If the check somehow fails and novelWriter keeps "
|
||||
"UmbraEdit. If the file contains errors, UmbraEdit will automatically "
|
||||
"build it anew. If the check somehow fails and UmbraEdit keeps "
|
||||
"crashing, you can delete the file manually and rebuild the index. If "
|
||||
"this too fails, you have likely encountered a bug."
|
||||
msgstr ""
|
||||
"L'intégrité de l'index est vérifiée lorsque le fichier est chargé. Il "
|
||||
"est possible de corrompre l'index si le fichier est édité et manipulé "
|
||||
"manuellement, c'est pourquoi cette vérification est importante pour "
|
||||
"éviter les plantages soudains de novelWriter. Si le fichier contient des "
|
||||
"erreurs, novelWriter le reconstruira automatiquement. Si la vérification "
|
||||
"échoue d'une manière ou d'une autre et que novelWriter continue à se "
|
||||
"éviter les plantages soudains de UmbraEdit. Si le fichier contient des "
|
||||
"erreurs, UmbraEdit le reconstruira automatiquement. Si la vérification "
|
||||
"échoue d'une manière ou d'une autre et que UmbraEdit continue à se "
|
||||
"bloquer, vous pouvez supprimer le fichier manuellement et reconstruire "
|
||||
"l'index. Si cela échoue également, vous avez probablement rencontré un "
|
||||
"bogue."
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 11:41+0200\n"
|
||||
@@ -27,10 +27,10 @@ msgstr "Exécution des tests"
|
||||
|
||||
#: ../../source/technical/tests.rst:7
|
||||
msgid ""
|
||||
"The novelWriter source code is well covered by tests. The test framework used "
|
||||
"The UmbraEdit source code is well covered by tests. The test framework used "
|
||||
"for the development is ``pytest`` with the use of an extension for Qt."
|
||||
msgstr ""
|
||||
"Le code source de novelWriter est bien couvert par des tests. Le cadre de test "
|
||||
"Le code source de UmbraEdit est bien couvert par des tests. Le cadre de test "
|
||||
"utilisé pour le développement est ``pytest`` avec l'utilisation d'une extension "
|
||||
"pour Qt."
|
||||
|
||||
@@ -66,12 +66,12 @@ msgstr ""
|
||||
|
||||
#: ../../source/technical/tests.rst:33
|
||||
msgid ""
|
||||
"Since several of the tests involve opening up the novelWriter GUI, you may want "
|
||||
"Since several of the tests involve opening up the UmbraEdit GUI, you may want "
|
||||
"to disable the GUI for the duration of the test run. Moving your mouse while "
|
||||
"the tests are running may otherwise interfere with the execution of some tests."
|
||||
msgstr ""
|
||||
"Puisque plusieurs des tests impliquent l'ouverture de l'interface graphique de "
|
||||
"novelWriter, vous pouvez désactiver l'interface graphique pour la durée de "
|
||||
"UmbraEdit, vous pouvez désactiver l'interface graphique pour la durée de "
|
||||
"l'exécution du test. Si vous déplacez votre souris pendant que les tests sont "
|
||||
"en cours d'exécution, vous risquez d'interférer avec l'exécution de certains "
|
||||
"tests."
|
||||
@@ -110,23 +110,23 @@ msgstr ""
|
||||
|
||||
#: ../../source/technical/tests.rst:57
|
||||
msgid ""
|
||||
"You can also run tests per subpackage of novelWriter with the ``-m`` command. "
|
||||
"You can also run tests per subpackage of UmbraEdit with the ``-m`` command. "
|
||||
"The available subpackage groups are ``base``, ``core``, and ``gui``. Consider "
|
||||
"for instance:"
|
||||
msgstr ""
|
||||
"Vous pouvez aussi lancer des tests par sous-paquet de novelWriter avec la "
|
||||
"Vous pouvez aussi lancer des tests par sous-paquet de UmbraEdit avec la "
|
||||
"commande ``-m``. Les groupes de sous-paquetages disponibles sont ``base``, "
|
||||
"``core``, et ``gui``. Prenons un exemple :"
|
||||
|
||||
#: ../../source/technical/tests.rst:64
|
||||
msgid ""
|
||||
"This will only run the tests of the \"core\" package, that is, all the classes "
|
||||
"that deal with the project data of a novelWriter project. The \"gui\" tests, "
|
||||
"that deal with the project data of a UmbraEdit project. The \"gui\" tests, "
|
||||
"likewise, will run the tests for the GUI components, and the \"base\" tests "
|
||||
"cover the bits in-between."
|
||||
msgstr ""
|
||||
"Ceci n'exécutera que les tests du paquet « core », c'est-à-dire toutes les "
|
||||
"classes qui traitent les données d'un projet novelWriter. Les tests « gui », de "
|
||||
"classes qui traitent les données d'un projet UmbraEdit. Les tests « gui », de "
|
||||
"même, exécuteront les tests des composants de l'interface graphique, et les "
|
||||
"tests « base » couvriront les éléments intermédiaires."
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 16:04+0200\n"
|
||||
@@ -27,12 +27,12 @@ msgstr "Mise en forme avancée"
|
||||
|
||||
#: ../../source/usage/advanced_formatting.rst:7
|
||||
msgid ""
|
||||
"Standard Markdown formatting is somewhat limited, so novelWriter has some "
|
||||
"Standard Markdown formatting is somewhat limited, so UmbraEdit has some "
|
||||
"additional formatting codes for special use cases. These codes are all based "
|
||||
"on brackets, and some allow an additional value to be set after a colon."
|
||||
msgstr ""
|
||||
"Le formatage Markdown standard est quelque peu limité, c'est pourquoi "
|
||||
"novelWriter dispose de quelques codes de formatage supplémentaires pour des "
|
||||
"UmbraEdit dispose de quelques codes de formatage supplémentaires pour des "
|
||||
"cas d'utilisation particuliers. Ces codes sont tous basés sur les crochets, et "
|
||||
"certains permettent de définir une valeur supplémentaire après les deux points."
|
||||
|
||||
@@ -262,12 +262,12 @@ msgstr "Insérer le nombre de mots dans le texte"
|
||||
#: ../../source/usage/advanced_formatting.rst:106
|
||||
msgid ""
|
||||
"The cover page of a manuscript normally has the word count stated on it. Any "
|
||||
"statistics value collected by novelWriter can be inserted into any document "
|
||||
"statistics value collected by UmbraEdit can be inserted into any document "
|
||||
"using a special shortcode. You can insert the code for any of the available "
|
||||
"statistics values from the **Insert** menu under **Word/Character Count**."
|
||||
msgstr ""
|
||||
"La page de couverture d'un manuscrit indique normalement le nombre de mots. "
|
||||
"Toute valeur statistique collectée par novelWriter peut être insérée dans "
|
||||
"Toute valeur statistique collectée par UmbraEdit peut être insérée dans "
|
||||
"n'importe quel document à l'aide d'un shortcode spécial. Vous pouvez insérer "
|
||||
"le code pour n'importe quelle valeur statistique disponible dans le menu "
|
||||
"**Insérer** sous **Nombre de mots/caractères**."
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 14:45+0200\n"
|
||||
@@ -28,11 +28,11 @@ msgstr "Alignement et indentation"
|
||||
#: ../../source/usage/alignment_and_indent.rst:7
|
||||
msgid ""
|
||||
"The Markdown standard doesn't have commands for aligning text, so "
|
||||
"novelWriter adds its own syntax for this. It also has syntax for "
|
||||
"UmbraEdit adds its own syntax for this. It also has syntax for "
|
||||
"indentation, which is similar to Markdown block quotes."
|
||||
msgstr ""
|
||||
"Le standard Markdown n'a pas de commandes pour aligner le texte, donc "
|
||||
"novelWriter ajoute sa propre syntaxe pour cela. Il dispose également "
|
||||
"UmbraEdit ajoute sa propre syntaxe pour cela. Il dispose également "
|
||||
"d'une syntaxe pour l'indentation, qui est similaire aux guillemets de "
|
||||
"bloc de Markdown."
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 10:44+0200\n"
|
||||
@@ -27,11 +27,11 @@ msgstr "Mise en forme de base"
|
||||
|
||||
#: ../../source/usage/basic_formatting.rst:9
|
||||
msgid ""
|
||||
"The basic text formatting syntax of novelWriter is based on Markdown_. "
|
||||
"The basic text formatting syntax of UmbraEdit is based on Markdown_. "
|
||||
"It is only a subset of the Markdown syntax though. Lists, images, and "
|
||||
"links are not supported."
|
||||
msgstr ""
|
||||
"La syntaxe de formatage de texte de base de novelWriter est basée sur "
|
||||
"La syntaxe de formatage de texte de base de UmbraEdit est basée sur "
|
||||
"Markdown_. Il ne s'agit toutefois que d'un sous-ensemble de la syntaxe "
|
||||
"Markdown. Les listes, les images et les liens ne sont pas pris en charge."
|
||||
|
||||
@@ -88,10 +88,10 @@ msgstr ":bdg-danger:`Incorrect`"
|
||||
|
||||
#: ../../source/usage/basic_formatting.rst:50
|
||||
msgid ""
|
||||
"If you do as shown in the \"Incorrect\" example, novelWriter will "
|
||||
"If you do as shown in the \"Incorrect\" example, UmbraEdit will "
|
||||
"understand this as a single paragraph with two lines."
|
||||
msgstr ""
|
||||
"Si vous procédez comme dans l'exemple « Incorrect », novelWriter "
|
||||
"Si vous procédez comme dans l'exemple « Incorrect », UmbraEdit "
|
||||
"comprendra qu'il s'agit d'un seul paragraphe de deux lignes."
|
||||
|
||||
#: ../../source/usage/basic_formatting.rst:57
|
||||
@@ -137,14 +137,14 @@ msgid ""
|
||||
"emphasis, although Markdown generally also supports ``__`` for strong "
|
||||
"and ``*`` for emphasis. However, since the differentiation makes the "
|
||||
"highlighting and conversion significantly simpler and faster, in "
|
||||
"novelWriter this is a rule, not just a recommendation."
|
||||
"UmbraEdit this is a rule, not just a recommendation."
|
||||
msgstr ""
|
||||
"Dans les guides Markdown, il est souvent recommandé de différencier le "
|
||||
"gras de l'italique en utilisant ``**`` pour le gras et ``_`` pour "
|
||||
"l'italique, bien que Markdown supporte également ``__`` pour le gras et "
|
||||
"``*`` pour l'italique. Cependant, puisque la différenciation rend la "
|
||||
"mise en évidence et la conversion significativement plus simple et plus "
|
||||
"rapide, dans novelWriter il s'agit d'une règle et non d'une simple "
|
||||
"rapide, dans UmbraEdit il s'agit d'une règle et non d'une simple "
|
||||
"recommandation."
|
||||
|
||||
#: ../../source/usage/basic_formatting.rst:76
|
||||
@@ -206,13 +206,13 @@ msgstr ""
|
||||
|
||||
#: ../../source/usage/basic_formatting.rst:92
|
||||
msgid ""
|
||||
"novelWriter supports standard escape syntax for the emphasis markup "
|
||||
"UmbraEdit supports standard escape syntax for the emphasis markup "
|
||||
"characters in case the editor misunderstands your intended usage of "
|
||||
"them. That is, ``\\*``, ``\\_`` and ``\\~`` will generate a plain ``*``, "
|
||||
"``_`` and ``~``, respectively, without interpreting them as part of the "
|
||||
"markup."
|
||||
msgstr ""
|
||||
"novelWriter supporte la syntaxe d'échappement standard pour les "
|
||||
"UmbraEdit supporte la syntaxe d'échappement standard pour les "
|
||||
"caractères d'accentuation au cas où l'éditeur ne comprendrait pas "
|
||||
"l'usage que vous voulez en faire. C'est-à-dire que ``\\*``, ``\\_`` et "
|
||||
"``\\~`` généreront respectivement un ``*``, ``_`` et ``~``, sans les "
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-29 14:27+0200\n"
|
||||
@@ -27,12 +27,12 @@ msgstr "Chapitres et scènes"
|
||||
|
||||
#: ../../source/usage/chapters_and_scenes.rst:9
|
||||
msgid ""
|
||||
"Since novelWriter uses a plain text format, the structure of your novel must "
|
||||
"Since UmbraEdit uses a plain text format, the structure of your novel must "
|
||||
"follow a certain set of simple rules. For documents in a **Novel** type root "
|
||||
"folder, it is the heading that determines if the document is a chapter or a "
|
||||
"scene."
|
||||
msgstr ""
|
||||
"Comme novelWriter utilise un format de texte brut, la structure de votre "
|
||||
"Comme UmbraEdit utilise un format de texte brut, la structure de votre "
|
||||
"roman doit suivre un certain nombre de règles simples. Pour les documents "
|
||||
"situés dans un dossier racine de type **Roman**, c'est le titre qui détermine "
|
||||
"s'il s'agit d'un chapitre ou d'une scène."
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 11:20+0200\n"
|
||||
@@ -66,11 +66,11 @@ msgstr ""
|
||||
|
||||
#: ../../source/usage/comments.rst:24
|
||||
msgid ""
|
||||
"For the most part, novelWriter completely ignores these comments. They "
|
||||
"For the most part, UmbraEdit completely ignores these comments. They "
|
||||
"are not included in your word or character counts either, and are only "
|
||||
"displayed in the document viewer panel if you enable them."
|
||||
msgstr ""
|
||||
"La plupart du temps, novelWriter ignore complètement ces commentaires. "
|
||||
"La plupart du temps, UmbraEdit ignore complètement ces commentaires. "
|
||||
"Ils ne sont pas non plus inclus dans le décompte des mots ou des "
|
||||
"caractères, et ne sont affichés dans le panneau de visualisation du "
|
||||
"document que si vous les activez."
|
||||
@@ -223,13 +223,13 @@ msgstr "Texte ignoré"
|
||||
msgid ""
|
||||
"If you want to completely ignore some of the text in your documents, but "
|
||||
"are not ready to delete it, you can add ``%~`` before the text paragraph "
|
||||
"or line. This will cause novelWriter to skip the text entirely when "
|
||||
"or line. This will cause UmbraEdit to skip the text entirely when "
|
||||
"generating previews or building manuscripts."
|
||||
msgstr ""
|
||||
"Si vous souhaitez ignorer complètement une partie du texte dans vos "
|
||||
"documents, mais que vous n'êtes pas prêt à l'effacer, vous pouvez "
|
||||
"ajouter ``%~`` devant le paragraphe ou la ligne de texte. Cela permettra "
|
||||
"à novelWriter d'ignorer complètement le texte lors de la génération "
|
||||
"à UmbraEdit d'ignorer complètement le texte lors de la génération "
|
||||
"d'aperçus ou de la construction de manuscrits."
|
||||
|
||||
#: ../../source/usage/comments.rst:150
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 16:13+0200\n"
|
||||
@@ -30,13 +30,13 @@ msgid ""
|
||||
"Front and back matter documents are documents that go before and after "
|
||||
"your main story text. They can include pages like your cover page, "
|
||||
"content tables, prologues, epilogues, etc. These special pages and "
|
||||
"sections are supported to some extent by novelWriter."
|
||||
"sections are supported to some extent by UmbraEdit."
|
||||
msgstr ""
|
||||
"Les documents de début et de fin sont des documents qui précèdent et "
|
||||
"suivent le texte principal de l'histoire. Il peut s'agir de pages comme "
|
||||
"la page de couverture, de tables des matières, de prologues, "
|
||||
"d'épilogues, etc. Ces pages et sections spéciales sont prises en charge "
|
||||
"dans une certaine mesure par novelWriter."
|
||||
"dans une certaine mesure par UmbraEdit."
|
||||
|
||||
#: ../../source/usage/front_back_matter.rst:15
|
||||
msgid "The Title Page"
|
||||
@@ -73,10 +73,10 @@ msgstr ":bdg-info:`Exemple`"
|
||||
|
||||
#: ../../source/usage/front_back_matter.rst:27
|
||||
msgid ""
|
||||
"This is the title page novelWriter generates automatically for a new "
|
||||
"This is the title page UmbraEdit generates automatically for a new "
|
||||
"project as of version 2.6:"
|
||||
msgstr ""
|
||||
"Il s'agit de la page de titre que novelWriter génère automatiquement "
|
||||
"Il s'agit de la page de titre que UmbraEdit génère automatiquement "
|
||||
"pour un nouveau projet à partir de la version 2.6 :"
|
||||
|
||||
#: ../../source/usage/front_back_matter.rst:43
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 16:22+0200\n"
|
||||
@@ -28,10 +28,10 @@ msgstr "Trucs et astuces"
|
||||
#: ../../source/usage/howto.rst:9
|
||||
msgid ""
|
||||
"This is a list of hopefully helpful little tips on how to get the most out of "
|
||||
"novelWriter."
|
||||
"UmbraEdit."
|
||||
msgstr ""
|
||||
"Il s'agit d'une liste de petits conseils, que nous espérons utiles, sur la "
|
||||
"façon de tirer le meilleur parti de novelWriter."
|
||||
"façon de tirer le meilleur parti de UmbraEdit."
|
||||
|
||||
#: ../../source/usage/howto.rst:12
|
||||
msgid ""
|
||||
@@ -122,12 +122,12 @@ msgstr "Comment créer un tableau ?"
|
||||
|
||||
#: ../../source/usage/howto.rst:52
|
||||
msgid ""
|
||||
"The formatting tools available in novelWriter don't allow for complex "
|
||||
"The formatting tools available in UmbraEdit don't allow for complex "
|
||||
"structures like tables. However, the editor does render tabs in a similar way "
|
||||
"that regular word processors do. You can set the width of a tab in "
|
||||
"**Preferences**."
|
||||
msgstr ""
|
||||
"Les outils de formatage disponibles dans novelWriter ne permettent pas de créer "
|
||||
"Les outils de formatage disponibles dans UmbraEdit ne permettent pas de créer "
|
||||
"des structures complexes telles que des tableaux. Cependant, l'éditeur rend les "
|
||||
"tabulations de la même manière que les traitements de texte classiques. Vous "
|
||||
"pouvez définir la largeur d'un onglet dans les **Préférences**."
|
||||
@@ -271,10 +271,10 @@ msgstr "Comment convertir mon projet au format yWriter ?"
|
||||
#: ../../source/usage/howto.rst:116
|
||||
msgid ""
|
||||
"There is a tool available that lets you convert a `yWriter <http://spacejock."
|
||||
"com/yWriter7.html>`_ project to a novelWriter project, and vice versa."
|
||||
"com/yWriter7.html>`_ project to a UmbraEdit project, and vice versa."
|
||||
msgstr ""
|
||||
"Il existe un outil qui vous permet de convertir un projet `yWriter <http://"
|
||||
"spacejock.com/yWriter7.html>`_ en un projet novelWriter, et vice versa."
|
||||
"spacejock.com/yWriter7.html>`_ en un projet UmbraEdit, et vice versa."
|
||||
|
||||
#: ../../source/usage/howto.rst:119
|
||||
msgid ""
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-27 21:24+0200\n"
|
||||
@@ -27,13 +27,13 @@ msgstr "Introduction"
|
||||
|
||||
#: ../../source/usage/introduction.rst:9
|
||||
msgid ""
|
||||
"In a nutshell, novelWriter is a plain text editor that lets you organise "
|
||||
"In a nutshell, UmbraEdit is a plain text editor that lets you organise "
|
||||
"one or more novels and associated notes as many smaller documents. You "
|
||||
"can at any time generate standard document formats from these plain text "
|
||||
"documents. Whether it is an outline of your story, a draft, a complete "
|
||||
"manuscript, or even a collection of your character notes or other notes."
|
||||
msgstr ""
|
||||
"En bref, novelWriter est un éditeur de texte brut qui vous permet "
|
||||
"En bref, UmbraEdit est un éditeur de texte brut qui vous permet "
|
||||
"d'organiser un ou plusieurs romans et les notes associées sous la forme "
|
||||
"de plusieurs petits documents. Vous pouvez à tout moment générer des "
|
||||
"formats de documents standard à partir de ces documents en texte brut. "
|
||||
@@ -60,14 +60,14 @@ msgid ""
|
||||
"text. At the very least you need emphasis. Most people are familiar with "
|
||||
"adding emphasis using ``_underscores_`` and ``**asterisks**``. This "
|
||||
"formatting standard comes from Markdown_ and is supported by "
|
||||
"novelWriter. It also uses Markdown formatting for defining document "
|
||||
"UmbraEdit. It also uses Markdown formatting for defining document "
|
||||
"headings, which is how you distinguish between chapters and scenes."
|
||||
msgstr ""
|
||||
"Bien entendu, vous avez probablement besoin d'une sorte de mise en forme "
|
||||
"minimale pour votre texte. Au minimum, vous avez besoin d'une mise en "
|
||||
"valeur. La plupart des gens sont familiers avec l'ajout d'emphase en "
|
||||
"utilisant ``_underscores_`` et ``**asterisks**``. Ce standard de "
|
||||
"formatage vient de Markdown_ et est supporté par novelWriter. Il utilise "
|
||||
"formatage vient de Markdown_ et est supporté par UmbraEdit. Il utilise "
|
||||
"également le formatage Markdown pour définir les titres du document, ce "
|
||||
"qui permet de faire la distinction entre les chapitres et les scènes."
|
||||
|
||||
@@ -91,13 +91,13 @@ msgstr "Ajout de métadonnées"
|
||||
|
||||
#: ../../source/usage/introduction.rst:35
|
||||
msgid ""
|
||||
"In addition to the body text of your story, novelWriter allows you to "
|
||||
"In addition to the body text of your story, UmbraEdit allows you to "
|
||||
"enter some additional meta data into your text documents to indicate "
|
||||
"things like which characters are present in a chapter or scene, whose "
|
||||
"point of view we're seeing, what location the events take place in, and "
|
||||
"so on."
|
||||
msgstr ""
|
||||
"Outre le corps du texte de votre histoire, novelWriter vous permet de "
|
||||
"Outre le corps du texte de votre histoire, UmbraEdit vous permet de "
|
||||
"saisir des métadonnées supplémentaires dans vos documents texte afin "
|
||||
"d'indiquer les personnages présents dans un chapitre ou une scène, le "
|
||||
"point de vue de chacun, le lieu où se déroulent les événements, etc."
|
||||
@@ -132,26 +132,26 @@ msgstr "Restrictions"
|
||||
|
||||
#: ../../source/usage/introduction.rst:49
|
||||
msgid ""
|
||||
"Please keep in mind that novelWriter is designed for writing fiction, so "
|
||||
"Please keep in mind that UmbraEdit is designed for writing fiction, so "
|
||||
"the formatting features available are limited to those relevant for this "
|
||||
"purpose. It is *not* suitable for technical writing. It is also *not* a "
|
||||
"full-featured Markdown editor."
|
||||
msgstr ""
|
||||
"Gardez à l'esprit que novelWriter est conçu pour l'écriture de fictions, "
|
||||
"Gardez à l'esprit que UmbraEdit est conçu pour l'écriture de fictions, "
|
||||
"et que les fonctions de formatage disponibles sont donc limitées à "
|
||||
"celles qui sont pertinentes à cette fin. Il n'est *pas* adapté à la "
|
||||
"rédaction technique. Ce n'est pas non plus un éditeur Markdown complet."
|
||||
|
||||
#: ../../source/usage/introduction.rst:53
|
||||
msgid ""
|
||||
"In addition, novelWriter is not intended as a tool for organising "
|
||||
"In addition, UmbraEdit is not intended as a tool for organising "
|
||||
"research for writing, and therefore lacks formatting features you may "
|
||||
"need for this purpose. The notes feature in is mainly intended for "
|
||||
"character profiles and plot outlines. It is recommended to use a proper "
|
||||
"note-taking tool for research. This is anyway more practical as you may "
|
||||
"use the same research for multiple projects."
|
||||
msgstr ""
|
||||
"En outre, novelWriter n'est pas conçu comme un outil d'organisation de "
|
||||
"En outre, UmbraEdit n'est pas conçu comme un outil d'organisation de "
|
||||
"la recherche en vue de l'écriture, et ne dispose donc pas des fonctions "
|
||||
"de formatage dont vous pourriez avoir besoin à cette fin. La fonction de "
|
||||
"notes est principalement destinée aux profils de personnages et aux "
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 14:11+0200\n"
|
||||
@@ -115,11 +115,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"The intended usage of each type of root folder is listed below. However, "
|
||||
"aside from the **Novel** folder, no restrictions are applied by "
|
||||
"novelWriter on what you put in them. You can use them however you want."
|
||||
"UmbraEdit on what you put in them. You can use them however you want."
|
||||
msgstr ""
|
||||
"L'utilisation prévue de chaque type de dossier racine est indiquée ci-"
|
||||
"dessous. Cependant, à part le dossier **Roman**, aucune restriction "
|
||||
"n'est appliquée par novelWriter sur ce que vous mettez dans ces "
|
||||
"n'est appliquée par UmbraEdit sur ce que vous mettez dans ces "
|
||||
"dossiers. Vous pouvez les utiliser comme bon vous semble."
|
||||
|
||||
#: ../../source/usage/organising_project.rst:46
|
||||
@@ -294,11 +294,11 @@ msgstr "**Poubelle**"
|
||||
msgid ""
|
||||
"This folder behaves like you expect. Anything dropped in here can be "
|
||||
"deleted permanently from the project, and the content doesn't show up "
|
||||
"anywhere else in novelWriter."
|
||||
"anywhere else in UmbraEdit."
|
||||
msgstr ""
|
||||
"Ce dossier se comporte comme vous vous y attendez. Tout ce qui y est "
|
||||
"déposé peut être supprimé définitivement du projet, et son contenu "
|
||||
"n'apparaît nulle part ailleurs dans novelWriter."
|
||||
"n'apparaît nulle part ailleurs dans UmbraEdit."
|
||||
|
||||
#: ../../source/usage/organising_project.rst:102
|
||||
msgid ""
|
||||
@@ -340,11 +340,11 @@ msgstr ""
|
||||
|
||||
#: ../../source/usage/organising_project.rst:120
|
||||
msgid ""
|
||||
"When novelWriter is processing the documents in a project, like for "
|
||||
"When UmbraEdit is processing the documents in a project, like for "
|
||||
"instance when you create a manuscript from it, these folders are "
|
||||
"ignored. Only the order of the documents themselves matter."
|
||||
msgstr ""
|
||||
"Lorsque novelWriter traite les documents d'un projet, comme par exemple "
|
||||
"Lorsque UmbraEdit traite les documents d'un projet, comme par exemple "
|
||||
"lorsque vous créez un manuscrit à partir de ce projet, ces dossiers sont "
|
||||
"ignorés. Seul l'ordre des documents eux-mêmes compte."
|
||||
|
||||
@@ -391,13 +391,13 @@ msgid ""
|
||||
"These are the documents that make up your story or novel. They can only "
|
||||
"be added under a root folder of type **Novel**. You can technically also "
|
||||
"add them under **Archive**. See :ref:`docs_usage_headings` for more "
|
||||
"details on how these documents are handled by novelWriter."
|
||||
"details on how these documents are handled by UmbraEdit."
|
||||
msgstr ""
|
||||
"Ce sont les documents qui constituent votre histoire ou votre roman. Ils "
|
||||
"ne peuvent être ajoutés que dans un dossier racine de type **Roman**. "
|
||||
"Techniquement, vous pouvez aussi les ajouter dans **Archive**. Voir :ref:"
|
||||
"`docs_usage_headings` pour plus de détails sur la façon dont ces "
|
||||
"documents sont gérés par novelWriter."
|
||||
"documents sont gérés par UmbraEdit."
|
||||
|
||||
#: ../../source/usage/organising_project.rst:145
|
||||
msgid "**Project Notes**"
|
||||
@@ -502,13 +502,13 @@ msgstr "Importance et état"
|
||||
msgid ""
|
||||
"Each document or folder in your project can have either a \"Status\" or "
|
||||
"\"Importance\" label set. These are labels and icons that you control "
|
||||
"and define yourself, and novelWriter doesn't use them for anything. You "
|
||||
"and define yourself, and UmbraEdit doesn't use them for anything. You "
|
||||
"can modify these labels in **Project Settings**. See :ref:"
|
||||
"`docs_ui_projects_settings_status` for more details."
|
||||
msgstr ""
|
||||
"Chaque document ou dossier de votre projet peut avoir une étiquette « "
|
||||
"Statut » ou « Importance ». Ce sont des étiquettes et des icônes que "
|
||||
"vous contrôlez et définissez vous-même, et novelWriter ne les utilise "
|
||||
"vous contrôlez et définissez vous-même, et UmbraEdit ne les utilise "
|
||||
"pas pour quoi que ce soit. Vous pouvez modifier ces étiquettes dans "
|
||||
"**Paramètres du projet**. Voir :ref:`docs_ui_projects_settings_status` "
|
||||
"pour plus de détails."
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 14:07+0200\n"
|
||||
@@ -27,27 +27,27 @@ msgstr "Étiquettes et références"
|
||||
|
||||
#: ../../source/usage/tags_and_references.rst:7
|
||||
msgid ""
|
||||
"One of the core features of novelWriter is its **Tags and References** "
|
||||
"system. This is perhaps one of the features that makes novelWriter "
|
||||
"One of the core features of UmbraEdit is its **Tags and References** "
|
||||
"system. This is perhaps one of the features that makes UmbraEdit "
|
||||
"different from other similar applications. It is therefore not always "
|
||||
"obvious to new users how this is supposed to work."
|
||||
msgstr ""
|
||||
"L'une des principales caractéristiques de novelWriter est son système "
|
||||
"L'une des principales caractéristiques de UmbraEdit est son système "
|
||||
"d'**Étiquettes et de Références**. C'est peut-être l'une des "
|
||||
"caractéristiques qui différencie novelWriter d'autres applications "
|
||||
"caractéristiques qui différencie UmbraEdit d'autres applications "
|
||||
"similaires. Il n'est donc pas toujours évident pour les nouveaux "
|
||||
"utilisateurs de comprendre comment cela est censé fonctionner."
|
||||
|
||||
#: ../../source/usage/tags_and_references.rst:11
|
||||
msgid ""
|
||||
"In novelWriter there are no forms or tables to fill in to define "
|
||||
"In UmbraEdit there are no forms or tables to fill in to define "
|
||||
"characters, locations or other elements of your story. Instead, you "
|
||||
"create documents in one of the root folders for notes. Within these "
|
||||
"documents you can set **tags**, like for instance for your main "
|
||||
"character. If you then want to annotate a scene with this character as "
|
||||
"its point-of-view, you create a **reference** to the tag."
|
||||
msgstr ""
|
||||
"Dans novelWriter, il n'y a pas de formulaires ou de tableaux à remplir "
|
||||
"Dans UmbraEdit, il n'y a pas de formulaires ou de tableaux à remplir "
|
||||
"pour définir les personnages, les lieux ou d'autres éléments de votre "
|
||||
"histoire. Au lieu de cela, vous créez des documents dans l'un des "
|
||||
"dossiers racine pour les notes. Dans ces documents, vous pouvez définir "
|
||||
@@ -76,12 +76,12 @@ msgstr "Comment utiliser les étiquettes"
|
||||
|
||||
#: ../../source/usage/tags_and_references.rst:30
|
||||
msgid ""
|
||||
"The structure of your novelWriter project is inferred from the headings "
|
||||
"The structure of your UmbraEdit project is inferred from the headings "
|
||||
"within the documents, not the documents themselves. See :ref:"
|
||||
"`docs_usage_headings` for more details. Therefore, metadata is also "
|
||||
"associated with headings, and not the documents themselves."
|
||||
msgstr ""
|
||||
"La structure de votre projet novelWriter est déduite des titres des "
|
||||
"La structure de votre projet UmbraEdit est déduite des titres des "
|
||||
"documents, et non des documents eux-mêmes. Voir :ref:"
|
||||
"`docs_usage_headings` pour plus de détails. Par conséquent, les "
|
||||
"métadonnées sont également associées aux titres, et non aux documents eux-"
|
||||
@@ -89,10 +89,10 @@ msgstr ""
|
||||
|
||||
#: ../../source/usage/tags_and_references.rst:34
|
||||
msgid ""
|
||||
"A \"tag\" in novelWriter is a word or phrase that you define as belonging "
|
||||
"A \"tag\" in UmbraEdit is a word or phrase that you define as belonging "
|
||||
"to a heading. Tags are set by using the ``@tag`` keyword."
|
||||
msgstr ""
|
||||
"Une « étiquette » dans novelWriter est un mot ou une phrase que vous "
|
||||
"Une « étiquette » dans UmbraEdit est un mot ou une phrase que vous "
|
||||
"définissez comme appartenant à une rubrique. Les étiquettes sont définies "
|
||||
"en utilisant le mot-clé ``@tag``."
|
||||
|
||||
@@ -179,10 +179,10 @@ msgstr ""
|
||||
|
||||
#: ../../source/usage/tags_and_references.rst:65
|
||||
msgid ""
|
||||
"The tag is the only part of notes that novelWriter uses. The rest of the "
|
||||
"The tag is the only part of notes that UmbraEdit uses. The rest of the "
|
||||
"document content is there for you to use in whatever way you wish."
|
||||
msgstr ""
|
||||
"L'étiquette est la seule partie des notes que novelWriter utilise. Le "
|
||||
"L'étiquette est la seule partie des notes que UmbraEdit utilise. Le "
|
||||
"reste du contenu du document peut être utilisé comme bon vous semble."
|
||||
|
||||
#: ../../source/usage/tags_and_references.rst:70
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 17:39+0200\n"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 16:42+0200\n"
|
||||
@@ -27,11 +27,11 @@ msgstr "La fenêtre principale"
|
||||
|
||||
#: ../../source/user_interface/main_window.rst:7
|
||||
msgid ""
|
||||
"The user interface of novelWriter is intended to be as minimalistic as "
|
||||
"The user interface of UmbraEdit is intended to be as minimalistic as "
|
||||
"practically possible, while at the same time provide useful features "
|
||||
"needed for writing a novel."
|
||||
msgstr ""
|
||||
"L'interface utilisateur de novelWriter se veut aussi minimaliste que "
|
||||
"L'interface utilisateur de UmbraEdit se veut aussi minimaliste que "
|
||||
"possible, tout en offrant les fonctionnalités utiles à l'écriture d'un "
|
||||
"roman."
|
||||
|
||||
@@ -367,12 +367,12 @@ msgstr "La colonne **Titre** ne peut pas être désactivée ou déplacée."
|
||||
#: ../../source/user_interface/main_window.rst:148
|
||||
msgid ""
|
||||
"The information viewed in the outline is based on the project index. "
|
||||
"While novelWriter does its best to keep the index up to date when "
|
||||
"While UmbraEdit does its best to keep the index up to date when "
|
||||
"contents change, you can always rebuild it manually by pressing :kbd:"
|
||||
"`F9` if something isn't right."
|
||||
msgstr ""
|
||||
"Les informations affichées dans le plan sont basées sur l'index du "
|
||||
"projet. Bien que novelWriter fasse de son mieux pour maintenir l'index à "
|
||||
"projet. Bien que UmbraEdit fasse de son mieux pour maintenir l'index à "
|
||||
"jour lorsque le contenu change, vous pouvez toujours le reconstruire "
|
||||
"manuellement en appuyant sur :kbd:`F9` si quelque chose ne va pas."
|
||||
|
||||
@@ -457,11 +457,11 @@ msgstr "Thèmes"
|
||||
|
||||
#: ../../source/user_interface/main_window.rst:189
|
||||
msgid ""
|
||||
"By default, novelWriter uses a light colour theme. You can also choose "
|
||||
"By default, UmbraEdit uses a light colour theme. You can also choose "
|
||||
"between a standard dark theme that have neutral colours, or a series of "
|
||||
"other included themes, from **Preferences**."
|
||||
msgstr ""
|
||||
"Par défaut, novelWriter utilise un thème de couleur claire. Vous pouvez "
|
||||
"Par défaut, UmbraEdit utilise un thème de couleur claire. Vous pouvez "
|
||||
"également choisir un thème sombre standard avec des couleurs neutres, ou "
|
||||
"une série d'autres thèmes inclus, dans les **Préférences**."
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 21:08+0200\n"
|
||||
@@ -573,8 +573,8 @@ msgstr ""
|
||||
"d'impression et que vous imprimez au format PDF."
|
||||
|
||||
#: ../../source/user_interface/manuscript.rst:245
|
||||
msgid "novelWriter HTML"
|
||||
msgstr "novelWriter HTML"
|
||||
msgid "UmbraEdit HTML"
|
||||
msgstr "UmbraEdit HTML"
|
||||
|
||||
#: ../../source/user_interface/manuscript.rst:246
|
||||
msgid ""
|
||||
@@ -595,16 +595,16 @@ msgstr "Markdown standard/étendu"
|
||||
#: ../../source/user_interface/manuscript.rst:251
|
||||
msgid ""
|
||||
"The Markdown format comes in both Standard and Extended flavour. The *only* "
|
||||
"difference in terms of novelWriter functionality is the support for strike "
|
||||
"difference in terms of UmbraEdit functionality is the support for strike "
|
||||
"through text, which is not supported by the Standard flavour."
|
||||
msgstr ""
|
||||
"Le format Markdown existe en version standard et en version étendue. La "
|
||||
"*seule* différence en termes de fonctionnalité de novelWriter est la prise en "
|
||||
"*seule* différence en termes de fonctionnalité de UmbraEdit est la prise en "
|
||||
"charge du texte barré, qui n'est pas prise en charge par la version standard."
|
||||
|
||||
#: ../../source/user_interface/manuscript.rst:255
|
||||
msgid "novelWriter Markup"
|
||||
msgstr "novelWriter Markup"
|
||||
msgid "UmbraEdit Markup"
|
||||
msgstr "UmbraEdit Markup"
|
||||
|
||||
#: ../../source/user_interface/manuscript.rst:256
|
||||
msgid ""
|
||||
@@ -612,14 +612,14 @@ msgid ""
|
||||
"filters into a ``.txt`` file. The documents are stacked together in the order "
|
||||
"they appear in the project tree, with comments, tags, etc. included if they "
|
||||
"are selected. This is a useful format for exporting the project for later "
|
||||
"import back into novelWriter."
|
||||
"import back into UmbraEdit."
|
||||
msgstr ""
|
||||
"Il s'agit simplement d'une concaténation des documents du projet sélectionnés "
|
||||
"par les filtres dans un fichier ``.txt``. Les documents sont empilés dans "
|
||||
"l'ordre où ils apparaissent dans l'arborescence du projet, avec les "
|
||||
"commentaires, les balises, etc. inclus s'ils sont sélectionnés. C'est un "
|
||||
"format utile pour exporter le projet et le réimporter plus tard dans "
|
||||
"novelWriter."
|
||||
"UmbraEdit."
|
||||
|
||||
#: ../../source/user_interface/manuscript.rst:263
|
||||
msgid "Microsoft Word and PDF output options were added."
|
||||
@@ -631,12 +631,12 @@ msgstr "Formats supplémentaires"
|
||||
|
||||
#: ../../source/user_interface/manuscript.rst:269
|
||||
msgid ""
|
||||
"In addition to the above document formats, the novelWriter HTML and Markup "
|
||||
"In addition to the above document formats, the UmbraEdit HTML and Markup "
|
||||
"formats can also be wrapped in a JSON file. These files will have a meta data "
|
||||
"entry and a body entry."
|
||||
msgstr ""
|
||||
"En plus des formats de document ci-dessus, les formats HTML et Markup de "
|
||||
"novelWriter peuvent également être enveloppés dans un fichier JSON. Ces "
|
||||
"UmbraEdit peuvent également être enveloppés dans un fichier JSON. Ces "
|
||||
"fichiers auront une entrée pour les métadonnées et une entrée pour le corps du "
|
||||
"texte."
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 17:22+0200\n"
|
||||
@@ -27,14 +27,14 @@ msgstr "Gestion des projets"
|
||||
|
||||
#: ../../source/user_interface/projects.rst:7
|
||||
msgid ""
|
||||
"Your text in novelWriter is organised into projects. Each project is "
|
||||
"Your text in UmbraEdit is organised into projects. Each project is "
|
||||
"meant to contain one novel and associated notes. If you have multiple "
|
||||
"novels in a series, with the same characters and shared notes, it is "
|
||||
"also possible to keep all of them in the same project by creating "
|
||||
"multiple **Novel** root folders. See :ref:`docs_usage_project_roots` for "
|
||||
"more details."
|
||||
msgstr ""
|
||||
"Votre texte dans novelWriter est organisé en projets. Chaque projet est "
|
||||
"Votre texte dans UmbraEdit est organisé en projets. Chaque projet est "
|
||||
"censé contenir un roman et les notes associées. Si vous avez plusieurs "
|
||||
"romans dans une série, avec les mêmes personnages et des notes "
|
||||
"partagées, il est également possible de les garder tous dans le même "
|
||||
@@ -51,22 +51,22 @@ msgid ""
|
||||
"**Create or Open Project**. This will open the **Welcome** dialog, where "
|
||||
"you can select the :guilabel:`New` button that will assist you in "
|
||||
"creating a project. This dialog is also displayed when you start "
|
||||
"novelWriter."
|
||||
"UmbraEdit."
|
||||
msgstr ""
|
||||
"Vous pouvez créer un nouveau projet à partir du menu **Projet** en "
|
||||
"sélectionnant **Créer ou ouvrir un projet**. Cela ouvrira la boîte de "
|
||||
"dialogue **Accueil**, où vous pourrez sélectionner le bouton :guilabel:"
|
||||
"`Nouveau` qui vous aidera à créer un projet. Cette boîte de dialogue "
|
||||
"s'affiche également lorsque vous démarrez novelWriter."
|
||||
"s'affiche également lorsque vous démarrez UmbraEdit."
|
||||
|
||||
#: ../../source/user_interface/projects.rst:22
|
||||
msgid ""
|
||||
"A novelWriter project requires a dedicated folder for storing its files "
|
||||
"A UmbraEdit project requires a dedicated folder for storing its files "
|
||||
"on the local file system. If you're interested in the details of how "
|
||||
"projects are stored, you can have a look at the section :ref:"
|
||||
"`docs_technical_storage`."
|
||||
msgstr ""
|
||||
"Un projet novelWriter nécessite un dossier dédié pour stocker ses "
|
||||
"Un projet UmbraEdit nécessite un dossier dédié pour stocker ses "
|
||||
"fichiers sur le système de fichiers local. Si vous êtes intéressé par "
|
||||
"les détails de la façon dont les projets sont stockés, vous pouvez "
|
||||
"consulter la section :ref:`docs_technical_storage`."
|
||||
@@ -226,7 +226,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"These labels are there purely for your convenience, and you are not "
|
||||
"required to use them for any other features to work. No other part of "
|
||||
"novelWriter accesses this information. The intention is to use these to "
|
||||
"UmbraEdit accesses this information. The intention is to use these to "
|
||||
"indicate at what stage of completion each novel document is, or how "
|
||||
"important the content of a note is to the story. You don't have to use "
|
||||
"them this way, that's just what they were intended for, but you can make "
|
||||
@@ -234,7 +234,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Ces étiquettes sont là uniquement pour votre commodité, et vous n'êtes "
|
||||
"pas obligé de les utiliser pour que d'autres fonctionnalités "
|
||||
"fonctionnent. Aucune autre partie de novelWriter n'accède à ces "
|
||||
"fonctionnent. Aucune autre partie de UmbraEdit n'accède à ces "
|
||||
"informations. L'intention est de les utiliser pour indiquer à quel stade "
|
||||
"d'achèvement se trouve chaque document de roman, ou à quel point le "
|
||||
"contenu d'une note est important pour l'histoire. Vous n'êtes pas obligé "
|
||||
@@ -312,12 +312,12 @@ msgstr "Sauvegarde"
|
||||
|
||||
#: ../../source/user_interface/projects.rst:129
|
||||
msgid ""
|
||||
"An automatic backup system is built into novelWriter. In order to use "
|
||||
"An automatic backup system is built into UmbraEdit. In order to use "
|
||||
"it, a backup path to where the backup files are to be stored must be "
|
||||
"provided in **Preferences**. The path defaults to a folder named "
|
||||
"\"Backups\" in your home directory."
|
||||
msgstr ""
|
||||
"Un système de sauvegarde automatique est intégré à novelWriter. Pour "
|
||||
"Un système de sauvegarde automatique est intégré à UmbraEdit. Pour "
|
||||
"l'utiliser, un chemin d'accès à l'endroit où les fichiers de sauvegarde "
|
||||
"doivent être stockés doit être indiqué dans les **Préférences**. Le "
|
||||
"chemin d'accès est par défaut un dossier nommé « Backups » dans votre "
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 17:44+0200\n"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025
|
||||
# This file is distributed under the same license as the novelWriter
|
||||
# This file is distributed under the same license as the UmbraEdit
|
||||
# package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: novelWriter 2.7rc1\n"
|
||||
"Project-Id-Version: UmbraEdit 2.7rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-27 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-05-28 21:12+0200\n"
|
||||
@@ -70,13 +70,13 @@ msgstr "Temps d'inactivité"
|
||||
#: ../../source/user_interface/statistics.rst:23
|
||||
msgid ""
|
||||
"The log file stores how much of the session time was spent idle. The "
|
||||
"definition of idle here is that the novelWriter main window loses focus, "
|
||||
"definition of idle here is that the UmbraEdit main window loses focus, "
|
||||
"or the user hasn't made any changes to the currently open document in "
|
||||
"five minutes. You can change the number of minutes in **Preferences**."
|
||||
msgstr ""
|
||||
"Le fichier journal enregistre la durée de la session passée en mode "
|
||||
"inactif. La définition de l'inactivité ici est que la fenêtre principale "
|
||||
"de novelWriter perd le focus, ou que l'utilisateur n'a pas fait de "
|
||||
"de UmbraEdit perd le focus, ou que l'utilisateur n'a pas fait de "
|
||||
"changements dans le document ouvert depuis cinq minutes. Vous pouvez "
|
||||
"modifier le nombre de minutes dans les **Préférences**."
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ generated preview.
|
||||
Text Word Counts and Stats
|
||||
==========================
|
||||
|
||||
These are the rules for the main counts available for for each document in a project.
|
||||
These are the rules for the main counts available for each document in a project.
|
||||
|
||||
For all counts, the following rules apply.
|
||||
|
||||
@@ -23,6 +23,7 @@ For all counts, the following rules apply.
|
||||
#. Any line starting with ``%`` or ``@`` is ignored.
|
||||
#. Trailing white spaces are ignored, including line breaks.
|
||||
#. Leading ``>`` and trailing ``<`` are ignored with any spaces next to them.
|
||||
#. Leading list markers ``*`` and ``#.`` are ignored.
|
||||
#. Valid shortcodes and other commands wrapped in brackets ``[]`` are ignored.
|
||||
#. In-line Markdown syntax in text paragraphs is treated as part of the text.
|
||||
|
||||
@@ -82,17 +83,17 @@ The following counts are available:
|
||||
The number of characters in all lines, including any comments and meta data text. Paragraph
|
||||
breaks are not counted, but in-paragraph hard line breaks are.
|
||||
|
||||
**Character in Text**
|
||||
**Characters in Text**
|
||||
The number of characters in body text paragraphs. Paragraph breaks are not counted, but
|
||||
in-paragraph hard line breaks are.
|
||||
|
||||
**Characters in Headings**
|
||||
The number of characters in headings.
|
||||
|
||||
**Character in Text, No Spaces**
|
||||
**Characters in Text, No Spaces**
|
||||
The number of characters in body text paragraphs considered part of a word or punctuation. That
|
||||
is, white space characters are not counted.
|
||||
|
||||
**Character in Headings, No Spaces**
|
||||
**Characters in Headings, No Spaces**
|
||||
The number of characters in headings considered part of a word or punctuation. That is, white
|
||||
space characters are not counted.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
Custom Themes
|
||||
*************
|
||||
|
||||
There are a few ways you can customise novelWriter yourself. Currently, you can relatively easily
|
||||
There are a few ways you can customise UmbraEdit yourself. Currently, you can relatively easily
|
||||
add new GUI themes. You can also add new icon themes, although this is not as straightforward.
|
||||
|
||||
|
||||
@@ -14,22 +14,22 @@ Colour Themes
|
||||
=============
|
||||
|
||||
Adding your own colour themes is relatively easy, although it requires that you manually edit
|
||||
config files with colour values. The themes are defined by simple plain text config files with meta
|
||||
data and colour settings.
|
||||
config files with colour values. The themes are defined in plain text files with meta data and
|
||||
colour settings, using the toml format,
|
||||
|
||||
In order to make your own versions, first copy one of the existing files to your local computer and
|
||||
modify it as you like.
|
||||
|
||||
The existing colour themes are stored in
|
||||
`novelwriter/assets/themes <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/themes>`_.
|
||||
`umbraedit/assets/themes <https://github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/themes>`_.
|
||||
|
||||
Remember to also change the name of your theme by modifying the ``name`` setting at the top of the
|
||||
file, otherwise you may not be able to distinguish them in **Preferences**.
|
||||
|
||||
For novelWriter to be able to locate the custom theme files, you must copy them to the
|
||||
For UmbraEdit to be able to locate the custom theme files, you must copy them to the
|
||||
:ref:`docs_technical_locations_data` location in your home or user area. There should be a folder
|
||||
there named ``themes`` for colour themes. These folders are created the first time you start
|
||||
novelWriter.
|
||||
UmbraEdit.
|
||||
|
||||
Once the files are copied there, they should show up in **Preferences** with the label you
|
||||
set as ``name`` inside the file.
|
||||
@@ -43,108 +43,112 @@ set as ``name`` inside the file.
|
||||
The Theme File Format
|
||||
---------------------
|
||||
|
||||
A colour theme ``.conf`` file consists of the following settings:
|
||||
A colour theme ``.toml`` file consists of the following settings:
|
||||
|
||||
.. code-block:: cfg
|
||||
.. code-block:: toml
|
||||
:caption: The theme file for the "Default Light Theme"
|
||||
|
||||
[Main]
|
||||
name = Default Light Theme
|
||||
mode = light
|
||||
author = Veronica Berglyd Olsen
|
||||
credit = Veronica Berglyd Olsen
|
||||
url = https://github.com/vkbo/novelWriter
|
||||
name = "Default Light Theme"
|
||||
mode = "light"
|
||||
author = "Veronica Berglyd Olsen"
|
||||
credit = "Veronica Berglyd Olsen"
|
||||
url = "https://github.com/saga-soft/UmbraEdit"
|
||||
|
||||
[Base]
|
||||
base = #fcfcfc
|
||||
default = #303030
|
||||
faded = #6c6c6c
|
||||
red = #a62a2d
|
||||
orange = #b36829
|
||||
yellow = #a39c34
|
||||
green = #296629
|
||||
cyan = #269999
|
||||
blue = #3a70a6
|
||||
purple = #b35ab3
|
||||
base = "#fcfcfc"
|
||||
default = "#303030"
|
||||
faded = "#6c6c6c"
|
||||
red = "#a62a2d"
|
||||
orange = "#b36829"
|
||||
yellow = "#a39c34"
|
||||
green = "#296629"
|
||||
cyan = "#269999"
|
||||
blue = "#3a70a6"
|
||||
purple = "#b35ab3"
|
||||
|
||||
[Project]
|
||||
root = blue
|
||||
folder = yellow
|
||||
file = default
|
||||
title = green
|
||||
chapter = red
|
||||
scene = blue
|
||||
note = yellow
|
||||
active = green
|
||||
inactive = red
|
||||
disabled = faded
|
||||
root = "blue"
|
||||
folder = "yellow"
|
||||
file = "default"
|
||||
title = "green"
|
||||
chapter = "red"
|
||||
scene = "blue"
|
||||
note = "yellow"
|
||||
active = "green"
|
||||
inactive = "red"
|
||||
disabled = "faded"
|
||||
|
||||
[Icon]
|
||||
tool = default
|
||||
sidebar = default
|
||||
accept = green
|
||||
reject = red
|
||||
action = blue
|
||||
altaction = orange
|
||||
apply = green
|
||||
create = yellow
|
||||
destroy = faded
|
||||
reset = green
|
||||
add = green
|
||||
change = green
|
||||
remove = red
|
||||
shortcode = default
|
||||
markdown = orange
|
||||
systemio = yellow
|
||||
info = blue
|
||||
warning = orange
|
||||
error = red
|
||||
tool = "default"
|
||||
sidebar = "default"
|
||||
accept = "green"
|
||||
reject = "red"
|
||||
action = "blue"
|
||||
option = "orange"
|
||||
apply = "green"
|
||||
create = "yellow"
|
||||
destroy = "faded"
|
||||
reset = "green"
|
||||
add = "green"
|
||||
change = "green"
|
||||
remove = "red"
|
||||
shortcode = "default"
|
||||
markdown = "orange"
|
||||
system = "yellow"
|
||||
info = "blue"
|
||||
warning = "orange"
|
||||
error = "red"
|
||||
|
||||
[Palette]
|
||||
window = base:D105
|
||||
windowtext = default
|
||||
base = base
|
||||
alternatebase = #e0e0e0
|
||||
text = default
|
||||
tooltipbase = #ffffc0
|
||||
tooltiptext = #15150d
|
||||
button = #efefef
|
||||
buttontext = default
|
||||
brighttext = base
|
||||
highlight = #3087c6
|
||||
highlightedtext = base
|
||||
link = blue
|
||||
linkvisited = blue
|
||||
accent = #3087c6
|
||||
window = "base:D105"
|
||||
windowText = "default"
|
||||
base = "base"
|
||||
alternateBase = "#e0e0e0"
|
||||
text = "default"
|
||||
tooltipBase = "#ffffc0"
|
||||
tooltipText = "#15150d"
|
||||
button = "#efefef"
|
||||
buttonText = "default"
|
||||
brightText = "base"
|
||||
highlight = "#3087c6"
|
||||
highlightedText = "base"
|
||||
link = "blue"
|
||||
linkVisited = "blue"
|
||||
accent = "#3087c6"
|
||||
|
||||
[GUI]
|
||||
helptext = #5c5c5c
|
||||
fadedtext = #6c6c6c
|
||||
errortext = red
|
||||
helpText = "#5c5c5c"
|
||||
fadedText = "#6c6c6c"
|
||||
errorText = "red"
|
||||
accentText = "blue"
|
||||
activeButton = "blue:96"
|
||||
activeBase = "#d7d7d7"
|
||||
searchMatch = "orange:96"
|
||||
|
||||
[Syntax]
|
||||
background = base
|
||||
text = default
|
||||
line = default:32
|
||||
link = blue
|
||||
headertext = green
|
||||
headertag = green:L135
|
||||
emphasis = orange
|
||||
whitespace = orange:64
|
||||
dialog = blue
|
||||
altdialog = red
|
||||
note = yellow:D125
|
||||
hidden = faded
|
||||
shortcode = blue
|
||||
keyword = red
|
||||
tag = green
|
||||
value = green
|
||||
optional = blue
|
||||
spellcheckline = red
|
||||
errorline = green
|
||||
replacetag = green
|
||||
modifier = blue
|
||||
texthighlight = yellow:72
|
||||
background = "base"
|
||||
text = "default"
|
||||
line = "default:32"
|
||||
link = "blue"
|
||||
headerText = "green"
|
||||
headerTag = "green:L135"
|
||||
emphasis = "orange"
|
||||
whitespace = "orange:64"
|
||||
dialog = "blue"
|
||||
altDialog = "red"
|
||||
note = "yellow:D125"
|
||||
hidden = "faded"
|
||||
shortcode = "blue"
|
||||
keyword = "red"
|
||||
tag = "green"
|
||||
value = "green"
|
||||
optional = "blue"
|
||||
spellCheckLine = "red"
|
||||
errorLine = "green"
|
||||
replaceTag = "green"
|
||||
modifier = "blue"
|
||||
textHighlight = "yellow:72"
|
||||
|
||||
|
||||
Theme Sections
|
||||
@@ -152,7 +156,7 @@ Theme Sections
|
||||
|
||||
.. _ColorRole: https://doc.qt.io/qt-6/qpalette.html#ColorRole-enum
|
||||
|
||||
The theme file is made up of different sections depending on what part of novelWriter the theme
|
||||
The theme file is made up of different sections depending on what part of UmbraEdit the theme
|
||||
affects.
|
||||
|
||||
.. csv-table:: Theme Sections Overview
|
||||
@@ -201,6 +205,32 @@ There are several ways to enter colour values:
|
||||
``license``, ``licenseurl``, and ``description`` settings. The ``author`` field is now required
|
||||
if the theme is included in the app, but not for user themes.
|
||||
|
||||
.. versionadded:: 26.2
|
||||
The ``accentText``, ``activeButton``, ``activeBase`` and ``searchMatch`` settings were added to
|
||||
the ``[GUI]`` section. The file format was also converted from conf to toml, and a number of the
|
||||
colour settings were renamed to camelCase format. The following values were renamed:
|
||||
|
||||
* ``altaction`` to ``option``
|
||||
* ``systemio`` to ``system``
|
||||
* ``windowtext`` to ``windowText``
|
||||
* ``alternatebase`` to ``alternateBase``
|
||||
* ``tooltipbase`` to ``tooltipBase``
|
||||
* ``tooltiptext`` to ``tooltipText``
|
||||
* ``buttontext`` to ``buttonText``
|
||||
* ``brighttext`` to ``brightText``
|
||||
* ``highlightedtext`` to ``highlightedText``
|
||||
* ``linkvisited`` to ``linkVisited``
|
||||
* ``helptext`` to ``helpText``
|
||||
* ``fadedtext`` to ``fadedText``
|
||||
* ``errortext`` to ``errorText``
|
||||
* ``headertext`` to ``headerText``
|
||||
* ``headertag`` to ``headerTag``
|
||||
* ``altdialog`` to ``altDialog``
|
||||
* ``spellcheckline`` to ``spellCheckLine``
|
||||
* ``errorline`` to ``errorLine``
|
||||
* ``replacetag`` to ``replaceTag``
|
||||
* ``texthighlight`` to ``textHighlight``
|
||||
|
||||
|
||||
Icon Themes
|
||||
===========
|
||||
@@ -209,14 +239,14 @@ Icon themes are *not* straightforward to add, but if you want to make the effort
|
||||
describes how to do it.
|
||||
|
||||
The existing icon themes are stored in
|
||||
`novelwriter/assets/icons <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/icons>`_.
|
||||
`umbraedit/assets/icons <https://github.com/saga-soft/UmbraEdit/tree/main/umbraedit/assets/icons>`_.
|
||||
|
||||
As with colour themes, remember to change the name of your theme by modifying the ``name`` setting
|
||||
at the top of the file, otherwise you may not be able to distinguish them in **Preferences**.
|
||||
|
||||
For novelWriter to be able to locate the custom theme files, you must copy them to the
|
||||
For UmbraEdit to be able to locate the custom theme files, you must copy them to the
|
||||
:ref:`docs_technical_locations_data` location in your home or user area. There should be a folder
|
||||
there ``icons`` for icon themes. These folders are created the first time you start novelWriter.
|
||||
there ``icons`` for icon themes. These folders are created the first time you start UmbraEdit.
|
||||
|
||||
|
||||
The Icons File Format
|
||||
@@ -251,14 +281,14 @@ format with entries on the form ``section:key = value``.
|
||||
icon:cls_trash = <svg ...>
|
||||
icon:cls_world = <svg ...>
|
||||
|
||||
The icon keys are associated with icon placement locations inside novelWriter, and the template for
|
||||
The icon keys are associated with icon placement locations inside UmbraEdit, and the template for
|
||||
them is defined in the script that generates the default icon themes.
|
||||
|
||||
The script can be found under
|
||||
`utils/icon_themes.py <https://github.com/vkbo/novelWriter/blob/main/utils/icon_themes.py>`__
|
||||
`utils/icon_themes.py <https://github.com/saga-soft/UmbraEdit/blob/main/utils/icon_themes.py>`__
|
||||
in the source code.
|
||||
|
||||
This file includes all the code needed to generate the themes that are included in novelWriter. The
|
||||
This file includes all the code needed to generate the themes that are included in UmbraEdit. The
|
||||
icon keys are mapped to icon keys from the specific themes in JSON files in the ``icon_themes``
|
||||
folder next to the script. This is the recommended way to generate these themes. Doing it manually
|
||||
is not advisable.
|
||||
@@ -273,7 +303,7 @@ in-line SVG XML block. The XML must fit on one line and obey the following rules
|
||||
#. It must be single colour, that is, the fill colour attribute must be able to colourise the
|
||||
entire icon.
|
||||
#. The fill colour attribute *must* be defined and must be set to: ``fill="#000000"``. This value
|
||||
is replaced by the relevant theme colour when the icon is processed in novelWriter.
|
||||
is replaced by the relevant theme colour when the icon is processed in UmbraEdit.
|
||||
|
||||
.. versionadded:: 2.7
|
||||
The icon theme files were added. Previously, icons were stored as individual SVG files with a
|
||||
|
||||
@@ -5,7 +5,6 @@ Spell Check Dictionaries
|
||||
************************
|
||||
|
||||
.. _Enchant: https://rrthomas.github.io/enchant/
|
||||
.. _Free Desktop: https://cgit.freedesktop.org/libreoffice/dictionaries/tree/
|
||||
|
||||
Spell checking is provided by the Enchant_ library. Depending on your operating system, it may or
|
||||
may not load all installed spell check dictionaries automatically.
|
||||
@@ -16,7 +15,7 @@ Linux and MacOS
|
||||
|
||||
On Linux and MacOS, you generally only have to install hunspell, aspell or myspell dictionaries on
|
||||
your system like you do for other applications. See your distro or OS documentation for how to do
|
||||
this. These dictionaries should show up as available spell check languages in novelWriter.
|
||||
this. These dictionaries should show up as available spell check languages in UmbraEdit.
|
||||
|
||||
|
||||
Windows
|
||||
@@ -25,31 +24,24 @@ Windows
|
||||
For Windows, English is included with the installation. For other languages you have to download
|
||||
and add dictionaries yourself.
|
||||
|
||||
**Install Tool**
|
||||
|
||||
Install Tool
|
||||
------------
|
||||
|
||||
A small tool to assist with this can be found under **Tools > Add Dictionaries**. It will import
|
||||
spell checking dictionaries from Free Office or Libre Office extensions. The dictionaries are then
|
||||
installed in the install location for the Enchant library and should thus work for any application
|
||||
that uses Enchant for spell checking.
|
||||
|
||||
**Manual Install**
|
||||
|
||||
Manual Install
|
||||
--------------
|
||||
|
||||
If you prefer to do this manually or want to use a different source than the ones mentioned above,
|
||||
You need to get compatible dictionary files for your language. You need two files files ending with
|
||||
You need to get compatible dictionary files for your language. You need two files ending with
|
||||
``.aff`` and ``.dic``. These files must then be copied to the following location:
|
||||
|
||||
``C:\Users\<USER>\AppData\Local\enchant\hunspell``
|
||||
|
||||
This assumes your user profile is stored at ``C:\Users\<USER>``. The last one or two folders may
|
||||
not exist, so you may need to create them.
|
||||
|
||||
You can find the various dictionaries on the `Free Desktop`_ website.
|
||||
|
||||
.. note::
|
||||
|
||||
The Free Desktop link points to a repository, and what may look like file links inside the
|
||||
dictionary folder are actually links to web pages. If you right-click and download those, you
|
||||
get HTML files, not dictionaries!
|
||||
|
||||
In order to download the actual dictionary files, right-click the "plain" label at the end of
|
||||
each line and download that.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
Handling Errors
|
||||
***************
|
||||
|
||||
In case something goes wrong, novelWriter has a few built-in features to reduce the chance your
|
||||
In case something goes wrong, UmbraEdit has a few built-in features to reduce the chance your
|
||||
work is lost. In case of a crash, it will also try to save whatever changes you have made before
|
||||
exiting, if this is at all possible.
|
||||
|
||||
@@ -17,7 +17,7 @@ you're working on is actually at a risk of losing data in the event of a crash.
|
||||
Recovered Documents
|
||||
===================
|
||||
|
||||
If novelWriter crashes or otherwise exits without saving the project state, or if you're using a
|
||||
If UmbraEdit crashes or otherwise exits without saving the project state, or if you're using a
|
||||
file synchronisation tool that runs out of sync, there may be files in the project storage folder
|
||||
that aren't tracked in the core project file. These files, when discovered, are recovered and added
|
||||
back into the project when a project is opened.
|
||||
@@ -40,16 +40,16 @@ be named after its internal key, which is a string of characters and numbers.
|
||||
Project Lockfile
|
||||
================
|
||||
|
||||
To prevent data loss caused by file conflicts when novelWriter projects are synchronised via file
|
||||
To prevent data loss caused by file conflicts when UmbraEdit projects are synchronised via file
|
||||
synchronisation tools, a project lockfile is written to the project storage folder when a project
|
||||
is open. If you try to open a project that already has such a file present, you will be presented
|
||||
with a warning, and some information about where else novelWriter thinks the project is also open.
|
||||
with a warning, and some information about where else UmbraEdit thinks the project is also open.
|
||||
You will be given the option to ignore this warning, and continue opening the project at your own
|
||||
risk.
|
||||
|
||||
.. note::
|
||||
|
||||
If, for some reason, novelWriter or your computer crashes, the lock file may remain even if
|
||||
If, for some reason, UmbraEdit or your computer crashes, the lock file may remain even if
|
||||
there are no other instances keeping the project open. In such a case it is safe to ignore the
|
||||
lock file warning when re-opening the project.
|
||||
|
||||
@@ -59,4 +59,4 @@ risk.
|
||||
the project are in fact open, you are likely to cause inconsistencies and create diverging
|
||||
project files, potentially resulting in loss of data and orphaned files. You are not likely to
|
||||
lose any actual text unless both instances have the same document open in the editor, and
|
||||
novelWriter will try to resolve project inconsistencies the next time you open the project.
|
||||
UmbraEdit will try to resolve project inconsistencies the next time you open the project.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
Project Format Changes
|
||||
**********************
|
||||
|
||||
Most of the changes to the file formats over the history of novelWriter have no impact on the
|
||||
Most of the changes to the file formats over the history of UmbraEdit have no impact on the
|
||||
user side of things. The project files are generally updated automatically. However, some of the
|
||||
changes require minor actions from the user.
|
||||
|
||||
@@ -16,7 +16,7 @@ A full project file format specification is available under "More Documents".
|
||||
.. caution::
|
||||
|
||||
When you update a project from one format version to the next, the project can no longer be
|
||||
opened by a version of novelWriter prior to the version where the new file format was
|
||||
opened by a version of UmbraEdit prior to the version where the new file format was
|
||||
introduced. You will get a notification about any updates to your project file format and will
|
||||
have the option to decline the upgrade.
|
||||
|
||||
@@ -26,7 +26,7 @@ A full project file format specification is available under "More Documents".
|
||||
Format 1.5 Changes
|
||||
==================
|
||||
|
||||
This project format was introduced in novelWriter version 2.0 RC 2.
|
||||
This project format was introduced in UmbraEdit version 2.0 RC 2.
|
||||
|
||||
This is a modification of the 1.4 format. It makes the XML more consistent in that meta data have
|
||||
been moved to their respective section nodes as attributes, and key/value settings now have a
|
||||
@@ -40,7 +40,7 @@ automatically the first time a project is loaded. No user action is required.
|
||||
Format 1.4 Changes
|
||||
==================
|
||||
|
||||
This project format was introduced in novelWriter version 2.0 RC 1. Since this was a release
|
||||
This project format was introduced in UmbraEdit version 2.0 RC 1. Since this was a release
|
||||
candidate, it is unlikely that your project uses it, but it may be the case if you've installed a
|
||||
pre-release.
|
||||
|
||||
@@ -54,7 +54,7 @@ automatically the first time a project is loaded. No user action is required.
|
||||
Format 1.3 Changes
|
||||
==================
|
||||
|
||||
This project format was introduced in novelWriter version 1.5.
|
||||
This project format was introduced in UmbraEdit version 1.5.
|
||||
|
||||
With this format, the number of document layouts was reduced from eight to two. The conversion of
|
||||
document layouts is performed automatically when the project is opened.
|
||||
@@ -93,7 +93,7 @@ should be used only a few places in any given project. These are as follows:
|
||||
Format 1.2 Changes
|
||||
==================
|
||||
|
||||
This project format was introduced in novelWriter version 0.10.
|
||||
This project format was introduced in UmbraEdit version 0.10.
|
||||
|
||||
With this format, the way auto-replace entries were stored in the main project XML file changed.
|
||||
Conversion from this format is done automatically.
|
||||
@@ -104,10 +104,10 @@ Conversion from this format is done automatically.
|
||||
Format 1.1 Changes
|
||||
==================
|
||||
|
||||
This project format was introduced in novelWriter version 0.7.
|
||||
This project format was introduced in UmbraEdit version 0.7.
|
||||
|
||||
With this format, the ``content`` folder was introduced in the project storage. Previously, all
|
||||
novelWriter documents were saved in a series of folders numbered from ``data_0`` to ``data_f``.
|
||||
UmbraEdit documents were saved in a series of folders numbered from ``data_0`` to ``data_f``.
|
||||
|
||||
It also reduces the number of meta data and cache files. These files are automatically deleted if
|
||||
an old project is opened. This was also when the Table of Contents file was introduced. Conversion
|
||||
|
||||
@@ -9,12 +9,12 @@ Typographical Notes
|
||||
.. _Quotation Mark: https://en.wikipedia.org/wiki/Quotation_mark
|
||||
.. _Modifier letter apostrophe: https://en.wikipedia.org/wiki/Modifier_letter_apostrophe
|
||||
|
||||
novelWriter has some support for typographical symbols that are not usually easily available in
|
||||
UmbraEdit has some support for typographical symbols that are not usually easily available in
|
||||
many text editors. This includes for instance the proper unicode quotation marks, dashes, ellipsis,
|
||||
thin spaces, etc. All these symbols are available from the **Insert** menu, and via
|
||||
keyboard shortcuts. See :ref:`docs_features_shortcuts_insert`.
|
||||
|
||||
This chapter provides some additional information on how novelWriter handles these symbols.
|
||||
This chapter provides some additional information on how UmbraEdit handles these symbols.
|
||||
|
||||
|
||||
Dashes and Ellipsis
|
||||
@@ -76,7 +76,7 @@ right single quotation marks, depending on the font. There is a Wikipedia articl
|
||||
|
||||
.. note::
|
||||
|
||||
On export with the **Build Manuscript** tool, these apostrophes will be replaced
|
||||
On export with the **Manuscript Build** tool, these apostrophes will be replaced
|
||||
automatically with the corresponding right hand single quote symbol as is generally recommended.
|
||||
Therefore it doesn't really matter if you only use them to correct syntax highlighting in some
|
||||
places, and not others.
|
||||
|
||||
@@ -6,7 +6,7 @@ File Locations
|
||||
|
||||
.. _QStandardPaths: https://doc.qt.io/qt-6/qstandardpaths.html
|
||||
|
||||
novelWriter will create a few files on your system outside of the application folder itself. These
|
||||
UmbraEdit will create a few files on your system outside of the application folder itself. These
|
||||
file locations are described in this chapter.
|
||||
|
||||
|
||||
@@ -15,15 +15,15 @@ file locations are described in this chapter.
|
||||
Configuration
|
||||
=============
|
||||
|
||||
The general configuration of novelWriter, including everything that is in **Preferences**, is saved
|
||||
The general configuration of UmbraEdit, including everything that is in **Preferences**, is saved
|
||||
in one central configuration file. The location of this file depends on your operating system. The
|
||||
system paths are provided by the Qt QStandardPaths_ class and its ``ConfigLocation`` value.
|
||||
|
||||
The standard paths are:
|
||||
|
||||
* Linux: ``~/.config/novelwriter/novelwriter.conf``
|
||||
* MacOS: ``~/Library/Preferences/novelwriter/novelwriter.conf``
|
||||
* Windows: ``C:\Users\<USER>\AppData\Local\novelwriter\novelwriter.conf``
|
||||
* Linux: ``~/.config/umbraedit/umbraedit.conf``
|
||||
* MacOS: ``~/Library/Preferences/umbraedit/umbraedit.conf``
|
||||
* Windows: ``C:\Users\<USER>\AppData\Local\umbraedit\umbraedit.conf``
|
||||
|
||||
Here, ``~`` corresponds to the user's home directory on Linux and MacOS, and ``<USER>`` is the
|
||||
user's username on Windows.
|
||||
@@ -38,15 +38,15 @@ user's username on Windows.
|
||||
Application Data
|
||||
================
|
||||
|
||||
novelWriter also stores a bit of data that is generated by the user's actions. This includes the
|
||||
UmbraEdit also stores a bit of data that is generated by the user's actions. This includes the
|
||||
list of recent projects form the **Welcome** dialog. Custom themes should also be saved here. The
|
||||
system paths are provided by the Qt QStandardPaths_ class and its ``AppDataLocation`` value.
|
||||
|
||||
The standard paths are:
|
||||
|
||||
* Linux: ``~/.local/share/novelwriter/``
|
||||
* MacOS: ``~/Library/Application Support/novelwriter/``
|
||||
* Windows: ``C:\Users\<USER>\AppData\Roaming\novelwriter\``
|
||||
* Linux: ``~/.local/share/umbraedit/``
|
||||
* MacOS: ``~/Library/Application Support/umbraedit/``
|
||||
* Windows: ``C:\Users\<USER>\AppData\Roaming\umbraedit\``
|
||||
|
||||
Here, ``~`` corresponds to the user's home directory on Linux and MacOS, and ``<USER>`` is the
|
||||
user's username on Windows.
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
Running from Source
|
||||
*******************
|
||||
|
||||
.. _GitHub: https://github.com/vkbo/novelWriter/releases
|
||||
.. _PyPi: https://pypi.org/project/novelWriter/
|
||||
.. _GitHub: https://github.com/saga-soft/UmbraEdit/releases
|
||||
.. _PyPi: https://pypi.org/project/UmbraEdit/
|
||||
.. _Sphinx Docs: https://www.sphinx-doc.org/
|
||||
.. _pdm: https://pdm-project.org/
|
||||
.. _uv: https://docs.astral.sh/uv/
|
||||
|
||||
This chapter describes various ways of running novelWriter directly from the source code, and how
|
||||
This chapter describes various ways of running UmbraEdit directly from the source code, and how
|
||||
to build the various components like the translation files and documentation.
|
||||
|
||||
.. note::
|
||||
@@ -18,7 +18,7 @@ to build the various components like the translation files and documentation.
|
||||
now deprecated, but on many systems the command ``python3`` may be needed instead. Likewise,
|
||||
``pip`` may need to be replaced with ``pip3``.
|
||||
|
||||
Most of the custom commands for building packages of novelWriter, or building assets, are contained
|
||||
Most of the custom commands for building packages of UmbraEdit, or building assets, are contained
|
||||
in the ``pkgutils.py`` script in the root of the source code. You can list the available commands
|
||||
by running:
|
||||
|
||||
@@ -33,11 +33,11 @@ by running:
|
||||
Dependencies
|
||||
============
|
||||
|
||||
novelWriter has been designed to rely on as few dependencies as possible. Only the Python wrapper
|
||||
UmbraEdit has been designed to rely on as few dependencies as possible. Only the Python wrapper
|
||||
for the Qt GUI libraries is required. The package for spell checking is optional, but recommended.
|
||||
Everything else is handled with standard Python libraries.
|
||||
|
||||
The following Python packages are needed to run all features of novelWriter:
|
||||
The following Python packages are needed to run all features of UmbraEdit:
|
||||
|
||||
* ``PyQt6`` – needed for connecting with the Qt6 libraries.
|
||||
* ``PyEnchant`` – needed for spell checking (optional).
|
||||
@@ -45,13 +45,13 @@ The following Python packages are needed to run all features of novelWriter:
|
||||
If you want spell checking, you must install the ``PyEnchant`` package. The spell check library
|
||||
must be at least 3.0 to work with Windows. On Linux, 2.0 also works fine.
|
||||
|
||||
If you install novelWriter from PyPi, these dependencies should be installed automatically.
|
||||
If you install UmbraEdit from PyPi, these dependencies should be installed automatically.
|
||||
|
||||
You can run novelWriter directly from source with pdm_ or another similar tool:
|
||||
You can run UmbraEdit directly from source with uv_ or another similar tool:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pdm run novelwriter
|
||||
uv run umbraedit
|
||||
|
||||
If you prefer to install dependencies using ``pip``, you must first generate the
|
||||
``requirements.txt`` file:
|
||||
@@ -64,7 +64,7 @@ If you prefer to install dependencies using ``pip``, you must first generate the
|
||||
.. note::
|
||||
|
||||
On Linux distros, the Qt library is usually split up into multiple packages. In some cases,
|
||||
secondary dependencies may not be installed automatically. For novelWriter, the library files
|
||||
secondary dependencies may not be installed automatically. For UmbraEdit, the library files
|
||||
for rendering the SVG icons may be left out and needs to be installed manually. This is the
|
||||
case on for instance Arch Linux.
|
||||
|
||||
@@ -74,7 +74,7 @@ If you prefer to install dependencies using ``pip``, you must first generate the
|
||||
Build and Install from Source
|
||||
=============================
|
||||
|
||||
If you want to install novelWriter directly from the source available on GitHub_, you must first
|
||||
If you want to install UmbraEdit directly from the source available on GitHub_, you must first
|
||||
build the package using the Python Packaging Authority's build tool. It can be installed with:
|
||||
|
||||
.. code-block:: bash
|
||||
@@ -87,7 +87,7 @@ On Debian-based systems the tool can also be installed with:
|
||||
|
||||
sudo apt install python3-build
|
||||
|
||||
With the tool installed, run the following command from the root of the novelWriter source code:
|
||||
With the tool installed, run the following command from the root of the UmbraEdit source code:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -99,7 +99,7 @@ different:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pip install --user dist/novelWriter-2.0.7-py3-none-any.whl
|
||||
pip install --user dist/UmbraEdit-2.0.7-py3-none-any.whl
|
||||
|
||||
|
||||
.. _docs_technical_source_i18n:
|
||||
@@ -107,9 +107,9 @@ different:
|
||||
Building the Translation Files
|
||||
==============================
|
||||
|
||||
If you installed novelWriter from a package, the translation files should be pre-built and
|
||||
included. If you're running novelWriter from the source code, you will need to generate the files
|
||||
yourself. The files you need will be written to the ``novelwriter/assets/i18n`` folder, and will
|
||||
If you installed UmbraEdit from a package, the translation files should be pre-built and
|
||||
included. If you're running UmbraEdit from the source code, you will need to generate the files
|
||||
yourself. The files you need will be written to the ``umbraedit/assets/i18n`` folder, and will
|
||||
have the ``.qm`` file extension.
|
||||
|
||||
You can build the ``.qm`` files with:
|
||||
@@ -123,7 +123,7 @@ needed package is called ``qttools5-dev-tools``.
|
||||
|
||||
.. note::
|
||||
|
||||
If you want to improve novelWriter with translation files for another language, or update an
|
||||
If you want to improve UmbraEdit with translation files for another language, or update an
|
||||
existing translation, instructions for how to contribute can be found in the ``README.md`` file
|
||||
in the ``i18n`` folder of the source code.
|
||||
|
||||
@@ -162,11 +162,11 @@ The documentation can then be built from the root folder in the source code by r
|
||||
|
||||
make -C docs html
|
||||
|
||||
Or you can run directly with pdm_ or similar tools:
|
||||
Or you can run directly with uv_ or similar tools:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pdm run make -C docs html
|
||||
uv run make -C docs html
|
||||
|
||||
If successful, the documentation should be available in the ``docs/build/html`` folder and you can
|
||||
open the ``index.html`` file in your browser.
|
||||
@@ -178,6 +178,6 @@ You can also build a PDF manual from the documentation using the ``pkgutils.py``
|
||||
python pkgutils.py docs-pdf en
|
||||
|
||||
This will build the English documentation as a PDF using LaTeX. The file will then be copied into
|
||||
the assets folder and made available in the **Help** menu in novelWriter. Replace ``en`` with
|
||||
the assets folder and made available in the **Help** menu in UmbraEdit. Replace ``en`` with
|
||||
``all`` to build for all languages. The Sphinx build system has a few extra dependencies when
|
||||
building the PDF. Please check the `Sphinx Docs`_ for more details.
|
||||
|
||||
@@ -6,13 +6,13 @@ How Data is Stored
|
||||
|
||||
.. _version control: https://en.wikipedia.org/wiki/Version_control
|
||||
|
||||
This chapter contains details of how novelWriter stores and handles the project data.
|
||||
This chapter contains details of how UmbraEdit stores and handles the project data.
|
||||
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
The files of a novelWriter project are stored in a dedicated project folder. The project structure
|
||||
The files of a UmbraEdit project are stored in a dedicated project folder. The project structure
|
||||
is kept in a file at the root of this folder called ``nwProject.nwx``. All the document files and
|
||||
associated meta data are stored in other folders below the project folder.
|
||||
|
||||
@@ -32,7 +32,7 @@ well, which makes it easier to track them with version control software.
|
||||
|
||||
.. note::
|
||||
|
||||
Since novelWriter has to keep track of a bunch of files and folders when a project is open, it
|
||||
Since UmbraEdit has to keep track of a bunch of files and folders when a project is open, it
|
||||
may not run well on some virtual file systems. A file or folder must be accessible with exactly
|
||||
the path it was saved or created with. An example where this is not the case is the way Google
|
||||
Drive is mapped on Linux Gnome desktops using gvfs/gio.
|
||||
@@ -46,14 +46,14 @@ well, which makes it easier to track them with version control software.
|
||||
|
||||
Editing text files in the ``content`` folder is less risky as these are just plain text. Editing
|
||||
the main project XML file, however, may make the project file unreadable and you may crash
|
||||
novelWriter and lose project structure information and project settings.
|
||||
UmbraEdit and lose project structure information and project settings.
|
||||
|
||||
|
||||
Project Structure
|
||||
=================
|
||||
|
||||
All novelWriter files are written with utf-8 encoding. Since Python automatically converts Unix
|
||||
line endings to Windows line endings on Windows systems, novelWriter does not make any adaptations
|
||||
All UmbraEdit files are written with utf-8 encoding. Since Python automatically converts Unix
|
||||
line endings to Windows line endings on Windows systems, UmbraEdit does not make any adaptations
|
||||
to the formatting on Windows systems. This is handled entirely by the Python standard library.
|
||||
Python also handles this when working on the same files on both Windows and Unix-based operating
|
||||
systems.
|
||||
@@ -62,7 +62,7 @@ systems.
|
||||
Main Project File
|
||||
-----------------
|
||||
|
||||
The project itself requires a dedicated folder for storing its files, where novelWriter will create
|
||||
The project itself requires a dedicated folder for storing its files, where UmbraEdit will create
|
||||
its own "file system" where the project's folder and file hierarchy is described in a project XML
|
||||
file. This is the main project file in the project's root folder with the name ``nwProject.nwx``.
|
||||
This file also contains all the meta data required for the project (except the index data), and a
|
||||
@@ -101,19 +101,19 @@ using a versioning system.
|
||||
Each document file contains a plain text version of the text from the editor. The file can in
|
||||
principle be edited in any text editor, and is suitable for diffing and version control if so
|
||||
desired. Just make sure the file remains in utf-8 encoding, otherwise unicode characters may
|
||||
become mangled when the file is opened in novelWriter again.
|
||||
become mangled when the file is opened in UmbraEdit again.
|
||||
|
||||
Editing these files is generally not recommended. The reason for this is that the index will not be
|
||||
automatically updated when doing so, which means novelWriter doesn't know you've altered the file.
|
||||
automatically updated when doing so, which means UmbraEdit doesn't know you've altered the file.
|
||||
If you *do* edit a file in this manner, you should rebuild the index when you next open the project
|
||||
in novelWriter.
|
||||
in UmbraEdit.
|
||||
|
||||
The first lines of the file may contain some meta data starting with the characters ``%%~``. These
|
||||
lines are mainly there to restore some information if the file is lost from the main project file,
|
||||
and the information may be helpful if you do open the file in an external editor as it contains the
|
||||
document label and the document class and layout. The lines can be deleted without any consequences
|
||||
to the rest of the content of the file, and will be added back the next time the document is saved
|
||||
in novelWriter.
|
||||
in UmbraEdit.
|
||||
|
||||
|
||||
The File Saving Process
|
||||
@@ -131,7 +131,7 @@ Project Meta Data
|
||||
The project folder contains a subfolder named ``meta``, containing a number of files. The meta
|
||||
folder contains semi-important files. That is, they can be lost with only minor impact to the
|
||||
project. All files in this folder are JSON or JSON Lines files, although some other files may
|
||||
remain from earlier versions of novelWriter as they haven't all been JSON files in the past.
|
||||
remain from earlier versions of UmbraEdit as they haven't all been JSON files in the past.
|
||||
|
||||
If you use version control software on your project, you can exclude this folder, although you may
|
||||
want to track the session log file and the custom words list.
|
||||
@@ -141,7 +141,7 @@ The Project Index
|
||||
-----------------
|
||||
|
||||
Between writing sessions, the project index is saved in a JSON file in ``meta/index.json``.
|
||||
This file is not critical. If it is lost, it can be completely rebuilt from within novelWriter from
|
||||
This file is not critical. If it is lost, it can be completely rebuilt from within UmbraEdit from
|
||||
the **Tools** menu.
|
||||
|
||||
The index is maintained and updated whenever a document or note is saved in the editor. It contains
|
||||
@@ -150,8 +150,8 @@ project, and the word counts within each header section.
|
||||
|
||||
The integrity of the index is checked when the file is loaded. It is possible to corrupt the index
|
||||
if the file is manually edited and manipulated, so the check is important to avoid sudden crashes
|
||||
of novelWriter. If the file contains errors, novelWriter will automatically build it anew. If the
|
||||
check somehow fails and novelWriter keeps crashing, you can delete the file manually and rebuild
|
||||
of UmbraEdit. If the file contains errors, UmbraEdit will automatically build it anew. If the
|
||||
check somehow fails and UmbraEdit keeps crashing, you can delete the file manually and rebuild
|
||||
the index. If this too fails, you have likely encountered a bug.
|
||||
|
||||
|
||||
@@ -190,4 +190,4 @@ Statistics** tool. If this file is lost, the history it contains is also lost, b
|
||||
no impact on the project.
|
||||
|
||||
Each session is recorded as a JSON object on a single line of the file. Each session record is
|
||||
appended tot he file.
|
||||
appended to the file.
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
Running Tests
|
||||
*************
|
||||
|
||||
.. _pdm: https://pdm-project.org/
|
||||
.. _uv: https://docs.astral.sh/uv/
|
||||
|
||||
The novelWriter source code is well covered by tests. The test framework used for the development
|
||||
The UmbraEdit source code is well covered by tests. The test framework used for the development
|
||||
is ``pytest`` with the use of an extension for Qt.
|
||||
|
||||
|
||||
@@ -17,11 +17,11 @@ To run the tests, you simply need to execute the following from the root of the
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pdm run pytest
|
||||
uv run pytest
|
||||
|
||||
This uses pdm_. See below for manually installing dependencies using ``pip``.
|
||||
This uses uv_. See below for manually installing dependencies using ``pip``.
|
||||
|
||||
Since several of the tests involve opening up the novelWriter GUI, you may want to disable the GUI
|
||||
Since several of the tests involve opening up the UmbraEdit GUI, you may want to disable the GUI
|
||||
for the duration of the test run. Moving your mouse while the tests are running may otherwise
|
||||
interfere with the execution of some tests.
|
||||
|
||||
@@ -55,19 +55,19 @@ You can also add coverage report generation. For instance to HTML:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=novelwriter --cov-report=html
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=umbraedit --cov-report=html
|
||||
|
||||
Other useful report formats are ``xml``, and ``term`` for terminal output.
|
||||
|
||||
You can also run tests per subpackage of novelWriter with the ``-m`` command. The available
|
||||
You can also run tests per subpackage of UmbraEdit with the ``-m`` command. The available
|
||||
subpackage groups are ``base``, ``core``, and ``gui``. Consider for instance:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=novelwriter --cov-report=html -m core
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=umbraedit --cov-report=html -m core
|
||||
|
||||
This will only run the tests of the "core" package, that is, all the classes that deal with the
|
||||
project data of a novelWriter project. The "gui" tests, likewise, will run the tests for the GUI
|
||||
project data of a UmbraEdit project. The "gui" tests, likewise, will run the tests for the GUI
|
||||
components, and the "base" tests cover the bits in-between.
|
||||
|
||||
You can also filter the tests with the ``-k`` switch. The following will do the same as
|
||||
@@ -75,7 +75,7 @@ You can also filter the tests with the ``-k`` switch. The following will do the
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=novelwriter --cov-report=html -k testCore
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=umbraedit --cov-report=html -k testCore
|
||||
|
||||
All tests are named in such a way that you can filter them by adding more bits of the test names.
|
||||
They all start with the word "test". Then comes the group: "Core", "Base", "Dlg", "Tool", or "Gui".
|
||||
@@ -84,6 +84,6 @@ file. For instance, running the following will run all tests for the document ed
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=novelwriter --cov-report=html -k testGuiEditor
|
||||
export QT_QPA_PLATFORM=offscreen pytest -v --cov=umbraedit --cov-report=html -k testGuiEditor
|
||||
|
||||
To run a single test, simply add the full test name to the ``-k`` switch.
|
||||
|
||||